{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: takasports/takasports-web", "shortDescription": {"text": "Foundry mined unresolved feedback: takasports/takasports-web"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#5\nRepo: takasports/takasports-web\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'i"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: takasports/takasports-web", "shortDescription": {"text": "Foundry mined blueprint gap alignment: takasports/takasports-web"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#5\nRepo: takasports/takasports-web\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: takasports/takasports-web", "shortDescription": {"text": "Foundry mined test ci gap after feedback: takasports/takasports-web"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#1\nRepo: takasports/takasports-web\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 19\nEdges: 28\nNode types: {'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_c"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: takasports/takasports-web", "shortDescription": {"text": "Foundry mined schema ui api mismatch: takasports/takasports-web"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#5\nRepo: takasports/takasports-web\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'ch"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: takasports/takasports-web", "shortDescription": {"text": "Foundry mined bad chains: takasports/takasports-web"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takasports/takasports-web#5\nRepo: takasports/takasports-web\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ed23ed6d0bb683a0\",\n    \"kind\": \"issue_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"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-f2ac492f7059c247", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-rankings-to-db.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-rankings-to-db.ts:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8207c3443a9287a9", "name": "Stray `console.log` in TS/JS \u2014 scripts/gen-mionce-boards.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-mionce-boards.ts:112"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f257927465964c8", "name": "Stray `console.log` in TS/JS \u2014 scripts/inject-ranking-images.js:177", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inject-ranking-images.js:177"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-835a2e543e9a780a", "name": "Stray `console.log` in TS/JS \u2014 scripts/gen-sopa-playerids.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-sopa-playerids.ts:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68956f323f7d3c8f", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-rankings-from-db.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-rankings-from-db.ts:98"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcafb2dee2355769", "name": "Stray `console.log` in TS/JS \u2014 scripts/gen-takagrid-puzzles.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-takagrid-puzzles.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-d888c37bbe531e22", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/UFCCardModal.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/UFCCardModal.tsx:177"}, "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-a432cbbe81e91ea5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PlayerStatsRadar.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PlayerStatsRadar.tsx:107"}, "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-0f23b8788bb1018d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PorraHero.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PorraHero.tsx:169"}, "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-016467b8464a8418", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/QuinielaModule.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/QuinielaModule.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-aa5189ced0ef35be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/LiveEventsSection.tsx:249", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LiveEventsSection.tsx:249"}, "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-6b920d26c5f7ee7e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SportHubHeader.tsx:201", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SportHubHeader.tsx:201"}, "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-c5881e22fe517f42", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ReelsSection.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ReelsSection.tsx:189"}, "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-c033cc5a5a0577ac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/Sidebar.tsx:115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Sidebar.tsx:115"}, "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-cbf81dd7043cf2ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/HomeContent.tsx:215", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/HomeContent.tsx:215"}, "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-791f4f58202628b6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/Header.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Header.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-4b9f4058e4937bac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/CalendarioContent.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/CalendarioContent.tsx:332"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d4055a80fbd683b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/StatsSearchModal.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/StatsSearchModal.tsx:120"}, "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-ae5eb2ddc154b30a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/QuinielaTeaser.tsx:111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/QuinielaTeaser.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-58008dbe999402ab", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/TopScorers.tsx:48", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TopScorers.tsx:48"}, "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-4b315345d6107f40", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/TuDiaTaka.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/TuDiaTaka.tsx:116"}, "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-3074599cf6cc3db1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/MissionsCard.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/MissionsCard.tsx:81"}, "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-f878c57349ab6d2c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/Leaderboard.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/Leaderboard.tsx:154"}, "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-3259649dc6b6196d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/LeaderboardPreview.tsx:145", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/LeaderboardPreview.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-139044844d4ecfe2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/RetoDelDia.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/RetoDelDia.tsx:81"}, "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-e408e0182b816e44", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/GameVisuals.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/GameVisuals.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-22695bff76445ad7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaRowV3.tsx:247", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaRowV3.tsx:247"}, "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-fb426af7e16185d2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaCard.tsx:261", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaCard.tsx:261"}, "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-d03d175dd5ac01fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaWardrobe.tsx:535", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaWardrobe.tsx:535"}, "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-de510aa322659370", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ranked/RankedLeaderboard.tsx:276", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ranked/RankedLeaderboard.tsx:276"}, "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-70291cc75878ac1a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/badges/LeaderboardBadgeChip.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/badges/LeaderboardBadgeChip.tsx:90"}, "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-1ee6a235ded0b01e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/articles/RankingMentionCards.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/articles/RankingMentionCards.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-1c7142d35b5225f1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/FeaturedCard.tsx:27", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/FeaturedCard.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-1a082d3dc6dc3e1f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/MovimientoSemana.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/MovimientoSemana.tsx:61"}, "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-2ece64272a8d4dfc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/GlobalSearchResults.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/GlobalSearchResults.tsx:112"}, "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-0edfe1a269e278e9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/RankRow.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/RankRow.tsx:78"}, "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-760d1957420176ca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/Podium.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/Podium.tsx:76"}, "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-2dd0b757cf8b4eaa", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:205", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:205"}, "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-e926d8e92771ef4a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:139", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:139"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0fa7ced1255bccd4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[sport]/page.tsx:208", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[sport]/page.tsx:208"}, "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-7dea7c8d429e28ca", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/sanity-webhook/route.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sanity-webhook/route.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f38c3842fa43ef2c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/sopa-cracks/page.tsx:866", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/sopa-cracks/page.tsx:866"}, "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-938cebd4ec0f5efd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sopa-cracks/layout.tsx:40", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sopa-cracks/layout.tsx:40"}, "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-c03b7222f8c1f9eb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/games/GamesAdminClient.tsx:229", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/games/GamesAdminClient.tsx:229"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e6baa50b35331a6", "name": "Icon-only button without accessible name \u2014 src/app/admin/rankings/RankingsAdmin.tsx:141", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/admin/rankings/RankingsAdmin.tsx:141"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aeee5811313d9159", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/rankings/RankingsAdmin.tsx:317", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/rankings/RankingsAdmin.tsx:317"}, "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-898dda46b2fe26f1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/crackquiz/layout.tsx:40", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/crackquiz/layout.tsx:40"}, "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-e2cff1dde9312115", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/takagrid/page.tsx:484", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/takagrid/page.tsx:484"}, "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-b3b661bc8ed3ce2d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/takagrid/layout.tsx:40", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/takagrid/layout.tsx:40"}, "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-046b93c5e2087740", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/takagrid/[fecha]/ArchivePuzzleClient.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/takagrid/[fecha]/ArchivePuzzleClient.tsx:210"}, "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-0dbc4a687d954d0d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/reels/page.tsx:62", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/reels/page.tsx:62"}, "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-2c6c47ac2778de16", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/mionce/page.tsx:546", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mionce/page.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-fba68fc29d7fe63c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/mionce/layout.tsx:40", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/mionce/layout.tsx:40"}, "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-b1c5192412ebf359", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/calendario/page.tsx:169", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/calendario/page.tsx:169"}, "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-5c8e46d878c2a627", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/calendario/[slug]/page.tsx:327", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/calendario/[slug]/page.tsx:327"}, "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-1bd19fdfc53b4fa7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/calendario/[slug]/page.tsx:207", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/calendario/[slug]/page.tsx:207"}, "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-1a2e8cde3741eeb7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/quiniela/layout.tsx:35", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/quiniela/layout.tsx:35"}, "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-908fd059cb935b58", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/BadgesModal.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/BadgesModal.tsx:148"}, "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-3274ee9597ca52a3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/MundialWelcomeModal.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/MundialWelcomeModal.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-48eecd579763d8ff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/match/MatchCard.tsx:281", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/match/MatchCard.tsx:281"}, "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-78aa8a023779488a", "name": "Icon-only button without accessible name \u2014 src/app/quiniela/components/match/ResultToast.tsx:37", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/quiniela/components/match/ResultToast.tsx:37"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9ffbd166b4de14b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/panels/PersonalStatsPanel.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/panels/PersonalStatsPanel.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-917f3559ab1c0fd5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/leagues/LeagueShareModal.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/leagues/LeagueShareModal.tsx:74"}, "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-de1eb85aee0294b0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/quiniela/components/leagues/LeagueShareModal.tsx:64", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/quiniela/components/leagues/LeagueShareModal.tsx:64"}, "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-eddc7a870b60092f", "name": "Icon-only button without accessible name \u2014 src/app/quiniela/components/leagues/LeagueChat.tsx:138", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/quiniela/components/leagues/LeagueChat.tsx:138"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-adfc790b9aa947d4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/LeagueTable.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/LeagueTable.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-1ec8ae6ca8b2bf40", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/page.tsx:443", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/page.tsx:443"}, "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-0febc31b8af5e41b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/partido/[ref]/page.tsx:1924", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/partido/[ref]/page.tsx:1924"}, "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-5f573f085ca8bbfc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/StickyScoreBar.tsx:55", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/StickyScoreBar.tsx:55"}, "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-ee6136fdd6e4dbfa", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/buscar/page.tsx:125", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/buscar/page.tsx:125"}, "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-5d31f0b887754c6a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/estadisticas/layout.tsx:39", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/estadisticas/layout.tsx:39"}, "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-755f823cb8e16dac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/estadisticas/EstadisticasClient.tsx:978", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/estadisticas/EstadisticasClient.tsx:978"}, "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-40632568c207f690", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/estadisticas/EstadisticasClient.tsx:825", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/estadisticas/EstadisticasClient.tsx:825"}, "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-2f4f5372a1ffa043", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/page.tsx:1108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/page.tsx:1108"}, "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-83f1434ef6cff7d2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/onces/OncesClient.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/onces/OncesClient.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-84b02675f14cc49b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/album/AlbumClient.tsx:136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/album/AlbumClient.tsx:136"}, "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-01526d6c9d132af0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/juegos/page.tsx:62", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/juegos/page.tsx:62"}, "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-7b7cb7e9c11d2fd9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/glosario/page.tsx:104", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/glosario/page.tsx:104"}, "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-01867812ef492307", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/glosario/[slug]/page.tsx:117", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/glosario/[slug]/page.tsx:117"}, "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-5dec4587b903f104", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/politica-editorial/page.tsx:78", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/politica-editorial/page.tsx:78"}, "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-76362d05c5822690", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/evento/[id]/page.tsx:247", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/evento/[id]/page.tsx:247"}, "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-8a3a1508015161c7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/page.tsx:66", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/page.tsx:66"}, "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-626ee55605ce7f07", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/pagina/[n]/page.tsx:120", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/pagina/[n]/page.tsx:120"}, "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-100521adc2594307", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/noticias/[slug]/page.tsx:642", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/noticias/[slug]/page.tsx:642"}, "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-609795cd34527b26", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/[slug]/page.tsx:600", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/[slug]/page.tsx:600"}, "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-5ff99a280670a089", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/comparar/page.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/comparar/page.tsx:110"}, "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-4456251009ab0ba4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/liga/[id]/page.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/liga/[id]/page.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-3043f895a56a7cbd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/autor/redaccion/page.tsx:116", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/autor/redaccion/page.tsx:116"}, "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-cddcc289d8c7f1fe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/jugador/[slug]/page.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/jugador/[slug]/page.tsx:82"}, "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-4d93454cf88fff12", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/jugador/[slug]/page.tsx:313", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/jugador/[slug]/page.tsx:313"}, "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-e6338b902d9d0bfe", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/tag/page.tsx:56", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/tag/page.tsx:56"}, "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-430b6d7729567088", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/tag/[tag]/page.tsx:156", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/tag/[tag]/page.tsx:156"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b23070654039c976", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/sobre/page.tsx:49", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/sobre/page.tsx:49"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3aa4ff51c790803f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/comparar-equipos/page.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/comparar-equipos/page.tsx:126"}, "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-bd5fceb08b77fb33", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/mundial/fixture/page.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/mundial/fixture/page.tsx:174"}, "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-c95ec4601f867d89", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/rankings/page.tsx:206", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/rankings/page.tsx:206"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f1cd13c30947509", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/[id]/page.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/[id]/page.tsx:221"}, "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-01fe8b0f5a74dd67", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/rankings/[id]/page.tsx:209", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/rankings/[id]/page.tsx:209"}, "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-9c6b544df68d37fa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/todos/page.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/todos/page.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-574725001ccca4cf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/comparar/CompararClient.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/comparar/CompararClient.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-ec0af669d3fbeded", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/RosterTab.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/RosterTab.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-7cb8154ef2e0319b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/page.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/page.tsx:121"}, "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-1e2faa6625bcc4d3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/equipo/[slug]/page.tsx:494", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/equipo/[slug]/page.tsx:494"}, "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-ef77b9f404f1a861", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/StandingsTab.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/StandingsTab.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-3ae26e15296989a7", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/game-feedback.ts:11", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/game-feedback.ts:11"}, "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-613009d200defde1", "name": "Stray `console.log` in TS/JS \u2014 src/lib/padel.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/padel.ts: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-35658bc62008142a", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f23bf48bb2c5574", "name": "Privileged port 45 in use", "shortDescription": {"text": "Privileged port 45 in use"}, "fullDescription": {"text": "Port 45 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5fb554d9e9ac98e7", "name": "Privileged port 15 in use", "shortDescription": {"text": "Privileged port 15 in use"}, "fullDescription": {"text": "Port 15 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84358e4d393d3b5f", "name": "Insecure pattern 'node_child_process' in scripts/apply-ig-token.mjs:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/apply-ig-token.mjs:18"}, "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-eb6a75018a1fad3d", "name": "Insecure pattern 'node_child_process' in scripts/ingest-creator-images.mjs:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-creator-images.mjs:24"}, "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-0ed27bdee8b1beb7", "name": "Insecure pattern 'cors_wildcard' in scripts/image-collector-server.mjs:30", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in scripts/image-collector-server.mjs:30"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b44f5ce07cc70c66", "name": "Insecure pattern 'node_child_process' in scripts/ingest-creator-images-ig.mjs:28", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-creator-images-ig.mjs:28"}, "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-17ec06a2fdad54db", "name": "Insecure pattern 'node_child_process' in scripts/ingest-creator-social.mjs:35", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-creator-social.mjs:35"}, "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-adadaabc786222c4", "name": "Insecure pattern 'node_child_process' in scripts/ingest-instagram-followers.mjs:27", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-instagram-followers.mjs:27"}, "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-67d442ecafac5ce5", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:205", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:205"}, "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-698cafff33f1e82a", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:139", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:139"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a036defaea0819ef", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[sport]/page.tsx:208", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[sport]/page.tsx:208"}, "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-79afed2c9f8e52ef", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/sopa-cracks/layout.tsx:40", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/sopa-cracks/layout.tsx:40"}, "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-27a3ac3547b8ac86", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/crackquiz/layout.tsx:40", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/crackquiz/layout.tsx:40"}, "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-7daefb999a1a9706", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/takagrid/layout.tsx:40", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/takagrid/layout.tsx:40"}, "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-b5cf3d2471663e63", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/reels/page.tsx:62", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/reels/page.tsx:62"}, "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-c7ef3b51186399d4", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/mionce/layout.tsx:40", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/mionce/layout.tsx:40"}, "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-c6d51ca366a6cad6", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/calendario/page.tsx:169", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/calendario/page.tsx:169"}, "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-732198cae06e1bad", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/calendario/[slug]/page.tsx:207", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/calendario/[slug]/page.tsx:207"}, "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-dab3d1112d80b77e", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/quiniela/layout.tsx:35", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/quiniela/layout.tsx:35"}, "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-53f5bf19e2f326c8", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/quiniela/components/leagues/LeagueShareModal.tsx:64", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/quiniela/components/leagues/LeagueShareModal.tsx:64"}, "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-106fb18fca58a43c", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/partido/[ref]/page.tsx:1924", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/partido/[ref]/page.tsx:1924"}, "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-995fc46ee8c5f8f7", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/buscar/page.tsx:125", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/buscar/page.tsx:125"}, "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-b536f1006868f9df", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/estadisticas/layout.tsx:39", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/estadisticas/layout.tsx:39"}, "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-1ce72f14250d8ff2", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/estadisticas/EstadisticasClient.tsx:825", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/estadisticas/EstadisticasClient.tsx:825"}, "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-3f655dda3572c8ea", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/juegos/page.tsx:62", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/juegos/page.tsx:62"}, "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-d191c351178bc4c7", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/glosario/page.tsx:104", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/glosario/page.tsx:104"}, "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-ffa39b10bc663e1f", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/glosario/[slug]/page.tsx:117", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/glosario/[slug]/page.tsx:117"}, "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-18a2d6a85b3d6b18", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/politica-editorial/page.tsx:78", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/politica-editorial/page.tsx:78"}, "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-115689c475f50b5a", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/evento/[id]/page.tsx:247", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/evento/[id]/page.tsx:247"}, "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-595f6d70744d4124", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/page.tsx:66", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/page.tsx:66"}, "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-322ef0c3faed279f", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/pagina/[n]/page.tsx:120", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/pagina/[n]/page.tsx:120"}, "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-1089fc3e2c74e1f5", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/[slug]/page.tsx:600", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/[slug]/page.tsx:600"}, "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-fa2ffbb4e56b1bb1", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/autor/redaccion/page.tsx:116", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/autor/redaccion/page.tsx:116"}, "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-2e1e258f0f1fbdfb", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/jugador/[slug]/page.tsx:313", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/jugador/[slug]/page.tsx:313"}, "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-ecec5531a932d7ba", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/tag/page.tsx:56", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/tag/page.tsx:56"}, "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-6af81a7172a2f389", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/tag/[tag]/page.tsx:156", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/tag/[tag]/page.tsx:156"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e05fda4f9462cfe", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/sobre/page.tsx:49", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/sobre/page.tsx:49"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b72864a9d44bebcd", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/rankings/page.tsx:206", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/rankings/page.tsx:206"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af31275f57a29933", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/rankings/[id]/page.tsx:209", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/rankings/[id]/page.tsx:209"}, "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-293bde169a0389fe", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/equipo/[slug]/page.tsx:494", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/equipo/[slug]/page.tsx:494"}, "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-3c56f2bc128a29c7", "name": "Very large file: src/components/CalendarioContent.tsx (3076 lines)", "shortDescription": {"text": "Very large file: src/components/CalendarioContent.tsx (3076 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-7278c8e0ef9da626", "name": "Very large file: src/app/api/stats/standings/route.ts (1397 lines)", "shortDescription": {"text": "Very large file: src/app/api/stats/standings/route.ts (1397 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-bdde09d2ebe239ae", "name": "Very large file: src/app/sopa-cracks/page.tsx (1126 lines)", "shortDescription": {"text": "Very large file: src/app/sopa-cracks/page.tsx (1126 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-426019e5ef7df931", "name": "Very large file: src/app/crackquiz/page.tsx (1389 lines)", "shortDescription": {"text": "Very large file: src/app/crackquiz/page.tsx (1389 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-0900adec1275291d", "name": "Very large file: src/app/ufc/UfcClient.tsx (1272 lines)", "shortDescription": {"text": "Very large file: src/app/ufc/UfcClient.tsx (1272 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-15257116cc1c4c2e", "name": "Very large file: src/app/takagrid/page.tsx (1206 lines)", "shortDescription": {"text": "Very large file: src/app/takagrid/page.tsx (1206 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-d10a8735761ccd2b", "name": "Very large file: src/app/mionce/page.tsx (1640 lines)", "shortDescription": {"text": "Very large file: src/app/mionce/page.tsx (1640 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-9ac20b7340de27f2", "name": "Very large file: src/app/partido/[ref]/page.tsx (1939 lines)", "shortDescription": {"text": "Very large file: src/app/partido/[ref]/page.tsx (1939 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-c9980ef5398f48a2", "name": "Very large file: src/app/(public)/estadisticas/EstadisticasClient.tsx (2765 lines)", "shortDescription": {"text": "Very large file: src/app/(public)/estadisticas/EstadisticasClient.tsx (2765 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-8742aea5ec243972", "name": "Very large file: src/app/(public)/perfil/page.tsx (1558 lines)", "shortDescription": {"text": "Very large file: src/app/(public)/perfil/page.tsx (1558 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-a34f22ae30a130ec", "name": "Very large file: src/app/(public)/noticias/[slug]/page.tsx (1376 lines)", "shortDescription": {"text": "Very large file: src/app/(public)/noticias/[slug]/page.tsx (1376 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-a9e3ca9aca9ad000", "name": "Very large file: src/app/(public)/mundial/MundialClient.tsx (1586 lines)", "shortDescription": {"text": "Very large file: src/app/(public)/mundial/MundialClient.tsx (1586 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-a22b2673a773919f", "name": "Very large file: src/app/(public)/rankings/RankingsClient.tsx (1074 lines)", "shortDescription": {"text": "Very large file: src/app/(public)/rankings/RankingsClient.tsx (1074 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-33c14280ed477bd1", "name": "Very large file: src/lib/crackquiz-questions.ts (1307 lines)", "shortDescription": {"text": "Very large file: src/lib/crackquiz-questions.ts (1307 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-d302b8dfcae1ca86", "name": "Very large file: src/lib/glosario-terms.ts (3823 lines)", "shortDescription": {"text": "Very large file: src/lib/glosario-terms.ts (3823 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-c21cf64eaa84196b", "name": "Very large file: src/lib/rankings.ts (2164 lines)", "shortDescription": {"text": "Very large file: src/lib/rankings.ts (2164 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "17 test file(s) for 653 source file(s) (ratio 0.03). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-331975d06615187a", "name": "179 TODO/FIXME markers", "shortDescription": {"text": "179 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 667 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 70 placeholder/mock markers across 32 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17d866d91a7c451e", "name": "Agent instruction/config may expose a secret: CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: CLAUDE.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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.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-9e21a95b868554e9", "name": "Commented-code block (5 lines) in next.config.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in next.config.ts:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c39cd5d4ce3fc20", "name": "Legacy-named symbol `rest_v1` in scripts/cache-photos-tennis-wwe.mjs:26", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in scripts/cache-photos-tennis-wwe.mjs:26"}, "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-6988c1f78dda42b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-photos-tennis-wwe.mjs:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-photos-tennis-wwe.mjs:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58a9efd148e3e84c", "name": "Commented-code block (6 lines) in scripts/ingest-instagram-avatars-pw.mjs:7", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/ingest-instagram-avatars-pw.mjs:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2efff990e07f56a", "name": "Commented-code block (5 lines) in scripts/expand-contenidos-v12.mjs:15", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/expand-contenidos-v12.mjs:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd7e5a4cbd6085a0", "name": "Commented-code block (8 lines) in scripts/ingest-tennis-context.mjs:9", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/ingest-tennis-context.mjs:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0d7c0c9fa75c1a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-tennis-context.mjs:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-tennis-context.mjs:71"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0cc2f70ed7c69be", "name": "Commented-code block (5 lines) in scripts/expand-ufc-wwe-hispanics.mjs:5", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/expand-ufc-wwe-hispanics.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-130b7aed0eaa09f4", "name": "Commented-code block (8 lines) in scripts/ingest-football-women-rendimiento.mjs:11", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/ingest-football-women-rendimiento.mjs:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdb8188043a2ff86", "name": "Commented-code block (5 lines) in scripts/ingest-creator-images-storage.mjs:14", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ingest-creator-images-storage.mjs:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-699d096d3ae84cc8", "name": "Commented-code block (5 lines) in scripts/gen-mionce-boards.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/gen-mionce-boards.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-dea0358a1b919b8f", "name": "Commented-code block (5 lines) in scripts/ingest-nba-per.mjs:5", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ingest-nba-per.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a30c3433a3198a72", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-nba-per.mjs:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-nba-per.mjs:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e13b78ffdd474d24", "name": "Commented-code block (5 lines) in scripts/apply-ig-token.mjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/apply-ig-token.mjs:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31630bba843bc5dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/apply-ig-token.mjs:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/apply-ig-token.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-b481e25024b5e9be", "name": "Commented-code block (5 lines) in scripts/enrich-altclubs.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/enrich-altclubs.mjs: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-ec567397bb81dfc2", "name": "Commented-code block (10 lines) in scripts/expand-creators-v5.mjs:2", "shortDescription": {"text": "Commented-code block (10 lines) in scripts/expand-creators-v5.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-2e9265bc33fff1b2", "name": "Commented-code block (5 lines) in scripts/expand-ufc-wwe-v7.mjs:2", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/expand-ufc-wwe-v7.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-9c75df9fe06b85dd", "name": "Legacy-named symbol `rest_v1` in scripts/ingest-creator-images.mjs:99", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in scripts/ingest-creator-images.mjs:99"}, "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-723b5dc17d638088", "name": "Commented-code block (5 lines) in scripts/ingest-creator-images.mjs:7", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ingest-creator-images.mjs:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3afe6b27c773d808", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-creator-images.mjs:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-creator-images.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-af369901f111b90c", "name": "Commented-code block (5 lines) in scripts/ingest-tennis-elo.mjs:18", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ingest-tennis-elo.mjs:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5b3c9f05ddc9851", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-tennis-elo.mjs:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-tennis-elo.mjs:87"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af93aed4d23e5d56", "name": "Commented-code block (6 lines) in scripts/fix-duplicates-and-categories.mjs:5", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/fix-duplicates-and-categories.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-597f0c8d5e22db0d", "name": "Legacy-named symbol `rest_v1` in scripts/cache-photos-wikipedia.mjs:28", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in scripts/cache-photos-wikipedia.mjs:28"}, "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-8cedbc3145e6e884", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-photos-wikipedia.mjs:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-photos-wikipedia.mjs:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-22b1d8921c814465", "name": "Commented-code block (5 lines) in scripts/ingest-twitter-avatars-pw.mjs:7", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ingest-twitter-avatars-pw.mjs:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8168d8de757f39c6", "name": "Commented-code block (5 lines) in scripts/gen-sopa-playerids.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/gen-sopa-playerids.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-9ad883d3b3655289", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-f1-dpc.mjs:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-f1-dpc.mjs:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9b2ca31bc2a8e49c", "name": "Commented-code block (9 lines) in scripts/expand-contenidos-v11.mjs:5", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/expand-contenidos-v11.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4334037f6e71f8d", "name": "Legacy-named symbol `rest_v1` in scripts/ingest-wikipedia-views.mjs:91", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in scripts/ingest-wikipedia-views.mjs:91"}, "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-84108ba6095f965e", "name": "Commented-code block (9 lines) in scripts/ingest-wikipedia-views.mjs:13", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/ingest-wikipedia-views.mjs:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-266e1634429d0912", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-wikipedia-views.mjs:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-wikipedia-views.mjs:70"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3dd37e7ee9a0ca5", "name": "Commented-code block (6 lines) in scripts/seed-creator-handles.mjs:26", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/seed-creator-handles.mjs: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-857637753e58a2ea", "name": "Commented-code block (8 lines) in scripts/ingest-f1-context.mjs:8", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/ingest-f1-context.mjs: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-df7e11497dead1b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-f1-context.mjs:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-f1-context.mjs:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb43bfe461104dee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-articles.mjs:193", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-articles.mjs:193"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b782aaa6a6b37ac0", "name": "Commented-code block (8 lines) in scripts/ingest-football-fbref.mjs:8", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/ingest-football-fbref.mjs: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-ee5f6f4e2c808c65", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-football-fbref.mjs:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-football-fbref.mjs:105"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dfa7c763087f0541", "name": "Commented-code block (5 lines) in scripts/set-ranking-final.mjs:6", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/set-ranking-final.mjs:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a217511b81b46d4a", "name": "Legacy-named symbol `rest_v1` in scripts/cache-photos-v2.mjs:22", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in scripts/cache-photos-v2.mjs:22"}, "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-e5f528619a9b3211", "name": "Commented-code block (9 lines) in scripts/expand-contenidos-v10-nicho.mjs:6", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/expand-contenidos-v10-nicho.mjs:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7718e6957587ef08", "name": "Commented-code block (5 lines) in scripts/fix-creator-scores.mjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/fix-creator-scores.mjs:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74638389d36e4684", "name": "Commented-code block (7 lines) in scripts/ingest-creator-images-ig.mjs:17", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/ingest-creator-images-ig.mjs: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-fcc2c152e7f727ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-creator-photos-yt2.mjs:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-creator-photos-yt2.mjs:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ac718f19b9d4397", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-ranked-images.mjs:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-ranked-images.mjs:81"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a098a376c3ce366", "name": "Commented-code block (6 lines) in scripts/ingest-nba-context.mjs:8", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/ingest-nba-context.mjs: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-58c43ad97faada5d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-nba-context.mjs:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-nba-context.mjs:50"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-106440cb412effad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-creator-images-missing.mjs:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-creator-images-missing.mjs:87"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9b69944fa248624a", "name": "Commented-code block (5 lines) in scripts/ingest-creator-images-yt.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ingest-creator-images-yt.mjs:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd08ff6a95445837", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-creator-images-yt.mjs:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-creator-images-yt.mjs:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11e09360b7268b46", "name": "Commented-code block (7 lines) in scripts/ingest-ufc-rankings.mjs:8", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/ingest-ufc-rankings.mjs: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-24b9892fff04c842", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-ufc-rankings.mjs:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-ufc-rankings.mjs:120"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03b4ade4573030cd", "name": "Commented-code block (6 lines) in scripts/curate-active-entries.mjs:12", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/curate-active-entries.mjs:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bad0077fcae30d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-football-context.mjs:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-football-context.mjs:118"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9357bb8a5aeed6e7", "name": "Commented-code block (6 lines) in scripts/ingest-creator-social.mjs:16", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/ingest-creator-social.mjs:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a667f06bcbaf3fa", "name": "Commented-code block (6 lines) in scripts/ingest-creator-images-ig2.mjs:13", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/ingest-creator-images-ig2.mjs:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2b9b950403f7ec1", "name": "Commented-code block (7 lines) in scripts/fix-contenidos-scores.mjs:7", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/fix-contenidos-scores.mjs:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-060689ebc4a9c370", "name": "Commented-code block (6 lines) in scripts/ingest-instagram-followers.mjs:17", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/ingest-instagram-followers.mjs: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-29b54233ca02a6b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-instagram-token.mjs:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-instagram-token.mjs:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00ceadfe3e9d3dd3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-reels-storage.mjs:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-reels-storage.mjs:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7195697a6fac26a5", "name": "Commented-code block (5 lines) in scripts/cache-creator-photos-yt.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/cache-creator-photos-yt.mjs: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-1607391a22662bdb", "name": "Commented-code block (6 lines) in src/middleware.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/middleware.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abaa7fe015001d50", "name": "Commented-code block (6 lines) in src/components/ArticleComments.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ArticleComments.tsx: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-7cd3d85396afaafc", "name": "Commented-code block (6 lines) in src/components/PorraSettlementToast.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/PorraSettlementToast.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18c73fa0702cd2c9", "name": "Commented-code block (6 lines) in src/components/PWAManager.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/PWAManager.tsx: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-8cc34da078cc3c3e", "name": "Commented-code block (6 lines) in src/components/PorraMatchWidget.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/PorraMatchWidget.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee25a80aa40786ed", "name": "Commented-code block (5 lines) in src/components/PorraHero.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/PorraHero.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d61b9241913f6ef5", "name": "Commented-code block (5 lines) in src/components/TakaPoint.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/TakaPoint.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-755b140e3fd0f27c", "name": "Commented-code block (5 lines) in src/components/SportHubHeader.tsx:72", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/SportHubHeader.tsx: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-38c98f721449b723", "name": "Commented-code block (6 lines) in src/components/CompetitionRail.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/CompetitionRail.tsx: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-98151c9772c6c359", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ReelsSection.tsx:499", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ReelsSection.tsx:499"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-380d7811fb57f968", "name": "Commented-code block (6 lines) in src/components/DeviceCapInit.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/DeviceCapInit.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4adc1fc148374cd", "name": "Commented-code block (9 lines) in src/components/WelcomeOnboarding.tsx:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/WelcomeOnboarding.tsx: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-8bb28e716b4bc583", "name": "Commented-code block (6 lines) in src/components/CompetitionSelector.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/CompetitionSelector.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec4fd5268e357e20", "name": "Commented-code block (6 lines) in src/components/Sidebar.tsx:83", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/Sidebar.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-46474b1199a4ad91", "name": "Commented-code block (7 lines) in src/components/HomeContent.tsx:26", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/HomeContent.tsx: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-fad7bdf2ed2c39fa", "name": "Commented-code block (5 lines) in src/components/ConsentBanner.tsx:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ConsentBanner.tsx:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3ef54e28a8ed336", "name": "Commented-code block (5 lines) in src/components/HeaderConsole.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/HeaderConsole.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0156a2d290c4dcd9", "name": "Commented-code block (5 lines) in src/components/HeroBlock.tsx:475", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/HeroBlock.tsx:475"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc100e1f5d3eb4c8", "name": "Commented-code block (5 lines) in src/components/MatchNews.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/MatchNews.tsx: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-b4a80fcf12aaad26", "name": "Commented-code block (7 lines) in src/components/Header.tsx:514", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/Header.tsx:514"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04a62096e44b3b68", "name": "Commented-code block (5 lines) in src/components/CalendarioContent.tsx:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/CalendarioContent.tsx:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9017a873040ed4a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CalendarioContent.tsx:1831", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CalendarioContent.tsx:1831"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e355f285c67a3555", "name": "Commented-code block (6 lines) in src/components/NoticiasPortada.tsx:61", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/NoticiasPortada.tsx: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-e78b726f91e30848", "name": "Commented-code block (7 lines) in src/components/PorraChallengeBanner.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/PorraChallengeBanner.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-466b860933a49595", "name": "Commented-code block (6 lines) in src/components/games/GamePointsToast.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/games/GamePointsToast.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27359ded59193624", "name": "Commented-code block (5 lines) in src/components/games/GameStatusBadge.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/games/GameStatusBadge.tsx: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-6983f0151a71b13f", "name": "Commented-code block (7 lines) in src/components/games/MetaProgressionStrip.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/games/MetaProgressionStrip.tsx: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-30bc9caeb6348460", "name": "Commented-code block (5 lines) in src/components/games/TimeAttackInfoModal.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/games/TimeAttackInfoModal.tsx: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-9043458547c9a063", "name": "Commented-code block (5 lines) in src/components/games/PostGameResultModal.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/games/PostGameResultModal.tsx: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-65a98aee6853d042", "name": "Commented-code block (7 lines) in src/components/games/StreakAtRiskBanner.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/games/StreakAtRiskBanner.tsx: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-9789289545861153", "name": "Commented-code block (5 lines) in src/components/placa/PlacaRowV3.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/placa/PlacaRowV3.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ce2a6b1841694a9", "name": "Commented-code block (5 lines) in src/components/placa/PlacaCardV4.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/placa/PlacaCardV4.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e485ba07a149b17", "name": "Commented-code block (5 lines) in src/components/placa/adapter.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/placa/adapter.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7bf4febe15ec3f4", "name": "Commented-code block (8 lines) in src/components/placa/PlacaCard.tsx:11", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/placa/PlacaCard.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f56fc126be8cd5e7", "name": "Commented-code block (7 lines) in src/components/placa/PlacaCardV2.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/placa/PlacaCardV2.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31b1345873e7a734", "name": "Commented-code block (15 lines) in src/components/placa/PlacaCardV3.tsx:6", "shortDescription": {"text": "Commented-code block (15 lines) in src/components/placa/PlacaCardV3.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-227f6442650be6fd", "name": "Commented-code block (8 lines) in src/components/placa/PlacaWardrobe.tsx:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/placa/PlacaWardrobe.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1299417e5dfb3d8f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/placa/PlacaWardrobe.tsx:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/placa/PlacaWardrobe.tsx:132"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-48b94f7f78db60cc", "name": "Legacy-named symbol `user_equipment_v2` in src/components/placa/types.ts:8", "shortDescription": {"text": "Legacy-named symbol `user_equipment_v2` in src/components/placa/types.ts:8"}, "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-3e90876e45cd31b7", "name": "Commented-code block (6 lines) in src/components/placa/types.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/placa/types.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25c9d54bb500facd", "name": "Commented-code block (10 lines) in src/components/badges/BadgeUnlockModal.tsx:7", "shortDescription": {"text": "Commented-code block (10 lines) in src/components/badges/BadgeUnlockModal.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba9a6db437c13f94", "name": "Legacy-named symbol `taka_seen_badges_v1` in src/components/badges/BadgeUnlockProvider.tsx:26", "shortDescription": {"text": "Legacy-named symbol `taka_seen_badges_v1` in src/components/badges/BadgeUnlockProvider.tsx:26"}, "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-1b3f377b537a5a51", "name": "Commented-code block (10 lines) in src/components/badges/BadgeUnlockProvider.tsx:7", "shortDescription": {"text": "Commented-code block (10 lines) in src/components/badges/BadgeUnlockProvider.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-591001d56b6b97af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rankings/FavoriteToggle.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rankings/FavoriteToggle.tsx: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-ca21e07e28fd55be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rankings/PredictWidget.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rankings/PredictWidget.tsx:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ae8fdf193234fe9", "name": "Commented-code block (5 lines) in src/app/robots.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/robots.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92d75c5648b29bb0", "name": "Commented-code block (5 lines) in src/app/sitemap.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/sitemap.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f515983d6fcb6289", "name": "Commented-code block (5 lines) in src/app/page.tsx:74", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/page.tsx:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46ca1898ce6f1192", "name": "Commented-code block (11 lines) in src/app/layout.tsx:112", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/layout.tsx: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-3b36305c28a12015", "name": "Commented-code block (9 lines) in src/app/[sport]/page.tsx:19", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/[sport]/page.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-a21f75ac324e7734", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[sport]/page.tsx:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[sport]/page.tsx:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb3f473c043d39e3", "name": "Commented-code block (5 lines) in src/app/api/match/[ref]/route.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/match/[ref]/route.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ec6d1eac2a358b6", "name": "Commented-code block (6 lines) in src/app/api/games/plays/route.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/games/plays/route.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-17904c4a17a5a69d", "name": "Commented-code block (6 lines) in src/app/api/games/streak/route.ts:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/games/streak/route.ts: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-719e3be33836017c", "name": "Commented-code block (5 lines) in src/app/api/push/reminders/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/push/reminders/route.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-3a775c6fd44799a9", "name": "Commented-code block (5 lines) in src/app/api/placa/[userId]/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/placa/[userId]/route.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-d964e36167620204", "name": "Commented-code block (5 lines) in src/app/api/events/live/route.ts:47", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/events/live/route.ts:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec43d288b3f20d23", "name": "Commented-code block (5 lines) in src/app/api/events/upcoming/route.ts:159", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/events/upcoming/route.ts:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b88a17d0b1d36a71", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/events/upcoming/route.ts:165", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/events/upcoming/route.ts:165"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2313733a93269479", "name": "Commented-code block (8 lines) in src/app/api/sanity-webhook/route.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/sanity-webhook/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-117e6cdaffbce336", "name": "Commented-code block (5 lines) in src/app/api/admin/games/content/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/games/content/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26d76ecdda4b81ef", "name": "Commented-code block (5 lines) in src/app/api/admin/ranked/score/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/ranked/score/route.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-f0cc9902111a41a9", "name": "Commented-code block (5 lines) in src/app/api/admin/ranked/close-week/route.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/ranked/close-week/route.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3846acd3bb2ca24", "name": "Commented-code block (10 lines) in src/app/api/admin/badges/special/route.ts:6", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/admin/badges/special/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68854596e5b2c630", "name": "Commented-code block (9 lines) in src/app/api/admin/mundial/close/route.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/admin/mundial/close/route.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-7ee3bed94059af21", "name": "Commented-code block (5 lines) in src/app/api/ranked/predictions/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/ranked/predictions/route.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-7298659373a49b94", "name": "Commented-code block (5 lines) in src/app/api/ranked/me/stats/route.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/ranked/me/stats/route.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-1ca88c27f6fc92ae", "name": "Commented-code block (5 lines) in src/app/api/ranked/profile/[userId]/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/ranked/profile/[userId]/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bd94487a7bc9f0b", "name": "Commented-code block (6 lines) in src/app/api/ranked/mundial/live/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/ranked/mundial/live/route.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-128adff421d74707", "name": "Commented-code block (5 lines) in src/app/api/cron/settle-quiniela/route.ts:135", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/settle-quiniela/route.ts:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3484d253ddd100a4", "name": "Commented-code block (6 lines) in src/app/api/cron/mundial-reminders/route.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/mundial-reminders/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01e3d0bc3733922e", "name": "Commented-code block (6 lines) in src/app/api/cron/sync-mundial/route.ts:213", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/sync-mundial/route.ts:213"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-596d77f44f1fd069", "name": "Commented-code block (7 lines) in src/app/api/cron/sync-ufc/route.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/cron/sync-ufc/route.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5209c06b0d2d6a3", "name": "Commented-code block (7 lines) in src/app/api/cron/refresh-rankings/route.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/cron/refresh-rankings/route.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-48dbe421f3ccf8eb", "name": "Commented-code block (7 lines) in src/app/api/pipeline/status/route.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/pipeline/status/route.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-ffead641ea734b2f", "name": "Commented-code block (6 lines) in src/app/api/account/delete/route.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/account/delete/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-742137a1b5332fc8", "name": "Commented-code block (6 lines) in src/app/api/og/mundial-stats/route.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/og/mundial-stats/route.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a8b29bed64ce6fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/articles/route.ts:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/articles/route.ts:101"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0fcaf8ecde8e65fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/instagram/callback/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/instagram/callback/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a82d845b9c10b24", "name": "Commented-code block (7 lines) in src/app/api/rankings/override/route.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/rankings/override/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80c12b542aaa014e", "name": "Commented-code block (12 lines) in src/app/api/rankings/ingest/route.ts:10", "shortDescription": {"text": "Commented-code block (12 lines) in src/app/api/rankings/ingest/route.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06c2be0a51ed8c27", "name": "Commented-code block (6 lines) in src/app/api/rankings/audit/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/rankings/audit/route.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-52ce1dc197f86132", "name": "Commented-code block (8 lines) in src/app/api/stats/standings/route.ts:80", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/stats/standings/route.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-ab22d9dca468a899", "name": "Commented-code block (5 lines) in src/app/api/quiniela/route.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/route.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d14de21f15331a6a", "name": "Commented-code block (8 lines) in src/app/api/quiniela/score/route.ts:10", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/quiniela/score/route.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c5842a06ab8430e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/quiniela/notify-settlement/route.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/quiniela/notify-settlement/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-e7755bb00f8e575d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/quiniela/notify/route.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/quiniela/notify/route.ts:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ddd5f2390fdacf78", "name": "Commented-code block (5 lines) in src/app/api/quiniela/health/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/health/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-313902126f755b5a", "name": "Commented-code block (7 lines) in src/app/api/quiniela/challenges/route.ts:15", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/quiniela/challenges/route.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05b4e5be685fa46b", "name": "Commented-code block (5 lines) in src/app/api/quiniela/challenges/claim/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/challenges/claim/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f0b4f173b668d14", "name": "Commented-code block (7 lines) in src/app/api/quiniela/leaderboard/route.ts:10", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/quiniela/leaderboard/route.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b94f14895fef5eb7", "name": "Commented-code block (7 lines) in src/app/api/quiniela/status/route.ts:154", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/quiniela/status/route.ts:154"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-898ef24acf10ba26", "name": "Commented-code block (5 lines) in src/app/api/quiniela/me/route.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/me/route.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-4ae7f9c23159726d", "name": "Commented-code block (5 lines) in src/app/api/quiniela/me/exact-stats/route.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/me/exact-stats/route.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-36af9937a0ec79b0", "name": "Commented-code block (5 lines) in src/app/api/quiniela/me/equip/route.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/me/equip/route.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2e133e8d4996bf4", "name": "Commented-code block (5 lines) in src/app/api/quiniela/leagues/score/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/leagues/score/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad213171bb1826d6", "name": "Commented-code block (6 lines) in src/app/api/quiniela/leagues/[id]/settings/route.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/quiniela/leagues/[id]/settings/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-581a7e9593415b99", "name": "Commented-code block (5 lines) in src/app/api/quiniela/leagues/auto-create/route.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/leagues/auto-create/route.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-8c6800d467c1e7de", "name": "Commented-code block (11 lines) in src/app/api/quiniela/season/resolve/route.ts:11", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/api/quiniela/season/resolve/route.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd5f50c02b546b46", "name": "Commented-code block (9 lines) in src/app/api/quiniela/stats/route.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/quiniela/stats/route.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-74d0a13854d25953", "name": "Commented-code block (5 lines) in src/app/api/comments/[id]/report/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/comments/[id]/report/route.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-b460dd131ef627a6", "name": "Commented-code block (5 lines) in src/app/sopa-cracks/page.tsx:284", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/sopa-cracks/page.tsx:284"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d581f2c0f399cc3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sopa-cracks/page.tsx:214", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sopa-cracks/page.tsx:214"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6164c5510eefdef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/games/GamesAdminClient.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/games/GamesAdminClient.tsx:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7d78600d0f78517", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/rankings/RankingsAdmin.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/rankings/RankingsAdmin.tsx:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e44dada05eec675", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/crackquiz/page.tsx:830", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/crackquiz/page.tsx:830"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d036066836f1937e", "name": "Commented-code block (7 lines) in src/app/ufc/EventHero.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/ufc/EventHero.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5aca5d432838cf84", "name": "Commented-code block (5 lines) in src/app/reels/ReelsClient.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/reels/ReelsClient.tsx: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-f7ff4bbeefd578b3", "name": "Commented-code block (6 lines) in src/app/mionce/page.tsx:895", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/mionce/page.tsx:895"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8926d594474d6ea", "name": "Commented-code block (8 lines) in src/app/calendario/page.tsx:84", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/calendario/page.tsx:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d0c8f9a5f51cfd2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/calendario/page.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/calendario/page.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8423990c5b1e278", "name": "Commented-code block (5 lines) in src/app/calendario/[slug]/page.tsx:125", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/calendario/[slug]/page.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-40628fe38dc864ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/calendario/[slug]/page.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/calendario/[slug]/page.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d319ade2823ef496", "name": "Commented-code block (5 lines) in src/app/quiniela/components/BadgesModal.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/quiniela/components/BadgesModal.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68f6ad4d43a7dd9d", "name": "Legacy-named symbol `ts_quiniela_mundial_welcomed_v1` in src/app/quiniela/components/MundialWelcomeModal.tsx:24", "shortDescription": {"text": "Legacy-named symbol `ts_quiniela_mundial_welcomed_v1` in src/app/quiniela/components/MundialWelcomeModal.tsx:24"}, "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-a5039caa785bb963", "name": "Commented-code block (8 lines) in src/app/quiniela/components/MundialWelcomeModal.tsx:15", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/quiniela/components/MundialWelcomeModal.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba8d1a2b3f2b367b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/MundialWelcomeModal.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/MundialWelcomeModal.tsx:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7de3aeeb702bec35", "name": "Commented-code block (6 lines) in src/app/quiniela/components/match/MatchCard.tsx:312", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/quiniela/components/match/MatchCard.tsx:312"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c521efd5a560c3fb", "name": "Commented-code block (6 lines) in src/app/quiniela/components/panels/HitosPanel.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/quiniela/components/panels/HitosPanel.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9375723e2ac5a40f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/panels/HitosPanel.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/panels/HitosPanel.tsx:87"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85644771343c9e4a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/leagues/LeagueExpanded.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/leagues/LeagueExpanded.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6500fd0387f1718c", "name": "Commented-code block (9 lines) in src/app/quiniela/components/picks/StickyBetslip.tsx:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/quiniela/components/picks/StickyBetslip.tsx: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-d33ecbbef005a2cb", "name": "Commented-code block (9 lines) in src/app/quiniela/components/picks/PicksSummary.tsx:132", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/quiniela/components/picks/PicksSummary.tsx:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76c99f1a853cda4a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/picks/PicksSummary.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/picks/PicksSummary.tsx:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d99f2623351982b1", "name": "Commented-code block (6 lines) in src/app/quiniela/components/picks/PicksForm.tsx:362", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/quiniela/components/picks/PicksForm.tsx:362"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3122e9a71b4905a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/lib/hooks.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/lib/hooks.ts:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bff9892066871f62", "name": "Commented-code block (5 lines) in src/app/quiniela/lib/helpers.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/quiniela/lib/helpers.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1b0f3b37389b2f6", "name": "Commented-code block (5 lines) in src/app/quiniela/lib/constants.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/quiniela/lib/constants.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-33f8f429f5ca7c30", "name": "Commented-code block (5 lines) in src/app/partido/[ref]/LiveRefresh.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/partido/[ref]/LiveRefresh.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce3948056a49427a", "name": "Commented-code block (7 lines) in src/app/partido/[ref]/page.tsx:1759", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/partido/[ref]/page.tsx:1759"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89828fbeeffe17d3", "name": "Commented-code block (5 lines) in src/app/partido/[ref]/ScoreFlip.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/partido/[ref]/ScoreFlip.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a271dccbaad25fea", "name": "Commented-code block (6 lines) in src/app/(public)/layout.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/(public)/layout.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-875c0863a3b99330", "name": "Commented-code block (7 lines) in src/app/(public)/estadisticas/StatsView.tsx:9", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/(public)/estadisticas/StatsView.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fcd0030c6755044", "name": "Commented-code block (5 lines) in src/app/(public)/estadisticas/page.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/estadisticas/page.tsx: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-f568e84b2c14ce04", "name": "Commented-code block (11 lines) in src/app/(public)/estadisticas/EstadisticasClient.tsx:14", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/(public)/estadisticas/EstadisticasClient.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dda2f5a739afb22", "name": "Commented-code block (5 lines) in src/app/(public)/estadisticas/[sport]/page.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/estadisticas/[sport]/page.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96250894831e849e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/perfil/page.tsx:185", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/perfil/page.tsx:185"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c1509dcd6636f5a", "name": "Commented-code block (6 lines) in src/app/(public)/perfil/[userId]/page.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/(public)/perfil/[userId]/page.tsx: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-28cec1a4ec84065b", "name": "Commented-code block (5 lines) in src/app/(public)/juegos/page.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/juegos/page.tsx: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-da5a2e3a011044bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/evento/[id]/page.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/evento/[id]/page.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ce3303878d90284", "name": "Commented-code block (5 lines) in src/app/(public)/noticias/page.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/noticias/page.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-db31df15426f8e0e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/noticias/page.tsx:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/noticias/page.tsx:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e614f6fa892f0e0a", "name": "Commented-code block (5 lines) in src/app/(public)/noticias/[slug]/page.tsx:619", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/noticias/[slug]/page.tsx:619"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5fceba552ff4a2e", "name": "Commented-code block (5 lines) in src/app/(public)/badges/page.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/badges/page.tsx: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-ada8d6c0562bec57", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/badges/page.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/badges/page.tsx:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f688bb159b91f21c", "name": "Commented-code block (5 lines) in src/app/(public)/newsletter/baja/page.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/newsletter/baja/page.tsx: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-afcd90169088f210", "name": "Commented-code block (5 lines) in src/app/(public)/mundial/MundialClient.tsx:294", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/mundial/MundialClient.tsx:294"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc97b9e6bc3aee57", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/mundial/MundialClient.tsx:1106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/mundial/MundialClient.tsx:1106"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aafd4835ee0e0a95", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/predicciones/PrivadasClient.tsx:588", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/predicciones/PrivadasClient.tsx:588"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c82e64566281a0c6", "name": "Commented-code block (5 lines) in src/app/(public)/predicciones/CreadoresClient.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(public)/predicciones/CreadoresClient.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-595cf9c01049dc89", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/predicciones/CreadoresClient.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/predicciones/CreadoresClient.tsx:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9aa6db57b9265497", "name": "Commented-code block (7 lines) in src/app/(public)/rankings/[id]/page.tsx:53", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/(public)/rankings/[id]/page.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-4e4c8596dccc52e9", "name": "Commented-code block (6 lines) in src/lib/game-feedback.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/game-feedback.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b84b982060a1591e", "name": "Commented-code block (8 lines) in src/lib/badges.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/badges.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f79229b754cb36f8", "name": "Commented-code block (5 lines) in src/lib/quiniela.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/quiniela.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9cb79527863ddaee", "name": "Commented-code block (5 lines) in src/lib/teams-catalog.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/teams-catalog.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-adf0f436312d5273", "name": "Commented-code block (5 lines) in src/lib/rankings-data.ts:173", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/rankings-data.ts:173"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0bedf8ef78fbe7ce", "name": "Commented-code block (6 lines) in src/lib/taka-time.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/taka-time.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-6f1041003205f4c2", "name": "Commented-code block (5 lines) in src/lib/takagrid-puzzles.test.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/takagrid-puzzles.test.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-b98c17bc649b7419", "name": "Commented-code block (5 lines) in src/lib/csrf.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/csrf.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-318e50268e9944fa", "name": "Commented-code block (6 lines) in src/lib/push-helper.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/push-helper.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-a92cbb383f89f93c", "name": "Commented-code block (6 lines) in src/lib/featured-goalscorer.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/featured-goalscorer.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a331551bf4749fa", "name": "Commented-code block (10 lines) in src/lib/badge-awards.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/badge-awards.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b00b2cefa7246eee", "name": "Commented-code block (7 lines) in src/lib/games-store.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/games-store.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-728c6a6de2f2e3b2", "name": "Commented-code block (5 lines) in src/lib/public-id.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/public-id.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-e1105428b3c07bb4", "name": "Commented-code block (6 lines) in src/lib/article-autolink.ts:20", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/article-autolink.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2eb129fb49aa9d14", "name": "Commented-code block (13 lines) in src/lib/mundial-closure.ts:9", "shortDescription": {"text": "Commented-code block (13 lines) in src/lib/mundial-closure.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dae183fe631d8c91", "name": "Commented-code block (7 lines) in src/lib/special-badges.ts:157", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/special-badges.ts:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1a52dcd89793a96", "name": "Commented-code block (7 lines) in src/lib/calendar-competitions.ts:283", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/calendar-competitions.ts:283"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ad0805073ce9f4b", "name": "Commented-code block (5 lines) in src/lib/mionce-challenges.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/mionce-challenges.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-877ae73a2128251f", "name": "Commented-code block (5 lines) in src/lib/special-badges.test.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/special-badges.test.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-f771d1f3c9309680", "name": "Commented-code block (12 lines) in src/lib/equipment.ts:4", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/equipment.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1fb4eba487dda985", "name": "Commented-code block (8 lines) in src/lib/match-estimate.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/match-estimate.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-aadd0d900ae9c04e", "name": "Commented-code block (5 lines) in src/lib/mionce-formations.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/mionce-formations.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-f5cb6e26e8871c9f", "name": "Commented-code block (5 lines) in src/lib/internal-odds.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/internal-odds.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ae715e5df4e4883", "name": "Commented-code block (9 lines) in src/lib/cosmetics.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/cosmetics.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fdc15c49ff7a1c4c", "name": "Commented-code block (5 lines) in src/lib/game-points.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/game-points.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1daf1b8361f0905", "name": "Commented-code block (5 lines) in src/lib/image-url.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/image-url.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-b9ee69d5fac612cd", "name": "Commented-code block (6 lines) in src/lib/quiniela.test.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/quiniela.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2477ecf568e1cccd", "name": "Commented-code block (6 lines) in src/lib/reels-feed.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/reels-feed.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d0e7cbe0740b1d2", "name": "Commented-code block (5 lines) in src/lib/team-strengths.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/team-strengths.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cb3777032b23daf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/push-client.ts:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/push-client.ts:71"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ada03f3e63836bef", "name": "Commented-code block (6 lines) in src/lib/levels.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/levels.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76a713ca2887ea43", "name": "Commented-code block (5 lines) in src/lib/games-periods.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/games-periods.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-4124e59d7c0f41cd", "name": "Commented-code block (6 lines) in src/lib/mionce-reference-once.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/mionce-reference-once.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-a3a7b8d23b8af833", "name": "Commented-code block (5 lines) in src/lib/rankings.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/rankings.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-8dd6cfc00f93c911", "name": "Commented-code block (5 lines) in src/lib/elo-scraper.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/elo-scraper.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-96fa5121c40195b9", "name": "Commented-code block (5 lines) in src/lib/game-points.test.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/game-points.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37a74a7499216a55", "name": "Commented-code block (8 lines) in src/lib/stats-editorial.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/stats-editorial.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-4fb1f1c92a83fd82", "name": "Commented-code block (5 lines) in src/lib/league-zones.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/league-zones.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0096056eba9c7a9c", "name": "Commented-code block (5 lines) in src/lib/sopa-puzzles.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/sopa-puzzles.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c37b3c7e386c6d3b", "name": "Commented-code block (6 lines) in src/lib/nation-names.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/nation-names.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-7a5878de8c53e148", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/instagram.ts:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/instagram.ts:86"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bab22d1919056a45", "name": "Commented-code block (7 lines) in src/lib/porra-status-client.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/porra-status-client.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-3abbd2d4b72fc29a", "name": "Commented-code block (5 lines) in src/lib/players-catalog.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/players-catalog.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-dd42c6d3ceec095a", "name": "Commented-code block (8 lines) in src/lib/past-events.ts:170", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/past-events.ts:170"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b777bea3a543dbd7", "name": "Commented-code block (6 lines) in src/lib/mionce-boards.test.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/mionce-boards.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9765ca077e0f6418", "name": "Commented-code block (5 lines) in src/lib/espn-standings.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/espn-standings.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-4a43c3b47b65190e", "name": "Commented-code block (7 lines) in src/lib/competitions.ts:289", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/competitions.ts:289"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-528f6f43b3a5dd52", "name": "Commented-code block (5 lines) in src/lib/sanity.ts:172", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/sanity.ts:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2adcff82197810e5", "name": "Commented-code block (6 lines) in src/lib/porra-challenge.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/porra-challenge.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-ffb600e662f05a70", "name": "Commented-code block (5 lines) in src/lib/stats-schemas.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/stats-schemas.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-01b86f71c10557e4", "name": "Commented-code block (6 lines) in src/lib/og/placa-og.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/og/placa-og.tsx: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-439dbf3f0d084eb7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useMyPlayedGames.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useMyPlayedGames.ts:23"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8e6a1c0f9187801", "name": "Commented-code block (6 lines) in src/hooks/useDeviceCapability.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useDeviceCapability.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3482f7e5dd70cd1a", "name": "6 env vars used in code but missing from .env.example", "shortDescription": {"text": "6 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `EMAIL_FROM`, `NODE_ENV`, `RESEND_API_KEY`, `SANITY_API_TOKEN`, `SEO_AUDIT_BASE_URL`, `YOUTUBE_API_KEY`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20766"}, "properties": {"repository": "takasports/takasports-web", "repoUrl": "https://github.com/takasports/takasports-web", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: takasports/takasports-web"}, "properties": {"repobilityId": 430215, "scanner": "foundry_dataset", "fingerprint": "44c582601f4dfd50efba27e6868ab1098b878c40c08e5aa796516173a58b3997", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#5", "issue_number": "5", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-07b0eaa1f7de34e3", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#5\nRepo: takasports/takasports-web\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-4ec1c16b51e2cc55", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: takasports/takasports-web"}, "properties": {"repobilityId": 430214, "scanner": "foundry_dataset", "fingerprint": "b28527b0a149baab588dfa3e2ed43137c839a9c835592a0101fc72f8a7aaff0e", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#4", "issue_number": "4", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-fdd1ca5ccc4f7b10", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#4\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#4\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#4\nRepo: takasports/takasports-web\nIssue/PR number: 4\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-37334ee72a33bdda", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: takasports/takasports-web"}, "properties": {"repobilityId": 430213, "scanner": "foundry_dataset", "fingerprint": "8cb0731e72c3460a18808a9b0f90fad7e5a8de912312e5fe82307c1583efae90", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#3", "issue_number": "3", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-0f0802beb02450b3", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#3\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#3\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#3\nRepo: takasports/takasports-web\nIssue/PR number: 3\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-edbe29e5fdaf3513", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: takasports/takasports-web"}, "properties": {"repobilityId": 430212, "scanner": "foundry_dataset", "fingerprint": "10de5a1212a55cabcd81333a106d6d4b677cac532f6e08fa2c634efd6824bc1d", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"data_schema_persistence": 100, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 102, "blueprint_human_gap_disagreement": 200, "human_reported_issue_no_linked_fix": 100, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 204}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 1256, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 100, "thread_has_comment": 100, "alignment_uses_comment": 200, "alignment_uses_finding": 200, "chain_has_link_quality": 302, "comment_aligns_finding": 200, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 100, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 50}, "node_count": 708, "node_types": {"repo": 1, "thread": 1, "comment": 100, "alignment": 200, "fix_outcome": 1, "issue_chain": 1, "link_quality": 302, "comment_chain": 100, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#2", "issue_number": "2", "quality_tiers": {"unresolved": 102, "assumption_check": 200}, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-aa1ad69bf00cfe0b", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#2\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#2\nRepo: takasports/takasports-web\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 708\nEdges: 1256\nNode types: {'link_quality': 302, 'alignment': 200, 'comment': 100, 'comment_chain': 100, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 302, 'alignment_uses_comment': 200, 'alignment_uses_finding': 200, 'comment_aligns_finding': 200, 'thread_has_comment': 100, 'thread_has_comment_chain': 100, 'comment_has_chain': 100, 'issue_chain_has_comment_chain': 50, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'blueprint_human_gap_disagreement': 200, 'not_resolved_or_not_observed': 102, 'data_schema_persistence': 100, 'human_reported_issue_no_linked_fix': 100, 'thread_has_human_issue_without_fix_context': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1}\nOutcomes: {'not_resolved_or_not_observed': 204}\nQuality tiers: {'assumption_check': 200, 'unresolved': 102}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-ed0fe441d444752b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: takasports/takasports-web"}, "properties": {"repobilityId": 430211, "scanner": "foundry_dataset", "fingerprint": "868b218b43d0ae51f54f38726c681be4cc3253522ed660877260015e9525ebd8", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_ci_gap": 1, "api_or_backend": 1, "deployment_env_gap": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 28, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 19, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#1", "issue_number": "1", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-4e895a39cec921c1", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 5}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#1\nRepo: takasports/takasports-web\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 19\nEdges: 28\nNode types: {'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'api_or_backend': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-db77832cc873b559", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: takasports/takasports-web"}, "properties": {"repobilityId": 404265, "scanner": "foundry_dataset", "fingerprint": "a81df10792b551859ef006b07967a76ae58ddd2e3c75c35991516df20d015890", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#5", "issue_number": "5", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-fe89e1d6124299e9", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#5\nRepo: takasports/takasports-web\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-ae432d8a85eb0805", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: takasports/takasports-web"}, "properties": {"repobilityId": 404264, "scanner": "foundry_dataset", "fingerprint": "b795fe8e4936b56b0845e04a7f8215c6b75760e04c1fff3c78420e8342993dbc", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#4", "issue_number": "4", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-d88029af799767c4", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#4\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#4\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#4\nRepo: takasports/takasports-web\nIssue/PR number: 4\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-59f42a1976d1ca0c", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: takasports/takasports-web"}, "properties": {"repobilityId": 404263, "scanner": "foundry_dataset", "fingerprint": "45f6feae637baa0a032191751fac7b32353ee8bc0c9d424c8cbff57979fd256f", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#3", "issue_number": "3", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-5f3d4c6ed46301b5", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#3\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#3\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#3\nRepo: takasports/takasports-web\nIssue/PR number: 3\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-6be7e62002a32551", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: takasports/takasports-web"}, "properties": {"repobilityId": 404262, "scanner": "foundry_dataset", "fingerprint": "3ced363b30b732552b1d457ca2a8ed1726b1c39e9b13b9bf926db3dc9109a5b1", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"data_schema_persistence": 100, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 102, "blueprint_human_gap_disagreement": 200, "human_reported_issue_no_linked_fix": 100, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 204}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 1256, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 100, "thread_has_comment": 100, "alignment_uses_comment": 200, "alignment_uses_finding": 200, "chain_has_link_quality": 302, "comment_aligns_finding": 200, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 100, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 50}, "node_count": 708, "node_types": {"repo": 1, "thread": 1, "comment": 100, "alignment": 200, "fix_outcome": 1, "issue_chain": 1, "link_quality": 302, "comment_chain": 100, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#2", "issue_number": "2", "quality_tiers": {"unresolved": 102, "assumption_check": 200}, "repo_full_name": "takasports/takasports-web", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-47430ec0f493faf2", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#2\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#2\nRepo: takasports/takasports-web\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 708\nEdges: 1256\nNode types: {'link_quality': 302, 'alignment': 200, 'comment': 100, 'comment_chain': 100, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 302, 'alignment_uses_comment': 200, 'alignment_uses_finding': 200, 'comment_aligns_finding': 200, 'thread_has_comment': 100, 'thread_has_comment_chain': 100, 'comment_has_chain': 100, 'issue_chain_has_comment_chain': 50, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'blueprint_human_gap_disagreement': 200, 'not_resolved_or_not_observed': 102, 'data_schema_persistence': 100, 'human_reported_issue_no_linked_fix': 100, 'thread_has_human_issue_without_fix_context': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1}\nOutcomes: {'not_resolved_or_not_observed': 204}\nQuality tiers: {'assumption_check': 200, 'unresolved': 102}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-6d8e70129ea420a0", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: takasports/takasports-web"}, "properties": {"repobilityId": 404261, "scanner": "foundry_dataset", "fingerprint": "87139bbfdc1beb7e2a84f8fefdf18784ed74b855b333ca4531a4bdd0a9877152", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"test_ci_gap": 1, "api_or_backend": 1, "deployment_env_gap": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 28, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 19, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#1", "issue_number": "1", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-24898e6d1a8eb861", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 5}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#1\nRepo: takasports/takasports-web\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 19\nEdges: 28\nNode types: {'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'api_or_backend': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-6c553de5caa97b0e", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: takasports/takasports-web"}, "properties": {"repobilityId": 420346, "scanner": "foundry_dataset", "fingerprint": "74501c02751ddad8f4592c0a35ca9a81a4ac38384d31a94ef4e17eb15b0edfc8", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_ci_gap": 1, "api_or_backend": 1, "deployment_env_gap": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 28, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 19, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#1", "issue_number": "1", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-fc03e44a2df9f508", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 5}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#1\nRepo: takasports/takasports-web\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 19\nEdges: 28\nNode types: {'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'api_or_backend': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-19087ffb1f0989d2", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: takasports/takasports-web"}, "properties": {"repobilityId": 411243, "scanner": "foundry_dataset", "fingerprint": "e2e378c487a4fe3a29541dd4f1fdfc56afa31e7880b2743631b62c3f0dfaf3d6", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#5", "issue_number": "5", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-859f1228ebc08b6e", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#5\nRepo: takasports/takasports-web\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-55aca9dc036eb25a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: takasports/takasports-web"}, "properties": {"repobilityId": 411242, "scanner": "foundry_dataset", "fingerprint": "77f4d74b54fc2a7bb24b043d62b284b8ee76b2f32fbbcb6ecc320a8a524db44c", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#4", "issue_number": "4", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-ecc877545e1e1665", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#4\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#4\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#4\nRepo: takasports/takasports-web\nIssue/PR number: 4\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-d2c12b56d74b81a6", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: takasports/takasports-web"}, "properties": {"repobilityId": 411241, "scanner": "foundry_dataset", "fingerprint": "3aada37e44edd2621fcecb89c8ac9b9dea6657f1d350886387e669eb27eb06a9", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 19, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#3", "issue_number": "3", "quality_tiers": {"unresolved": 3, "assumption_check": 2}, "repo_full_name": "takasports/takasports-web", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-cd4249191af22bac", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#3\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#3\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#3\nRepo: takasports/takasports-web\nIssue/PR number: 3\nGraph consistency label: assumption_check\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-6c092f0e89807d8a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: takasports/takasports-web"}, "properties": {"repobilityId": 411240, "scanner": "foundry_dataset", "fingerprint": "c3a4b088e3ec5a1b6e67a7b6cd34f6f51348c27a2bea01525c7fd86f4f4b2196", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"data_schema_persistence": 100, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 102, "blueprint_human_gap_disagreement": 200, "human_reported_issue_no_linked_fix": 100, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 204}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 1256, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 100, "thread_has_comment": 100, "alignment_uses_comment": 200, "alignment_uses_finding": 200, "chain_has_link_quality": 302, "comment_aligns_finding": 200, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 100, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 50}, "node_count": 708, "node_types": {"repo": 1, "thread": 1, "comment": 100, "alignment": 200, "fix_outcome": 1, "issue_chain": 1, "link_quality": 302, "comment_chain": 100, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "takasports/takasports-web#2", "issue_number": "2", "quality_tiers": {"unresolved": 102, "assumption_check": 200}, "repo_full_name": "takasports/takasports-web", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-33c93d909471ec52", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#2\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takasports/takasports-web#2\nRepo: takasports/takasports-web\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 708\nEdges: 1256\nNode types: {'link_quality': 302, 'alignment': 200, 'comment': 100, 'comment_chain': 100, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 302, 'alignment_uses_comment': 200, 'alignment_uses_finding': 200, 'comment_aligns_finding': 200, 'thread_has_comment': 100, 'thread_has_comment_chain': 100, 'comment_has_chain': 100, 'issue_chain_has_comment_chain': 50, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'blueprint_human_gap_disagreement': 200, 'not_resolved_or_not_observed': 102, 'data_schema_persistence': 100, 'human_reported_issue_no_linked_fix': 100, 'thread_has_human_issue_without_fix_context': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1}\nOutcomes: {'not_resolved_or_not_observed': 204}\nQuality tiers: {'assumption_check': 200, 'unresolved': 102}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "graph-query-motif_query-ca776c5ab845b3dc", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: takasports/takasports-web"}, "properties": {"repobilityId": 391411, "scanner": "foundry_dataset", "fingerprint": "5d0184952fe7090fdb7ba27cc591c8297f6d1fc2ad223c6c6d6cb506c2a75a4e", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "takasports/takasports-web#5", "human_labels": ["data_schema_persistence"], "issue_number": "5", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-e986d91b40b042e7", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#5\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takasports/takasports-web#5\nRepo: takasports/takasports-web\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ed23ed6d0bb683a0\",\n    \"kind\": \"issue_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takasports/takasports-web/issues/5\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: issue_body\\nRepo: takasports/takasports-web\\nAuthor: github-actions[bot] (Bot)\\nURL: https://github.com/takasports/takasports-web/issues/5\\nTitle: [health] quiniela odds cache degraded\\nBody:\\nHealth check: **status=degraded** (HTTP 200) \u2014 2026-06-16 15:48 UTC\\n\\nDetalle:\\n```json\\n{\\\"status\\\":\\\"degraded\\\",\\\"mundialMode\\\":true,\\\"rows\\\":[{\\\"odds_key\\\":\\\"soccer_italy_serie_a\\\",\\\"ageMin\\\":33009,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_spain_la_liga\\\",\\\"ageMin\\\":32943,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_uefa_europa_league\\\",\\\"ageMin\\\":38736,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_uefa_champs_league\\\",\\\"ageMin\\\":24506,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_epl\\\",\\\"ageMin\\\":33217,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_fifa_world_cup\\\",\\\"ageMin\\\":198,\\\"events\\\":56,\\\"status\\\":\\\"stale\\\"}],\\\"advice\\\":\\\"Datos viejos. the-odds-api podr\u00eda estar fallando o sin cupo \u2014 el stale-on-failure protege al usuario, pero conviene revisar.\\\",\\\"generatedAt\\\":\\\"2026-06-16T15:48:02.116Z\\\"}\\n```\\n\\nAcci\u00f3n sugerida seg\u00fan status:\\n- **down** \u2192 revisar Supabase / aplicar migraci\u00f3n 026 si no est\u00e1.\\n- **empty** \u2192 llamar a /api/quiniela una vez (warm-up) cuando el\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-355f06efcb51185b\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: takasports/takasports-web\nGraph label: source_backed_multi_signal_graph\nNodes: 10\nEdges: 12\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 2, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\":\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "comment-chain-pattern-bad_chains-3dbffaf90476f394", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: takasports/takasports-web"}, "properties": {"repobilityId": 391410, "scanner": "foundry_dataset", "fingerprint": "e5912f950b2bcc6dd72431a4212badbf46dd15addca16a5716ced2deca455c6a", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "takasports/takasports-web#4", "human_labels": ["data_schema_persistence"], "issue_number": "4", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-f89399cf87109f41", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#4\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takasports/takasports-web#4\nRepo: takasports/takasports-web\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-9fdcfe747afa877d\",\n    \"kind\": \"issue_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takasports/takasports-web/issues/4\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: issue_body\\nRepo: takasports/takasports-web\\nAuthor: github-actions[bot] (Bot)\\nURL: https://github.com/takasports/takasports-web/issues/4\\nTitle: [health] quiniela odds cache degraded\\nBody:\\nHealth check: **status=down** (HTTP 200) \u2014 2026-06-15 22:34 UTC\\n\\nDetalle:\\n```json\\n{\\\"status\\\":\\\"down\\\",\\\"reason\\\":\\\"tabla quiniela_odds_cache no accesible: upstream request timeout\\\",\\\"hint\\\":\\\"Aplica supabase/migrations/026_quiniela_odds_cache.sql\\\",\\\"generatedAt\\\":\\\"2026-06-15T22:32:19.377Z\\\"}\\n```\\n\\nAcci\u00f3n sugerida seg\u00fan status:\\n- **down** \u2192 revisar Supabase / aplicar migraci\u00f3n 026 si no est\u00e1.\\n- **empty** \u2192 llamar a /api/quiniela una vez (warm-up) cuando el cupo de the-odds-api permita.\\n- **degraded** \u2192 the-odds-api podr\u00eda estar fallando o sin cupo; stale-on-failure protege a usuarios, pero conviene revisar.\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-91cfe0f45ad881d4\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: takasports/takasports-web\nGraph label: source_backed_multi_signal_graph\nNodes: 10\nEdges: 12\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 2, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 2, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_graph_pattern_bundle\": 1}\nCo-occurrence labels: {\"architecture_data_consistency_gap\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "comment-chain-pattern-bad_chains-6c9670d249b98f62", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: takasports/takasports-web"}, "properties": {"repobilityId": 391409, "scanner": "foundry_dataset", "fingerprint": "b4529a73277ec6701b9351d7670f6585a1a0af6821940f49b5e37cc0f1e8681f", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "takasports/takasports-web#3", "human_labels": ["data_schema_persistence"], "issue_number": "3", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-566221d720106ecd", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#3\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takasports/takasports-web#3\nRepo: takasports/takasports-web\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fc707518e6bda3d0\",\n    \"kind\": \"issue_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takasports/takasports-web/issues/3\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: issue_body\\nRepo: takasports/takasports-web\\nAuthor: github-actions[bot] (Bot)\\nURL: https://github.com/takasports/takasports-web/issues/3\\nTitle: [health] quiniela odds cache degraded\\nBody:\\nHealth check: **status=degraded** (HTTP 200) \u2014 2026-06-15 16:55 UTC\\n\\nDetalle:\\n```json\\n{\\\"status\\\":\\\"degraded\\\",\\\"mundialMode\\\":true,\\\"rows\\\":[{\\\"odds_key\\\":\\\"soccer_italy_serie_a\\\",\\\"ageMin\\\":31637,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_spain_la_liga\\\",\\\"ageMin\\\":31570,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_uefa_europa_league\\\",\\\"ageMin\\\":37363,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_fifa_world_cup\\\",\\\"ageMin\\\":197,\\\"events\\\":60,\\\"status\\\":\\\"stale\\\"},{\\\"odds_key\\\":\\\"soccer_uefa_champs_league\\\",\\\"ageMin\\\":23134,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_epl\\\",\\\"ageMin\\\":31844,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"}],\\\"advice\\\":\\\"Datos viejos. the-odds-api podr\u00eda estar fallando o sin cupo \u2014 el stale-on-failure protege al usuario, pero conviene revisar.\\\",\\\"generatedAt\\\":\\\"2026-06-15T16:55:34.839Z\\\"}\\n```\\n\\nAcci\u00f3n sugerida seg\u00fan status:\\n- **down** \u2192 revisar Supabase / aplicar migraci\u00f3n 026 si no est\u00e1.\\n- **empty** \u2192 llamar a /api/quiniela una vez (warm-up) cuando el\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-1fc9c46cad2c01eb\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: takasports/takasports-web\nGraph label: source_backed_multi_signal_graph\nNodes: 10\nEdges: 12\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 2, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\":\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "comment-chain-pattern-bad_chains-3e2e57d89df44a18", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: takasports/takasports-web"}, "properties": {"repobilityId": 391408, "scanner": "foundry_dataset", "fingerprint": "86fe06bdaa3e0d487040ecb7480283584b5581062f15f40c75c798a5e7b227e5", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "takasports/takasports-web#2", "human_labels": ["data_schema_persistence"], "issue_number": "2", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-ae8eff3073c65358", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#2\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takasports/takasports-web#2\nRepo: takasports/takasports-web\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 100\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 100}\nPolarities: {'bad': 100}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-faa90c8187c3d89a\",\n    \"kind\": \"issue_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takasports/takasports-web/issues/2\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: issue_body\\nRepo: takasports/takasports-web\\nAuthor: github-actions[bot] (Bot)\\nURL: https://github.com/takasports/takasports-web/issues/2\\nTitle: [health] quiniela odds cache degraded\\nBody:\\nHealth check: **status=degraded** (HTTP 200) \u2014 2026-05-20 12:23 UTC\\n\\nDetalle:\\n```json\\n{\\\"status\\\":\\\"degraded\\\",\\\"mundialMode\\\":false,\\\"rows\\\":[{\\\"odds_key\\\":\\\"soccer_epl\\\",\\\"ageMin\\\":34,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_uefa_europa_league\\\",\\\"ageMin\\\":34,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_italy_serie_a\\\",\\\"ageMin\\\":34,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"},{\\\"odds_key\\\":\\\"soccer_spain_la_liga\\\",\\\"ageMin\\\":34,\\\"events\\\":0,\\\"status\\\":\\\"empty\\\"}],\\\"advice\\\":\\\"Datos viejos. the-odds-api podr\u00eda estar fallando o sin cupo \u2014 el stale-on-failure protege al usuario, pero conviene revisar.\\\",\\\"generatedAt\\\":\\\"2026-05-20T12:23:25.764Z\\\"}\\n```\\n\\nAcci\u00f3n sugerida seg\u00fan status:\\n- **down** \u2192 revisar Supabase / aplicar migraci\u00f3n 026 si no est\u00e1.\\n- **empty** \u2192 llamar a /api/quiniela una vez (warm-up) cuando el cupo de the-odds-api permita.\\n- **degraded** \u2192 the-odds-api podr\u00eda estar fallando o sin cupo; stale-on-failure protege a usuarios, pero conviene revisar.\"\n  },\n  {\n    \"id\": \"github-feedback-comment-2b245291b333a5f7\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takasports/takasports-web/issues/2#issuecomment-4499867618\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: issue_comment\\nRepo: takasports/takasports-web\\nAuthor: github-actions[bot] (Bot)\\nURL: https://github.com/takasports/takasports-web/issues/2#issuecomment-4499867618\\nTitle: \\nBody:\\nHealth check: **status=degraded** (HTTP 200) \u2014 2026-05-20 15:20 UTC\\n\\nDetalle:\\n```json\\n{\\\"status\\\":\\\"degraded\\\",\\\"mundialMode\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "comment-chain-pattern-bad_chains-944ca4d22c525efa", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: takasports/takasports-web"}, "properties": {"repobilityId": 391407, "scanner": "foundry_dataset", "fingerprint": "7f2823b6bd7d31f9ff39d8426eede0d4ac83759b6dd74456d3094f0908e0c7c7", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "takasports/takasports-web#1", "human_labels": ["api_or_backend", "deployment_env_gap", "test_ci_gap"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "takasports/takasports-web", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-99e98fb726a095a2", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: takasports/takasports-web\nThread: takasports/takasports-web#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takasports/takasports-web#1\nRepo: takasports/takasports-web\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'api_or_backend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-22d8288cf2d1ddc2\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takasports/takasports-web/pull/1\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: takasports/takasports-web\\nAuthor: takasports (User)\\nURL: https://github.com/takasports/takasports-web/pull/1\\nTitle: fix(mundial): confederaciones + banderas + nombres ES (48 selecciones)\\nBody:\\nFix de la columna Confed y banderas para las 48 selecciones del Mundial 2026. Mapping \u00fanico WC_NATIONS con flag/confed/nombre-ES. Aplicado a grupos, calendario y clasificadas.\\n\\nSe sube en rama porque main local tiene un commit de .github/workflows que requiere scope workflow que mi token no tiene.\"\n  },\n  {\n    \"id\": \"github-feedback-comment-b3e877fb279e71e4\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takasports/takasports-web/pull/1#issuecomment-4497988519\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: takasports/takasports-web\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/takasports/takasports-web/pull/1#issuecomment-4497988519\\nTitle: \\nBody:\\n[vc]: #LY2+GWslXB9dbz+RmjS9YfogmcXxbgA3BotbEVbDzxc=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJ0YWthc3BvcnRzLXdlYi1oY3M5IiwicHJvamVjdElkIjoicHJqXzJDS0FvSVB2Q0xlc3c3S3dBbkF5SFN3N2V0cTkiLCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vdGFrYS1zcG9ydHMvdGFrYXNwb3J0cy13ZWItaGNzOS82aXBOTURQUEEzWmZqZmdLZ3FlR1RZaU1FalVFIiwicHJldmlld1VybCI6InRha2FzcG9ydHMtd2ViLWhjczktZ2l0LWZpeC1tdW5kaWFsLWNvbmZlZHMtdGFrYS1zcG9ydHMudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJQRU5ESU5HIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6InRha2FzcG9ydHMtd2ViLWhjczktZ2l0LWZpeC1tdW5kaWFsLWNvbmZlZHMtdGFrYS1zcG9ydHMudmVyY2VsLmFwcCJ9fV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Act\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takasports/takasports-web", "source_id": "comment-chain-pattern-bad_chains-1f81240e8de37ff8", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takasports/takasports-web", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"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-f2ac492f7059c247", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-rankings-to-db.ts:109"}, "properties": {"repobilityId": "4029ebc67db433e8", "scanner": "scanner-primary", "fingerprint": "f2ac492f7059c247", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8207c3443a9287a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-mionce-boards.ts:112"}, "properties": {"repobilityId": "3115e0d9821756a8", "scanner": "scanner-primary", "fingerprint": "8207c3443a9287a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f257927465964c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inject-ranking-images.js:177"}, "properties": {"repobilityId": "b8efebc3564d4ebe", "scanner": "scanner-primary", "fingerprint": "6f257927465964c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-835a2e543e9a780a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-sopa-playerids.ts:83"}, "properties": {"repobilityId": "6832426a86798179", "scanner": "scanner-primary", "fingerprint": "835a2e543e9a780a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-68956f323f7d3c8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-rankings-from-db.ts:98"}, "properties": {"repobilityId": "a11628b5be13df8a", "scanner": "scanner-primary", "fingerprint": "68956f323f7d3c8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fcafb2dee2355769", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-takagrid-puzzles.ts:161"}, "properties": {"repobilityId": "0a2bde7ba6a2b008", "scanner": "scanner-primary", "fingerprint": "fcafb2dee2355769", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d888c37bbe531e22", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/UFCCardModal.tsx:177"}, "properties": {"repobilityId": "c1598a5704a9072f", "scanner": "scanner-primary", "fingerprint": "d888c37bbe531e22", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a432cbbe81e91ea5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PlayerStatsRadar.tsx:107"}, "properties": {"repobilityId": "5dac587a3feae991", "scanner": "scanner-primary", "fingerprint": "a432cbbe81e91ea5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f23b8788bb1018d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PorraHero.tsx:169"}, "properties": {"repobilityId": "7250b25b63346108", "scanner": "scanner-primary", "fingerprint": "0f23b8788bb1018d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-016467b8464a8418", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/QuinielaModule.tsx:173"}, "properties": {"repobilityId": "1dcfca0ec9124270", "scanner": "scanner-primary", "fingerprint": "016467b8464a8418", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa5189ced0ef35be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LiveEventsSection.tsx:249"}, "properties": {"repobilityId": "2cf7bcfce20e5db1", "scanner": "scanner-primary", "fingerprint": "aa5189ced0ef35be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6b920d26c5f7ee7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SportHubHeader.tsx:201"}, "properties": {"repobilityId": "0de3dcbcf0ddfb6d", "scanner": "scanner-primary", "fingerprint": "6b920d26c5f7ee7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c5881e22fe517f42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ReelsSection.tsx:189"}, "properties": {"repobilityId": "b63d3abb118e131e", "scanner": "scanner-primary", "fingerprint": "c5881e22fe517f42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c033cc5a5a0577ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Sidebar.tsx:115"}, "properties": {"repobilityId": "450176a4d82f7dad", "scanner": "scanner-primary", "fingerprint": "c033cc5a5a0577ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cbf81dd7043cf2ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/HomeContent.tsx:215"}, "properties": {"repobilityId": "c319d0357c8e5b5f", "scanner": "scanner-primary", "fingerprint": "cbf81dd7043cf2ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-791f4f58202628b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Header.tsx:219"}, "properties": {"repobilityId": "bd9f8473299439e0", "scanner": "scanner-primary", "fingerprint": "791f4f58202628b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b9f4058e4937bac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/CalendarioContent.tsx:332"}, "properties": {"repobilityId": "792c1f3cc65f0546", "scanner": "scanner-primary", "fingerprint": "4b9f4058e4937bac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9d4055a80fbd683b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/StatsSearchModal.tsx:120"}, "properties": {"repobilityId": "7cb823f1fdf6ad8d", "scanner": "scanner-primary", "fingerprint": "9d4055a80fbd683b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ae5eb2ddc154b30a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/QuinielaTeaser.tsx:111"}, "properties": {"repobilityId": "c878cc92bd7cd4be", "scanner": "scanner-primary", "fingerprint": "ae5eb2ddc154b30a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58008dbe999402ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TopScorers.tsx:48"}, "properties": {"repobilityId": "265f7aec6424d5bd", "scanner": "scanner-primary", "fingerprint": "58008dbe999402ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b315345d6107f40", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/TuDiaTaka.tsx:116"}, "properties": {"repobilityId": "a386048fcde8ea88", "scanner": "scanner-primary", "fingerprint": "4b315345d6107f40", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3074599cf6cc3db1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/MissionsCard.tsx:81"}, "properties": {"repobilityId": "bffa3cbd48dd93a0", "scanner": "scanner-primary", "fingerprint": "3074599cf6cc3db1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f878c57349ab6d2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/Leaderboard.tsx:154"}, "properties": {"repobilityId": "f1deb7d0d4bc2d42", "scanner": "scanner-primary", "fingerprint": "f878c57349ab6d2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3259649dc6b6196d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/LeaderboardPreview.tsx:145"}, "properties": {"repobilityId": "f41c6293ff480ca2", "scanner": "scanner-primary", "fingerprint": "3259649dc6b6196d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-139044844d4ecfe2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/RetoDelDia.tsx:81"}, "properties": {"repobilityId": "4a7cc34e141e350f", "scanner": "scanner-primary", "fingerprint": "139044844d4ecfe2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e408e0182b816e44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/games/GameVisuals.tsx:262"}, "properties": {"repobilityId": "c01f18e5a4f2bfe4", "scanner": "scanner-primary", "fingerprint": "e408e0182b816e44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-22695bff76445ad7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaRowV3.tsx:247"}, "properties": {"repobilityId": "a1727aea5742eb42", "scanner": "scanner-primary", "fingerprint": "22695bff76445ad7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb426af7e16185d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaCard.tsx:261"}, "properties": {"repobilityId": "4ca9de665dd3adac", "scanner": "scanner-primary", "fingerprint": "fb426af7e16185d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d03d175dd5ac01fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/placa/PlacaWardrobe.tsx:535"}, "properties": {"repobilityId": "36d2251a9314477e", "scanner": "scanner-primary", "fingerprint": "d03d175dd5ac01fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de510aa322659370", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ranked/RankedLeaderboard.tsx:276"}, "properties": {"repobilityId": "2a25631f680604b1", "scanner": "scanner-primary", "fingerprint": "de510aa322659370", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70291cc75878ac1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/badges/LeaderboardBadgeChip.tsx:90"}, "properties": {"repobilityId": "603df92820df4056", "scanner": "scanner-primary", "fingerprint": "70291cc75878ac1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ee6a235ded0b01e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/articles/RankingMentionCards.tsx:57"}, "properties": {"repobilityId": "d5a2d539834e2795", "scanner": "scanner-primary", "fingerprint": "1ee6a235ded0b01e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c7142d35b5225f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/FeaturedCard.tsx:27"}, "properties": {"repobilityId": "272bc8f5761b093a", "scanner": "scanner-primary", "fingerprint": "1c7142d35b5225f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a082d3dc6dc3e1f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/MovimientoSemana.tsx:61"}, "properties": {"repobilityId": "c4dda455598f6473", "scanner": "scanner-primary", "fingerprint": "1a082d3dc6dc3e1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2ece64272a8d4dfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/GlobalSearchResults.tsx:112"}, "properties": {"repobilityId": "4bb9ba03295fe07b", "scanner": "scanner-primary", "fingerprint": "2ece64272a8d4dfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0edfe1a269e278e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/RankRow.tsx:78"}, "properties": {"repobilityId": "c8c8fc58f164adb1", "scanner": "scanner-primary", "fingerprint": "0edfe1a269e278e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-760d1957420176ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/Podium.tsx:76"}, "properties": {"repobilityId": "728db9783302ab6b", "scanner": "scanner-primary", "fingerprint": "760d1957420176ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2dd0b757cf8b4eaa", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:205"}, "properties": {"repobilityId": "4d4ab3e03315f684", "scanner": "scanner-primary", "fingerprint": "2dd0b757cf8b4eaa", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e926d8e92771ef4a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:139"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "e926d8e92771ef4a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0fa7ced1255bccd4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[sport]/page.tsx:208"}, "properties": {"repobilityId": "5106ca06876eda2d", "scanner": "scanner-primary", "fingerprint": "0fa7ced1255bccd4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7dea7c8d429e28ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sanity-webhook/route.ts:116"}, "properties": {"repobilityId": "17c4c2d9b3e26043", "scanner": "scanner-primary", "fingerprint": "7dea7c8d429e28ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f38c3842fa43ef2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/sopa-cracks/page.tsx:866"}, "properties": {"repobilityId": "db931d7d8b9836bb", "scanner": "scanner-primary", "fingerprint": "f38c3842fa43ef2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-938cebd4ec0f5efd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sopa-cracks/layout.tsx:40"}, "properties": {"repobilityId": "97c1d95c208e5f55", "scanner": "scanner-primary", "fingerprint": "938cebd4ec0f5efd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c03b7222f8c1f9eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/games/GamesAdminClient.tsx:229"}, "properties": {"repobilityId": "64cdc833ecbf030b", "scanner": "scanner-primary", "fingerprint": "c03b7222f8c1f9eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e6baa50b35331a6", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/admin/rankings/RankingsAdmin.tsx:141"}, "properties": {"repobilityId": "501269f89e754008", "scanner": "scanner-primary", "fingerprint": "1e6baa50b35331a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-aeee5811313d9159", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/rankings/RankingsAdmin.tsx:317"}, "properties": {"repobilityId": "cc93061cbafd773e", "scanner": "scanner-primary", "fingerprint": "aeee5811313d9159", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-898dda46b2fe26f1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/crackquiz/layout.tsx:40"}, "properties": {"repobilityId": "8e4aa1bcf9bc1c6d", "scanner": "scanner-primary", "fingerprint": "898dda46b2fe26f1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e2cff1dde9312115", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/takagrid/page.tsx:484"}, "properties": {"repobilityId": "b32dbd27997def85", "scanner": "scanner-primary", "fingerprint": "e2cff1dde9312115", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3b661bc8ed3ce2d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/takagrid/layout.tsx:40"}, "properties": {"repobilityId": "5896956bb9360913", "scanner": "scanner-primary", "fingerprint": "b3b661bc8ed3ce2d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-046b93c5e2087740", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/takagrid/[fecha]/ArchivePuzzleClient.tsx:210"}, "properties": {"repobilityId": "77b72c76d511082b", "scanner": "scanner-primary", "fingerprint": "046b93c5e2087740", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0dbc4a687d954d0d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/reels/page.tsx:62"}, "properties": {"repobilityId": "ed264cbe7bf6284e", "scanner": "scanner-primary", "fingerprint": "0dbc4a687d954d0d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2c6c47ac2778de16", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mionce/page.tsx:546"}, "properties": {"repobilityId": "ea1328f2dd67614f", "scanner": "scanner-primary", "fingerprint": "2c6c47ac2778de16", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fba68fc29d7fe63c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/mionce/layout.tsx:40"}, "properties": {"repobilityId": "5032ff68e4b61b32", "scanner": "scanner-primary", "fingerprint": "fba68fc29d7fe63c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b1c5192412ebf359", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/calendario/page.tsx:169"}, "properties": {"repobilityId": "3e00f0ffb1d47695", "scanner": "scanner-primary", "fingerprint": "b1c5192412ebf359", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5c8e46d878c2a627", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/calendario/[slug]/page.tsx:327"}, "properties": {"repobilityId": "2e87b57d0350133d", "scanner": "scanner-primary", "fingerprint": "5c8e46d878c2a627", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1bd19fdfc53b4fa7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/calendario/[slug]/page.tsx:207"}, "properties": {"repobilityId": "8a2bedd209307dc3", "scanner": "scanner-primary", "fingerprint": "1bd19fdfc53b4fa7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1a2e8cde3741eeb7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/quiniela/layout.tsx:35"}, "properties": {"repobilityId": "33147f95604baeea", "scanner": "scanner-primary", "fingerprint": "1a2e8cde3741eeb7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-908fd059cb935b58", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/BadgesModal.tsx:148"}, "properties": {"repobilityId": "38dd690bf5cb6464", "scanner": "scanner-primary", "fingerprint": "908fd059cb935b58", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3274ee9597ca52a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/MundialWelcomeModal.tsx:142"}, "properties": {"repobilityId": "f8bcbc6f91c2e327", "scanner": "scanner-primary", "fingerprint": "3274ee9597ca52a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-48eecd579763d8ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/match/MatchCard.tsx:281"}, "properties": {"repobilityId": "621df271673381be", "scanner": "scanner-primary", "fingerprint": "48eecd579763d8ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-78aa8a023779488a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/quiniela/components/match/ResultToast.tsx:37"}, "properties": {"repobilityId": "e21db185fdaa1078", "scanner": "scanner-primary", "fingerprint": "78aa8a023779488a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a9ffbd166b4de14b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/panels/PersonalStatsPanel.tsx:105"}, "properties": {"repobilityId": "51fed982ac9512e3", "scanner": "scanner-primary", "fingerprint": "a9ffbd166b4de14b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-917f3559ab1c0fd5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quiniela/components/leagues/LeagueShareModal.tsx:74"}, "properties": {"repobilityId": "6698c0faeaca7199", "scanner": "scanner-primary", "fingerprint": "917f3559ab1c0fd5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de1eb85aee0294b0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/quiniela/components/leagues/LeagueShareModal.tsx:64"}, "properties": {"repobilityId": "fbd20da2da55ae0e", "scanner": "scanner-primary", "fingerprint": "de1eb85aee0294b0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-eddc7a870b60092f", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/quiniela/components/leagues/LeagueChat.tsx:138"}, "properties": {"repobilityId": "90e68723be62e78e", "scanner": "scanner-primary", "fingerprint": "eddc7a870b60092f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-adfc790b9aa947d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/LeagueTable.tsx:137"}, "properties": {"repobilityId": "9424c230a0e27fa9", "scanner": "scanner-primary", "fingerprint": "adfc790b9aa947d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ec8ae6ca8b2bf40", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/page.tsx:443"}, "properties": {"repobilityId": "f8af3785e63e2ef1", "scanner": "scanner-primary", "fingerprint": "1ec8ae6ca8b2bf40", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0febc31b8af5e41b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/partido/[ref]/page.tsx:1924"}, "properties": {"repobilityId": "6c4775e0683c7642", "scanner": "scanner-primary", "fingerprint": "0febc31b8af5e41b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5f573f085ca8bbfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/partido/[ref]/StickyScoreBar.tsx:55"}, "properties": {"repobilityId": "e9ace98360b3549f", "scanner": "scanner-primary", "fingerprint": "5f573f085ca8bbfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee6136fdd6e4dbfa", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/buscar/page.tsx:125"}, "properties": {"repobilityId": "834165d15f9aa55a", "scanner": "scanner-primary", "fingerprint": "ee6136fdd6e4dbfa", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5d31f0b887754c6a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/estadisticas/layout.tsx:39"}, "properties": {"repobilityId": "a6a787c1b6dd9fa7", "scanner": "scanner-primary", "fingerprint": "5d31f0b887754c6a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-755f823cb8e16dac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/estadisticas/EstadisticasClient.tsx:978"}, "properties": {"repobilityId": "a8952d5c8f71e4db", "scanner": "scanner-primary", "fingerprint": "755f823cb8e16dac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40632568c207f690", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/estadisticas/EstadisticasClient.tsx:825"}, "properties": {"repobilityId": "9db80439f9c4ce69", "scanner": "scanner-primary", "fingerprint": "40632568c207f690", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2f4f5372a1ffa043", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/page.tsx:1108"}, "properties": {"repobilityId": "6b5d31374b281af8", "scanner": "scanner-primary", "fingerprint": "2f4f5372a1ffa043", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83f1434ef6cff7d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/onces/OncesClient.tsx:101"}, "properties": {"repobilityId": "1abc59bcbc8ecfc8", "scanner": "scanner-primary", "fingerprint": "83f1434ef6cff7d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84b02675f14cc49b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/perfil/album/AlbumClient.tsx:136"}, "properties": {"repobilityId": "cbf875f742c59aff", "scanner": "scanner-primary", "fingerprint": "84b02675f14cc49b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01526d6c9d132af0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/juegos/page.tsx:62"}, "properties": {"repobilityId": "0282484f7395f91f", "scanner": "scanner-primary", "fingerprint": "01526d6c9d132af0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7b7cb7e9c11d2fd9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/glosario/page.tsx:104"}, "properties": {"repobilityId": "122850e9709c8603", "scanner": "scanner-primary", "fingerprint": "7b7cb7e9c11d2fd9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-01867812ef492307", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/glosario/[slug]/page.tsx:117"}, "properties": {"repobilityId": "94480c4fdd024f73", "scanner": "scanner-primary", "fingerprint": "01867812ef492307", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5dec4587b903f104", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/politica-editorial/page.tsx:78"}, "properties": {"repobilityId": "08817dfc5ed8f8b4", "scanner": "scanner-primary", "fingerprint": "5dec4587b903f104", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-76362d05c5822690", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/evento/[id]/page.tsx:247"}, "properties": {"repobilityId": "a24f2ebf0dbe2cee", "scanner": "scanner-primary", "fingerprint": "76362d05c5822690", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8a3a1508015161c7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/page.tsx:66"}, "properties": {"repobilityId": "fb0fbc921655a896", "scanner": "scanner-primary", "fingerprint": "8a3a1508015161c7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-626ee55605ce7f07", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/pagina/[n]/page.tsx:120"}, "properties": {"repobilityId": "549f38131d353c32", "scanner": "scanner-primary", "fingerprint": "626ee55605ce7f07", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-100521adc2594307", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/noticias/[slug]/page.tsx:642"}, "properties": {"repobilityId": "ab94c9d28c73a3d2", "scanner": "scanner-primary", "fingerprint": "100521adc2594307", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-609795cd34527b26", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/noticias/[slug]/page.tsx:600"}, "properties": {"repobilityId": "28feff7bc15a89ea", "scanner": "scanner-primary", "fingerprint": "609795cd34527b26", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5ff99a280670a089", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/comparar/page.tsx:110"}, "properties": {"repobilityId": "cf0f9c943a028d51", "scanner": "scanner-primary", "fingerprint": "5ff99a280670a089", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4456251009ab0ba4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/liga/[id]/page.tsx:103"}, "properties": {"repobilityId": "bc3340f2480c1fd4", "scanner": "scanner-primary", "fingerprint": "4456251009ab0ba4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3043f895a56a7cbd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/autor/redaccion/page.tsx:116"}, "properties": {"repobilityId": "a8596f4b127253f5", "scanner": "scanner-primary", "fingerprint": "3043f895a56a7cbd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cddcc289d8c7f1fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/jugador/[slug]/page.tsx:82"}, "properties": {"repobilityId": "77bc81034fea3bf3", "scanner": "scanner-primary", "fingerprint": "cddcc289d8c7f1fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d93454cf88fff12", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/jugador/[slug]/page.tsx:313"}, "properties": {"repobilityId": "f5afc481b252addc", "scanner": "scanner-primary", "fingerprint": "4d93454cf88fff12", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e6338b902d9d0bfe", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/tag/page.tsx:56"}, "properties": {"repobilityId": "607633f41514ef5f", "scanner": "scanner-primary", "fingerprint": "e6338b902d9d0bfe", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-430b6d7729567088", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/tag/[tag]/page.tsx:156"}, "properties": {"repobilityId": "f59c560d28eeeb7d", "scanner": "scanner-primary", "fingerprint": "430b6d7729567088", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b23070654039c976", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/sobre/page.tsx:49"}, "properties": {"repobilityId": "19380aa0c0252624", "scanner": "scanner-primary", "fingerprint": "b23070654039c976", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3aa4ff51c790803f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/comparar-equipos/page.tsx:126"}, "properties": {"repobilityId": "9a8644804839578a", "scanner": "scanner-primary", "fingerprint": "3aa4ff51c790803f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd5fceb08b77fb33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/mundial/fixture/page.tsx:174"}, "properties": {"repobilityId": "38199e9b159b9200", "scanner": "scanner-primary", "fingerprint": "bd5fceb08b77fb33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c95ec4601f867d89", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/rankings/page.tsx:206"}, "properties": {"repobilityId": "e8de8b9f0579e4fd", "scanner": "scanner-primary", "fingerprint": "c95ec4601f867d89", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9f1cd13c30947509", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/[id]/page.tsx:221"}, "properties": {"repobilityId": "6836b97696e070c3", "scanner": "scanner-primary", "fingerprint": "9f1cd13c30947509", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01fe8b0f5a74dd67", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/rankings/[id]/page.tsx:209"}, "properties": {"repobilityId": "05214be443286cbc", "scanner": "scanner-primary", "fingerprint": "01fe8b0f5a74dd67", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9c6b544df68d37fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/todos/page.tsx:108"}, "properties": {"repobilityId": "7c394d2953e6269a", "scanner": "scanner-primary", "fingerprint": "9c6b544df68d37fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-574725001ccca4cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/rankings/comparar/CompararClient.tsx:102"}, "properties": {"repobilityId": "b3df5774746a91cf", "scanner": "scanner-primary", "fingerprint": "574725001ccca4cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec0af669d3fbeded", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/RosterTab.tsx:40"}, "properties": {"repobilityId": "fae7ac8f467f2cd9", "scanner": "scanner-primary", "fingerprint": "ec0af669d3fbeded", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7cb8154ef2e0319b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/page.tsx:121"}, "properties": {"repobilityId": "9e9cfd738c84d4e3", "scanner": "scanner-primary", "fingerprint": "7cb8154ef2e0319b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e2faa6625bcc4d3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/equipo/[slug]/page.tsx:494"}, "properties": {"repobilityId": "07cff4f895895ef2", "scanner": "scanner-primary", "fingerprint": "1e2faa6625bcc4d3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ef77b9f404f1a861", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(public)/equipo/[slug]/StandingsTab.tsx:89"}, "properties": {"repobilityId": "d6219818231fe16f", "scanner": "scanner-primary", "fingerprint": "ef77b9f404f1a861", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ae26e15296989a7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/game-feedback.ts:11"}, "properties": {"repobilityId": "2a3285259c13b775", "scanner": "scanner-primary", "fingerprint": "3ae26e15296989a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-613009d200defde1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/padel.ts:120"}, "properties": {"repobilityId": "9126338b0c0dfbfb", "scanner": "scanner-primary", "fingerprint": "613009d200defde1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35658bc62008142a", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "35658bc62008142a", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-weekly-rankings-update.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f23bf48bb2c5574", "level": "warning", "message": {"text": "Privileged port 45 in use"}, "properties": {"repobilityId": "73cf64d92574d41c", "scanner": "scanner-primary", "fingerprint": "4f23bf48bb2c5574", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-weekly-rankings-update.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5fb554d9e9ac98e7", "level": "warning", "message": {"text": "Privileged port 15 in use"}, "properties": {"repobilityId": "3340f9a170f285cd", "scanner": "scanner-primary", "fingerprint": "5fb554d9e9ac98e7", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-weekly-rankings-update.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84358e4d393d3b5f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/apply-ig-token.mjs:18"}, "properties": {"repobilityId": "641d21243707a006", "scanner": "scanner-primary", "fingerprint": "84358e4d393d3b5f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/apply-ig-token.mjs"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-eb6a75018a1fad3d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-creator-images.mjs:24"}, "properties": {"repobilityId": "35ad6ae8a8818e9f", "scanner": "scanner-primary", "fingerprint": "eb6a75018a1fad3d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ingest-creator-images.mjs"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-0ed27bdee8b1beb7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in scripts/image-collector-server.mjs:30"}, "properties": {"repobilityId": "ac20f77407baf67d", "scanner": "scanner-primary", "fingerprint": "0ed27bdee8b1beb7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/image-collector-server.mjs"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-b44f5ce07cc70c66", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-creator-images-ig.mjs:28"}, "properties": {"repobilityId": "b4e8a5e287dbf6bf", "scanner": "scanner-primary", "fingerprint": "b44f5ce07cc70c66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ingest-creator-images-ig.mjs"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-17ec06a2fdad54db", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-creator-social.mjs:35"}, "properties": {"repobilityId": "70811f6f8ccfd3c1", "scanner": "scanner-primary", "fingerprint": "17ec06a2fdad54db", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ingest-creator-social.mjs"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-adadaabc786222c4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ingest-instagram-followers.mjs:27"}, "properties": {"repobilityId": "d2b83c92a5d4cde9", "scanner": "scanner-primary", "fingerprint": "adadaabc786222c4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ingest-instagram-followers.mjs"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-67d442ecafac5ce5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:205"}, "properties": {"repobilityId": "88fd235b712bda65", "scanner": "scanner-primary", "fingerprint": "67d442ecafac5ce5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/page.tsx"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-698cafff33f1e82a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:139"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "698cafff33f1e82a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-a036defaea0819ef", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[sport]/page.tsx:208"}, "properties": {"repobilityId": "4b64a50712efcb35", "scanner": "scanner-primary", "fingerprint": "a036defaea0819ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[sport]/page.tsx"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-79afed2c9f8e52ef", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/sopa-cracks/layout.tsx:40"}, "properties": {"repobilityId": "d7f7bb29b5df249a", "scanner": "scanner-primary", "fingerprint": "79afed2c9f8e52ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/sopa-cracks/layout.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-27a3ac3547b8ac86", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/crackquiz/layout.tsx:40"}, "properties": {"repobilityId": "2a1a970be9ef53d9", "scanner": "scanner-primary", "fingerprint": "27a3ac3547b8ac86", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/crackquiz/layout.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-7daefb999a1a9706", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/takagrid/layout.tsx:40"}, "properties": {"repobilityId": "14f8260ec8db44f2", "scanner": "scanner-primary", "fingerprint": "7daefb999a1a9706", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/takagrid/layout.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-b5cf3d2471663e63", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/reels/page.tsx:62"}, "properties": {"repobilityId": "225a47b97dfd8d1e", "scanner": "scanner-primary", "fingerprint": "b5cf3d2471663e63", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/reels/page.tsx"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-c7ef3b51186399d4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/mionce/layout.tsx:40"}, "properties": {"repobilityId": "5e81e36cfd707c05", "scanner": "scanner-primary", "fingerprint": "c7ef3b51186399d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/mionce/layout.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-c6d51ca366a6cad6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/calendario/page.tsx:169"}, "properties": {"repobilityId": "3c6c3ce95490633e", "scanner": "scanner-primary", "fingerprint": "c6d51ca366a6cad6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/calendario/page.tsx"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-732198cae06e1bad", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/calendario/[slug]/page.tsx:207"}, "properties": {"repobilityId": "8c1782200aeda992", "scanner": "scanner-primary", "fingerprint": "732198cae06e1bad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/calendario/[slug]/page.tsx"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-dab3d1112d80b77e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/quiniela/layout.tsx:35"}, "properties": {"repobilityId": "e77b3ca8c2076df3", "scanner": "scanner-primary", "fingerprint": "dab3d1112d80b77e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/quiniela/layout.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-53f5bf19e2f326c8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/quiniela/components/leagues/LeagueShareModal.tsx:64"}, "properties": {"repobilityId": "8836e6ba230cea0e", "scanner": "scanner-primary", "fingerprint": "53f5bf19e2f326c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/quiniela/components/leagues/LeagueShareModal.tsx"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-106fb18fca58a43c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/partido/[ref]/page.tsx:1924"}, "properties": {"repobilityId": "fda640580cb06205", "scanner": "scanner-primary", "fingerprint": "106fb18fca58a43c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/partido/[ref]/page.tsx"}, "region": {"startLine": 1924}}}]}, {"ruleId": "scanner-995fc46ee8c5f8f7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/buscar/page.tsx:125"}, "properties": {"repobilityId": "9d70f082c97c962d", "scanner": "scanner-primary", "fingerprint": "995fc46ee8c5f8f7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/buscar/page.tsx"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-b536f1006868f9df", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/estadisticas/layout.tsx:39"}, "properties": {"repobilityId": "8e37c43eb4ce4761", "scanner": "scanner-primary", "fingerprint": "b536f1006868f9df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/estadisticas/layout.tsx"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-1ce72f14250d8ff2", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/estadisticas/EstadisticasClient.tsx:825"}, "properties": {"repobilityId": "0a6d561eae5de96d", "scanner": "scanner-primary", "fingerprint": "1ce72f14250d8ff2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/estadisticas/EstadisticasClient.tsx"}, "region": {"startLine": 825}}}]}, {"ruleId": "scanner-3f655dda3572c8ea", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/juegos/page.tsx:62"}, "properties": {"repobilityId": "024db2d7ec139c13", "scanner": "scanner-primary", "fingerprint": "3f655dda3572c8ea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/juegos/page.tsx"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-d191c351178bc4c7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/glosario/page.tsx:104"}, "properties": {"repobilityId": "1d20434a8e70c291", "scanner": "scanner-primary", "fingerprint": "d191c351178bc4c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/glosario/page.tsx"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-ffa39b10bc663e1f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/glosario/[slug]/page.tsx:117"}, "properties": {"repobilityId": "a6697c488ab4864d", "scanner": "scanner-primary", "fingerprint": "ffa39b10bc663e1f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/glosario/[slug]/page.tsx"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-18a2d6a85b3d6b18", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/politica-editorial/page.tsx:78"}, "properties": {"repobilityId": "39aea26f4ed986bb", "scanner": "scanner-primary", "fingerprint": "18a2d6a85b3d6b18", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/politica-editorial/page.tsx"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-115689c475f50b5a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/evento/[id]/page.tsx:247"}, "properties": {"repobilityId": "b46e78fff8e20858", "scanner": "scanner-primary", "fingerprint": "115689c475f50b5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/evento/[id]/page.tsx"}, "region": {"startLine": 247}}}]}, {"ruleId": "scanner-595f6d70744d4124", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/page.tsx:66"}, "properties": {"repobilityId": "e5676a3630a85fee", "scanner": "scanner-primary", "fingerprint": "595f6d70744d4124", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/noticias/page.tsx"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-322ef0c3faed279f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/pagina/[n]/page.tsx:120"}, "properties": {"repobilityId": "db52e6568d34f948", "scanner": "scanner-primary", "fingerprint": "322ef0c3faed279f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/noticias/pagina/[n]/page.tsx"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-1089fc3e2c74e1f5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/noticias/[slug]/page.tsx:600"}, "properties": {"repobilityId": "420c9de68d0fdb2d", "scanner": "scanner-primary", "fingerprint": "1089fc3e2c74e1f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/noticias/[slug]/page.tsx"}, "region": {"startLine": 600}}}]}, {"ruleId": "scanner-fa2ffbb4e56b1bb1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/autor/redaccion/page.tsx:116"}, "properties": {"repobilityId": "81402b6558e9bacd", "scanner": "scanner-primary", "fingerprint": "fa2ffbb4e56b1bb1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/autor/redaccion/page.tsx"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-2e1e258f0f1fbdfb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/jugador/[slug]/page.tsx:313"}, "properties": {"repobilityId": "df9c3fe6d731b8d5", "scanner": "scanner-primary", "fingerprint": "2e1e258f0f1fbdfb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/jugador/[slug]/page.tsx"}, "region": {"startLine": 313}}}]}, {"ruleId": "scanner-ecec5531a932d7ba", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/tag/page.tsx:56"}, "properties": {"repobilityId": "211ab95dc8131a59", "scanner": "scanner-primary", "fingerprint": "ecec5531a932d7ba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/tag/page.tsx"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-6af81a7172a2f389", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/tag/[tag]/page.tsx:156"}, "properties": {"repobilityId": "0fd7d777897aaa32", "scanner": "scanner-primary", "fingerprint": "6af81a7172a2f389", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/tag/[tag]/page.tsx"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-5e05fda4f9462cfe", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/sobre/page.tsx:49"}, "properties": {"repobilityId": "282ec71ad83455d7", "scanner": "scanner-primary", "fingerprint": "5e05fda4f9462cfe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/sobre/page.tsx"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-b72864a9d44bebcd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/rankings/page.tsx:206"}, "properties": {"repobilityId": "0dd53f8638ce2351", "scanner": "scanner-primary", "fingerprint": "b72864a9d44bebcd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/rankings/page.tsx"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-af31275f57a29933", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/rankings/[id]/page.tsx:209"}, "properties": {"repobilityId": "0eee1a6ce5f92548", "scanner": "scanner-primary", "fingerprint": "af31275f57a29933", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/rankings/[id]/page.tsx"}, "region": {"startLine": 209}}}]}, {"ruleId": "scanner-293bde169a0389fe", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/equipo/[slug]/page.tsx:494"}, "properties": {"repobilityId": "edb0b2c7f24e1bd3", "scanner": "scanner-primary", "fingerprint": "293bde169a0389fe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/equipo/[slug]/page.tsx"}, "region": {"startLine": 494}}}]}, {"ruleId": "scanner-3c56f2bc128a29c7", "level": "note", "message": {"text": "Very large file: src/components/CalendarioContent.tsx (3076 lines)"}, "properties": {"repobilityId": "bfe8749a6f9df1ef", "scanner": "scanner-primary", "fingerprint": "3c56f2bc128a29c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7278c8e0ef9da626", "level": "note", "message": {"text": "Very large file: src/app/api/stats/standings/route.ts (1397 lines)"}, "properties": {"repobilityId": "35ff70237c22a14f", "scanner": "scanner-primary", "fingerprint": "7278c8e0ef9da626", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bdde09d2ebe239ae", "level": "note", "message": {"text": "Very large file: src/app/sopa-cracks/page.tsx (1126 lines)"}, "properties": {"repobilityId": "cd48c4e6094a89b9", "scanner": "scanner-primary", "fingerprint": "bdde09d2ebe239ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-426019e5ef7df931", "level": "note", "message": {"text": "Very large file: src/app/crackquiz/page.tsx (1389 lines)"}, "properties": {"repobilityId": "3730e2fdeac48f7b", "scanner": "scanner-primary", "fingerprint": "426019e5ef7df931", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0900adec1275291d", "level": "note", "message": {"text": "Very large file: src/app/ufc/UfcClient.tsx (1272 lines)"}, "properties": {"repobilityId": "40c7cb63b0805423", "scanner": "scanner-primary", "fingerprint": "0900adec1275291d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-15257116cc1c4c2e", "level": "note", "message": {"text": "Very large file: src/app/takagrid/page.tsx (1206 lines)"}, "properties": {"repobilityId": "ada336def175615b", "scanner": "scanner-primary", "fingerprint": "15257116cc1c4c2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d10a8735761ccd2b", "level": "note", "message": {"text": "Very large file: src/app/mionce/page.tsx (1640 lines)"}, "properties": {"repobilityId": "bc6c15f8251d6b2d", "scanner": "scanner-primary", "fingerprint": "d10a8735761ccd2b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9ac20b7340de27f2", "level": "note", "message": {"text": "Very large file: src/app/partido/[ref]/page.tsx (1939 lines)"}, "properties": {"repobilityId": "97ecda511e8f15ec", "scanner": "scanner-primary", "fingerprint": "9ac20b7340de27f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c9980ef5398f48a2", "level": "note", "message": {"text": "Very large file: src/app/(public)/estadisticas/EstadisticasClient.tsx (2765 lines)"}, "properties": {"repobilityId": "35814666ad44b862", "scanner": "scanner-primary", "fingerprint": "c9980ef5398f48a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8742aea5ec243972", "level": "note", "message": {"text": "Very large file: src/app/(public)/perfil/page.tsx (1558 lines)"}, "properties": {"repobilityId": "e589f40f9447db39", "scanner": "scanner-primary", "fingerprint": "8742aea5ec243972", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a34f22ae30a130ec", "level": "note", "message": {"text": "Very large file: src/app/(public)/noticias/[slug]/page.tsx (1376 lines)"}, "properties": {"repobilityId": "fe232f01f29ad395", "scanner": "scanner-primary", "fingerprint": "a34f22ae30a130ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a9e3ca9aca9ad000", "level": "note", "message": {"text": "Very large file: src/app/(public)/mundial/MundialClient.tsx (1586 lines)"}, "properties": {"repobilityId": "9b22e5de193de652", "scanner": "scanner-primary", "fingerprint": "a9e3ca9aca9ad000", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a22b2673a773919f", "level": "note", "message": {"text": "Very large file: src/app/(public)/rankings/RankingsClient.tsx (1074 lines)"}, "properties": {"repobilityId": "bf4a89371f8d2007", "scanner": "scanner-primary", "fingerprint": "a22b2673a773919f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-33c14280ed477bd1", "level": "note", "message": {"text": "Very large file: src/lib/crackquiz-questions.ts (1307 lines)"}, "properties": {"repobilityId": "2a28a1899ab0497f", "scanner": "scanner-primary", "fingerprint": "33c14280ed477bd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d302b8dfcae1ca86", "level": "note", "message": {"text": "Very large file: src/lib/glosario-terms.ts (3823 lines)"}, "properties": {"repobilityId": "eb449f5086cb0297", "scanner": "scanner-primary", "fingerprint": "d302b8dfcae1ca86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c21cf64eaa84196b", "level": "note", "message": {"text": "Very large file: src/lib/rankings.ts (2164 lines)"}, "properties": {"repobilityId": "d9e91676a9efc45d", "scanner": "scanner-primary", "fingerprint": "c21cf64eaa84196b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-331975d06615187a", "level": "note", "message": {"text": "179 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "331975d06615187a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "6bc3a193f624ff91", "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": "b5c41b78f5a1cda9", "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": "b02a069c7486bb9f", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "bdf82a685bd4be2b", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "2120016eca7066ff", "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": "b9aa5aba97642f25", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "f73ecb0f6c1e4c32", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "3517125fcc1372ad", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-17d866d91a7c451e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "properties": {"repobilityId": "ccce5984e58a48f0", "scanner": "scanner-primary", "fingerprint": "17d866d91a7c451e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e21a95b868554e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in next.config.ts:66"}, "properties": {"repobilityId": "9be5c4adc5e5dbe8", "scanner": "scanner-primary", "fingerprint": "9e21a95b868554e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c39cd5d4ce3fc20", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in scripts/cache-photos-tennis-wwe.mjs:26"}, "properties": {"repobilityId": "2bb3452bc1e54b14", "scanner": "scanner-primary", "fingerprint": "2c39cd5d4ce3fc20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6988c1f78dda42b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-photos-tennis-wwe.mjs:26"}, "properties": {"repobilityId": "db38f2eb7157ec08", "scanner": "scanner-primary", "fingerprint": "6988c1f78dda42b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58a9efd148e3e84c", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/ingest-instagram-avatars-pw.mjs:7"}, "properties": {"repobilityId": "9555a99a1f319561", "scanner": "scanner-primary", "fingerprint": "58a9efd148e3e84c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2efff990e07f56a", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/expand-contenidos-v12.mjs:15"}, "properties": {"repobilityId": "fcdd70c5f76fd9c3", "scanner": "scanner-primary", "fingerprint": "e2efff990e07f56a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd7e5a4cbd6085a0", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/ingest-tennis-context.mjs:9"}, "properties": {"repobilityId": "4640638ca3496799", "scanner": "scanner-primary", "fingerprint": "cd7e5a4cbd6085a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0d7c0c9fa75c1a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-tennis-context.mjs:71"}, "properties": {"repobilityId": "ab593d5808e5723f", "scanner": "scanner-primary", "fingerprint": "a0d7c0c9fa75c1a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0cc2f70ed7c69be", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/expand-ufc-wwe-hispanics.mjs:5"}, "properties": {"repobilityId": "863cbafab3b9dfe0", "scanner": "scanner-primary", "fingerprint": "d0cc2f70ed7c69be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-130b7aed0eaa09f4", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/ingest-football-women-rendimiento.mjs:11"}, "properties": {"repobilityId": "4596f4f1e2a5ebaa", "scanner": "scanner-primary", "fingerprint": "130b7aed0eaa09f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdb8188043a2ff86", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ingest-creator-images-storage.mjs:14"}, "properties": {"repobilityId": "fa3fbcb3295b88a0", "scanner": "scanner-primary", "fingerprint": "cdb8188043a2ff86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-699d096d3ae84cc8", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/gen-mionce-boards.ts:3"}, "properties": {"repobilityId": "da219c47a3dcf51e", "scanner": "scanner-primary", "fingerprint": "699d096d3ae84cc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dea0358a1b919b8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ingest-nba-per.mjs:5"}, "properties": {"repobilityId": "56e825912f5de1ce", "scanner": "scanner-primary", "fingerprint": "dea0358a1b919b8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a30c3433a3198a72", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-nba-per.mjs:75"}, "properties": {"repobilityId": "5df68f0f4f963d65", "scanner": "scanner-primary", "fingerprint": "a30c3433a3198a72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e13b78ffdd474d24", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/apply-ig-token.mjs:9"}, "properties": {"repobilityId": "177c0cedde47c1dc", "scanner": "scanner-primary", "fingerprint": "e13b78ffdd474d24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31630bba843bc5dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/apply-ig-token.mjs:51"}, "properties": {"repobilityId": "5adcc824a0c0b0c8", "scanner": "scanner-primary", "fingerprint": "31630bba843bc5dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b481e25024b5e9be", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/enrich-altclubs.mjs:3"}, "properties": {"repobilityId": "12bb059a2f0b7235", "scanner": "scanner-primary", "fingerprint": "b481e25024b5e9be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec567397bb81dfc2", "level": "none", "message": {"text": "Commented-code block (10 lines) in scripts/expand-creators-v5.mjs:2"}, "properties": {"repobilityId": "73cc775de807b7db", "scanner": "scanner-primary", "fingerprint": "ec567397bb81dfc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e9265bc33fff1b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/expand-ufc-wwe-v7.mjs:2"}, "properties": {"repobilityId": "25a252ccda32689c", "scanner": "scanner-primary", "fingerprint": "2e9265bc33fff1b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c75df9fe06b85dd", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in scripts/ingest-creator-images.mjs:99"}, "properties": {"repobilityId": "77a9b0cea6377dba", "scanner": "scanner-primary", "fingerprint": "9c75df9fe06b85dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-723b5dc17d638088", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ingest-creator-images.mjs:7"}, "properties": {"repobilityId": "27fea1172bb0616a", "scanner": "scanner-primary", "fingerprint": "723b5dc17d638088", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3afe6b27c773d808", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-creator-images.mjs:84"}, "properties": {"repobilityId": "d6bf49fc16c174b4", "scanner": "scanner-primary", "fingerprint": "3afe6b27c773d808", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af369901f111b90c", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ingest-tennis-elo.mjs:18"}, "properties": {"repobilityId": "31f2c73a1c5c6b26", "scanner": "scanner-primary", "fingerprint": "af369901f111b90c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5b3c9f05ddc9851", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-tennis-elo.mjs:87"}, "properties": {"repobilityId": "db694ce29b2aeae5", "scanner": "scanner-primary", "fingerprint": "e5b3c9f05ddc9851", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af93aed4d23e5d56", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/fix-duplicates-and-categories.mjs:5"}, "properties": {"repobilityId": "a09301ce79337c5b", "scanner": "scanner-primary", "fingerprint": "af93aed4d23e5d56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-597f0c8d5e22db0d", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in scripts/cache-photos-wikipedia.mjs:28"}, "properties": {"repobilityId": "8237c30fc5499027", "scanner": "scanner-primary", "fingerprint": "597f0c8d5e22db0d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8cedbc3145e6e884", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-photos-wikipedia.mjs:28"}, "properties": {"repobilityId": "763ec221f27675af", "scanner": "scanner-primary", "fingerprint": "8cedbc3145e6e884", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22b1d8921c814465", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ingest-twitter-avatars-pw.mjs:7"}, "properties": {"repobilityId": "a80da3fab5e32e64", "scanner": "scanner-primary", "fingerprint": "22b1d8921c814465", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8168d8de757f39c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/gen-sopa-playerids.ts:1"}, "properties": {"repobilityId": "1706d1ad9a14545a", "scanner": "scanner-primary", "fingerprint": "8168d8de757f39c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ad883d3b3655289", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-f1-dpc.mjs:52"}, "properties": {"repobilityId": "0b1abd140ee766cc", "scanner": "scanner-primary", "fingerprint": "9ad883d3b3655289", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b2ca31bc2a8e49c", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/expand-contenidos-v11.mjs:5"}, "properties": {"repobilityId": "debda780a4770969", "scanner": "scanner-primary", "fingerprint": "9b2ca31bc2a8e49c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4334037f6e71f8d", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in scripts/ingest-wikipedia-views.mjs:91"}, "properties": {"repobilityId": "d74a247470869efc", "scanner": "scanner-primary", "fingerprint": "c4334037f6e71f8d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-84108ba6095f965e", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/ingest-wikipedia-views.mjs:13"}, "properties": {"repobilityId": "47deaf37129d7956", "scanner": "scanner-primary", "fingerprint": "84108ba6095f965e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-266e1634429d0912", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-wikipedia-views.mjs:70"}, "properties": {"repobilityId": "9996b75896dc5b51", "scanner": "scanner-primary", "fingerprint": "266e1634429d0912", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3dd37e7ee9a0ca5", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/seed-creator-handles.mjs:26"}, "properties": {"repobilityId": "2c0400bbb77f7b5c", "scanner": "scanner-primary", "fingerprint": "d3dd37e7ee9a0ca5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-857637753e58a2ea", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/ingest-f1-context.mjs:8"}, "properties": {"repobilityId": "d9686a8f826fc4aa", "scanner": "scanner-primary", "fingerprint": "857637753e58a2ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df7e11497dead1b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-f1-context.mjs:58"}, "properties": {"repobilityId": "22969772d7b6f766", "scanner": "scanner-primary", "fingerprint": "df7e11497dead1b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb43bfe461104dee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-articles.mjs:193"}, "properties": {"repobilityId": "c8dc0e0f364135f2", "scanner": "scanner-primary", "fingerprint": "bb43bfe461104dee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b782aaa6a6b37ac0", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/ingest-football-fbref.mjs:8"}, "properties": {"repobilityId": "5fcd06fe5b8a37f7", "scanner": "scanner-primary", "fingerprint": "b782aaa6a6b37ac0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee5f6f4e2c808c65", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-football-fbref.mjs:105"}, "properties": {"repobilityId": "fd3305f881c900bf", "scanner": "scanner-primary", "fingerprint": "ee5f6f4e2c808c65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfa7c763087f0541", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/set-ranking-final.mjs:6"}, "properties": {"repobilityId": "d7e8d973a4032946", "scanner": "scanner-primary", "fingerprint": "dfa7c763087f0541", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a217511b81b46d4a", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in scripts/cache-photos-v2.mjs:22"}, "properties": {"repobilityId": "7bbdbe88e21dc8d8", "scanner": "scanner-primary", "fingerprint": "a217511b81b46d4a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e5f528619a9b3211", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/expand-contenidos-v10-nicho.mjs:6"}, "properties": {"repobilityId": "c4606302bcdb40c8", "scanner": "scanner-primary", "fingerprint": "e5f528619a9b3211", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7718e6957587ef08", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/fix-creator-scores.mjs:9"}, "properties": {"repobilityId": "9806f8c9048c2431", "scanner": "scanner-primary", "fingerprint": "7718e6957587ef08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74638389d36e4684", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/ingest-creator-images-ig.mjs:17"}, "properties": {"repobilityId": "4a6437ceeb5d34e7", "scanner": "scanner-primary", "fingerprint": "74638389d36e4684", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcc2c152e7f727ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cache-creator-photos-yt2.mjs:22"}, "properties": {"repobilityId": "efde396695117dbd", "scanner": "scanner-primary", "fingerprint": "fcc2c152e7f727ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8ac718f19b9d4397", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-ranked-images.mjs:81"}, "properties": {"repobilityId": "724be86309057ea1", "scanner": "scanner-primary", "fingerprint": "8ac718f19b9d4397", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a098a376c3ce366", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/ingest-nba-context.mjs:8"}, "properties": {"repobilityId": "a17e70065443cc91", "scanner": "scanner-primary", "fingerprint": "8a098a376c3ce366", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58c43ad97faada5d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-nba-context.mjs:50"}, "properties": {"repobilityId": "279f6c5733de8beb", "scanner": "scanner-primary", "fingerprint": "58c43ad97faada5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-106440cb412effad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-creator-images-missing.mjs:87"}, "properties": {"repobilityId": "38698bdf3e672044", "scanner": "scanner-primary", "fingerprint": "106440cb412effad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b69944fa248624a", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ingest-creator-images-yt.mjs:4"}, "properties": {"repobilityId": "58805d564dd4033d", "scanner": "scanner-primary", "fingerprint": "9b69944fa248624a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd08ff6a95445837", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-creator-images-yt.mjs:62"}, "properties": {"repobilityId": "91c988e7ddc2a140", "scanner": "scanner-primary", "fingerprint": "fd08ff6a95445837", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-11e09360b7268b46", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/ingest-ufc-rankings.mjs:8"}, "properties": {"repobilityId": "225b05e7afc6f101", "scanner": "scanner-primary", "fingerprint": "11e09360b7268b46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24b9892fff04c842", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-ufc-rankings.mjs:120"}, "properties": {"repobilityId": "2b1c97263f9b8311", "scanner": "scanner-primary", "fingerprint": "24b9892fff04c842", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03b4ade4573030cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/curate-active-entries.mjs:12"}, "properties": {"repobilityId": "8018e26a8316f864", "scanner": "scanner-primary", "fingerprint": "03b4ade4573030cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bad0077fcae30d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ingest-football-context.mjs:118"}, "properties": {"repobilityId": "ce04d2a7a3172f7d", "scanner": "scanner-primary", "fingerprint": "7bad0077fcae30d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9357bb8a5aeed6e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/ingest-creator-social.mjs:16"}, "properties": {"repobilityId": "a0efde1103bc2b72", "scanner": "scanner-primary", "fingerprint": "9357bb8a5aeed6e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a667f06bcbaf3fa", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/ingest-creator-images-ig2.mjs:13"}, "properties": {"repobilityId": "4734ec57758a214e", "scanner": "scanner-primary", "fingerprint": "1a667f06bcbaf3fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2b9b950403f7ec1", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/fix-contenidos-scores.mjs:7"}, "properties": {"repobilityId": "db9e8b77130c1ed3", "scanner": "scanner-primary", "fingerprint": "f2b9b950403f7ec1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-060689ebc4a9c370", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/ingest-instagram-followers.mjs:17"}, "properties": {"repobilityId": "f450a093637a2377", "scanner": "scanner-primary", "fingerprint": "060689ebc4a9c370", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29b54233ca02a6b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-instagram-token.mjs:52"}, "properties": {"repobilityId": "df0fc12a23065c33", "scanner": "scanner-primary", "fingerprint": "29b54233ca02a6b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00ceadfe3e9d3dd3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-reels-storage.mjs:41"}, "properties": {"repobilityId": "289e479a3102f684", "scanner": "scanner-primary", "fingerprint": "00ceadfe3e9d3dd3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7195697a6fac26a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/cache-creator-photos-yt.mjs:1"}, "properties": {"repobilityId": "f46ab4735d6c54b1", "scanner": "scanner-primary", "fingerprint": "7195697a6fac26a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1607391a22662bdb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/middleware.ts:5"}, "properties": {"repobilityId": "4dc175183546baee", "scanner": "scanner-primary", "fingerprint": "1607391a22662bdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abaa7fe015001d50", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ArticleComments.tsx:3"}, "properties": {"repobilityId": "6649c6b81ac2a3a0", "scanner": "scanner-primary", "fingerprint": "abaa7fe015001d50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cd3d85396afaafc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/PorraSettlementToast.tsx:5"}, "properties": {"repobilityId": "f706571888e1fe24", "scanner": "scanner-primary", "fingerprint": "7cd3d85396afaafc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18c73fa0702cd2c9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/PWAManager.tsx:3"}, "properties": {"repobilityId": "39e276e869cdae86", "scanner": "scanner-primary", "fingerprint": "18c73fa0702cd2c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8cc34da078cc3c3e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/PorraMatchWidget.tsx:5"}, "properties": {"repobilityId": "1fcf55a08001c98a", "scanner": "scanner-primary", "fingerprint": "8cc34da078cc3c3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee25a80aa40786ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/PorraHero.tsx:5"}, "properties": {"repobilityId": "4709e1b236b0e1b0", "scanner": "scanner-primary", "fingerprint": "ee25a80aa40786ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d61b9241913f6ef5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/TakaPoint.tsx:6"}, "properties": {"repobilityId": "a16774c79364eaad", "scanner": "scanner-primary", "fingerprint": "d61b9241913f6ef5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-755b140e3fd0f27c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/SportHubHeader.tsx:72"}, "properties": {"repobilityId": "df44ba86d93e78de", "scanner": "scanner-primary", "fingerprint": "755b140e3fd0f27c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38c98f721449b723", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/CompetitionRail.tsx:1"}, "properties": {"repobilityId": "ec29fbefcf9c34d6", "scanner": "scanner-primary", "fingerprint": "38c98f721449b723", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98151c9772c6c359", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ReelsSection.tsx:499"}, "properties": {"repobilityId": "59bcbe530bc57bdc", "scanner": "scanner-primary", "fingerprint": "98151c9772c6c359", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-380d7811fb57f968", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/DeviceCapInit.tsx:6"}, "properties": {"repobilityId": "14b72902f0dfd5bc", "scanner": "scanner-primary", "fingerprint": "380d7811fb57f968", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4adc1fc148374cd", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/WelcomeOnboarding.tsx:3"}, "properties": {"repobilityId": "31c96c32255c3faa", "scanner": "scanner-primary", "fingerprint": "e4adc1fc148374cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bb28e716b4bc583", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/CompetitionSelector.tsx:9"}, "properties": {"repobilityId": "27523f7950a519e4", "scanner": "scanner-primary", "fingerprint": "8bb28e716b4bc583", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec4fd5268e357e20", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/Sidebar.tsx:83"}, "properties": {"repobilityId": "711c47562fce1f95", "scanner": "scanner-primary", "fingerprint": "ec4fd5268e357e20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46474b1199a4ad91", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/HomeContent.tsx:26"}, "properties": {"repobilityId": "7b99b1eb3fd4b215", "scanner": "scanner-primary", "fingerprint": "46474b1199a4ad91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fad7bdf2ed2c39fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ConsentBanner.tsx:55"}, "properties": {"repobilityId": "d1380464974493b7", "scanner": "scanner-primary", "fingerprint": "fad7bdf2ed2c39fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3ef54e28a8ed336", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/HeaderConsole.tsx:5"}, "properties": {"repobilityId": "87b368a1714e2e55", "scanner": "scanner-primary", "fingerprint": "d3ef54e28a8ed336", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0156a2d290c4dcd9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/HeroBlock.tsx:475"}, "properties": {"repobilityId": "a2fa4a647c2a2a0e", "scanner": "scanner-primary", "fingerprint": "0156a2d290c4dcd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc100e1f5d3eb4c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/MatchNews.tsx:1"}, "properties": {"repobilityId": "f7ce0ad83d0b1b79", "scanner": "scanner-primary", "fingerprint": "dc100e1f5d3eb4c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4a80fcf12aaad26", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/Header.tsx:514"}, "properties": {"repobilityId": "351b723d1d8d0be9", "scanner": "scanner-primary", "fingerprint": "b4a80fcf12aaad26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04a62096e44b3b68", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/CalendarioContent.tsx:73"}, "properties": {"repobilityId": "de79d0234123dae6", "scanner": "scanner-primary", "fingerprint": "04a62096e44b3b68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9017a873040ed4a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CalendarioContent.tsx:1831"}, "properties": {"repobilityId": "6836293e163e4367", "scanner": "scanner-primary", "fingerprint": "a9017a873040ed4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e355f285c67a3555", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/NoticiasPortada.tsx:61"}, "properties": {"repobilityId": "492020cb4b8e7d01", "scanner": "scanner-primary", "fingerprint": "e355f285c67a3555", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e78b726f91e30848", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/PorraChallengeBanner.tsx:5"}, "properties": {"repobilityId": "dbb3145c35b49402", "scanner": "scanner-primary", "fingerprint": "e78b726f91e30848", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-466b860933a49595", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/games/GamePointsToast.tsx:11"}, "properties": {"repobilityId": "b65ead0eed96e914", "scanner": "scanner-primary", "fingerprint": "466b860933a49595", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27359ded59193624", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/games/GameStatusBadge.tsx:3"}, "properties": {"repobilityId": "461b4d838ce11ec6", "scanner": "scanner-primary", "fingerprint": "27359ded59193624", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6983f0151a71b13f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/games/MetaProgressionStrip.tsx:3"}, "properties": {"repobilityId": "048a2f0527901da2", "scanner": "scanner-primary", "fingerprint": "6983f0151a71b13f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30bc9caeb6348460", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/games/TimeAttackInfoModal.tsx:3"}, "properties": {"repobilityId": "0f8cc152adafefb7", "scanner": "scanner-primary", "fingerprint": "30bc9caeb6348460", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9043458547c9a063", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/games/PostGameResultModal.tsx:3"}, "properties": {"repobilityId": "9aa72be33cf0da2f", "scanner": "scanner-primary", "fingerprint": "9043458547c9a063", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65a98aee6853d042", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/games/StreakAtRiskBanner.tsx:3"}, "properties": {"repobilityId": "0254eb6bdc6b84c0", "scanner": "scanner-primary", "fingerprint": "65a98aee6853d042", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9789289545861153", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/placa/PlacaRowV3.tsx:13"}, "properties": {"repobilityId": "ba0e5af9a3d39a36", "scanner": "scanner-primary", "fingerprint": "9789289545861153", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ce2a6b1841694a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/placa/PlacaCardV4.tsx:10"}, "properties": {"repobilityId": "6534c1b79d07e178", "scanner": "scanner-primary", "fingerprint": "4ce2a6b1841694a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e485ba07a149b17", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/placa/adapter.ts:6"}, "properties": {"repobilityId": "400cf8c43c4a229b", "scanner": "scanner-primary", "fingerprint": "7e485ba07a149b17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7bf4febe15ec3f4", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/placa/PlacaCard.tsx:11"}, "properties": {"repobilityId": "adeb562f00515291", "scanner": "scanner-primary", "fingerprint": "c7bf4febe15ec3f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f56fc126be8cd5e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/placa/PlacaCardV2.tsx:6"}, "properties": {"repobilityId": "4bc2ab49ac0651bb", "scanner": "scanner-primary", "fingerprint": "f56fc126be8cd5e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31b1345873e7a734", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/components/placa/PlacaCardV3.tsx:6"}, "properties": {"repobilityId": "50403df912199dd3", "scanner": "scanner-primary", "fingerprint": "31b1345873e7a734", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-227f6442650be6fd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/placa/PlacaWardrobe.tsx:6"}, "properties": {"repobilityId": "370971549cc6c3af", "scanner": "scanner-primary", "fingerprint": "227f6442650be6fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1299417e5dfb3d8f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/placa/PlacaWardrobe.tsx:132"}, "properties": {"repobilityId": "f5d1acd9ea18166c", "scanner": "scanner-primary", "fingerprint": "1299417e5dfb3d8f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48b94f7f78db60cc", "level": "note", "message": {"text": "Legacy-named symbol `user_equipment_v2` in src/components/placa/types.ts:8"}, "properties": {"repobilityId": "f9df6c3c257c9e8c", "scanner": "scanner-primary", "fingerprint": "48b94f7f78db60cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3e90876e45cd31b7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/placa/types.ts:4"}, "properties": {"repobilityId": "8cf632f4a6561604", "scanner": "scanner-primary", "fingerprint": "3e90876e45cd31b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25c9d54bb500facd", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/components/badges/BadgeUnlockModal.tsx:7"}, "properties": {"repobilityId": "b1a5ef5c3320f083", "scanner": "scanner-primary", "fingerprint": "25c9d54bb500facd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba9a6db437c13f94", "level": "note", "message": {"text": "Legacy-named symbol `taka_seen_badges_v1` in src/components/badges/BadgeUnlockProvider.tsx:26"}, "properties": {"repobilityId": "b9d79b2eff1059c8", "scanner": "scanner-primary", "fingerprint": "ba9a6db437c13f94", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1b3f377b537a5a51", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/components/badges/BadgeUnlockProvider.tsx:7"}, "properties": {"repobilityId": "03cd22283566f34d", "scanner": "scanner-primary", "fingerprint": "1b3f377b537a5a51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-591001d56b6b97af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rankings/FavoriteToggle.tsx:51"}, "properties": {"repobilityId": "107dd68680e8c7df", "scanner": "scanner-primary", "fingerprint": "591001d56b6b97af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca21e07e28fd55be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rankings/PredictWidget.tsx:34"}, "properties": {"repobilityId": "86947466770aca55", "scanner": "scanner-primary", "fingerprint": "ca21e07e28fd55be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ae8fdf193234fe9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/robots.ts:34"}, "properties": {"repobilityId": "f86a4ad129127949", "scanner": "scanner-primary", "fingerprint": "5ae8fdf193234fe9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92d75c5648b29bb0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/sitemap.ts:34"}, "properties": {"repobilityId": "a642c59110d47ccd", "scanner": "scanner-primary", "fingerprint": "92d75c5648b29bb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f515983d6fcb6289", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/page.tsx:74"}, "properties": {"repobilityId": "341e86041dbfe3e7", "scanner": "scanner-primary", "fingerprint": "f515983d6fcb6289", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46ca1898ce6f1192", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/layout.tsx:112"}, "properties": {"repobilityId": "f1a78c545b478800", "scanner": "scanner-primary", "fingerprint": "46ca1898ce6f1192", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b36305c28a12015", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/[sport]/page.tsx:19"}, "properties": {"repobilityId": "d2b24dd31cc56647", "scanner": "scanner-primary", "fingerprint": "3b36305c28a12015", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a21f75ac324e7734", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[sport]/page.tsx:104"}, "properties": {"repobilityId": "3bc6e9e64845b0e1", "scanner": "scanner-primary", "fingerprint": "a21f75ac324e7734", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb3f473c043d39e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/match/[ref]/route.ts:28"}, "properties": {"repobilityId": "b57d648f5e4eda5c", "scanner": "scanner-primary", "fingerprint": "cb3f473c043d39e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ec6d1eac2a358b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/games/plays/route.ts:8"}, "properties": {"repobilityId": "8ea34529489af713", "scanner": "scanner-primary", "fingerprint": "4ec6d1eac2a358b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17904c4a17a5a69d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/games/streak/route.ts:38"}, "properties": {"repobilityId": "b8fb38a1b020165d", "scanner": "scanner-primary", "fingerprint": "17904c4a17a5a69d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-719e3be33836017c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/push/reminders/route.ts:1"}, "properties": {"repobilityId": "1d0f01613cd46e0d", "scanner": "scanner-primary", "fingerprint": "719e3be33836017c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a775c6fd44799a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/placa/[userId]/route.ts:8"}, "properties": {"repobilityId": "15ee067b3c1589b1", "scanner": "scanner-primary", "fingerprint": "3a775c6fd44799a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d964e36167620204", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/events/live/route.ts:47"}, "properties": {"repobilityId": "9083c9494ae5eaf1", "scanner": "scanner-primary", "fingerprint": "d964e36167620204", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec43d288b3f20d23", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/events/upcoming/route.ts:159"}, "properties": {"repobilityId": "32e3b7ef9a9003b7", "scanner": "scanner-primary", "fingerprint": "ec43d288b3f20d23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b88a17d0b1d36a71", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/events/upcoming/route.ts:165"}, "properties": {"repobilityId": "89bb55d9dc1319ee", "scanner": "scanner-primary", "fingerprint": "b88a17d0b1d36a71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2313733a93269479", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/sanity-webhook/route.ts:5"}, "properties": {"repobilityId": "572ef5ed895ed6e0", "scanner": "scanner-primary", "fingerprint": "2313733a93269479", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-117e6cdaffbce336", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/games/content/route.ts:5"}, "properties": {"repobilityId": "c95755283859d33f", "scanner": "scanner-primary", "fingerprint": "117e6cdaffbce336", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26d76ecdda4b81ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/ranked/score/route.ts:8"}, "properties": {"repobilityId": "e1a69da5e428319b", "scanner": "scanner-primary", "fingerprint": "26d76ecdda4b81ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0cc9902111a41a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/ranked/close-week/route.ts:10"}, "properties": {"repobilityId": "f3d0d62df822c3f4", "scanner": "scanner-primary", "fingerprint": "f0cc9902111a41a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3846acd3bb2ca24", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/admin/badges/special/route.ts:6"}, "properties": {"repobilityId": "0a0144913468f9e3", "scanner": "scanner-primary", "fingerprint": "a3846acd3bb2ca24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68854596e5b2c630", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/admin/mundial/close/route.ts:3"}, "properties": {"repobilityId": "5927fb241cfdf90c", "scanner": "scanner-primary", "fingerprint": "68854596e5b2c630", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ee3bed94059af21", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/ranked/predictions/route.ts:1"}, "properties": {"repobilityId": "8bffa6c2bf71d17b", "scanner": "scanner-primary", "fingerprint": "7ee3bed94059af21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7298659373a49b94", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/ranked/me/stats/route.ts:25"}, "properties": {"repobilityId": "087a865ad9427b75", "scanner": "scanner-primary", "fingerprint": "7298659373a49b94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ca88c27f6fc92ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/ranked/profile/[userId]/route.ts:5"}, "properties": {"repobilityId": "fd2885ea5d1f32de", "scanner": "scanner-primary", "fingerprint": "1ca88c27f6fc92ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bd94487a7bc9f0b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/ranked/mundial/live/route.ts:1"}, "properties": {"repobilityId": "a0f123a850cc9696", "scanner": "scanner-primary", "fingerprint": "5bd94487a7bc9f0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-128adff421d74707", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/settle-quiniela/route.ts:135"}, "properties": {"repobilityId": "13bfa0fd6d5573cd", "scanner": "scanner-primary", "fingerprint": "128adff421d74707", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3484d253ddd100a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/mundial-reminders/route.ts:4"}, "properties": {"repobilityId": "4a714156a277c19c", "scanner": "scanner-primary", "fingerprint": "3484d253ddd100a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01e3d0bc3733922e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/sync-mundial/route.ts:213"}, "properties": {"repobilityId": "5197c38bd4660884", "scanner": "scanner-primary", "fingerprint": "01e3d0bc3733922e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-596d77f44f1fd069", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/cron/sync-ufc/route.ts:11"}, "properties": {"repobilityId": "42bbb381b2d144d7", "scanner": "scanner-primary", "fingerprint": "596d77f44f1fd069", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5209c06b0d2d6a3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/cron/refresh-rankings/route.ts:3"}, "properties": {"repobilityId": "b0a54c4b4d0c0d85", "scanner": "scanner-primary", "fingerprint": "d5209c06b0d2d6a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48dbe421f3ccf8eb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/pipeline/status/route.ts:8"}, "properties": {"repobilityId": "23c50593f2c1c0f4", "scanner": "scanner-primary", "fingerprint": "48dbe421f3ccf8eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffead641ea734b2f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/account/delete/route.ts:4"}, "properties": {"repobilityId": "96784c52d351355c", "scanner": "scanner-primary", "fingerprint": "ffead641ea734b2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-742137a1b5332fc8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/og/mundial-stats/route.tsx:4"}, "properties": {"repobilityId": "42d2ac16efac72f6", "scanner": "scanner-primary", "fingerprint": "742137a1b5332fc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a8b29bed64ce6fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/articles/route.ts:101"}, "properties": {"repobilityId": "bdf36239bdcfb7b1", "scanner": "scanner-primary", "fingerprint": "5a8b29bed64ce6fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fcaf8ecde8e65fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/instagram/callback/route.ts:11"}, "properties": {"repobilityId": "02a34193660d9a4f", "scanner": "scanner-primary", "fingerprint": "0fcaf8ecde8e65fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5a82d845b9c10b24", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/rankings/override/route.ts:5"}, "properties": {"repobilityId": "76786834617c30e2", "scanner": "scanner-primary", "fingerprint": "5a82d845b9c10b24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80c12b542aaa014e", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/app/api/rankings/ingest/route.ts:10"}, "properties": {"repobilityId": "1a336520b0178102", "scanner": "scanner-primary", "fingerprint": "80c12b542aaa014e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06c2be0a51ed8c27", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/rankings/audit/route.ts:1"}, "properties": {"repobilityId": "86681b3d059ee2cd", "scanner": "scanner-primary", "fingerprint": "06c2be0a51ed8c27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52ce1dc197f86132", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/stats/standings/route.ts:80"}, "properties": {"repobilityId": "1357f72d383d3f60", "scanner": "scanner-primary", "fingerprint": "52ce1dc197f86132", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab22d9dca468a899", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/route.ts:14"}, "properties": {"repobilityId": "383c535b13944fa4", "scanner": "scanner-primary", "fingerprint": "ab22d9dca468a899", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d14de21f15331a6a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/quiniela/score/route.ts:10"}, "properties": {"repobilityId": "794b5f1893b0e857", "scanner": "scanner-primary", "fingerprint": "d14de21f15331a6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c5842a06ab8430e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/quiniela/notify-settlement/route.ts:94"}, "properties": {"repobilityId": "83df93d4073406e6", "scanner": "scanner-primary", "fingerprint": "0c5842a06ab8430e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7755bb00f8e575d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/quiniela/notify/route.ts:51"}, "properties": {"repobilityId": "df6c274d71b427dd", "scanner": "scanner-primary", "fingerprint": "e7755bb00f8e575d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ddd5f2390fdacf78", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/health/route.ts:6"}, "properties": {"repobilityId": "020d373ae989c625", "scanner": "scanner-primary", "fingerprint": "ddd5f2390fdacf78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-313902126f755b5a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/quiniela/challenges/route.ts:15"}, "properties": {"repobilityId": "67e97cd69ebfc191", "scanner": "scanner-primary", "fingerprint": "313902126f755b5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05b4e5be685fa46b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/challenges/claim/route.ts:6"}, "properties": {"repobilityId": "deac6ed4720e057d", "scanner": "scanner-primary", "fingerprint": "05b4e5be685fa46b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f0b4f173b668d14", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/quiniela/leaderboard/route.ts:10"}, "properties": {"repobilityId": "cc646ceb2348c126", "scanner": "scanner-primary", "fingerprint": "3f0b4f173b668d14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b94f14895fef5eb7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/quiniela/status/route.ts:154"}, "properties": {"repobilityId": "583f5a12dc61c314", "scanner": "scanner-primary", "fingerprint": "b94f14895fef5eb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-898ef24acf10ba26", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/me/route.ts:3"}, "properties": {"repobilityId": "82565e35d461f31a", "scanner": "scanner-primary", "fingerprint": "898ef24acf10ba26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ae7f9c23159726d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/me/exact-stats/route.ts:3"}, "properties": {"repobilityId": "860900e29d62fd06", "scanner": "scanner-primary", "fingerprint": "4ae7f9c23159726d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36af9937a0ec79b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/me/equip/route.ts:15"}, "properties": {"repobilityId": "ea489cc48917a788", "scanner": "scanner-primary", "fingerprint": "36af9937a0ec79b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2e133e8d4996bf4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/leagues/score/route.ts:7"}, "properties": {"repobilityId": "4e8b1bd26a35e97f", "scanner": "scanner-primary", "fingerprint": "b2e133e8d4996bf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad213171bb1826d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/quiniela/leagues/[id]/settings/route.ts:6"}, "properties": {"repobilityId": "ec5fc6ef4e18c011", "scanner": "scanner-primary", "fingerprint": "ad213171bb1826d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-581a7e9593415b99", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiniela/leagues/auto-create/route.ts:3"}, "properties": {"repobilityId": "0983bd0b2b1520a3", "scanner": "scanner-primary", "fingerprint": "581a7e9593415b99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c6800d467c1e7de", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/api/quiniela/season/resolve/route.ts:11"}, "properties": {"repobilityId": "d67aa3d34cebf4c1", "scanner": "scanner-primary", "fingerprint": "8c6800d467c1e7de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd5f50c02b546b46", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/quiniela/stats/route.ts:3"}, "properties": {"repobilityId": "94d60cc5c6872c8f", "scanner": "scanner-primary", "fingerprint": "bd5f50c02b546b46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74d0a13854d25953", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/comments/[id]/report/route.ts:1"}, "properties": {"repobilityId": "258ed007572e85f8", "scanner": "scanner-primary", "fingerprint": "74d0a13854d25953", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b460dd131ef627a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/sopa-cracks/page.tsx:284"}, "properties": {"repobilityId": "5de9234ca9e29624", "scanner": "scanner-primary", "fingerprint": "b460dd131ef627a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d581f2c0f399cc3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sopa-cracks/page.tsx:214"}, "properties": {"repobilityId": "25097d70125f1545", "scanner": "scanner-primary", "fingerprint": "3d581f2c0f399cc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6164c5510eefdef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/games/GamesAdminClient.tsx:56"}, "properties": {"repobilityId": "e7b3d124a8e28e76", "scanner": "scanner-primary", "fingerprint": "b6164c5510eefdef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7d78600d0f78517", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/rankings/RankingsAdmin.tsx:107"}, "properties": {"repobilityId": "3e3f9c55455d46ea", "scanner": "scanner-primary", "fingerprint": "c7d78600d0f78517", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e44dada05eec675", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/crackquiz/page.tsx:830"}, "properties": {"repobilityId": "a9d94e18ef526816", "scanner": "scanner-primary", "fingerprint": "4e44dada05eec675", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d036066836f1937e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/ufc/EventHero.tsx:5"}, "properties": {"repobilityId": "5d22f59ec6c0b3dd", "scanner": "scanner-primary", "fingerprint": "d036066836f1937e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5aca5d432838cf84", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/reels/ReelsClient.tsx:3"}, "properties": {"repobilityId": "c566f6df853385be", "scanner": "scanner-primary", "fingerprint": "5aca5d432838cf84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7ff4bbeefd578b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/mionce/page.tsx:895"}, "properties": {"repobilityId": "01fb4fb609dcfdcc", "scanner": "scanner-primary", "fingerprint": "f7ff4bbeefd578b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8926d594474d6ea", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/calendario/page.tsx:84"}, "properties": {"repobilityId": "87daca2edc6a0aea", "scanner": "scanner-primary", "fingerprint": "b8926d594474d6ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d0c8f9a5f51cfd2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/calendario/page.tsx:37"}, "properties": {"repobilityId": "0db8c2524b6e16dc", "scanner": "scanner-primary", "fingerprint": "2d0c8f9a5f51cfd2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8423990c5b1e278", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/calendario/[slug]/page.tsx:125"}, "properties": {"repobilityId": "9f7cefbe0c7b5528", "scanner": "scanner-primary", "fingerprint": "d8423990c5b1e278", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40628fe38dc864ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/calendario/[slug]/page.tsx:36"}, "properties": {"repobilityId": "902969abdbf92fa0", "scanner": "scanner-primary", "fingerprint": "40628fe38dc864ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d319ade2823ef496", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/quiniela/components/BadgesModal.tsx:16"}, "properties": {"repobilityId": "d864d83ce05cb2af", "scanner": "scanner-primary", "fingerprint": "d319ade2823ef496", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68f6ad4d43a7dd9d", "level": "note", "message": {"text": "Legacy-named symbol `ts_quiniela_mundial_welcomed_v1` in src/app/quiniela/components/MundialWelcomeModal.tsx:24"}, "properties": {"repobilityId": "9be0858ebe6a7e23", "scanner": "scanner-primary", "fingerprint": "68f6ad4d43a7dd9d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a5039caa785bb963", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/quiniela/components/MundialWelcomeModal.tsx:15"}, "properties": {"repobilityId": "33ce476ac3aae083", "scanner": "scanner-primary", "fingerprint": "a5039caa785bb963", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba8d1a2b3f2b367b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/MundialWelcomeModal.tsx:56"}, "properties": {"repobilityId": "1873c231802a524f", "scanner": "scanner-primary", "fingerprint": "ba8d1a2b3f2b367b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7de3aeeb702bec35", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/quiniela/components/match/MatchCard.tsx:312"}, "properties": {"repobilityId": "c59c2e661bfe4f4b", "scanner": "scanner-primary", "fingerprint": "7de3aeeb702bec35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c521efd5a560c3fb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/quiniela/components/panels/HitosPanel.tsx:11"}, "properties": {"repobilityId": "29e59053ee46da1b", "scanner": "scanner-primary", "fingerprint": "c521efd5a560c3fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9375723e2ac5a40f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/panels/HitosPanel.tsx:87"}, "properties": {"repobilityId": "e306dee9835fc384", "scanner": "scanner-primary", "fingerprint": "9375723e2ac5a40f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85644771343c9e4a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/leagues/LeagueExpanded.tsx:36"}, "properties": {"repobilityId": "b6eb33f310cd8a22", "scanner": "scanner-primary", "fingerprint": "85644771343c9e4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6500fd0387f1718c", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/quiniela/components/picks/StickyBetslip.tsx:3"}, "properties": {"repobilityId": "4072157baba38919", "scanner": "scanner-primary", "fingerprint": "6500fd0387f1718c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d33ecbbef005a2cb", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/quiniela/components/picks/PicksSummary.tsx:132"}, "properties": {"repobilityId": "d81d8770dd831009", "scanner": "scanner-primary", "fingerprint": "d33ecbbef005a2cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76c99f1a853cda4a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/components/picks/PicksSummary.tsx:60"}, "properties": {"repobilityId": "2e38f76253c8108f", "scanner": "scanner-primary", "fingerprint": "76c99f1a853cda4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d99f2623351982b1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/quiniela/components/picks/PicksForm.tsx:362"}, "properties": {"repobilityId": "b2dece213e6f0373", "scanner": "scanner-primary", "fingerprint": "d99f2623351982b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3122e9a71b4905a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/quiniela/lib/hooks.ts:38"}, "properties": {"repobilityId": "8960ce640d3c79fb", "scanner": "scanner-primary", "fingerprint": "b3122e9a71b4905a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bff9892066871f62", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/quiniela/lib/helpers.ts:7"}, "properties": {"repobilityId": "3c94c55e7b64d6c6", "scanner": "scanner-primary", "fingerprint": "bff9892066871f62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1b0f3b37389b2f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/quiniela/lib/constants.ts:26"}, "properties": {"repobilityId": "d25036a5518ed03b", "scanner": "scanner-primary", "fingerprint": "d1b0f3b37389b2f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33f8f429f5ca7c30", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/partido/[ref]/LiveRefresh.tsx:9"}, "properties": {"repobilityId": "de9d7869ff4c14e5", "scanner": "scanner-primary", "fingerprint": "33f8f429f5ca7c30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce3948056a49427a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/partido/[ref]/page.tsx:1759"}, "properties": {"repobilityId": "bfbc7b9684efd519", "scanner": "scanner-primary", "fingerprint": "ce3948056a49427a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89828fbeeffe17d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/partido/[ref]/ScoreFlip.tsx:13"}, "properties": {"repobilityId": "39f29f3367ad2aba", "scanner": "scanner-primary", "fingerprint": "89828fbeeffe17d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a271dccbaad25fea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/(public)/layout.tsx:4"}, "properties": {"repobilityId": "5eb06c8bad616b5c", "scanner": "scanner-primary", "fingerprint": "a271dccbaad25fea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-875c0863a3b99330", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/(public)/estadisticas/StatsView.tsx:9"}, "properties": {"repobilityId": "0ffa574bdcd84460", "scanner": "scanner-primary", "fingerprint": "875c0863a3b99330", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fcd0030c6755044", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/estadisticas/page.tsx:3"}, "properties": {"repobilityId": "406d407262c8dfd5", "scanner": "scanner-primary", "fingerprint": "7fcd0030c6755044", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f568e84b2c14ce04", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/(public)/estadisticas/EstadisticasClient.tsx:14"}, "properties": {"repobilityId": "1273d183ca85a2a8", "scanner": "scanner-primary", "fingerprint": "f568e84b2c14ce04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dda2f5a739afb22", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/estadisticas/[sport]/page.tsx:6"}, "properties": {"repobilityId": "2989978a4acc1910", "scanner": "scanner-primary", "fingerprint": "3dda2f5a739afb22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96250894831e849e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/perfil/page.tsx:185"}, "properties": {"repobilityId": "08b5dda10f33ece5", "scanner": "scanner-primary", "fingerprint": "96250894831e849e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c1509dcd6636f5a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/(public)/perfil/[userId]/page.tsx:3"}, "properties": {"repobilityId": "1c99d38b825a4dbf", "scanner": "scanner-primary", "fingerprint": "2c1509dcd6636f5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28cec1a4ec84065b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/juegos/page.tsx:1"}, "properties": {"repobilityId": "1fabf252d2b7e1c6", "scanner": "scanner-primary", "fingerprint": "28cec1a4ec84065b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da5a2e3a011044bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/evento/[id]/page.tsx:13"}, "properties": {"repobilityId": "6a789ad4d9d06f7f", "scanner": "scanner-primary", "fingerprint": "da5a2e3a011044bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ce3303878d90284", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/noticias/page.tsx:27"}, "properties": {"repobilityId": "84b83db0c703cb21", "scanner": "scanner-primary", "fingerprint": "9ce3303878d90284", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db31df15426f8e0e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/noticias/page.tsx:33"}, "properties": {"repobilityId": "3a723e2578d412ee", "scanner": "scanner-primary", "fingerprint": "db31df15426f8e0e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e614f6fa892f0e0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/noticias/[slug]/page.tsx:619"}, "properties": {"repobilityId": "68a0343ae10f2c9f", "scanner": "scanner-primary", "fingerprint": "e614f6fa892f0e0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5fceba552ff4a2e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/badges/page.tsx:3"}, "properties": {"repobilityId": "6e9e426c12bea7cf", "scanner": "scanner-primary", "fingerprint": "f5fceba552ff4a2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ada8d6c0562bec57", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/badges/page.tsx:61"}, "properties": {"repobilityId": "0a0e3b37f811f08d", "scanner": "scanner-primary", "fingerprint": "ada8d6c0562bec57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f688bb159b91f21c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/newsletter/baja/page.tsx:1"}, "properties": {"repobilityId": "8f98a7c61d7b6b2a", "scanner": "scanner-primary", "fingerprint": "f688bb159b91f21c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afcd90169088f210", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/mundial/MundialClient.tsx:294"}, "properties": {"repobilityId": "6a3bd837e0ef31ba", "scanner": "scanner-primary", "fingerprint": "afcd90169088f210", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc97b9e6bc3aee57", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/mundial/MundialClient.tsx:1106"}, "properties": {"repobilityId": "2c8c9a35dda6addc", "scanner": "scanner-primary", "fingerprint": "cc97b9e6bc3aee57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aafd4835ee0e0a95", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/predicciones/PrivadasClient.tsx:588"}, "properties": {"repobilityId": "a133c3b8e972533e", "scanner": "scanner-primary", "fingerprint": "aafd4835ee0e0a95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c82e64566281a0c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(public)/predicciones/CreadoresClient.tsx:6"}, "properties": {"repobilityId": "99e51b178036b4b5", "scanner": "scanner-primary", "fingerprint": "c82e64566281a0c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-595cf9c01049dc89", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/predicciones/CreadoresClient.tsx:74"}, "properties": {"repobilityId": "8f871197fc2ac172", "scanner": "scanner-primary", "fingerprint": "595cf9c01049dc89", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9aa6db57b9265497", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/(public)/rankings/[id]/page.tsx:53"}, "properties": {"repobilityId": "199901c1e7a32d6e", "scanner": "scanner-primary", "fingerprint": "9aa6db57b9265497", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e4c8596dccc52e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/game-feedback.ts:4"}, "properties": {"repobilityId": "dfc7106aa2dd989a", "scanner": "scanner-primary", "fingerprint": "4e4c8596dccc52e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b84b982060a1591e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/badges.ts:4"}, "properties": {"repobilityId": "a812ffa665d08123", "scanner": "scanner-primary", "fingerprint": "b84b982060a1591e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f79229b754cb36f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/quiniela.ts:34"}, "properties": {"repobilityId": "3f273403c44b1751", "scanner": "scanner-primary", "fingerprint": "f79229b754cb36f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cb79527863ddaee", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/teams-catalog.ts:1"}, "properties": {"repobilityId": "79f259fa5787c3a1", "scanner": "scanner-primary", "fingerprint": "9cb79527863ddaee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adf0f436312d5273", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/rankings-data.ts:173"}, "properties": {"repobilityId": "8bfdce6d790e0756", "scanner": "scanner-primary", "fingerprint": "adf0f436312d5273", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bedf8ef78fbe7ce", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/taka-time.ts:1"}, "properties": {"repobilityId": "cd25f2ef26029df9", "scanner": "scanner-primary", "fingerprint": "0bedf8ef78fbe7ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f1041003205f4c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/takagrid-puzzles.test.ts:8"}, "properties": {"repobilityId": "f2f60b985fa0cdf4", "scanner": "scanner-primary", "fingerprint": "6f1041003205f4c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b98c17bc649b7419", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/csrf.ts:3"}, "properties": {"repobilityId": "d2ee63350e98d41f", "scanner": "scanner-primary", "fingerprint": "b98c17bc649b7419", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-318e50268e9944fa", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/push-helper.ts:1"}, "properties": {"repobilityId": "7cc149775505de2d", "scanner": "scanner-primary", "fingerprint": "318e50268e9944fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a92cbb383f89f93c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/featured-goalscorer.ts:5"}, "properties": {"repobilityId": "62a9e11c1ec6e398", "scanner": "scanner-primary", "fingerprint": "a92cbb383f89f93c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a331551bf4749fa", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/badge-awards.ts:4"}, "properties": {"repobilityId": "daec74fbac758f2e", "scanner": "scanner-primary", "fingerprint": "5a331551bf4749fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b00b2cefa7246eee", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/games-store.ts:3"}, "properties": {"repobilityId": "6e1aeb6d2f71cd08", "scanner": "scanner-primary", "fingerprint": "b00b2cefa7246eee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-728c6a6de2f2e3b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/public-id.ts:3"}, "properties": {"repobilityId": "c03a89cef57fc292", "scanner": "scanner-primary", "fingerprint": "728c6a6de2f2e3b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1105428b3c07bb4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/article-autolink.ts:20"}, "properties": {"repobilityId": "6d4ba49ec74396b4", "scanner": "scanner-primary", "fingerprint": "e1105428b3c07bb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2eb129fb49aa9d14", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/lib/mundial-closure.ts:9"}, "properties": {"repobilityId": "f9385753f127a097", "scanner": "scanner-primary", "fingerprint": "2eb129fb49aa9d14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dae183fe631d8c91", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/special-badges.ts:157"}, "properties": {"repobilityId": "825ba879faa02683", "scanner": "scanner-primary", "fingerprint": "dae183fe631d8c91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1a52dcd89793a96", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/calendar-competitions.ts:283"}, "properties": {"repobilityId": "aac8247cae4db31f", "scanner": "scanner-primary", "fingerprint": "c1a52dcd89793a96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ad0805073ce9f4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/mionce-challenges.ts:3"}, "properties": {"repobilityId": "de5d906d5f0e949e", "scanner": "scanner-primary", "fingerprint": "3ad0805073ce9f4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-877ae73a2128251f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/special-badges.test.ts:40"}, "properties": {"repobilityId": "7da2728a61a6bf67", "scanner": "scanner-primary", "fingerprint": "877ae73a2128251f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f771d1f3c9309680", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/equipment.ts:4"}, "properties": {"repobilityId": "388581fa32cbf7f4", "scanner": "scanner-primary", "fingerprint": "f771d1f3c9309680", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fb4eba487dda985", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/match-estimate.ts:1"}, "properties": {"repobilityId": "dbda8993839b1bf9", "scanner": "scanner-primary", "fingerprint": "1fb4eba487dda985", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aadd0d900ae9c04e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/mionce-formations.ts:1"}, "properties": {"repobilityId": "af480a0c96b1c237", "scanner": "scanner-primary", "fingerprint": "aadd0d900ae9c04e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5cb6e26e8871c9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/internal-odds.ts:4"}, "properties": {"repobilityId": "b668f5b20688d61e", "scanner": "scanner-primary", "fingerprint": "f5cb6e26e8871c9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ae715e5df4e4883", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/cosmetics.ts:4"}, "properties": {"repobilityId": "39f92e51bbc17cc6", "scanner": "scanner-primary", "fingerprint": "5ae715e5df4e4883", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fdc15c49ff7a1c4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/game-points.ts:9"}, "properties": {"repobilityId": "2522e02ec12e0834", "scanner": "scanner-primary", "fingerprint": "fdc15c49ff7a1c4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1daf1b8361f0905", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/image-url.ts:1"}, "properties": {"repobilityId": "71a7e3134313982f", "scanner": "scanner-primary", "fingerprint": "d1daf1b8361f0905", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9ee69d5fac612cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/quiniela.test.ts:4"}, "properties": {"repobilityId": "d229537331c34f3a", "scanner": "scanner-primary", "fingerprint": "b9ee69d5fac612cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2477ecf568e1cccd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/reels-feed.ts:6"}, "properties": {"repobilityId": "c1eaae17f6e320d4", "scanner": "scanner-primary", "fingerprint": "2477ecf568e1cccd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d0e7cbe0740b1d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/team-strengths.ts:9"}, "properties": {"repobilityId": "0ab208abe91a2e40", "scanner": "scanner-primary", "fingerprint": "0d0e7cbe0740b1d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cb3777032b23daf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/push-client.ts:71"}, "properties": {"repobilityId": "a7c61c544012024f", "scanner": "scanner-primary", "fingerprint": "7cb3777032b23daf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ada03f3e63836bef", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/levels.ts:4"}, "properties": {"repobilityId": "dc780f208e2e48dc", "scanner": "scanner-primary", "fingerprint": "ada03f3e63836bef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76a713ca2887ea43", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/games-periods.ts:3"}, "properties": {"repobilityId": "d20c0ab12024e2da", "scanner": "scanner-primary", "fingerprint": "76a713ca2887ea43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4124e59d7c0f41cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/mionce-reference-once.ts:3"}, "properties": {"repobilityId": "d8cb7a11177891cd", "scanner": "scanner-primary", "fingerprint": "4124e59d7c0f41cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3a7b8d23b8af833", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/rankings.ts:23"}, "properties": {"repobilityId": "e7acb79ab8ba29b0", "scanner": "scanner-primary", "fingerprint": "a3a7b8d23b8af833", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8dd6cfc00f93c911", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/elo-scraper.ts:1"}, "properties": {"repobilityId": "746db4e4be37b645", "scanner": "scanner-primary", "fingerprint": "8dd6cfc00f93c911", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96fa5121c40195b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/game-points.test.ts:4"}, "properties": {"repobilityId": "61e2a17ccfdb3d3c", "scanner": "scanner-primary", "fingerprint": "96fa5121c40195b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37a74a7499216a55", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/stats-editorial.ts:1"}, "properties": {"repobilityId": "29438d979d5094d2", "scanner": "scanner-primary", "fingerprint": "37a74a7499216a55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fb1f1c92a83fd82", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/league-zones.ts:36"}, "properties": {"repobilityId": "1ed79d3c16cf04d2", "scanner": "scanner-primary", "fingerprint": "4fb1f1c92a83fd82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0096056eba9c7a9c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/sopa-puzzles.ts:4"}, "properties": {"repobilityId": "083c272ec3ce64ff", "scanner": "scanner-primary", "fingerprint": "0096056eba9c7a9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c37b3c7e386c6d3b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/nation-names.ts:1"}, "properties": {"repobilityId": "9d7d9c258aa7b380", "scanner": "scanner-primary", "fingerprint": "c37b3c7e386c6d3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a5878de8c53e148", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/instagram.ts:86"}, "properties": {"repobilityId": "e4496e93689c3606", "scanner": "scanner-primary", "fingerprint": "7a5878de8c53e148", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bab22d1919056a45", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/porra-status-client.ts:1"}, "properties": {"repobilityId": "9ee93aaebdef762b", "scanner": "scanner-primary", "fingerprint": "bab22d1919056a45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3abbd2d4b72fc29a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/players-catalog.ts:1"}, "properties": {"repobilityId": "0da216ba310378f9", "scanner": "scanner-primary", "fingerprint": "3abbd2d4b72fc29a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd42c6d3ceec095a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/past-events.ts:170"}, "properties": {"repobilityId": "740ae2ee9e474c8c", "scanner": "scanner-primary", "fingerprint": "dd42c6d3ceec095a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b777bea3a543dbd7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/mionce-boards.test.ts:9"}, "properties": {"repobilityId": "2ddec4ff1cf11e94", "scanner": "scanner-primary", "fingerprint": "b777bea3a543dbd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9765ca077e0f6418", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/espn-standings.ts:1"}, "properties": {"repobilityId": "5883b3a4bf0959bd", "scanner": "scanner-primary", "fingerprint": "9765ca077e0f6418", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a43c3b47b65190e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/competitions.ts:289"}, "properties": {"repobilityId": "e6ad4e19b5f8d241", "scanner": "scanner-primary", "fingerprint": "4a43c3b47b65190e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-528f6f43b3a5dd52", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/sanity.ts:172"}, "properties": {"repobilityId": "6db90f85eb64fe5f", "scanner": "scanner-primary", "fingerprint": "528f6f43b3a5dd52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2adcff82197810e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/porra-challenge.ts:1"}, "properties": {"repobilityId": "3c1084411c41255b", "scanner": "scanner-primary", "fingerprint": "2adcff82197810e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffb600e662f05a70", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/stats-schemas.ts:1"}, "properties": {"repobilityId": "f4863ecb409fed75", "scanner": "scanner-primary", "fingerprint": "ffb600e662f05a70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01b86f71c10557e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/og/placa-og.tsx:1"}, "properties": {"repobilityId": "83f49d0f9475dfe3", "scanner": "scanner-primary", "fingerprint": "01b86f71c10557e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-439dbf3f0d084eb7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useMyPlayedGames.ts:23"}, "properties": {"repobilityId": "459963709049aaf2", "scanner": "scanner-primary", "fingerprint": "439dbf3f0d084eb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8e6a1c0f9187801", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useDeviceCapability.ts:9"}, "properties": {"repobilityId": "02fb0347b38cf9e2", "scanner": "scanner-primary", "fingerprint": "d8e6a1c0f9187801", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3482f7e5dd70cd1a", "level": "note", "message": {"text": "6 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "1da70f25aa46f6e9", "scanner": "scanner-primary", "fingerprint": "3482f7e5dd70cd1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}