{"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: rjayerbe1/nueva-web-meisa", "shortDescription": {"text": "Foundry mined unresolved feedback: rjayerbe1/nueva-web-meisa"}, "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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#1\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 112\nEdges: 139\nNode types: {'pr_file': 100, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_o"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: rjayerbe1/nueva-web-meisa", "shortDescription": {"text": "Foundry mined blueprint gap alignment: rjayerbe1/nueva-web-meisa"}, "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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#1\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 112\nEdges: 139\nNode types: {'pr_file': 100, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'f"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: rjayerbe1/nueva-web-meisa", "shortDescription": {"text": "Foundry mined assumption checks: rjayerbe1/nueva-web-meisa"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: rjayerbe1/nueva-web-meisa#2\nRepo: rjayerbe1/nueva-web-meisa\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 13\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 3, 'api_or_backend': 2, 'ui_or_frontend': 4, 'security_or_auth': 1, 'dependency_or_build': 2, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: rjayerbe1/nueva-web-meisa", "shortDescription": {"text": "Foundry mined schema ui api mismatch: rjayerbe1/nueva-web-meisa"}, "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: weak_supervision_needs_review\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#2\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 27\nEdges: 53\nNode types: {'pr_file': 13, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_ou"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: rjayerbe1/nueva-web-meisa", "shortDescription": {"text": "Foundry mined bad chains: rjayerbe1/nueva-web-meisa"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa#1\nRepo: rjayerbe1/nueva-web-meisa\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: 100\nLabels: {'api_integration_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'docs_or_claims': 11, 'schema_or_data': 1, 'source_or_other': 88}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7dc6a944c97e17da\",\n    \"kind\": \"pull_request_body\",\n    \"label\""}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: rjayerbe1/nueva-web-meisa", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: rjayerbe1/nueva-web-meisa"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#2\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 27\nEdges: 53\nNode types: {'pr_file': 13, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'c"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "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-eca254201d6c6c70", "name": "Stray `console.log` in TS/JS \u2014 copy-all-ftp-images.ts:292", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 copy-all-ftp-images.ts:292"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c693ea996be2526a", "name": "Stray `console.log` in TS/JS \u2014 create-remaining-projects.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 create-remaining-projects.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0d0280f0cb196eb", "name": "Stray `console.log` in TS/JS \u2014 analizar-multi-anio.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analizar-multi-anio.js:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb3727e114ee7d92", "name": "Stray `console.log` in TS/JS \u2014 fix-image-urls.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-image-urls.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e646517f567232b3", "name": "Stray `console.log` in TS/JS \u2014 analyze-client-sectors.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analyze-client-sectors.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ccf9518f0e4ab20", "name": "Stray `console.log` in TS/JS \u2014 verify-all-logos.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verify-all-logos.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9a61f9ef3a951ee", "name": "Stray `console.log` in TS/JS \u2014 fix-failed-images.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-failed-images.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43a21fcbaa45448f", "name": "Stray `console.log` in TS/JS \u2014 enhanced-backup-system.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 enhanced-backup-system.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c22e24f13fefc4c4", "name": "Stray `console.log` in TS/JS \u2014 create-projects-fixed.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 create-projects-fixed.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37074578f18b6372", "name": "Stray `console.log` in TS/JS \u2014 clean-keep-only-real-projects.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clean-keep-only-real-projects.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0a6fcddd22579e8", "name": "Stray `console.log` in TS/JS \u2014 reassign-correct-images.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 reassign-correct-images.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37193c1e50b61d2f", "name": "Stray `console.log` in TS/JS \u2014 extract-real-project-images.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extract-real-project-images.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2cc5def53967f074", "name": "Stray `console.log` in TS/JS \u2014 create-backup-now.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 create-backup-now.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e53732c50560fdcc", "name": "Stray `console.log` in TS/JS \u2014 copy-selected-images.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 copy-selected-images.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d171eb415bd8e24", "name": "Stray `console.log` in TS/JS \u2014 generar-contenido-tecnico-servicios.ts:553", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 generar-contenido-tecnico-servicios.ts:553"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-160184b3ddcc7c3c", "name": "Stray `console.log` in TS/JS \u2014 map-ftp-project-images.ts:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 map-ftp-project-images.ts:210"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5658c3b6a1316532", "name": "Stray `console.log` in TS/JS \u2014 download-all-slider-images.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 download-all-slider-images.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-745537be66938ecc", "name": "Stray `console.log` in TS/JS \u2014 analyze-client-logos-formats.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analyze-client-logos-formats.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef467c6b3fa26fcd", "name": "Stray `console.log` in TS/JS \u2014 map-images-to-database.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 map-images-to-database.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa6ae1048cc91025", "name": "Stray `console.log` in TS/JS \u2014 corregir-todas-fechas-timezone.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 corregir-todas-fechas-timezone.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a23f56da82437fd8", "name": "Stray `console.log` in TS/JS \u2014 final-cleanup-projects.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 final-cleanup-projects.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a70bc5c51b492a7", "name": "Stray `console.log` in TS/JS \u2014 fix-logo-blanco.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-logo-blanco.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff6611002dfe019e", "name": "Stray `console.log` in TS/JS \u2014 restore-sena.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 restore-sena.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f2a5fa13dcad964", "name": "Stray `console.log` in TS/JS \u2014 verificar-fechas-timezone.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verificar-fechas-timezone.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24ad349750760dca", "name": "Stray `console.log` in TS/JS \u2014 update-service-statistics.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 update-service-statistics.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1e971e35f38907b", "name": "Stray `console.log` in TS/JS \u2014 download-default-images.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 download-default-images.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f06934e9fb2fa04", "name": "Stray `console.log` in TS/JS \u2014 review-and-clean-projects.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 review-and-clean-projects.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00168300bd6b1452", "name": "Stray `console.log` in TS/JS \u2014 verify-final-sectors.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verify-final-sectors.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a60a07b99e183f71", "name": "Stray `console.log` in TS/JS \u2014 check-service-new-fields.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-service-new-fields.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6296155aefecafb", "name": "Stray `console.log` in TS/JS \u2014 debug-backup.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 debug-backup.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9599a49ba3b87262", "name": "Stray `console.log` in TS/JS \u2014 complete-backup-now.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 complete-backup-now.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0516ca96fb7d796", "name": "Stray `console.log` in TS/JS \u2014 check-white-logos.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-white-logos.ts:94"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-356bcbabf5d3d1c4", "name": "Stray `console.log` in TS/JS \u2014 fix-conconcreto.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-conconcreto.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff544e8d323f9e3b", "name": "Stray `console.log` in TS/JS \u2014 capture-missing-images.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 capture-missing-images.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-08e3712a4656c702", "name": "Stray `console.log` in TS/JS \u2014 completar-gestion-proyectos.ts:174", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 completar-gestion-proyectos.ts:174"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d36b7d10fbe7e9d3", "name": "Stray `console.log` in TS/JS \u2014 extract-client-logos.js:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extract-client-logos.js:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-624a8831d8df601f", "name": "Stray `console.log` in TS/JS \u2014 final-project-count.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 final-project-count.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a43b1405ed9cbd2", "name": "Stray `console.log` in TS/JS \u2014 organize-ftp-images.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 organize-ftp-images.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00e43ca82050a502", "name": "Stray `console.log` in TS/JS \u2014 update-new-logos.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 update-new-logos.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34fcec30a66306ce", "name": "Stray `console.log` in TS/JS \u2014 restore-complete-backup.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 restore-complete-backup.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a02142e457921a0", "name": "Stray `console.log` in TS/JS \u2014 clean-and-download-images.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clean-and-download-images.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9ddf220b9a96477", "name": "Stray `console.log` in TS/JS \u2014 process-new-clients.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 process-new-clients.ts:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7bdb5125ac2431d", "name": "Stray `console.log` in TS/JS \u2014 select-best-images.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 select-best-images.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eeafc07fc59ad57b", "name": "Stray `console.log` in TS/JS \u2014 ver-proyectos-2025.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ver-proyectos-2025.js:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6aa7a1b08592f91f", "name": "Stray `console.log` in TS/JS \u2014 analyze-duplicate-projects.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analyze-duplicate-projects.ts:153"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa4b3af3856a629f", "name": "Stray `console.log` in TS/JS \u2014 check-project-images.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-project-images.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b82407e50152da7d", "name": "Stray `console.log` in TS/JS \u2014 analyze-duplicate-projects.js:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analyze-duplicate-projects.js:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ae80af7d491f7f4", "name": "Stray `console.log` in TS/JS \u2014 fix-logos-blancos.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-logos-blancos.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7d1c6d94a8ffcea", "name": "Stray `console.log` in TS/JS \u2014 organize-all-downloaded-images.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 organize-all-downloaded-images.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ecdeb084248b5ff", "name": "Stray `console.log` in TS/JS \u2014 comprehensive-ftp-analysis.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 comprehensive-ftp-analysis.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fec39136dc7730d8", "name": "Stray `console.log` in TS/JS \u2014 fix-client-logos.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-client-logos.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6380d7fb85afcfa3", "name": "Stray `console.log` in TS/JS \u2014 ver-distribucion-proporcional.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ver-distribucion-proporcional.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1af2a239a4bd1256", "name": "Stray `console.log` in TS/JS \u2014 analyze-historias-current-state.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analyze-historias-current-state.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acf290ed7cf03c77", "name": "Stray `console.log` in TS/JS \u2014 complete-historias-update.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 complete-historias-update.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0647302b15131099", "name": "Stray `console.log` in TS/JS \u2014 map-existing-images.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 map-existing-images.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-64ab0bdf18f0ef6f", "name": "Stray `console.log` in TS/JS \u2014 test-historias-compatibility.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-historias-compatibility.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d3a91cc895482c9", "name": "Stray `console.log` in TS/JS \u2014 create-edificios.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 create-edificios.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd7ddbc4d17bdda9", "name": "Stray `console.log` in TS/JS \u2014 convert-logos-to-webp.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convert-logos-to-webp.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ae5db016c81f30a", "name": "Stray `console.log` in TS/JS \u2014 apply-sector-corrections.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apply-sector-corrections.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-510fb6a9ff826311", "name": "Stray `console.log` in TS/JS \u2014 remove-exact-duplicates.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 remove-exact-duplicates.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-774a98d4e90d62e9", "name": "Stray `console.log` in TS/JS \u2014 clean-all-projects.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 clean-all-projects.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-efa97c83ee91a6ba", "name": "Stray `console.log` in TS/JS \u2014 download-client-logos.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 download-client-logos.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1bba8575a9f0206", "name": "Stray `console.log` in TS/JS \u2014 download-meisa-images.js:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 download-meisa-images.js:155"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-024daa1f15805d64", "name": "Stray `console.log` in TS/JS \u2014 download-service-images.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 download-service-images.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d0246186f05477b", "name": "Stray `console.log` in TS/JS \u2014 simple-backup.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 simple-backup.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11f6655095147983", "name": "Stray `console.log` in TS/JS \u2014 complete-missing-categories.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 complete-missing-categories.ts:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-260f4e84f4e90052", "name": "Stray `console.log` in TS/JS \u2014 verify-all-25-logos.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verify-all-25-logos.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9666b76db41d837b", "name": "Stray `console.log` in TS/JS \u2014 create-industria.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 create-industria.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2084113551703409", "name": "Stray `console.log` in TS/JS \u2014 fix-d1-logo.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-d1-logo.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c7234bb6c77c6e8", "name": "Stray `console.log` in TS/JS \u2014 fix-image-paths.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-image-paths.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-458c1af0eceee564", "name": "Stray `console.log` in TS/JS \u2014 update-historias-schema.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 update-historias-schema.ts:108"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb8f1dfa827b68d5", "name": "Stray `console.log` in TS/JS \u2014 update-client-logos.ts:238", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 update-client-logos.ts:238"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f4cc96017406ee0", "name": "Stray `console.log` in TS/JS \u2014 map-ftp-project-images.js:188", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 map-ftp-project-images.js:188"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ec183367715bb38", "name": "Stray `console.log` in TS/JS \u2014 analyze-servicios-completo.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 analyze-servicios-completo.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5cda98cb1d48ec34", "name": "Stray `console.log` in TS/JS \u2014 move-sura-to-salud.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 move-sura-to-salud.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42138c6ff0ff813d", "name": "Stray `console.log` in TS/JS \u2014 convert-remaining-logos.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convert-remaining-logos.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1a258081b060599", "name": "Stray `console.log` in TS/JS \u2014 remove-projects-without-images.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 remove-projects-without-images.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1ce2e66508498e8", "name": "Stray `console.log` in TS/JS \u2014 create-all-projects.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 create-all-projects.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e2c96f91a3362a5", "name": "Stray `console.log` in TS/JS \u2014 copy-project-images-from-ftp.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 copy-project-images-from-ftp.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec3cf94410a92c21", "name": "Stray `console.log` in TS/JS \u2014 download-all-meisa-images.js:304", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 download-all-meisa-images.js:304"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-145a89d8ef4644d1", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step2-map-proyectos.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step2-map-proyectos.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0bfa568872ad76b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/ver-beneficios.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ver-beneficios.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8dc0cee9eae9fbd9", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-clientes.ts:264", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-clientes.ts:264"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4ec64d65e8e3cd53", "name": "Stray `console.log` in TS/JS \u2014 scripts/clean-test-projects.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-test-projects.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d860d62c48017aa7", "name": "Stray `console.log` in TS/JS \u2014 scripts/corregir-proyectos-puentes.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/corregir-proyectos-puentes.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e67e64b0d016cd3", "name": "Stray `console.log` in TS/JS \u2014 scripts/formato-tres-parrafos.js:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/formato-tres-parrafos.js:58"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a311a5981143daf4", "name": "Stray `console.log` in TS/JS \u2014 scripts/investigate-puente-nolasco.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-puente-nolasco.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b47724cb51dd5b71", "name": "Stray `console.log` in TS/JS \u2014 scripts/verificar-especialidades.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-especialidades.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72f2e9f286d5cb78", "name": "Stray `console.log` in TS/JS \u2014 scripts/clasificar-proyectos-hoja-vida.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clasificar-proyectos-hoja-vida.ts:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce4a1ebdb2e05bd7", "name": "Stray `console.log` in TS/JS \u2014 scripts/analizar-consolidacion.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-consolidacion.js:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a79e7894d22faa9", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-limpieza.js:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-limpieza.js:131"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd1ae450eac60fae", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-orphan-images.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-orphan-images.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f951f51844062148", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-missing-projects.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-missing-projects.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-012920c70d96c581", "name": "Stray `console.log` in TS/JS \u2014 scripts/paso1-limpiar-problematicos.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/paso1-limpiar-problematicos.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-449b4ec7cfa3f78a", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-upscaled-images.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-upscaled-images.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a1a35282c723e92", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-project-images.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-project-images.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17ffc010ad9f2534", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step1-clear-old-data.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step1-clear-old-data.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-275c0c033093033d", "name": "Stray `console.log` in TS/JS \u2014 scripts/init-db.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/init-db.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d47f9da1a82ecbac", "name": "Stray `console.log` in TS/JS \u2014 scripts/descripciones-con-proyectos.js:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/descripciones-con-proyectos.js:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51b61f1c08406095", "name": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-puentes.js:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-puentes.js:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-197036f17a5da29b", "name": "Stray `console.log` in TS/JS \u2014 scripts/revision-profunda-industrial.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revision-profunda-industrial.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42ca431b7b49b561", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-62-projects.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-62-projects.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ec943c337f076ed", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-projects-detail.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-projects-detail.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-211daf375e2c4765", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-comercial.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-comercial.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a0d9a59a9ade701", "name": "Stray `console.log` in TS/JS \u2014 scripts/analizar-titulos.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-titulos.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6a65944b3448115", "name": "Stray `console.log` in TS/JS \u2014 scripts/organize-category-files.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/organize-category-files.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ab67539a3cde2700", "name": "Stray `console.log` in TS/JS \u2014 scripts/investigate-wordpress-images.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-wordpress-images.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e96bb89dca221dc3", "name": "Stray `console.log` in TS/JS \u2014 scripts/estado-vs-plan.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/estado-vs-plan.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43a22f643935ad98", "name": "Stray `console.log` in TS/JS \u2014 scripts/upscale-project-images.ts:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upscale-project-images.ts:166"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-efa5e7421f1ba076", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-projects.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-projects.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6572ed4410ad824", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-services.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-services.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b33625e7202e48d", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-categorias.js:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-categorias.js:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c2543179c721783", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-hero-picker-thumbs.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-hero-picker-thumbs.ts:80"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10125b3f408d4896", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-images.ts:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-images.ts:81"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4126d85d60f22c95", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-contadores.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-contadores.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-182973c07c063ae1", "name": "Stray `console.log` in TS/JS \u2014 scripts/rewrite-local-urls-in-code.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rewrite-local-urls-in-code.ts:58"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f3e06e1fa94195f", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-metaslider-database-structure.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-metaslider-database-structure.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4453a0ea0bc0258", "name": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-deportes-final.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-deportes-final.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9dcf5056a482996c", "name": "Stray `console.log` in TS/JS \u2014 scripts/simplificar-titulo-peatonales.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simplificar-titulo-peatonales.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7cc884f6d0a04417", "name": "Stray `console.log` in TS/JS \u2014 scripts/show-all-especialidades.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/show-all-especialidades.js:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9323ff6df1aae97", "name": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-puentes-final.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-puentes-final.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-392e6d56144ad655", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-simple-content.js:468", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-simple-content.js:468"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91cb7369552daf6e", "name": "Stray `console.log` in TS/JS \u2014 scripts/resumen-categorias-actual.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resumen-categorias-actual.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92f100901fe8e7f0", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-projects.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-projects.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b62876ad8c80430", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-rjayerbe-name.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-rjayerbe-name.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4f54802022e6339", "name": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-comerciales.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-comerciales.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-464751b4951277f1", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-deportes.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-deportes.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-770c5e931cd82f14", "name": "Stray `console.log` in TS/JS \u2014 scripts/clean-test-images.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-test-images.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42ec6a2d74ddb903", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step4-create-new-enum.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step4-create-new-enum.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-747d821343e93f6b", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-beneficios.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-beneficios.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5bf08d8e9f2e56d1", "name": "Stray `console.log` in TS/JS \u2014 scripts/humanizar-todas-descripciones.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/humanizar-todas-descripciones.js:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f37c03a96b926c2d", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-slider-projects.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-slider-projects.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1aecb99891e27ac6", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-nuevas-categorias.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-nuevas-categorias.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bdb779acf3dbacef", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-todas-descripciones-hibridas.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-todas-descripciones-hibridas.js:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3caad2a52313a640", "name": "Stray `console.log` in TS/JS \u2014 scripts/alinear-descripciones-titulos.js:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/alinear-descripciones-titulos.js:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93da31c7d8ea851e", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-puente-nolasco-images.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-puente-nolasco-images.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b7d4f8c260ca5d3", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-project-image-mapping.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-project-image-mapping.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55ea3f23e9d47edb", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-wordpress-projects.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-wordpress-projects.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d11a33c12b119cd", "name": "Stray `console.log` in TS/JS \u2014 scripts/reutilizar-assets-antiguos.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reutilizar-assets-antiguos.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9d9730734f7bca8", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-migration-status.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-migration-status.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ce76e9c1aff72c7", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-categoria.js:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-categoria.js:101"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fec375f77eb4a22f", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-categories.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-categories.ts:134"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2853b296419be09", "name": "Stray `console.log` in TS/JS \u2014 scripts/poblar-beneficios.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/poblar-beneficios.js:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef601911b3d85302", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-corrupted-urls.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-corrupted-urls.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cdc4c05f8906c4a3", "name": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-especialidades-nuevas.js:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-especialidades-nuevas.js:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf01e454d812848c", "name": "Stray `console.log` in TS/JS \u2014 scripts/export-trayectoria-catalogada.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-trayectoria-catalogada.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-04ab76cb75f05eaa", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-especialidad-real-photos.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-especialidad-real-photos.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5202704e49612fe", "name": "Stray `console.log` in TS/JS \u2014 scripts/analisis-profundo-categorias.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analisis-profundo-categorias.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0e8f8193ae3c85b", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-projects-fixed.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-projects-fixed.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8dbe894513988eab", "name": "Stray `console.log` in TS/JS \u2014 scripts/analizar-especialidades-clientes.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-especialidades-clientes.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e2c8285c7f2db0f", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-real-project-images.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-real-project-images.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e42bb6573dfa032d", "name": "Stray `console.log` in TS/JS \u2014 scripts/quick-status.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/quick-status.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c8c4914e71cf1ac", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-images-by-name.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-images-by-name.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fbb91495c49247af", "name": "Stray `console.log` in TS/JS \u2014 scripts/mapear-proyectos-especialidades.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/mapear-proyectos-especialidades.js:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a27a239b950e6751", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-all-image-urls.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-all-image-urls.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55c8313120824db2", "name": "Stray `console.log` in TS/JS \u2014 scripts/export-categorias-content.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-categorias-content.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9217527589eeb89a", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-wordpress-pages.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-wordpress-pages.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d6696767f7cec44", "name": "Stray `console.log` in TS/JS \u2014 scripts/continue-image-migration.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/continue-image-migration.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12819e4aa0d09cbd", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-video-refs.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-video-refs.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6ba644d97c49925", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-sliders-projects.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-sliders-projects.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3aab1dac891985f", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-hero-picker-html.ts:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-hero-picker-html.ts:131"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa9b38017260bbd5", "name": "Stray `console.log` in TS/JS \u2014 scripts/verificar-assets-completos.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-assets-completos.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df6d9e3e0b64ed76", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-wordpress-projects.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-wordpress-projects.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b148be42dfadaf9", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-upscale-duplicates.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-upscale-duplicates.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b17aa4f627e0cbb5", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-comercial.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-comercial.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e984d505078d7796", "name": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-comercial.js:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-comercial.js:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1001ea942f9f54ae", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-drive-fotos-edificios.ts:217", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-drive-fotos-edificios.ts:217"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22ce35452cfc77c1", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-processed-heroes.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-processed-heroes.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29613ffd064a71e1", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-puentes.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-puentes.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d1b986a57cae0ee", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-content.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-content.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea69b70f47935edc", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-projects.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-projects.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-96c4fe7144180a5d", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-contactos-whatsapp.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-contactos-whatsapp.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-457170724aefeebe", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-ricardo-user.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-ricardo-user.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75d925289e1f5d30", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-projects-by-category.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-projects-by-category.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf0a51c4b0d7e17a", "name": "Stray `console.log` in TS/JS \u2014 scripts/paso3-actualizar-contadores.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/paso3-actualizar-contadores.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e74aa1b57134acc0", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-mejoradas.js:239", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-mejoradas.js:239"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1b9414b1224a2f3", "name": "Stray `console.log` in TS/JS \u2014 scripts/recover-cliente-logos.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-cliente-logos.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85e70c84cf1c8e84", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-services.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-services.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54c636d8d34b8864", "name": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-industrial-final.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-industrial-final.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f6ae51f064c1611", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-proyecto-schema.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-proyecto-schema.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a448b822276238b", "name": "Stray `console.log` in TS/JS \u2014 scripts/clean-dead-refs.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-dead-refs.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c0f53990954e816", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-image-structure.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-image-structure.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66de2d194a7fe280", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-external-images.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-external-images.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24b6c88831c4b394", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-puente-peatonal-category.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-puente-peatonal-category.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fab767e891fb2083", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-puentes-opcion2.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-puentes-opcion2.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0855b88d60b9684b", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-categorias.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-categorias.js:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b84908516edabff2", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-database.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-database.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d206ef1c5aacbcd", "name": "Stray `console.log` in TS/JS \u2014 scripts/paso2-migrar-todos.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/paso2-migrar-todos.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d67523296240353a", "name": "Stray `console.log` in TS/JS \u2014 scripts/recover-external-images.ts:294", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-external-images.ts:294"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-040434623a7eadd9", "name": "Stray `console.log` in TS/JS \u2014 scripts/identify-uploads-images.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/identify-uploads-images.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-006a4bfd265e919d", "name": "Stray `console.log` in TS/JS \u2014 scripts/verificar-descripciones-actualizadas.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-descripciones-actualizadas.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fbaa2fbcc3573b90", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-local-to-gcs.ts:177", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-local-to-gcs.ts: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-cc8d8d06d3c0c5b6", "name": "Stray `console.log` in TS/JS \u2014 scripts/analizar-proyectos-reales.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-proyectos-reales.js:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe4a3866da8889c8", "name": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-infraestructura.js:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-infraestructura.js:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d2ba11410f5d001", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-user.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eabbd8a728e65895", "name": "Stray `console.log` in TS/JS \u2014 scripts/agregar-contacto-principal.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/agregar-contacto-principal.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd62c53187774f60", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-all-services.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-all-services.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5465304d03b0453d", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-proyectos-to-neon.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-proyectos-to-neon.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1819f49daf53f121", "name": "Stray `console.log` in TS/JS \u2014 scripts/revisar-categorizacion.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revisar-categorizacion.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-974246889d161e7d", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-images-from-posts.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-images-from-posts.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b49a9f1f90654ba1", "name": "Stray `console.log` in TS/JS \u2014 scripts/recover-all-broken-refs.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-all-broken-refs.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-e5203d9043b7966f", "name": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-servicios.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-servicios.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a0a7f5bdffc1de6", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrar-paginas-existentes.js:406", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrar-paginas-existentes.js:406"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4655ded8bd989b0", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-industrial.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-industrial.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd4dfa6608906b87", "name": "Stray `console.log` in TS/JS \u2014 scripts/reorganize-existing-images.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reorganize-existing-images.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5dc7bb6f5ae4f1e3", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-enum-trabajando.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-enum-trabajando.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95efd85a46b4b32c", "name": "Stray `console.log` in TS/JS \u2014 scripts/scan-all-broken-refs.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/scan-all-broken-refs.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c177a63bfeebfbeb", "name": "Stray `console.log` in TS/JS \u2014 scripts/reconcile-media-pool.ts:429", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reconcile-media-pool.ts:429"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ab57e1d09ce5af71", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-especialidades.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-especialidades.js:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99710c597803910c", "name": "Stray `console.log` in TS/JS \u2014 scripts/analizar-comercial-detallado.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-comercial-detallado.js:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a99f859ae2fd8c8", "name": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-edificaciones.js:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-edificaciones.js:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19a3be1ee90bcdb1", "name": "Stray `console.log` in TS/JS \u2014 scripts/catalogar-manual.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/catalogar-manual.js:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bdf71c8ee9612518", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-client-placeholders.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-client-placeholders.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6704ad4b82564ab0", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-full-db.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-full-db.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d41d966081946f7", "name": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-edificaciones-final.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-edificaciones-final.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-96bfad63dcba8803", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-drive-stock-brochure.ts:253", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-drive-stock-brochure.ts:253"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55c7dc9a7a677bf7", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-services.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-services.ts:85"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf7fc4ee3ca464b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-adicionales.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-adicionales.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e348392d01e8665", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-from-posts.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-from-posts.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7748a62221d117f2", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-sample-codigo-interno.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-sample-codigo-interno.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd835ee9faca1289", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-placeholder-images.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-placeholder-images.ts:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92603baeeaf004b4", "name": "Stray `console.log` in TS/JS \u2014 scripts/analizar-anos-detallado.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-anos-detallado.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e23b1c5e246b1b7c", "name": "Stray `console.log` in TS/JS \u2014 scripts/verificar-assets-categorias.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-assets-categorias.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e7825df2e331639", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-images-and-set-portada.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-images-and-set-portada.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d37206a75cc9abc2", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-service-images.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-service-images.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3b29095efa177b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/agregar-imagenes-especialidades.js:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/agregar-imagenes-especialidades.js:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d61b41c83a210bce", "name": "Stray `console.log` in TS/JS \u2014 scripts/corregir-puentes-lanzamiento-incremental.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/corregir-puentes-lanzamiento-incremental.js:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a6f96acee5489a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-category-image-urls.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-category-image-urls.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a87610ff97b6cd41", "name": "Stray `console.log` in TS/JS \u2014 scripts/upload-all-public-to-gcs.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upload-all-public-to-gcs.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-64c527dde0ccb26e", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-metaslider-structure.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-metaslider-structure.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d0426c466629d01", "name": "Stray `console.log` in TS/JS \u2014 scripts/clean-and-rebuild-all-projects.ts:446", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-and-rebuild-all-projects.ts:446"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd018da649fe9e3c", "name": "Stray `console.log` in TS/JS \u2014 scripts/poblar-especialidades-inicial.js:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/poblar-especialidades-inicial.js:127"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f599d354f9ba51c", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-local-images-to-gcs.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-local-images-to-gcs.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a95882dcd765a0b", "name": "Stray `console.log` in TS/JS \u2014 scripts/assign-media-from-matching.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assign-media-from-matching.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13cd8251bd663eca", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-client-logos.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-client-logos.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acb84b63a9446e0d", "name": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-ultimos.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-ultimos.js:5"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-769c5350f2597686", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-sin-alardeo.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-sin-alardeo.js:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3bebc21327e0060", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-edificaciones.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-edificaciones.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4c07e7fc60c0379", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-services-complete.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-services-complete.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3dd604b07f8c790", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-parte2.js:234", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-parte2.js:234"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95f1e9de9bf71e41", "name": "Stray `console.log` in TS/JS \u2014 scripts/recover-broken-image-refs.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-broken-image-refs.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e82b02758cfe69d5", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step3-sql-migration.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step3-sql-migration.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c80e93127628bae2", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-all-categorias.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-all-categorias.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f74b92348f894d9b", "name": "Stray `console.log` in TS/JS \u2014 scripts/html-to-pdf.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/html-to-pdf.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42bae6c6624979ed", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-local-services.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-local-services.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-413b6e31f88573f0", "name": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-deportes.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-deportes.js:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa15fbd0c7c9cab8", "name": "Stray `console.log` in TS/JS \u2014 scripts/suggest-especialidad-images.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/suggest-especialidad-images.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d164ea002c29f622", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-exact.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-exact.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6036d935c155741a", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-imagen-urls.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-imagen-urls.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4affc859a7c72ae2", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cd8b3a5f2c5a51d", "name": "Stray `console.log` in TS/JS \u2014 scripts/verificar-migracion-completa.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-migracion-completa.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54af8da80ae5b5d1", "name": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-beneficios-categorias.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-beneficios-categorias.js:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-546ca2835b216124", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-comercial.js:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-comercial.js:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1d5dc54f9d676ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/EJECUTAR-MIGRACION-COMPLETA.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/EJECUTAR-MIGRACION-COMPLETA.js:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a58cf8dd5db636b6", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-exact.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-exact.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f47abd0bf308289", "name": "Stray `console.log` in TS/JS \u2014 scripts/ejecutar-reclasificacion.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ejecutar-reclasificacion.js:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39ebe577a9c03ab8", "name": "Stray `console.log` in TS/JS \u2014 scripts/clean-and-migrate.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-and-migrate.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3417f6b17720b85a", "name": "Stray `console.log` in TS/JS \u2014 scripts/analisis-reclasificacion.js:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analisis-reclasificacion.js:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a7207fc16d8ba4d", "name": "Stray `console.log` in TS/JS \u2014 scripts/neon-step1-migrate-enum-values.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/neon-step1-migrate-enum-values.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0731d8cbc03d1bf6", "name": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/index.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/index.ts:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84a2b1e644c64499", "name": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/query-empresa.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/query-empresa.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3f024ff6496474b", "name": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/query-puentes.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/query-puentes.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed0c4615c629b84f", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-empresa.ts:243", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-empresa.ts:243"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d952334937d73c35", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-servicios-contacto.ts:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-servicios-contacto.ts:128"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e3b306ffe8955dc", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-navegacion.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-navegacion.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-430515ce2e243833", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-tecnologia-rediseno.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-tecnologia-rediseno.ts:207"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bfd63a519ad7799c", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-calidad-rediseno.ts:274", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-calidad-rediseno.ts:274"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4ea12bf28c531add", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-plantas.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-plantas.ts:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e526dc9616c326b1", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-tecnologia-politicas.ts:376", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-tecnologia-politicas.ts:376"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10b16c803154acde", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-calidad-imagenes-y-etapas.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-calidad-imagenes-y-etapas.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6aad61678098980f", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-trayectoria.ts:597", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-trayectoria.ts:597"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c65a775bedc8143", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-historicos.ts:2656", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-historicos.ts:2656"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffa7cb8f440f5c57", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-home.ts:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-home.ts:139"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51c9e83876356a57", "name": "`truncate` class without `title=` for hover reveal \u2014 components/brochure/PdfFlipbookViewer.tsx:205", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/brochure/PdfFlipbookViewer.tsx:205"}, "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-fba1f6188cb5c686", "name": "\"active\" state uses light bg in a dark theme \u2014 components/contacto/ScaleInput.tsx:51", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 components/contacto/ScaleInput.tsx:51"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8987c9b511b347d9", "name": "`truncate` class without `title=` for hover reveal \u2014 components/contacto/FileUploadZone.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/contacto/FileUploadZone.tsx:155"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-253d9e3b4e4dac3e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/MediaCard.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/MediaCard.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-8f09782eb5adfda5", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ProjectsTable.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ProjectsTable.tsx:224"}, "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-b45aca373221d28f", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AnalyticsDashboard.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AnalyticsDashboard.tsx:160"}, "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-ef222d6cfeb921d4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/MediaManager.tsx:377", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/MediaManager.tsx:377"}, "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-1597a840d4068640", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/CategoryEditModal.tsx:754", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/CategoryEditModal.tsx:754"}, "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-ddfe0c8ec3bf1fc9", "name": "Stray `console.log` in TS/JS \u2014 components/admin/CategoryEditModal.tsx:465", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/admin/CategoryEditModal.tsx:465"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ddf32cc932a96dfe", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/EditProjectForm.tsx:401", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/EditProjectForm.tsx:401"}, "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-904bfef548500271", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/MediaPicker.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/MediaPicker.tsx:140"}, "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-35c506ab367745b7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/UploadQueue.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/UploadQueue.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-2c8c6c980f917277", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/FolderTree.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/FolderTree.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-ac2fa8eb7a7cd276", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/MediaManager.tsx:746", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/MediaManager.tsx:746"}, "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-55e067347a6d5829", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/shared/FormFields.tsx:392", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/shared/FormFields.tsx:392"}, "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-f8b09b784f39cf06", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/shared/ListCrudEditor.tsx:1199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/shared/ListCrudEditor.tsx:1199"}, "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-000637ddc5d82cc0", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/categories/CasosExitoPicker.tsx:149", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/categories/CasosExitoPicker.tsx:149"}, "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-9fbff4f9ed97f411", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/obras/ProyectosPicker.tsx:135", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/obras/ProyectosPicker.tsx:135"}, "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-f61e517a70cf9a9f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/sections/EspecialidadesTabs.tsx:164", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/sections/EspecialidadesTabs.tsx:164"}, "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-f5c9b12514a45eed", "name": "Stray `console.log` in TS/JS \u2014 components/sections/HeroSection.tsx:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/sections/HeroSection.tsx:131"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2bbc37532368fb7e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/seo/JsonLdSchema.tsx:98", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/seo/JsonLdSchema.tsx:98"}, "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-924b6b560578fea5", "name": "Stray `console.log` in TS/JS \u2014 contexts/LoadingContext.tsx:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 contexts/LoadingContext.tsx:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89a3246271b588f0", "name": "Stray `console.log` in TS/JS \u2014 app/api/media/route.ts:321", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/media/route.ts:321"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eeb7eb1fecb2ea8a", "name": "Stray `console.log` in TS/JS \u2014 app/api/upscale-image/route.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upscale-image/route.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6d50083bd9aa94b", "name": "Stray `console.log` in TS/JS \u2014 app/api/inpaint-image/route.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/inpaint-image/route.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b662e2334c643d8", "name": "Stray `console.log` in TS/JS \u2014 app/api/optimize-image/route.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/optimize-image/route.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3847daa47665e63d", "name": "Stray `console.log` in TS/JS \u2014 app/api/list-archived-images/route.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/list-archived-images/route.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7485acfc63153698", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/upload/route.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/upload/route.ts:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-973d3eaac2dddc40", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/list-hero-images/route.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/list-hero-images/route.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe464e634e8541cc", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/projects/[id]/route.ts:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/projects/[id]/route.ts:122"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fef3091fb9bc55b0", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/media/route.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/media/route.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ab11cf599a99748", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/backup/restore-complete/route.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/backup/restore-complete/route.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e8d591c358ae476", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/backup/restore/route.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/backup/restore/route.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c82c9fc1ac99f919", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/categories/route.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/categories/route.ts:154"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e8b44d73b74af6b", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/categories/[id]/route.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/categories/[id]/route.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-114baa886d6e3860", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/upload-to-gcs/route.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/upload-to-gcs/route.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-635cf036e0bdc433", "name": "Stray `console.log` in TS/JS \u2014 app/api/upload-cropped-image/route.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload-cropped-image/route.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3664b6331529a241", "name": "Stray `console.log` in TS/JS \u2014 app/api/expand-image/route.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/expand-image/route.ts:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5827088046313981", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/page.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/page.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-5be8090ecc5cd644", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/landings/page.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/landings/page.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-f8ebd595b68d609b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/messages/[id]/page.tsx:419", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/messages/[id]/page.tsx:419"}, "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-e6d2e0092ca42a2f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/proyectos/detalle/[slug]/ProjectDetailClient.tsx:333", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/proyectos/detalle/[slug]/ProjectDetailClient.tsx:333"}, "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-e8ef961dd4405c8b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/servicios/ServiciosContent.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/servicios/ServiciosContent.tsx:285"}, "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-14f1c898d064d8b6", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/obras/[slug]/ObraPageClient.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/obras/[slug]/ObraPageClient.tsx:151"}, "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-686970793ea1a4b5", "name": "Stray `console.log` in TS/JS \u2014 lib/image-utils.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/image-utils.ts:133"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a4eebc1fc85ec12", "name": "Stray `console.log` in TS/JS \u2014 lib/category-assets.ts:198", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/category-assets.ts:198"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e70ed19436ff2a1", "name": "Stray `console.log` in TS/JS \u2014 lib/category-file-manager.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/category-file-manager.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-227d71ba9b611b8b", "name": "Stray `console.log` in TS/JS \u2014 lib/pptxProcessor.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/pptxProcessor.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a70a096e7c7ce90a", "name": "Stray `console.log` in TS/JS \u2014 lib/imageOptimizer.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/imageOptimizer.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a413d4bddf4e6f8f", "name": "Privileged port 32 in use", "shortDescription": {"text": "Privileged port 32 in use"}, "fullDescription": {"text": "Port 32 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-90463bf3f7be9783", "name": "Privileged port 34 in use", "shortDescription": {"text": "Privileged port 34 in use"}, "fullDescription": {"text": "Port 34 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-fe2401690219098f", "name": "Privileged port 36 in use", "shortDescription": {"text": "Privileged port 36 in use"}, "fullDescription": {"text": "Port 36 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-ef97b2dac1bf42a8", "name": "Privileged port 38 in use", "shortDescription": {"text": "Privileged port 38 in use"}, "fullDescription": {"text": "Port 38 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-a43505e664e9c174", "name": "Privileged port 72 in use", "shortDescription": {"text": "Privileged port 72 in use"}, "fullDescription": {"text": "Port 72 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-56c7ebfd2ab4a6f6", "name": "Privileged port 83 in use", "shortDescription": {"text": "Privileged port 83 in use"}, "fullDescription": {"text": "Port 83 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-0977cca8ba31adb0", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8e9d2f04974161a", "name": "Insecure pattern 'node_child_process' in enhanced-backup-system.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in enhanced-backup-system.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0863c0a2523c8a2", "name": "Insecure pattern 'node_child_process' in sync-neon-SIMPLE.mjs:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sync-neon-SIMPLE.mjs:10"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-50ae45462ac64728", "name": "Insecure pattern 'node_child_process' in sync-simple-to-neon.mjs:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sync-simple-to-neon.mjs:8"}, "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-843188627477c054", "name": "Insecure pattern 'node_child_process' in restore-complete-backup.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in restore-complete-backup.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce7c1a01a2c7a9fe", "name": "Insecure pattern 'node_child_process' in convert-logos-to-webp.ts:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in convert-logos-to-webp.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-40c55d2bf54e73b3", "name": "Insecure pattern 'node_child_process' in convert-remaining-logos.ts:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in convert-remaining-logos.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2244bec32a8bfc8", "name": "Insecure pattern 'node_child_process' in scripts/audit-orphan-images.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/audit-orphan-images.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9bd213996098e826", "name": "Possible secret in scripts/create-ricardo-user.ts", "shortDescription": {"text": "Possible secret in scripts/create-ricardo-user.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4c8ad2bfbf65f005", "name": "Insecure pattern 'node_child_process' in scripts/recover-cliente-logos.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/recover-cliente-logos.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8dcd430abafd88ff", "name": "Insecure pattern 'node_child_process' in scripts/recover-all-broken-refs.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/recover-all-broken-refs.ts:13"}, "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-25c76a04850a64e1", "name": "Insecure pattern 'node_child_process' in scripts/recover-broken-image-refs.ts:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/recover-broken-image-refs.ts:10"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9251c0b78404c4f", "name": "Possible secret in scripts/create-admin.ts", "shortDescription": {"text": "Possible secret in scripts/create-admin.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-213cef818ac20604", "name": "Insecure pattern 'node_child_process' in scripts/EJECUTAR-MIGRACION-COMPLETA.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/EJECUTAR-MIGRACION-COMPLETA.js:1"}, "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-0a4e45762b310808", "name": "Insecure pattern 'document_write' in components/admin/ReportsExport.tsx:169", "shortDescription": {"text": "Insecure pattern 'document_write' in components/admin/ReportsExport.tsx:169"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77fc60550a3be526", "name": "Insecure pattern 'dangerous_innerhtml' in components/sections/EspecialidadesTabs.tsx:164", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/sections/EspecialidadesTabs.tsx:164"}, "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-cb31c522447d1aa8", "name": "Insecure pattern 'dangerous_innerhtml' in components/seo/JsonLdSchema.tsx:98", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/seo/JsonLdSchema.tsx:98"}, "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-d08c24c338c381b2", "name": "Insecure pattern 'direct_innerhtml_assignment' in playwright-report/index.html:46", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in playwright-report/index.html:46"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11eb4fdd154c2404", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "google-github-actions/auth@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1add827a18cc861", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fa2b1f808af90a8", "name": "Very large file: scripts/canva-brochure/layouts.ts (2102 lines)", "shortDescription": {"text": "Very large file: scripts/canva-brochure/layouts.ts (2102 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-b60bf5353b1774d6", "name": "Very large file: prisma/seed-historicos.ts (2679 lines)", "shortDescription": {"text": "Very large file: prisma/seed-historicos.ts (2679 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-e7ead532457999db", "name": "Very large file: components/admin/CategoryEditModal.tsx (2123 lines)", "shortDescription": {"text": "Very large file: components/admin/CategoryEditModal.tsx (2123 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-3798fd7224c557eb", "name": "Very large file: components/admin/media/MediaManager.tsx (1509 lines)", "shortDescription": {"text": "Very large file: components/admin/media/MediaManager.tsx (1509 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-28446c4c71b53d0b", "name": "Very large file: lib/soluciones.ts (873 lines)", "shortDescription": {"text": "Very large file: lib/soluciones.ts (873 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-cf1af8d573c8c7d3", "name": "Very large file: lib/guias.ts (984 lines)", "shortDescription": {"text": "Very large file: lib/guias.ts (984 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": "5 test file(s) for 775 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-777a13c1a0a37351", "name": "64 TODO/FIXME markers", "shortDescription": {"text": "64 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 5901 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 301 placeholder/mock markers across 82 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, tests. 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-0688f16c474fad09", "name": "Commented-code block (5 lines) in playwright.config.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in playwright.config.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-c715d6273b482d93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/upscale-project-images.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/upscale-project-images.ts:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ca3d36fc5e998de", "name": "Commented-code block (6 lines) in scripts/rewrite-local-urls-in-code.ts:42", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/rewrite-local-urls-in-code.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d6e7c92b4df0a40", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate-real-project-images.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate-real-project-images.ts:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-378191eaf504d690", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-drive-fotos-edificios.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-drive-fotos-edificios.ts:77"}, "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-62fa2d6d0bbd79d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate-all-projects-by-category.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate-all-projects-by-category.ts: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-e83283c7012c42aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/recover-external-images.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/recover-external-images.ts:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3fa3fe5265195463", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-drive-stock-brochure.ts:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-drive-stock-brochure.ts:78"}, "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-2ae04e09c4f37932", "name": "Commented-code block (6 lines) in scripts/canva-brochure/layouts.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/canva-brochure/layouts.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-2b9df97afff72f5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ProyectoHojaVidaForm.tsx:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ProyectoHojaVidaForm.tsx:88"}, "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-5198ea798a32522f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageInpaintingEditor.tsx:234", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageInpaintingEditor.tsx:234"}, "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-3187f94d057c34ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageCropModal.tsx:138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageCropModal.tsx:138"}, "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-8e3eab8780f3a149", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/BeforeAfterComparison.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/BeforeAfterComparison.tsx:78"}, "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-f653b848209718fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageExpansionEditor.tsx:241", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageExpansionEditor.tsx:241"}, "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-ccf5a88a64fd0d9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/MediaUploadImproved.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/MediaUploadImproved.tsx: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-979d6105ca83933d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/MediaManager.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/MediaManager.tsx:73"}, "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-a34276bfc23924c3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/CategoryEditModal.tsx:275", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/CategoryEditModal.tsx:275"}, "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-b88b1b336720fe0a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/media/MediaManager.tsx:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/media/MediaManager.tsx:151"}, "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-d545fe4b9c3001ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/shared/ListCrudEditor.tsx:351", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/shared/ListCrudEditor.tsx:351"}, "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-2267a011211ad0db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/categories/CategoriaDetailEditor.tsx:345", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/categories/CategoriaDetailEditor.tsx:345"}, "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-1c23fee762d066b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/services/ServicioDetailEditor.tsx:274", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/services/ServicioDetailEditor.tsx:274"}, "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-197300f619ebbe55", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/obras/ObraDetailEditor.tsx:189", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/obras/ObraDetailEditor.tsx:189"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e93fbf84dadc7dd7", "name": "Commented-code block (5 lines) in components/guias/GuiaTemplate.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in components/guias/GuiaTemplate.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-3f6af1889c4434fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/upscale-image/route.ts:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/upscale-image/route.ts:82"}, "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-e8c9bf9be5a1e7f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/inpaint-image/route.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/inpaint-image/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-00d7a86159ab4e84", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/optimize-image/route.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/optimize-image/route.ts:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6687e8de32a9b62a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/expand-image/route.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/expand-image/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-ed6de0bc61fdaf05", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/UsersAdminClient.tsx:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/UsersAdminClient.tsx:144"}, "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-3074696282e37d4c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/clientes/[id]/page.tsx:182", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/clientes/[id]/page.tsx:182"}, "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-a80bd39597c3b590", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/messages/[id]/page.tsx:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/messages/[id]/page.tsx:102"}, "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-200d785f32575a6e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/contactos-whatsapp/ContactosWhatsAppClient.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/contactos-whatsapp/ContactosWhatsAppClient.tsx:153"}, "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-68fb4c2a67520ed6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/contacto/ContactoContent.tsx:135", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/contacto/ContactoContent.tsx:135"}, "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-4876faf6e2e8e9fc", "name": "Commented-code block (5 lines) in app/(public)/estructuras-metalicas/[ciudad]/page.tsx:100", "shortDescription": {"text": "Commented-code block (5 lines) in app/(public)/estructuras-metalicas/[ciudad]/page.tsx:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c7ffabb73905598", "name": "Commented-code block (6 lines) in app/(public)/servicios/[slug]/page.tsx:147", "shortDescription": {"text": "Commented-code block (6 lines) in app/(public)/servicios/[slug]/page.tsx:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c16952f36715bbde", "name": "Commented-code block (5 lines) in lib/soluciones.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/soluciones.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-3eb199cc7e5e9b2f", "name": "Commented-code block (5 lines) in lib/landings-schema.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/landings-schema.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-9c62e523658d290a", "name": "Commented-code block (5 lines) in lib/ciudades.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/ciudades.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-816e388169b96e25", "name": "Commented-code block (5 lines) in lib/guias.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/guias.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-1c3550e5973dae90", "name": "Commented-code block (7 lines) in lib/content/landings.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in lib/content/landings.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-59b992d62d86a65a", "name": "25 env vars used in code but missing from .env.example", "shortDescription": {"text": "25 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANALYTICS_SA_KEY_JSON`, `CI`, `DATABASE_URL_LOCAL`, `DATABASE_URL_NEON`, `GA_PROPERTY_ID`, `GCS_BUCKET_NAME`, `GCS_CREDENTIALS`, `GCS_PROJECT_ID` + 17 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18299"}, "properties": {"repository": "rjayerbe1/nueva-web-meisa", "repoUrl": "https://github.com/rjayerbe1/nueva-web-meisa", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: rjayerbe1/nueva-web-meisa"}, "properties": {"repobilityId": 466748, "scanner": "foundry_dataset", "fingerprint": "ce0aec1cd0af6ceeaedf5932ddc9166f6919c43c2f8c16fbfbf53fdbbabb1df4", "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": {"docs_or_claims": 11, "schema_or_data": 1, "source_or_other": 88, "api_integration_gap": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 1, "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": 139, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 100, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 4, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 112, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 100, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 1, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "rjayerbe1/nueva-web-meisa#1", "issue_number": "1", "quality_tiers": {"unresolved": 3, "assumption_check": 1}, "repo_full_name": "rjayerbe1/nueva-web-meisa", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-8f38c7e332760c19", "graph_gold_label": "assumption_check", "changed_file_labels": {"docs_or_claims": 44, "schema_or_data": 4, "source_or_other": 352}}, "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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#1\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 112\nEdges: 139\nNode types: {'pr_file': 100, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 100, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, '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, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'source_or_other': 88, 'docs_or_claims': 11, 'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'schema_or_data': 1, 'human_reported_issue_no_linked_fix': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 1}\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/rjayerbe1/nueva-web-meisa", "source_id": "graph-query-motif_query-06c5ee11c5bc415b", "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": "rjayerbe1/nueva-web-meisa", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: rjayerbe1/nueva-web-meisa"}, "properties": {"repobilityId": 449517, "scanner": "foundry_dataset", "fingerprint": "e8394e855239f0e4c40b53b5f0d85171ee8694758ffcb6c13d144040314ab335", "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": {"docs_or_claims": 11, "schema_or_data": 1, "source_or_other": 88, "api_integration_gap": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "blueprint_human_gap_disagreement": 1, "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": 139, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 100, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 4, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 112, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 100, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 1, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "rjayerbe1/nueva-web-meisa#1", "issue_number": "1", "quality_tiers": {"unresolved": 3, "assumption_check": 1}, "repo_full_name": "rjayerbe1/nueva-web-meisa", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-8ab728d7f169edc2", "graph_gold_label": "assumption_check", "changed_file_labels": {"docs_or_claims": 44, "schema_or_data": 4, "source_or_other": 352}}, "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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#1\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 112\nEdges: 139\nNode types: {'pr_file': 100, 'link_quality': 4, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 100, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, '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, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'source_or_other': 88, 'docs_or_claims': 11, 'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'schema_or_data': 1, 'human_reported_issue_no_linked_fix': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3, 'assumption_check': 1}\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/rjayerbe1/nueva-web-meisa", "source_id": "graph-query-motif_query-6fa64e8ab61c4bca", "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": "rjayerbe1/nueva-web-meisa", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: rjayerbe1/nueva-web-meisa"}, "properties": {"repobilityId": 439076, "scanner": "foundry_dataset", "fingerprint": "ff50f589e2a864cd79993e4c912aa644c20bd0ccd818279ce8a63c09b2e7cf77", "category": "practices", "severity": "medium", "confidence": 0.62, "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": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "rjayerbe1/nueva-web-meisa#2", "human_labels": ["api_or_backend", "dependency_or_build", "schema_or_data", "security_auth_secret", "security_or_auth", "source_or_other", "ui_or_frontend"], "issue_number": "2", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.7, "repo_full_name": "rjayerbe1/nueva-web-meisa", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-78e887da04daefae", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 4, "docs": 4}, "source_chain_kind": "issue_chain", "changed_file_count": 13, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 2, "schema_or_data": 1, "ui_or_frontend": 4, "source_or_other": 3, "security_or_auth": 1, "dependency_or_build": 2}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: rjayerbe1/nueva-web-meisa#2\nRepo: rjayerbe1/nueva-web-meisa\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 13\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 3, 'api_or_backend': 2, 'ui_or_frontend': 4, 'security_or_auth': 1, 'dependency_or_build': 2, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-e40efa76cdd9ede2\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rjayerbe1/nueva-web-meisa/pull/2\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rjayerbe1/nueva-web-meisa\\nAuthor: rjayerbe1 (User)\\nURL: https://github.com/rjayerbe1/nueva-web-meisa/pull/2\\nTitle: feat: Google OAuth login + password reset flow\\nBody:\\n## Summary\\n- **Google OAuth** restricted to `@meisa.com.co` accounts (Workspace SSO). Auto-links to existing credential users since Google guarantees email verification for Workspace domains.\\n- **Password reset flow** with Resend-backed email (`/auth/forgot-password` + `/auth/reset-password` pages, token model + 2 API routes, bcrypt hashing, 1h expiry, rate-limited).\\n- **Signin page** now has \\\"Iniciar sesi\u00f3n con Google\\\" button and \\\"\u00bfOlvidaste tu contrase\u00f1a?\\\" link.\\n- **`.gcloudignore`** added to keep Cloud Run source uploads to ~213 MiB (vs 1.3 GiB uploading all the legacy FTP dumps).\\n\\n## Context\\nTriggered by Maria Antonia getting locked out (email mismatch between her personal and corporate accounts, no self-service reset). Google OAuth prevents this class of issue for internal users; the reset flow covers external / fallback cases.\\n\\n## Deployed to dev\\n- Service: `meisa-web-dev` in `meisa-web-prod-2025/us-central1`\\n- URL: https://meisa-\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-418f1bab64649e4c\",\n    \"filename\": \".env.example\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\": 3,\n    \"deletions\": 5,\n    \"changes\": 8,\n    \"blob_url\": \"https://github.com/rjayerbe1/nueva-web-meisa/blob/cc427679e4831a3713a1d75d47b687dcf982fbed/.env.example\"\n  },\n  {\n    \"id\": \"github-pr-file-file-e9cef8dc755372ac\",\n    \"filename\": \".gcloudignore\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 30,\n    \"deletions\": 0,\n    \"chan\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rjayerbe1/nueva-web-meisa", "source_id": "comment-chain-pattern-assumption_checks-0a92f5c0c68f7a18", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "rjayerbe1/nueva-web-meisa", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: rjayerbe1/nueva-web-meisa"}, "properties": {"repobilityId": 453785, "scanner": "foundry_dataset", "fingerprint": "050d719d4116a4327049d07e0fbb23442c4e70a2433aeb0b82a71e5942bd1822", "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": {"bug_fix": 1, "docs_or_chore": 2, "api_or_backend": 2, "commit_general": 1, "schema_or_data": 1, "ui_or_frontend": 4, "source_or_other": 3, "security_or_auth": 1, "dependency_or_build": 2, "security_or_secrets": 1, "security_auth_secret": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 13, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 27, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 13, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rjayerbe1/nueva-web-meisa#2", "issue_number": "2", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "rjayerbe1/nueva-web-meisa", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-d25769aa5e45b156", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 8, "schema_or_data": 4, "ui_or_frontend": 16, "source_or_other": 12, "security_or_auth": 4, "dependency_or_build": 8}}, "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: weak_supervision_needs_review\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#2\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 27\nEdges: 53\nNode types: {'pr_file': 13, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 13, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, 'chain_has_link_quality': 3, '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: {'ui_or_frontend': 4, 'source_or_other': 3, 'claimed_resolved_unverified': 3, 'api_or_backend': 2, 'dependency_or_build': 2, 'docs_or_chore': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'security_or_auth': 1, 'schema_or_data': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'commit_general': 1, 'security_or_secrets': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'weak_supervision': 3}\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/rjayerbe1/nueva-web-meisa", "source_id": "graph-query-motif_query-89c511c0c2a6c295", "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": "rjayerbe1/nueva-web-meisa", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: rjayerbe1/nueva-web-meisa"}, "properties": {"repobilityId": 444600, "scanner": "foundry_dataset", "fingerprint": "60bff834bd64fcbe27e389a57a729149922f8fe2b35211ea438198f0ab807cbe", "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": "rjayerbe1/nueva-web-meisa#1", "human_labels": ["api_integration_gap", "docs_or_claims", "schema_or_data", "source_or_other"], "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": "rjayerbe1/nueva-web-meisa", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-8fb118b55ab38c90", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 4, "docs": 4}, "source_chain_kind": "issue_chain", "changed_file_count": 100, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 11, "schema_or_data": 1, "source_or_other": 88}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 4, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#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: rjayerbe1/nueva-web-meisa#1\nRepo: rjayerbe1/nueva-web-meisa\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: 100\nLabels: {'api_integration_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'docs_or_claims': 11, 'schema_or_data': 1, 'source_or_other': 88}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7dc6a944c97e17da\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rjayerbe1/nueva-web-meisa/pull/1\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rjayerbe1/nueva-web-meisa\\nAuthor: rjayerbe1 (User)\\nURL: https://github.com/rjayerbe1/nueva-web-meisa/pull/1\\nTitle: Fix client-project system and add category management\\nBody:\\n## Summary\\n- Add category management features with new model, API routes, and admin page\\n- Fix client-project connection system and improve admin interface\\n- Add overlay color and opacity properties to category model\\n- Update dependencies and enhance media handling\\n- Implement backup restoration features\\n\\n## Test plan\\n- [ ] Test category management in admin panel\\n- [ ] Verify client-project connections work properly\\n- [ ] Check backup and restoration functionality\\n- [ ] Ensure UI components render correctly\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.ai/code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-1f66231811d59086\",\n    \"filename\": \"CATEGORIAS-PROYECTOS-MEISA.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 109,\n    \"deletions\": 0,\n    \"changes\": 109,\n    \"blob_url\": \"https://github.com/rjayerbe1/nueva-web-meisa/blob/22609d3ccfc3594a3016f3d48548e39e9a240183/CATEGORIAS-PROYECTOS-MEISA.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-6b93cecca85a844e\",\n    \"filename\": \"CLAUDE.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"modified\",\n    \"additions\": 9,\n    \"deletions\": 2,\n    \"changes\": 11,\n    \"blob_url\": \"https://github.com/rjayerbe1/nueva-web-meisa/blob/22609d3ccfc3594a3016f3d48548e39e9a240183/CLAUDE.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-2751696fde6a8fa9\",\n    \"filename\": \"COMPLETE-IMAGE-INVENTORY.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 150,\n    \"deletions\": 0,\n    \"changes\": 150,\n    \"blob_url\": \"https://github.com/rjayerbe1/nueva-web-meisa/blob/2\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rjayerbe1/nueva-web-meisa", "source_id": "comment-chain-pattern-bad_chains-3a444b6c272a1acc", "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": "rjayerbe1/nueva-web-meisa", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: rjayerbe1/nueva-web-meisa"}, "properties": {"repobilityId": 456199, "scanner": "foundry_dataset", "fingerprint": "6202800d5e05885958e02cbf5ec238760dfe83ec4594c8d215a625ee9ea84e06", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"bug_fix": 1, "docs_or_chore": 2, "api_or_backend": 2, "commit_general": 1, "schema_or_data": 1, "ui_or_frontend": 4, "source_or_other": 3, "security_or_auth": 1, "dependency_or_build": 2, "security_or_secrets": 1, "security_auth_secret": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 13, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 27, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 13, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rjayerbe1/nueva-web-meisa#2", "issue_number": "2", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "rjayerbe1/nueva-web-meisa", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-63d40d71a586c6a8", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 8, "schema_or_data": 4, "ui_or_frontend": 16, "source_or_other": 12, "security_or_auth": 4, "dependency_or_build": 8}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: rjayerbe1/nueva-web-meisa\nThread: rjayerbe1/nueva-web-meisa#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rjayerbe1/nueva-web-meisa#2\nRepo: rjayerbe1/nueva-web-meisa\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 27\nEdges: 53\nNode types: {'pr_file': 13, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 13, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, 'chain_has_link_quality': 3, '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: {'ui_or_frontend': 4, 'source_or_other': 3, 'claimed_resolved_unverified': 3, 'api_or_backend': 2, 'dependency_or_build': 2, 'docs_or_chore': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'security_or_auth': 1, 'schema_or_data': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'commit_general': 1, 'security_or_secrets': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rjayerbe1/nueva-web-meisa", "source_id": "graph-query-motif_query-a9d7a85b2e7bbc73", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "rjayerbe1/nueva-web-meisa", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"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-eca254201d6c6c70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 copy-all-ftp-images.ts:292"}, "properties": {"repobilityId": "120ced0871076197", "scanner": "scanner-primary", "fingerprint": "eca254201d6c6c70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c693ea996be2526a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 create-remaining-projects.ts:22"}, "properties": {"repobilityId": "3a1ad2bcd26b3854", "scanner": "scanner-primary", "fingerprint": "c693ea996be2526a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0d0280f0cb196eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analizar-multi-anio.js:23"}, "properties": {"repobilityId": "ee43f4c777bc8731", "scanner": "scanner-primary", "fingerprint": "e0d0280f0cb196eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb3727e114ee7d92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-image-urls.ts:7"}, "properties": {"repobilityId": "8e406d38aa538530", "scanner": "scanner-primary", "fingerprint": "fb3727e114ee7d92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e646517f567232b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analyze-client-sectors.ts:74"}, "properties": {"repobilityId": "d7ba24ec70834b78", "scanner": "scanner-primary", "fingerprint": "e646517f567232b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ccf9518f0e4ab20", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verify-all-logos.ts:8"}, "properties": {"repobilityId": "623a3375ef5bb19b", "scanner": "scanner-primary", "fingerprint": "3ccf9518f0e4ab20", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9a61f9ef3a951ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-failed-images.ts:22"}, "properties": {"repobilityId": "8a1d28016607621f", "scanner": "scanner-primary", "fingerprint": "f9a61f9ef3a951ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43a21fcbaa45448f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 enhanced-backup-system.ts:39"}, "properties": {"repobilityId": "54d4afc685a4aaf9", "scanner": "scanner-primary", "fingerprint": "43a21fcbaa45448f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c22e24f13fefc4c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 create-projects-fixed.ts:22"}, "properties": {"repobilityId": "3ffb3bf652461dd8", "scanner": "scanner-primary", "fingerprint": "c22e24f13fefc4c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37074578f18b6372", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clean-keep-only-real-projects.ts:6"}, "properties": {"repobilityId": "94e0050957bc3643", "scanner": "scanner-primary", "fingerprint": "37074578f18b6372", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0a6fcddd22579e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 reassign-correct-images.ts:8"}, "properties": {"repobilityId": "be5ff30960b510c5", "scanner": "scanner-primary", "fingerprint": "c0a6fcddd22579e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37193c1e50b61d2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extract-real-project-images.ts:6"}, "properties": {"repobilityId": "81390514fe21d052", "scanner": "scanner-primary", "fingerprint": "37193c1e50b61d2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2cc5def53967f074", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 create-backup-now.js:9"}, "properties": {"repobilityId": "4e93a8e60c200a53", "scanner": "scanner-primary", "fingerprint": "2cc5def53967f074", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e53732c50560fdcc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 copy-selected-images.ts:5"}, "properties": {"repobilityId": "9a133059c80c73fa", "scanner": "scanner-primary", "fingerprint": "e53732c50560fdcc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d171eb415bd8e24", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 generar-contenido-tecnico-servicios.ts:553"}, "properties": {"repobilityId": "439450970abcf164", "scanner": "scanner-primary", "fingerprint": "6d171eb415bd8e24", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-160184b3ddcc7c3c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 map-ftp-project-images.ts:210"}, "properties": {"repobilityId": "49394bd52801376d", "scanner": "scanner-primary", "fingerprint": "160184b3ddcc7c3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5658c3b6a1316532", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 download-all-slider-images.ts:5"}, "properties": {"repobilityId": "7d5d46e47ffe32c4", "scanner": "scanner-primary", "fingerprint": "5658c3b6a1316532", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-745537be66938ecc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analyze-client-logos-formats.ts:20"}, "properties": {"repobilityId": "f5aae56839b1eac2", "scanner": "scanner-primary", "fingerprint": "745537be66938ecc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef467c6b3fa26fcd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 map-images-to-database.ts:8"}, "properties": {"repobilityId": "f3470f2ddcc4491e", "scanner": "scanner-primary", "fingerprint": "ef467c6b3fa26fcd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa6ae1048cc91025", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 corregir-todas-fechas-timezone.js:5"}, "properties": {"repobilityId": "62adef3fc0dd59cb", "scanner": "scanner-primary", "fingerprint": "aa6ae1048cc91025", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a23f56da82437fd8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 final-cleanup-projects.ts:6"}, "properties": {"repobilityId": "bc9ec8cb740534e0", "scanner": "scanner-primary", "fingerprint": "a23f56da82437fd8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a70bc5c51b492a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-logo-blanco.ts:8"}, "properties": {"repobilityId": "6b918e0d0a820fdb", "scanner": "scanner-primary", "fingerprint": "7a70bc5c51b492a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff6611002dfe019e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 restore-sena.ts:25"}, "properties": {"repobilityId": "409610d7d295645c", "scanner": "scanner-primary", "fingerprint": "ff6611002dfe019e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f2a5fa13dcad964", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verificar-fechas-timezone.js:13"}, "properties": {"repobilityId": "93b20641397fccb0", "scanner": "scanner-primary", "fingerprint": "0f2a5fa13dcad964", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-24ad349750760dca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 update-service-statistics.ts:34"}, "properties": {"repobilityId": "367b3cf3dc189574", "scanner": "scanner-primary", "fingerprint": "24ad349750760dca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1e971e35f38907b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 download-default-images.ts:35"}, "properties": {"repobilityId": "9177595be4739f9c", "scanner": "scanner-primary", "fingerprint": "c1e971e35f38907b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f06934e9fb2fa04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 review-and-clean-projects.ts:6"}, "properties": {"repobilityId": "157485a6cb4c173f", "scanner": "scanner-primary", "fingerprint": "0f06934e9fb2fa04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00168300bd6b1452", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verify-final-sectors.ts:8"}, "properties": {"repobilityId": "4fddbc1dec5a71bc", "scanner": "scanner-primary", "fingerprint": "00168300bd6b1452", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a60a07b99e183f71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-service-new-fields.ts:15"}, "properties": {"repobilityId": "823d9e8c4573f66d", "scanner": "scanner-primary", "fingerprint": "a60a07b99e183f71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6296155aefecafb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 debug-backup.ts:10"}, "properties": {"repobilityId": "0f30efaf927c52c7", "scanner": "scanner-primary", "fingerprint": "d6296155aefecafb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9599a49ba3b87262", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 complete-backup-now.js:9"}, "properties": {"repobilityId": "1948063acda00cbc", "scanner": "scanner-primary", "fingerprint": "9599a49ba3b87262", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0516ca96fb7d796", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-white-logos.ts:94"}, "properties": {"repobilityId": "84084b96ef3852c6", "scanner": "scanner-primary", "fingerprint": "b0516ca96fb7d796", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-356bcbabf5d3d1c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-conconcreto.ts:8"}, "properties": {"repobilityId": "2682983c45ace332", "scanner": "scanner-primary", "fingerprint": "356bcbabf5d3d1c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff544e8d323f9e3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 capture-missing-images.ts:5"}, "properties": {"repobilityId": "ddbaa621b5b1dab6", "scanner": "scanner-primary", "fingerprint": "ff544e8d323f9e3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08e3712a4656c702", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 completar-gestion-proyectos.ts:174"}, "properties": {"repobilityId": "56af7601d61b4e76", "scanner": "scanner-primary", "fingerprint": "08e3712a4656c702", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d36b7d10fbe7e9d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extract-client-logos.js:125"}, "properties": {"repobilityId": "ce9562b6fb5b711c", "scanner": "scanner-primary", "fingerprint": "d36b7d10fbe7e9d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-624a8831d8df601f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 final-project-count.ts:6"}, "properties": {"repobilityId": "98f44ae2a6b04acb", "scanner": "scanner-primary", "fingerprint": "624a8831d8df601f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a43b1405ed9cbd2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 organize-ftp-images.ts:5"}, "properties": {"repobilityId": "5f054db9a22d86a1", "scanner": "scanner-primary", "fingerprint": "3a43b1405ed9cbd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00e43ca82050a502", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 update-new-logos.ts:8"}, "properties": {"repobilityId": "cf6de7b6ba540637", "scanner": "scanner-primary", "fingerprint": "00e43ca82050a502", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34fcec30a66306ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 restore-complete-backup.ts:30"}, "properties": {"repobilityId": "710269b3d30eef13", "scanner": "scanner-primary", "fingerprint": "34fcec30a66306ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a02142e457921a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clean-and-download-images.ts:7"}, "properties": {"repobilityId": "3f7df1f96b996cd0", "scanner": "scanner-primary", "fingerprint": "6a02142e457921a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9ddf220b9a96477", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 process-new-clients.ts:117"}, "properties": {"repobilityId": "cd92d546ff121c3e", "scanner": "scanner-primary", "fingerprint": "f9ddf220b9a96477", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7bdb5125ac2431d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 select-best-images.ts:5"}, "properties": {"repobilityId": "f25ce62ed0c775fe", "scanner": "scanner-primary", "fingerprint": "a7bdb5125ac2431d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eeafc07fc59ad57b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ver-proyectos-2025.js:16"}, "properties": {"repobilityId": "a99b6b6bff252e6b", "scanner": "scanner-primary", "fingerprint": "eeafc07fc59ad57b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6aa7a1b08592f91f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analyze-duplicate-projects.ts:153"}, "properties": {"repobilityId": "78af6be1e1a6b7b5", "scanner": "scanner-primary", "fingerprint": "6aa7a1b08592f91f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa4b3af3856a629f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-project-images.ts:6"}, "properties": {"repobilityId": "2b8f5e16d8f82192", "scanner": "scanner-primary", "fingerprint": "aa4b3af3856a629f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b82407e50152da7d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analyze-duplicate-projects.js:121"}, "properties": {"repobilityId": "fdffddf03598b7fb", "scanner": "scanner-primary", "fingerprint": "b82407e50152da7d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ae80af7d491f7f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-logos-blancos.ts:8"}, "properties": {"repobilityId": "4c3c9d6700194538", "scanner": "scanner-primary", "fingerprint": "8ae80af7d491f7f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7d1c6d94a8ffcea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 organize-all-downloaded-images.ts:5"}, "properties": {"repobilityId": "a21e07bded333c04", "scanner": "scanner-primary", "fingerprint": "d7d1c6d94a8ffcea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ecdeb084248b5ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 comprehensive-ftp-analysis.ts:5"}, "properties": {"repobilityId": "0351b91cbf2c29a0", "scanner": "scanner-primary", "fingerprint": "9ecdeb084248b5ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fec39136dc7730d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-client-logos.ts:8"}, "properties": {"repobilityId": "3c4df147eb659b2e", "scanner": "scanner-primary", "fingerprint": "fec39136dc7730d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6380d7fb85afcfa3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ver-distribucion-proporcional.js:5"}, "properties": {"repobilityId": "4ca48108e2caba3e", "scanner": "scanner-primary", "fingerprint": "6380d7fb85afcfa3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1af2a239a4bd1256", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analyze-historias-current-state.ts:13"}, "properties": {"repobilityId": "76c2ab643e11fa3a", "scanner": "scanner-primary", "fingerprint": "1af2a239a4bd1256", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acf290ed7cf03c77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 complete-historias-update.ts:12"}, "properties": {"repobilityId": "e3af8eb37e034946", "scanner": "scanner-primary", "fingerprint": "acf290ed7cf03c77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0647302b15131099", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 map-existing-images.ts:9"}, "properties": {"repobilityId": "b39bf68b0984ee4e", "scanner": "scanner-primary", "fingerprint": "0647302b15131099", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64ab0bdf18f0ef6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-historias-compatibility.ts:22"}, "properties": {"repobilityId": "2cc9e5cf085c1961", "scanner": "scanner-primary", "fingerprint": "64ab0bdf18f0ef6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d3a91cc895482c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 create-edificios.ts:22"}, "properties": {"repobilityId": "e75eeaa81f4183fc", "scanner": "scanner-primary", "fingerprint": "2d3a91cc895482c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd7ddbc4d17bdda9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convert-logos-to-webp.ts:22"}, "properties": {"repobilityId": "3a96e366c68c7981", "scanner": "scanner-primary", "fingerprint": "bd7ddbc4d17bdda9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ae5db016c81f30a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apply-sector-corrections.ts:8"}, "properties": {"repobilityId": "2d930dec2fdcd97c", "scanner": "scanner-primary", "fingerprint": "8ae5db016c81f30a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-510fb6a9ff826311", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 remove-exact-duplicates.ts:6"}, "properties": {"repobilityId": "7a990a08e64501dc", "scanner": "scanner-primary", "fingerprint": "510fb6a9ff826311", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-774a98d4e90d62e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 clean-all-projects.ts:7"}, "properties": {"repobilityId": "65ed71e89b93ee6e", "scanner": "scanner-primary", "fingerprint": "774a98d4e90d62e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efa97c83ee91a6ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 download-client-logos.js:15"}, "properties": {"repobilityId": "e05059b4f5c3eab0", "scanner": "scanner-primary", "fingerprint": "efa97c83ee91a6ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1bba8575a9f0206", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 download-meisa-images.js:155"}, "properties": {"repobilityId": "f855531e2a6e3ca6", "scanner": "scanner-primary", "fingerprint": "f1bba8575a9f0206", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-024daa1f15805d64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 download-service-images.ts:92"}, "properties": {"repobilityId": "22992d82be36330c", "scanner": "scanner-primary", "fingerprint": "024daa1f15805d64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d0246186f05477b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 simple-backup.js:9"}, "properties": {"repobilityId": "e2db967ad2f30ced", "scanner": "scanner-primary", "fingerprint": "9d0246186f05477b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11f6655095147983", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 complete-missing-categories.ts:5"}, "properties": {"repobilityId": "776a4871f9701153", "scanner": "scanner-primary", "fingerprint": "11f6655095147983", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-260f4e84f4e90052", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verify-all-25-logos.ts:39"}, "properties": {"repobilityId": "aa0245e9327a672d", "scanner": "scanner-primary", "fingerprint": "260f4e84f4e90052", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9666b76db41d837b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 create-industria.ts:22"}, "properties": {"repobilityId": "385be430901c21c1", "scanner": "scanner-primary", "fingerprint": "9666b76db41d837b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2084113551703409", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-d1-logo.ts:8"}, "properties": {"repobilityId": "54a8fbb4d29e823b", "scanner": "scanner-primary", "fingerprint": "2084113551703409", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c7234bb6c77c6e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-image-paths.ts:7"}, "properties": {"repobilityId": "9ac9a182fa26689b", "scanner": "scanner-primary", "fingerprint": "3c7234bb6c77c6e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-458c1af0eceee564", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 update-historias-schema.ts:108"}, "properties": {"repobilityId": "08da6f6e04880e3d", "scanner": "scanner-primary", "fingerprint": "458c1af0eceee564", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb8f1dfa827b68d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 update-client-logos.ts:238"}, "properties": {"repobilityId": "9349f818d9a9b035", "scanner": "scanner-primary", "fingerprint": "cb8f1dfa827b68d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f4cc96017406ee0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 map-ftp-project-images.js:188"}, "properties": {"repobilityId": "1f52f9ce297b97d9", "scanner": "scanner-primary", "fingerprint": "8f4cc96017406ee0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ec183367715bb38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 analyze-servicios-completo.ts:50"}, "properties": {"repobilityId": "aa0473ee0cb2f0f9", "scanner": "scanner-primary", "fingerprint": "6ec183367715bb38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5cda98cb1d48ec34", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 move-sura-to-salud.ts:8"}, "properties": {"repobilityId": "bf54ec507a544043", "scanner": "scanner-primary", "fingerprint": "5cda98cb1d48ec34", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42138c6ff0ff813d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convert-remaining-logos.ts:12"}, "properties": {"repobilityId": "4cd9561aa37bbf5f", "scanner": "scanner-primary", "fingerprint": "42138c6ff0ff813d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1a258081b060599", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 remove-projects-without-images.ts:6"}, "properties": {"repobilityId": "e87dd9b7b07a6d0d", "scanner": "scanner-primary", "fingerprint": "d1a258081b060599", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1ce2e66508498e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 create-all-projects.ts:7"}, "properties": {"repobilityId": "9ba5b56a0bb1c2ac", "scanner": "scanner-primary", "fingerprint": "f1ce2e66508498e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e2c96f91a3362a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 copy-project-images-from-ftp.ts:6"}, "properties": {"repobilityId": "a9cd95750b7ed4a6", "scanner": "scanner-primary", "fingerprint": "5e2c96f91a3362a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec3cf94410a92c21", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 download-all-meisa-images.js:304"}, "properties": {"repobilityId": "a62929f9c8bf1c0b", "scanner": "scanner-primary", "fingerprint": "ec3cf94410a92c21", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-145a89d8ef4644d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step2-map-proyectos.ts:20"}, "properties": {"repobilityId": "f181d66a6fd1d71b", "scanner": "scanner-primary", "fingerprint": "145a89d8ef4644d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bfa568872ad76b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ver-beneficios.js:15"}, "properties": {"repobilityId": "963a3527f60ac4bc", "scanner": "scanner-primary", "fingerprint": "0bfa568872ad76b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8dc0cee9eae9fbd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-clientes.ts:264"}, "properties": {"repobilityId": "c67b758812b1e54b", "scanner": "scanner-primary", "fingerprint": "8dc0cee9eae9fbd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ec64d65e8e3cd53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-test-projects.ts:27"}, "properties": {"repobilityId": "4e979e2fe1ebbc0e", "scanner": "scanner-primary", "fingerprint": "4ec64d65e8e3cd53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d860d62c48017aa7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/corregir-proyectos-puentes.js:42"}, "properties": {"repobilityId": "a0d01deff3287d1f", "scanner": "scanner-primary", "fingerprint": "d860d62c48017aa7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e67e64b0d016cd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/formato-tres-parrafos.js:58"}, "properties": {"repobilityId": "d02e54294d5df6d8", "scanner": "scanner-primary", "fingerprint": "6e67e64b0d016cd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a311a5981143daf4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-puente-nolasco.ts:9"}, "properties": {"repobilityId": "2c9ad1ce692e6c80", "scanner": "scanner-primary", "fingerprint": "a311a5981143daf4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b47724cb51dd5b71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-especialidades.js:6"}, "properties": {"repobilityId": "83f1063238ff825e", "scanner": "scanner-primary", "fingerprint": "b47724cb51dd5b71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72f2e9f286d5cb78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clasificar-proyectos-hoja-vida.ts:117"}, "properties": {"repobilityId": "483868dfe72f9dce", "scanner": "scanner-primary", "fingerprint": "72f2e9f286d5cb78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce4a1ebdb2e05bd7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-consolidacion.js:25"}, "properties": {"repobilityId": "c721ad0f0f0b3abd", "scanner": "scanner-primary", "fingerprint": "ce4a1ebdb2e05bd7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a79e7894d22faa9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-limpieza.js:131"}, "properties": {"repobilityId": "290abc5c4bb23bdb", "scanner": "scanner-primary", "fingerprint": "7a79e7894d22faa9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd1ae450eac60fae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-orphan-images.ts:55"}, "properties": {"repobilityId": "020dadc5300d4dd3", "scanner": "scanner-primary", "fingerprint": "cd1ae450eac60fae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f951f51844062148", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-missing-projects.ts:11"}, "properties": {"repobilityId": "cb98b23c8c74ebfa", "scanner": "scanner-primary", "fingerprint": "f951f51844062148", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-012920c70d96c581", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/paso1-limpiar-problematicos.js:5"}, "properties": {"repobilityId": "934b7bbc6256c2f7", "scanner": "scanner-primary", "fingerprint": "012920c70d96c581", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-449b4ec7cfa3f78a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-upscaled-images.ts:66"}, "properties": {"repobilityId": "eef410c2eb24438e", "scanner": "scanner-primary", "fingerprint": "449b4ec7cfa3f78a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a1a35282c723e92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-project-images.ts:74"}, "properties": {"repobilityId": "c4cbf2fdaa4c7313", "scanner": "scanner-primary", "fingerprint": "6a1a35282c723e92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17ffc010ad9f2534", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step1-clear-old-data.ts:7"}, "properties": {"repobilityId": "d62c0e2859078cbc", "scanner": "scanner-primary", "fingerprint": "17ffc010ad9f2534", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-275c0c033093033d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/init-db.ts:7"}, "properties": {"repobilityId": "d0b22ddfc3fc6af7", "scanner": "scanner-primary", "fingerprint": "275c0c033093033d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d47f9da1a82ecbac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/descripciones-con-proyectos.js:51"}, "properties": {"repobilityId": "59ab33ecd461c2c1", "scanner": "scanner-primary", "fingerprint": "d47f9da1a82ecbac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51b61f1c08406095", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-puentes.js:71"}, "properties": {"repobilityId": "9869b30a354ce5cb", "scanner": "scanner-primary", "fingerprint": "51b61f1c08406095", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-197036f17a5da29b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revision-profunda-industrial.js:5"}, "properties": {"repobilityId": "6ec4f453d2364c74", "scanner": "scanner-primary", "fingerprint": "197036f17a5da29b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42ca431b7b49b561", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-62-projects.ts:12"}, "properties": {"repobilityId": "788ddf7f849cebd5", "scanner": "scanner-primary", "fingerprint": "42ca431b7b49b561", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ec943c337f076ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-projects-detail.ts:11"}, "properties": {"repobilityId": "a3a887be917a3c23", "scanner": "scanner-primary", "fingerprint": "6ec943c337f076ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-211daf375e2c4765", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-comercial.js:6"}, "properties": {"repobilityId": "fbb37484c28bb61d", "scanner": "scanner-primary", "fingerprint": "211daf375e2c4765", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a0d9a59a9ade701", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-titulos.js:18"}, "properties": {"repobilityId": "8d52d8e6353fd65d", "scanner": "scanner-primary", "fingerprint": "5a0d9a59a9ade701", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6a65944b3448115", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/organize-category-files.ts:15"}, "properties": {"repobilityId": "bea530b0bf24ebc7", "scanner": "scanner-primary", "fingerprint": "b6a65944b3448115", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab67539a3cde2700", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/investigate-wordpress-images.ts:13"}, "properties": {"repobilityId": "14f1d0dbc1dc8c70", "scanner": "scanner-primary", "fingerprint": "ab67539a3cde2700", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e96bb89dca221dc3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/estado-vs-plan.js:6"}, "properties": {"repobilityId": "956abd26f05c08e0", "scanner": "scanner-primary", "fingerprint": "e96bb89dca221dc3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43a22f643935ad98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upscale-project-images.ts:166"}, "properties": {"repobilityId": "3e58b2d0f4f5f0f8", "scanner": "scanner-primary", "fingerprint": "43a22f643935ad98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efa5e7421f1ba076", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-projects.ts:20"}, "properties": {"repobilityId": "f62ba65ae560bbee", "scanner": "scanner-primary", "fingerprint": "efa5e7421f1ba076", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6572ed4410ad824", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-services.ts:62"}, "properties": {"repobilityId": "6ce6d97a26458c9f", "scanner": "scanner-primary", "fingerprint": "a6572ed4410ad824", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b33625e7202e48d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-categorias.js:99"}, "properties": {"repobilityId": "dbe86a7bdcb9d2df", "scanner": "scanner-primary", "fingerprint": "2b33625e7202e48d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c2543179c721783", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-hero-picker-thumbs.ts:80"}, "properties": {"repobilityId": "00d97bd829117163", "scanner": "scanner-primary", "fingerprint": "5c2543179c721783", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10125b3f408d4896", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-images.ts:81"}, "properties": {"repobilityId": "86f47f22944a14bb", "scanner": "scanner-primary", "fingerprint": "10125b3f408d4896", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4126d85d60f22c95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-contadores.ts:7"}, "properties": {"repobilityId": "ba73cf8dedc258b0", "scanner": "scanner-primary", "fingerprint": "4126d85d60f22c95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-182973c07c063ae1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rewrite-local-urls-in-code.ts:58"}, "properties": {"repobilityId": "508c26772a0b76f3", "scanner": "scanner-primary", "fingerprint": "182973c07c063ae1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f3e06e1fa94195f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-metaslider-database-structure.js:13"}, "properties": {"repobilityId": "ccfa35c70d5f4e75", "scanner": "scanner-primary", "fingerprint": "3f3e06e1fa94195f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4453a0ea0bc0258", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-deportes-final.js:42"}, "properties": {"repobilityId": "fcc025029ddcc266", "scanner": "scanner-primary", "fingerprint": "d4453a0ea0bc0258", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9dcf5056a482996c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/simplificar-titulo-peatonales.js:7"}, "properties": {"repobilityId": "c35fd47b0953c9a1", "scanner": "scanner-primary", "fingerprint": "9dcf5056a482996c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cc884f6d0a04417", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/show-all-especialidades.js:19"}, "properties": {"repobilityId": "b179bf2d5131890a", "scanner": "scanner-primary", "fingerprint": "7cc884f6d0a04417", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9323ff6df1aae97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-puentes-final.js:42"}, "properties": {"repobilityId": "f3a9decd83dbe614", "scanner": "scanner-primary", "fingerprint": "b9323ff6df1aae97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-392e6d56144ad655", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-simple-content.js:468"}, "properties": {"repobilityId": "a974bf35b0e5f485", "scanner": "scanner-primary", "fingerprint": "392e6d56144ad655", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-91cb7369552daf6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resumen-categorias-actual.js:6"}, "properties": {"repobilityId": "60ab495c348a40d0", "scanner": "scanner-primary", "fingerprint": "91cb7369552daf6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92f100901fe8e7f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-projects.ts:13"}, "properties": {"repobilityId": "b743010bd710f9ae", "scanner": "scanner-primary", "fingerprint": "92f100901fe8e7f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b62876ad8c80430", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-rjayerbe-name.ts:10"}, "properties": {"repobilityId": "9bdbb76d8752eecf", "scanner": "scanner-primary", "fingerprint": "6b62876ad8c80430", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4f54802022e6339", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-comerciales.js:5"}, "properties": {"repobilityId": "9e7ebed798fb4cfc", "scanner": "scanner-primary", "fingerprint": "e4f54802022e6339", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-464751b4951277f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-deportes.js:15"}, "properties": {"repobilityId": "283b8ea8cc65b135", "scanner": "scanner-primary", "fingerprint": "464751b4951277f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-770c5e931cd82f14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-test-images.ts:20"}, "properties": {"repobilityId": "4bcc2e848645003d", "scanner": "scanner-primary", "fingerprint": "770c5e931cd82f14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42ec6a2d74ddb903", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step4-create-new-enum.ts:7"}, "properties": {"repobilityId": "7ead710fbd9357a6", "scanner": "scanner-primary", "fingerprint": "42ec6a2d74ddb903", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-747d821343e93f6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-beneficios.js:15"}, "properties": {"repobilityId": "c251516dcb28773d", "scanner": "scanner-primary", "fingerprint": "747d821343e93f6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5bf08d8e9f2e56d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/humanizar-todas-descripciones.js:50"}, "properties": {"repobilityId": "ebdd32b1ea6e4a4c", "scanner": "scanner-primary", "fingerprint": "5bf08d8e9f2e56d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f37c03a96b926c2d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-slider-projects.ts:13"}, "properties": {"repobilityId": "9a2eaff917600082", "scanner": "scanner-primary", "fingerprint": "f37c03a96b926c2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1aecb99891e27ac6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-nuevas-categorias.ts:82"}, "properties": {"repobilityId": "831fc376754060ed", "scanner": "scanner-primary", "fingerprint": "1aecb99891e27ac6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bdb779acf3dbacef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-todas-descripciones-hibridas.js:49"}, "properties": {"repobilityId": "931569efa447e00a", "scanner": "scanner-primary", "fingerprint": "bdb779acf3dbacef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3caad2a52313a640", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/alinear-descripciones-titulos.js:51"}, "properties": {"repobilityId": "db010096d6e95db3", "scanner": "scanner-primary", "fingerprint": "3caad2a52313a640", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93da31c7d8ea851e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-puente-nolasco-images.ts:7"}, "properties": {"repobilityId": "358bc03526cc6812", "scanner": "scanner-primary", "fingerprint": "93da31c7d8ea851e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b7d4f8c260ca5d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-project-image-mapping.ts:8"}, "properties": {"repobilityId": "c5c719d3f2da1aa0", "scanner": "scanner-primary", "fingerprint": "8b7d4f8c260ca5d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55ea3f23e9d47edb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-wordpress-projects.ts:82"}, "properties": {"repobilityId": "208f52dabf1ef527", "scanner": "scanner-primary", "fingerprint": "55ea3f23e9d47edb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d11a33c12b119cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reutilizar-assets-antiguos.ts:40"}, "properties": {"repobilityId": "e55fec0a89a9588c", "scanner": "scanner-primary", "fingerprint": "8d11a33c12b119cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9d9730734f7bca8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-migration-status.ts:10"}, "properties": {"repobilityId": "2182d58cd500f5de", "scanner": "scanner-primary", "fingerprint": "a9d9730734f7bca8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ce76e9c1aff72c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-categoria.js:101"}, "properties": {"repobilityId": "1bfeabb0159e79ba", "scanner": "scanner-primary", "fingerprint": "8ce76e9c1aff72c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fec375f77eb4a22f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-categories.ts:134"}, "properties": {"repobilityId": "c09046910bca9196", "scanner": "scanner-primary", "fingerprint": "fec375f77eb4a22f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2853b296419be09", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/poblar-beneficios.js:55"}, "properties": {"repobilityId": "e44655bf2f8a8129", "scanner": "scanner-primary", "fingerprint": "e2853b296419be09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef601911b3d85302", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-corrupted-urls.ts:31"}, "properties": {"repobilityId": "467ab1a0e9e08b8b", "scanner": "scanner-primary", "fingerprint": "ef601911b3d85302", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cdc4c05f8906c4a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-especialidades-nuevas.js:121"}, "properties": {"repobilityId": "1ea58eab8a697142", "scanner": "scanner-primary", "fingerprint": "cdc4c05f8906c4a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf01e454d812848c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-trayectoria-catalogada.js:9"}, "properties": {"repobilityId": "5337d8029bf87415", "scanner": "scanner-primary", "fingerprint": "bf01e454d812848c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04ab76cb75f05eaa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-especialidad-real-photos.ts:55"}, "properties": {"repobilityId": "31537b3d38d9e1a2", "scanner": "scanner-primary", "fingerprint": "04ab76cb75f05eaa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5202704e49612fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analisis-profundo-categorias.js:6"}, "properties": {"repobilityId": "46bcaf59b45d6414", "scanner": "scanner-primary", "fingerprint": "e5202704e49612fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0e8f8193ae3c85b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-projects-fixed.ts:20"}, "properties": {"repobilityId": "7294a77d22875d52", "scanner": "scanner-primary", "fingerprint": "b0e8f8193ae3c85b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8dbe894513988eab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-especialidades-clientes.js:7"}, "properties": {"repobilityId": "8672cd80a6d696cd", "scanner": "scanner-primary", "fingerprint": "8dbe894513988eab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e2c8285c7f2db0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-real-project-images.ts:28"}, "properties": {"repobilityId": "fa7a087d23d02afb", "scanner": "scanner-primary", "fingerprint": "9e2c8285c7f2db0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e42bb6573dfa032d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/quick-status.js:5"}, "properties": {"repobilityId": "e6062bf12b92eff8", "scanner": "scanner-primary", "fingerprint": "e42bb6573dfa032d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c8c4914e71cf1ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-images-by-name.ts:18"}, "properties": {"repobilityId": "4b286a974214f389", "scanner": "scanner-primary", "fingerprint": "2c8c4914e71cf1ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbb91495c49247af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/mapear-proyectos-especialidades.js:32"}, "properties": {"repobilityId": "51ca2168518665bf", "scanner": "scanner-primary", "fingerprint": "fbb91495c49247af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a27a239b950e6751", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-all-image-urls.ts:31"}, "properties": {"repobilityId": "2fc0a7914ada90dc", "scanner": "scanner-primary", "fingerprint": "a27a239b950e6751", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55c8313120824db2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-categorias-content.js:9"}, "properties": {"repobilityId": "52947e132ab7fa0a", "scanner": "scanner-primary", "fingerprint": "55c8313120824db2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9217527589eeb89a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-wordpress-pages.ts:15"}, "properties": {"repobilityId": "e86b7db02574365e", "scanner": "scanner-primary", "fingerprint": "9217527589eeb89a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d6696767f7cec44", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/continue-image-migration.ts:17"}, "properties": {"repobilityId": "151c36aa0dd1ded9", "scanner": "scanner-primary", "fingerprint": "0d6696767f7cec44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12819e4aa0d09cbd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-video-refs.ts:16"}, "properties": {"repobilityId": "dd2b6eb474e01a3a", "scanner": "scanner-primary", "fingerprint": "12819e4aa0d09cbd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6ba644d97c49925", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-sliders-projects.ts:13"}, "properties": {"repobilityId": "240f856e2b431b1f", "scanner": "scanner-primary", "fingerprint": "b6ba644d97c49925", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3aab1dac891985f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-hero-picker-html.ts:131"}, "properties": {"repobilityId": "1b1b06ad1ee173df", "scanner": "scanner-primary", "fingerprint": "b3aab1dac891985f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa9b38017260bbd5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-assets-completos.ts:8"}, "properties": {"repobilityId": "588b0f852a48db18", "scanner": "scanner-primary", "fingerprint": "aa9b38017260bbd5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df6d9e3e0b64ed76", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-wordpress-projects.ts:35"}, "properties": {"repobilityId": "e17bff948f83ae80", "scanner": "scanner-primary", "fingerprint": "df6d9e3e0b64ed76", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9b148be42dfadaf9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-upscale-duplicates.ts:39"}, "properties": {"repobilityId": "63661f57cf08a404", "scanner": "scanner-primary", "fingerprint": "9b148be42dfadaf9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b17aa4f627e0cbb5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-comercial.js:15"}, "properties": {"repobilityId": "38e6b6dd2ac5f975", "scanner": "scanner-primary", "fingerprint": "b17aa4f627e0cbb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e984d505078d7796", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-comercial.js:51"}, "properties": {"repobilityId": "1bc6b89e9f1abb4e", "scanner": "scanner-primary", "fingerprint": "e984d505078d7796", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1001ea942f9f54ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-drive-fotos-edificios.ts:217"}, "properties": {"repobilityId": "f56595b17eb16bfb", "scanner": "scanner-primary", "fingerprint": "1001ea942f9f54ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22ce35452cfc77c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-processed-heroes.ts:44"}, "properties": {"repobilityId": "955a8013003c620e", "scanner": "scanner-primary", "fingerprint": "22ce35452cfc77c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29613ffd064a71e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-puentes.js:15"}, "properties": {"repobilityId": "3ff4ae1005e40df5", "scanner": "scanner-primary", "fingerprint": "29613ffd064a71e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d1b986a57cae0ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-content.ts:17"}, "properties": {"repobilityId": "415ee6325eff411f", "scanner": "scanner-primary", "fingerprint": "7d1b986a57cae0ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea69b70f47935edc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-projects.ts:23"}, "properties": {"repobilityId": "2cf267c8c263d4e7", "scanner": "scanner-primary", "fingerprint": "ea69b70f47935edc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96c4fe7144180a5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-contactos-whatsapp.ts:6"}, "properties": {"repobilityId": "42910b490d9fd95e", "scanner": "scanner-primary", "fingerprint": "96c4fe7144180a5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-457170724aefeebe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-ricardo-user.ts:16"}, "properties": {"repobilityId": "0bd72e9f0c9c5bbf", "scanner": "scanner-primary", "fingerprint": "457170724aefeebe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75d925289e1f5d30", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-projects-by-category.ts:31"}, "properties": {"repobilityId": "4610fc7fdd5381d1", "scanner": "scanner-primary", "fingerprint": "75d925289e1f5d30", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf0a51c4b0d7e17a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/paso3-actualizar-contadores.js:5"}, "properties": {"repobilityId": "8459ec84fe4cdaa8", "scanner": "scanner-primary", "fingerprint": "cf0a51c4b0d7e17a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e74aa1b57134acc0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-mejoradas.js:239"}, "properties": {"repobilityId": "e6dae01d23b81bc0", "scanner": "scanner-primary", "fingerprint": "e74aa1b57134acc0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1b9414b1224a2f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-cliente-logos.ts:43"}, "properties": {"repobilityId": "3483e3e8d306ed77", "scanner": "scanner-primary", "fingerprint": "a1b9414b1224a2f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85e70c84cf1c8e84", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-services.ts:13"}, "properties": {"repobilityId": "1ada0a41eece1611", "scanner": "scanner-primary", "fingerprint": "85e70c84cf1c8e84", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54c636d8d34b8864", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-industrial-final.js:42"}, "properties": {"repobilityId": "bd96e6d1f5f7f0cb", "scanner": "scanner-primary", "fingerprint": "54c636d8d34b8864", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f6ae51f064c1611", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-proyecto-schema.ts:10"}, "properties": {"repobilityId": "58219dcd5e70ec24", "scanner": "scanner-primary", "fingerprint": "5f6ae51f064c1611", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a448b822276238b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-dead-refs.ts:15"}, "properties": {"repobilityId": "a916bba2ecba31f7", "scanner": "scanner-primary", "fingerprint": "4a448b822276238b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c0f53990954e816", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-image-structure.ts:14"}, "properties": {"repobilityId": "5df2899cd2e0c331", "scanner": "scanner-primary", "fingerprint": "9c0f53990954e816", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-66de2d194a7fe280", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-external-images.ts:93"}, "properties": {"repobilityId": "670bf788e974191e", "scanner": "scanner-primary", "fingerprint": "66de2d194a7fe280", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-24b6c88831c4b394", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-puente-peatonal-category.ts:11"}, "properties": {"repobilityId": "614aef64926e8600", "scanner": "scanner-primary", "fingerprint": "24b6c88831c4b394", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fab767e891fb2083", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-puentes-opcion2.js:42"}, "properties": {"repobilityId": "57873f1f2a7412b5", "scanner": "scanner-primary", "fingerprint": "fab767e891fb2083", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0855b88d60b9684b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-categorias.js:34"}, "properties": {"repobilityId": "9b4954a6f92eaf50", "scanner": "scanner-primary", "fingerprint": "0855b88d60b9684b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b84908516edabff2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-database.ts:16"}, "properties": {"repobilityId": "92955ddda78aadf0", "scanner": "scanner-primary", "fingerprint": "b84908516edabff2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d206ef1c5aacbcd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/paso2-migrar-todos.js:24"}, "properties": {"repobilityId": "3d22c6ed0c8b4538", "scanner": "scanner-primary", "fingerprint": "4d206ef1c5aacbcd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d67523296240353a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-external-images.ts:294"}, "properties": {"repobilityId": "c847301d574471b6", "scanner": "scanner-primary", "fingerprint": "d67523296240353a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-040434623a7eadd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/identify-uploads-images.ts:13"}, "properties": {"repobilityId": "a5a954c119929b85", "scanner": "scanner-primary", "fingerprint": "040434623a7eadd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-006a4bfd265e919d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-descripciones-actualizadas.js:6"}, "properties": {"repobilityId": "8aed5b66309411c2", "scanner": "scanner-primary", "fingerprint": "006a4bfd265e919d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbaa2fbcc3573b90", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-all-local-to-gcs.ts:177"}, "properties": {"repobilityId": "7508b89bfb6a44bf", "scanner": "scanner-primary", "fingerprint": "fbaa2fbcc3573b90", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc8d8d06d3c0c5b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-proyectos-reales.js:34"}, "properties": {"repobilityId": "a90767acf82fb5fe", "scanner": "scanner-primary", "fingerprint": "cc8d8d06d3c0c5b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe4a3866da8889c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-infraestructura.js:41"}, "properties": {"repobilityId": "4232fdb2a8eb0ac8", "scanner": "scanner-primary", "fingerprint": "fe4a3866da8889c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d2ba11410f5d001", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user.ts:7"}, "properties": {"repobilityId": "581ed2004610ac2c", "scanner": "scanner-primary", "fingerprint": "0d2ba11410f5d001", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eabbd8a728e65895", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/agregar-contacto-principal.ts:6"}, "properties": {"repobilityId": "ee088b0fd84ea136", "scanner": "scanner-primary", "fingerprint": "eabbd8a728e65895", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd62c53187774f60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-all-services.ts:16"}, "properties": {"repobilityId": "09b0dabb8c0ff3c4", "scanner": "scanner-primary", "fingerprint": "fd62c53187774f60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5465304d03b0453d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-proyectos-to-neon.js:18"}, "properties": {"repobilityId": "3e4c6cd19d46315b", "scanner": "scanner-primary", "fingerprint": "5465304d03b0453d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1819f49daf53f121", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/revisar-categorizacion.js:5"}, "properties": {"repobilityId": "abf856faff8cc9c5", "scanner": "scanner-primary", "fingerprint": "1819f49daf53f121", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-974246889d161e7d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-images-from-posts.ts:11"}, "properties": {"repobilityId": "59acd2ff72393d03", "scanner": "scanner-primary", "fingerprint": "974246889d161e7d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b49a9f1f90654ba1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-all-broken-refs.ts:98"}, "properties": {"repobilityId": "c4700b76ebca36dd", "scanner": "scanner-primary", "fingerprint": "b49a9f1f90654ba1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5203d9043b7966f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-servicios.ts:12"}, "properties": {"repobilityId": "72e5c3f2c6cd07f1", "scanner": "scanner-primary", "fingerprint": "e5203d9043b7966f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a0a7f5bdffc1de6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrar-paginas-existentes.js:406"}, "properties": {"repobilityId": "e1d6698550c66c30", "scanner": "scanner-primary", "fingerprint": "4a0a7f5bdffc1de6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4655ded8bd989b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-industrial.js:15"}, "properties": {"repobilityId": "24e854a9aef5833f", "scanner": "scanner-primary", "fingerprint": "b4655ded8bd989b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd4dfa6608906b87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reorganize-existing-images.ts:24"}, "properties": {"repobilityId": "9a293c723d251558", "scanner": "scanner-primary", "fingerprint": "cd4dfa6608906b87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5dc7bb6f5ae4f1e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-enum-trabajando.ts:6"}, "properties": {"repobilityId": "1ecb79893a0bc205", "scanner": "scanner-primary", "fingerprint": "5dc7bb6f5ae4f1e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95efd85a46b4b32c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/scan-all-broken-refs.ts:73"}, "properties": {"repobilityId": "bcdb97ac4fcced15", "scanner": "scanner-primary", "fingerprint": "95efd85a46b4b32c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c177a63bfeebfbeb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reconcile-media-pool.ts:429"}, "properties": {"repobilityId": "324489b06d403116", "scanner": "scanner-primary", "fingerprint": "c177a63bfeebfbeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab57e1d09ce5af71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-especialidades.js:10"}, "properties": {"repobilityId": "85b7db282a809e42", "scanner": "scanner-primary", "fingerprint": "ab57e1d09ce5af71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99710c597803910c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-comercial-detallado.js:19"}, "properties": {"repobilityId": "db0f8ab5175e57e6", "scanner": "scanner-primary", "fingerprint": "99710c597803910c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a99f859ae2fd8c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-edificaciones.js:71"}, "properties": {"repobilityId": "fd0e26abbaa45498", "scanner": "scanner-primary", "fingerprint": "1a99f859ae2fd8c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19a3be1ee90bcdb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/catalogar-manual.js:10"}, "properties": {"repobilityId": "703b1dc98f96f0c7", "scanner": "scanner-primary", "fingerprint": "19a3be1ee90bcdb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bdf71c8ee9612518", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-client-placeholders.ts:30"}, "properties": {"repobilityId": "1e1751ce97032ae5", "scanner": "scanner-primary", "fingerprint": "bdf71c8ee9612518", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6704ad4b82564ab0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-full-db.ts:22"}, "properties": {"repobilityId": "958e1265e0779b12", "scanner": "scanner-primary", "fingerprint": "6704ad4b82564ab0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d41d966081946f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidar-edificaciones-final.js:42"}, "properties": {"repobilityId": "46388066ed25469f", "scanner": "scanner-primary", "fingerprint": "8d41d966081946f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96bfad63dcba8803", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-drive-stock-brochure.ts:253"}, "properties": {"repobilityId": "571b853433659081", "scanner": "scanner-primary", "fingerprint": "96bfad63dcba8803", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55c7dc9a7a677bf7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-services.ts:85"}, "properties": {"repobilityId": "8076c781558065a6", "scanner": "scanner-primary", "fingerprint": "55c7dc9a7a677bf7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf7fc4ee3ca464b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-adicionales.js:5"}, "properties": {"repobilityId": "65c910f505a058a5", "scanner": "scanner-primary", "fingerprint": "cf7fc4ee3ca464b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e348392d01e8665", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-from-posts.js:14"}, "properties": {"repobilityId": "bcf965602f1295c3", "scanner": "scanner-primary", "fingerprint": "1e348392d01e8665", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7748a62221d117f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-sample-codigo-interno.ts:7"}, "properties": {"repobilityId": "69573f4d4e8a4be3", "scanner": "scanner-primary", "fingerprint": "7748a62221d117f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd835ee9faca1289", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-placeholder-images.ts:86"}, "properties": {"repobilityId": "23ae08efd201615d", "scanner": "scanner-primary", "fingerprint": "bd835ee9faca1289", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92603baeeaf004b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analizar-anos-detallado.js:5"}, "properties": {"repobilityId": "135befee1df64371", "scanner": "scanner-primary", "fingerprint": "92603baeeaf004b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e23b1c5e246b1b7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-assets-categorias.ts:6"}, "properties": {"repobilityId": "5176f455ec6c9acd", "scanner": "scanner-primary", "fingerprint": "e23b1c5e246b1b7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e7825df2e331639", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-images-and-set-portada.ts:7"}, "properties": {"repobilityId": "14709a36b9ac446a", "scanner": "scanner-primary", "fingerprint": "9e7825df2e331639", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d37206a75cc9abc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-service-images.ts:7"}, "properties": {"repobilityId": "c67404c688602cc5", "scanner": "scanner-primary", "fingerprint": "d37206a75cc9abc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3b29095efa177b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/agregar-imagenes-especialidades.js:79"}, "properties": {"repobilityId": "bdc240f1c05455fb", "scanner": "scanner-primary", "fingerprint": "d3b29095efa177b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d61b41c83a210bce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/corregir-puentes-lanzamiento-incremental.js:16"}, "properties": {"repobilityId": "821c52ea0d16fc90", "scanner": "scanner-primary", "fingerprint": "d61b41c83a210bce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a6f96acee5489a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-category-image-urls.ts:22"}, "properties": {"repobilityId": "7176c62e52bf619c", "scanner": "scanner-primary", "fingerprint": "6a6f96acee5489a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a87610ff97b6cd41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upload-all-public-to-gcs.ts:82"}, "properties": {"repobilityId": "aae3b90ef6aeb137", "scanner": "scanner-primary", "fingerprint": "a87610ff97b6cd41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64c527dde0ccb26e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-wordpress-metaslider-structure.ts:13"}, "properties": {"repobilityId": "af9d3defdcbb3629", "scanner": "scanner-primary", "fingerprint": "64c527dde0ccb26e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d0426c466629d01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-and-rebuild-all-projects.ts:446"}, "properties": {"repobilityId": "b5859999adfe2565", "scanner": "scanner-primary", "fingerprint": "8d0426c466629d01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd018da649fe9e3c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/poblar-especialidades-inicial.js:127"}, "properties": {"repobilityId": "2be5684ac93c56c1", "scanner": "scanner-primary", "fingerprint": "bd018da649fe9e3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f599d354f9ba51c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-local-images-to-gcs.ts:76"}, "properties": {"repobilityId": "24e77c4d58367c7d", "scanner": "scanner-primary", "fingerprint": "1f599d354f9ba51c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a95882dcd765a0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assign-media-from-matching.ts:49"}, "properties": {"repobilityId": "683fc8fa448f7304", "scanner": "scanner-primary", "fingerprint": "0a95882dcd765a0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13cd8251bd663eca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-client-logos.ts:8"}, "properties": {"repobilityId": "89e007e5c50ac9e2", "scanner": "scanner-primary", "fingerprint": "13cd8251bd663eca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acb84b63a9446e0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reclasificar-ultimos.js:5"}, "properties": {"repobilityId": "a40b7db394837345", "scanner": "scanner-primary", "fingerprint": "acb84b63a9446e0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-769c5350f2597686", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-sin-alardeo.js:50"}, "properties": {"repobilityId": "07e025fc6029ae6b", "scanner": "scanner-primary", "fingerprint": "769c5350f2597686", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3bebc21327e0060", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-descripciones-edificaciones.js:15"}, "properties": {"repobilityId": "c64e471343e82923", "scanner": "scanner-primary", "fingerprint": "b3bebc21327e0060", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4c07e7fc60c0379", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-services-complete.ts:7"}, "properties": {"repobilityId": "ccabfb354cc76b3e", "scanner": "scanner-primary", "fingerprint": "e4c07e7fc60c0379", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f3dd604b07f8c790", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-especialidades-parte2.js:234"}, "properties": {"repobilityId": "28a8cb0ecf4dc382", "scanner": "scanner-primary", "fingerprint": "f3dd604b07f8c790", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95f1e9de9bf71e41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recover-broken-image-refs.ts:103"}, "properties": {"repobilityId": "35d4e215bcc4a0e3", "scanner": "scanner-primary", "fingerprint": "95f1e9de9bf71e41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e82b02758cfe69d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-step3-sql-migration.ts:7"}, "properties": {"repobilityId": "75c9d013e850286a", "scanner": "scanner-primary", "fingerprint": "e82b02758cfe69d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c80e93127628bae2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-all-categorias.js:6"}, "properties": {"repobilityId": "b5585e2bfc6bfb19", "scanner": "scanner-primary", "fingerprint": "c80e93127628bae2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f74b92348f894d9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/html-to-pdf.ts:16"}, "properties": {"repobilityId": "7b6b47b4581a1be8", "scanner": "scanner-primary", "fingerprint": "f74b92348f894d9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42bae6c6624979ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-local-services.ts:10"}, "properties": {"repobilityId": "eae6b86833419a24", "scanner": "scanner-primary", "fingerprint": "42bae6c6624979ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-413b6e31f88573f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/aplicar-deportes.js:61"}, "properties": {"repobilityId": "f42ce9e7cc095b45", "scanner": "scanner-primary", "fingerprint": "413b6e31f88573f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa15fbd0c7c9cab8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/suggest-especialidad-images.ts:28"}, "properties": {"repobilityId": "749f0816c473ea3c", "scanner": "scanner-primary", "fingerprint": "fa15fbd0c7c9cab8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d164ea002c29f622", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-exact.js:14"}, "properties": {"repobilityId": "90a9025c0578bfbe", "scanner": "scanner-primary", "fingerprint": "d164ea002c29f622", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6036d935c155741a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-imagen-urls.ts:12"}, "properties": {"repobilityId": "2f26949b7daa5027", "scanner": "scanner-primary", "fingerprint": "6036d935c155741a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4affc859a7c72ae2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.ts:30"}, "properties": {"repobilityId": "42bf929609ac2fd4", "scanner": "scanner-primary", "fingerprint": "4affc859a7c72ae2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cd8b3a5f2c5a51d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verificar-migracion-completa.ts:6"}, "properties": {"repobilityId": "76973fbd381ce5ba", "scanner": "scanner-primary", "fingerprint": "8cd8b3a5f2c5a51d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54af8da80ae5b5d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/actualizar-beneficios-categorias.js:74"}, "properties": {"repobilityId": "d25e4418d27a1cb3", "scanner": "scanner-primary", "fingerprint": "54af8da80ae5b5d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-546ca2835b216124", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-comercial.js:79"}, "properties": {"repobilityId": "05e633310c9cd448", "scanner": "scanner-primary", "fingerprint": "546ca2835b216124", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1d5dc54f9d676ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/EJECUTAR-MIGRACION-COMPLETA.js:4"}, "properties": {"repobilityId": "04035f70bde7a236", "scanner": "scanner-primary", "fingerprint": "d1d5dc54f9d676ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a58cf8dd5db636b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-project-images-exact.ts:13"}, "properties": {"repobilityId": "5916963221eb21d4", "scanner": "scanner-primary", "fingerprint": "a58cf8dd5db636b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f47abd0bf308289", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ejecutar-reclasificacion.js:68"}, "properties": {"repobilityId": "c8ab7ceb4eb7d3dc", "scanner": "scanner-primary", "fingerprint": "3f47abd0bf308289", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39ebe577a9c03ab8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clean-and-migrate.ts:20"}, "properties": {"repobilityId": "299b99660ffe655d", "scanner": "scanner-primary", "fingerprint": "39ebe577a9c03ab8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3417f6b17720b85a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analisis-reclasificacion.js:69"}, "properties": {"repobilityId": "ea98f6be30d69518", "scanner": "scanner-primary", "fingerprint": "3417f6b17720b85a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a7207fc16d8ba4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/neon-step1-migrate-enum-values.ts:11"}, "properties": {"repobilityId": "b29a2e4595d8c6d9", "scanner": "scanner-primary", "fingerprint": "2a7207fc16d8ba4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0731d8cbc03d1bf6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/index.ts:110"}, "properties": {"repobilityId": "35d8e0a0f1c6b356", "scanner": "scanner-primary", "fingerprint": "0731d8cbc03d1bf6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84a2b1e644c64499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/query-empresa.ts:6"}, "properties": {"repobilityId": "64f31f2686412a5c", "scanner": "scanner-primary", "fingerprint": "84a2b1e644c64499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3f024ff6496474b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/canva-brochure/query-puentes.ts:26"}, "properties": {"repobilityId": "9a6ece7f1c7785b0", "scanner": "scanner-primary", "fingerprint": "d3f024ff6496474b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed0c4615c629b84f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-empresa.ts:243"}, "properties": {"repobilityId": "0ef73a8d25bae769", "scanner": "scanner-primary", "fingerprint": "ed0c4615c629b84f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d952334937d73c35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-servicios-contacto.ts:128"}, "properties": {"repobilityId": "e08501dba08ccf2f", "scanner": "scanner-primary", "fingerprint": "d952334937d73c35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e3b306ffe8955dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-navegacion.ts:73"}, "properties": {"repobilityId": "a4ff390fba557421", "scanner": "scanner-primary", "fingerprint": "6e3b306ffe8955dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-430515ce2e243833", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-tecnologia-rediseno.ts:207"}, "properties": {"repobilityId": "27b2f48ac1dfb222", "scanner": "scanner-primary", "fingerprint": "430515ce2e243833", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfd63a519ad7799c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-calidad-rediseno.ts:274"}, "properties": {"repobilityId": "ea2b36276b97a031", "scanner": "scanner-primary", "fingerprint": "bfd63a519ad7799c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ea12bf28c531add", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-plantas.ts:125"}, "properties": {"repobilityId": "5e5dee864896a37b", "scanner": "scanner-primary", "fingerprint": "4ea12bf28c531add", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e526dc9616c326b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-tecnologia-politicas.ts:376"}, "properties": {"repobilityId": "78ea50f3c927c2d8", "scanner": "scanner-primary", "fingerprint": "e526dc9616c326b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10b16c803154acde", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-calidad-imagenes-y-etapas.ts:39"}, "properties": {"repobilityId": "6830b7704ba8c708", "scanner": "scanner-primary", "fingerprint": "10b16c803154acde", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6aad61678098980f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-trayectoria.ts:597"}, "properties": {"repobilityId": "336f354e18724384", "scanner": "scanner-primary", "fingerprint": "6aad61678098980f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c65a775bedc8143", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-historicos.ts:2656"}, "properties": {"repobilityId": "00dd3c49989151bf", "scanner": "scanner-primary", "fingerprint": "9c65a775bedc8143", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffa7cb8f440f5c57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-home.ts:139"}, "properties": {"repobilityId": "16b59c0e07af6846", "scanner": "scanner-primary", "fingerprint": "ffa7cb8f440f5c57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51c9e83876356a57", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/brochure/PdfFlipbookViewer.tsx:205"}, "properties": {"repobilityId": "45d0c5ad6a4551c4", "scanner": "scanner-primary", "fingerprint": "51c9e83876356a57", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fba1f6188cb5c686", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 components/contacto/ScaleInput.tsx:51"}, "properties": {"repobilityId": "21a178c602202e92", "scanner": "scanner-primary", "fingerprint": "fba1f6188cb5c686", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-8987c9b511b347d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/contacto/FileUploadZone.tsx:155"}, "properties": {"repobilityId": "1fc4f9ed36dbd500", "scanner": "scanner-primary", "fingerprint": "8987c9b511b347d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-253d9e3b4e4dac3e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/MediaCard.tsx:174"}, "properties": {"repobilityId": "c1b003a6458f5cf8", "scanner": "scanner-primary", "fingerprint": "253d9e3b4e4dac3e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8f09782eb5adfda5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ProjectsTable.tsx:224"}, "properties": {"repobilityId": "5951daa6c622b0c7", "scanner": "scanner-primary", "fingerprint": "8f09782eb5adfda5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b45aca373221d28f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AnalyticsDashboard.tsx:160"}, "properties": {"repobilityId": "978616a00ff3adc2", "scanner": "scanner-primary", "fingerprint": "b45aca373221d28f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef222d6cfeb921d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/MediaManager.tsx:377"}, "properties": {"repobilityId": "7a05de02999c94b9", "scanner": "scanner-primary", "fingerprint": "ef222d6cfeb921d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1597a840d4068640", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/CategoryEditModal.tsx:754"}, "properties": {"repobilityId": "fc1598a12a3d6485", "scanner": "scanner-primary", "fingerprint": "1597a840d4068640", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ddfe0c8ec3bf1fc9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/admin/CategoryEditModal.tsx:465"}, "properties": {"repobilityId": "3c1de90b3e148285", "scanner": "scanner-primary", "fingerprint": "ddfe0c8ec3bf1fc9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ddf32cc932a96dfe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/EditProjectForm.tsx:401"}, "properties": {"repobilityId": "ba9c851e4ef9e420", "scanner": "scanner-primary", "fingerprint": "ddf32cc932a96dfe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-904bfef548500271", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/MediaPicker.tsx:140"}, "properties": {"repobilityId": "53765c1d21d1ec59", "scanner": "scanner-primary", "fingerprint": "904bfef548500271", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35c506ab367745b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/UploadQueue.tsx:61"}, "properties": {"repobilityId": "6d4db28040a46ee1", "scanner": "scanner-primary", "fingerprint": "35c506ab367745b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c8c6c980f917277", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/FolderTree.tsx:169"}, "properties": {"repobilityId": "3e44c0dc5dfe6582", "scanner": "scanner-primary", "fingerprint": "2c8c6c980f917277", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac2fa8eb7a7cd276", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/media/MediaManager.tsx:746"}, "properties": {"repobilityId": "b42b61a506985170", "scanner": "scanner-primary", "fingerprint": "ac2fa8eb7a7cd276", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-55e067347a6d5829", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/shared/FormFields.tsx:392"}, "properties": {"repobilityId": "155e14f977bbceba", "scanner": "scanner-primary", "fingerprint": "55e067347a6d5829", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8b09b784f39cf06", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/shared/ListCrudEditor.tsx:1199"}, "properties": {"repobilityId": "2ceec859c4900285", "scanner": "scanner-primary", "fingerprint": "f8b09b784f39cf06", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-000637ddc5d82cc0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/categories/CasosExitoPicker.tsx:149"}, "properties": {"repobilityId": "aeda88fd15369342", "scanner": "scanner-primary", "fingerprint": "000637ddc5d82cc0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9fbff4f9ed97f411", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/obras/ProyectosPicker.tsx:135"}, "properties": {"repobilityId": "b570274eb56573c0", "scanner": "scanner-primary", "fingerprint": "9fbff4f9ed97f411", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f61e517a70cf9a9f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/sections/EspecialidadesTabs.tsx:164"}, "properties": {"repobilityId": "40858e6f234a2265", "scanner": "scanner-primary", "fingerprint": "f61e517a70cf9a9f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f5c9b12514a45eed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/sections/HeroSection.tsx:131"}, "properties": {"repobilityId": "deb60b75be4463dc", "scanner": "scanner-primary", "fingerprint": "f5c9b12514a45eed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2bbc37532368fb7e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/seo/JsonLdSchema.tsx:98"}, "properties": {"repobilityId": "dfe14f2895eb1469", "scanner": "scanner-primary", "fingerprint": "2bbc37532368fb7e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-924b6b560578fea5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 contexts/LoadingContext.tsx:28"}, "properties": {"repobilityId": "e7e349e397d287d5", "scanner": "scanner-primary", "fingerprint": "924b6b560578fea5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89a3246271b588f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/media/route.ts:321"}, "properties": {"repobilityId": "a3954f72f7aa4b7f", "scanner": "scanner-primary", "fingerprint": "89a3246271b588f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eeb7eb1fecb2ea8a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upscale-image/route.ts:36"}, "properties": {"repobilityId": "ed95cb0a13274c8b", "scanner": "scanner-primary", "fingerprint": "eeb7eb1fecb2ea8a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6d50083bd9aa94b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/inpaint-image/route.ts:41"}, "properties": {"repobilityId": "105e52e70787929a", "scanner": "scanner-primary", "fingerprint": "d6d50083bd9aa94b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b662e2334c643d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/optimize-image/route.ts:27"}, "properties": {"repobilityId": "d3a553aa2155c769", "scanner": "scanner-primary", "fingerprint": "7b662e2334c643d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3847daa47665e63d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/list-archived-images/route.ts:55"}, "properties": {"repobilityId": "f2dbd2166f220a6a", "scanner": "scanner-primary", "fingerprint": "3847daa47665e63d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7485acfc63153698", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/upload/route.ts:71"}, "properties": {"repobilityId": "4b53551a3e7a9de0", "scanner": "scanner-primary", "fingerprint": "7485acfc63153698", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-973d3eaac2dddc40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/list-hero-images/route.ts:21"}, "properties": {"repobilityId": "f5ddd95b205903c0", "scanner": "scanner-primary", "fingerprint": "973d3eaac2dddc40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe464e634e8541cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/projects/[id]/route.ts:122"}, "properties": {"repobilityId": "6e6cdc8c911accca", "scanner": "scanner-primary", "fingerprint": "fe464e634e8541cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fef3091fb9bc55b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/media/route.ts:45"}, "properties": {"repobilityId": "169f39c4fe2b9c9f", "scanner": "scanner-primary", "fingerprint": "fef3091fb9bc55b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ab11cf599a99748", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/backup/restore-complete/route.ts:45"}, "properties": {"repobilityId": "bf9d712f3db3b1f6", "scanner": "scanner-primary", "fingerprint": "8ab11cf599a99748", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e8d591c358ae476", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/backup/restore/route.ts:49"}, "properties": {"repobilityId": "dc3e7987943ad24a", "scanner": "scanner-primary", "fingerprint": "7e8d591c358ae476", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c82c9fc1ac99f919", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/categories/route.ts:154"}, "properties": {"repobilityId": "8acf34f882b21a93", "scanner": "scanner-primary", "fingerprint": "c82c9fc1ac99f919", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e8b44d73b74af6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/categories/[id]/route.ts:84"}, "properties": {"repobilityId": "0d24e5cafc7b1603", "scanner": "scanner-primary", "fingerprint": "2e8b44d73b74af6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-114baa886d6e3860", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/upload-to-gcs/route.ts:66"}, "properties": {"repobilityId": "5eacd663804e39bb", "scanner": "scanner-primary", "fingerprint": "114baa886d6e3860", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-635cf036e0bdc433", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload-cropped-image/route.ts:29"}, "properties": {"repobilityId": "0cfb497874efc708", "scanner": "scanner-primary", "fingerprint": "635cf036e0bdc433", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3664b6331529a241", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/expand-image/route.ts:51"}, "properties": {"repobilityId": "e35d15e3d609daa9", "scanner": "scanner-primary", "fingerprint": "3664b6331529a241", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5827088046313981", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/page.tsx:169"}, "properties": {"repobilityId": "9c2c16c32be292da", "scanner": "scanner-primary", "fingerprint": "5827088046313981", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5be8090ecc5cd644", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/landings/page.tsx:107"}, "properties": {"repobilityId": "c62b0e910c02140d", "scanner": "scanner-primary", "fingerprint": "5be8090ecc5cd644", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8ebd595b68d609b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/messages/[id]/page.tsx:419"}, "properties": {"repobilityId": "6d0d6343e710cab4", "scanner": "scanner-primary", "fingerprint": "f8ebd595b68d609b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6d2e0092ca42a2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/proyectos/detalle/[slug]/ProjectDetailClient.tsx:333"}, "properties": {"repobilityId": "1d32c6e3926198d6", "scanner": "scanner-primary", "fingerprint": "e6d2e0092ca42a2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8ef961dd4405c8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/servicios/ServiciosContent.tsx:285"}, "properties": {"repobilityId": "b4de0b9a04e1ad1c", "scanner": "scanner-primary", "fingerprint": "e8ef961dd4405c8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14f1c898d064d8b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/obras/[slug]/ObraPageClient.tsx:151"}, "properties": {"repobilityId": "7e74f86b633dda62", "scanner": "scanner-primary", "fingerprint": "14f1c898d064d8b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-686970793ea1a4b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/image-utils.ts:133"}, "properties": {"repobilityId": "be41d8cd887c6a10", "scanner": "scanner-primary", "fingerprint": "686970793ea1a4b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a4eebc1fc85ec12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/category-assets.ts:198"}, "properties": {"repobilityId": "a21dfc6baba7d5cf", "scanner": "scanner-primary", "fingerprint": "9a4eebc1fc85ec12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e70ed19436ff2a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/category-file-manager.ts:45"}, "properties": {"repobilityId": "f78d385aa6fdc562", "scanner": "scanner-primary", "fingerprint": "2e70ed19436ff2a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-227d71ba9b611b8b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/pptxProcessor.ts:38"}, "properties": {"repobilityId": "f7e1cab39ea5fa54", "scanner": "scanner-primary", "fingerprint": "227d71ba9b611b8b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a70a096e7c7ce90a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/imageOptimizer.ts:93"}, "properties": {"repobilityId": "a2f7b7706666c7c1", "scanner": "scanner-primary", "fingerprint": "a70a096e7c7ce90a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a413d4bddf4e6f8f", "level": "warning", "message": {"text": "Privileged port 32 in use"}, "properties": {"repobilityId": "20c0fabc691cdde4", "scanner": "scanner-primary", "fingerprint": "a413d4bddf4e6f8f", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dns-switch-to-cloudrun.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90463bf3f7be9783", "level": "warning", "message": {"text": "Privileged port 34 in use"}, "properties": {"repobilityId": "2febb579b1c7080d", "scanner": "scanner-primary", "fingerprint": "90463bf3f7be9783", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dns-switch-to-cloudrun.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe2401690219098f", "level": "warning", "message": {"text": "Privileged port 36 in use"}, "properties": {"repobilityId": "d1c2650d13d67a60", "scanner": "scanner-primary", "fingerprint": "fe2401690219098f", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dns-switch-to-cloudrun.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ef97b2dac1bf42a8", "level": "warning", "message": {"text": "Privileged port 38 in use"}, "properties": {"repobilityId": "b7214bb254c5881d", "scanner": "scanner-primary", "fingerprint": "ef97b2dac1bf42a8", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dns-switch-to-cloudrun.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a43505e664e9c174", "level": "warning", "message": {"text": "Privileged port 72 in use"}, "properties": {"repobilityId": "b403bef2163fedb7", "scanner": "scanner-primary", "fingerprint": "a43505e664e9c174", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dns-switch-to-cloudrun.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56c7ebfd2ab4a6f6", "level": "warning", "message": {"text": "Privileged port 83 in use"}, "properties": {"repobilityId": "7bdba6d0f8ded74c", "scanner": "scanner-primary", "fingerprint": "56c7ebfd2ab4a6f6", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dns-switch-to-cloudrun.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0977cca8ba31adb0", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "b03f121b16a1edc5", "scanner": "scanner-primary", "fingerprint": "0977cca8ba31adb0", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-b8e9d2f04974161a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in enhanced-backup-system.ts:5"}, "properties": {"repobilityId": "53892161348dc360", "scanner": "scanner-primary", "fingerprint": "b8e9d2f04974161a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enhanced-backup-system.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-e0863c0a2523c8a2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sync-neon-SIMPLE.mjs:10"}, "properties": {"repobilityId": "492bba51ce0b18f2", "scanner": "scanner-primary", "fingerprint": "e0863c0a2523c8a2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sync-neon-SIMPLE.mjs"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-50ae45462ac64728", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sync-simple-to-neon.mjs:8"}, "properties": {"repobilityId": "a8329943813c81fc", "scanner": "scanner-primary", "fingerprint": "50ae45462ac64728", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sync-simple-to-neon.mjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-843188627477c054", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in restore-complete-backup.ts:5"}, "properties": {"repobilityId": "02411b5f6ffd470a", "scanner": "scanner-primary", "fingerprint": "843188627477c054", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "restore-complete-backup.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-ce7c1a01a2c7a9fe", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in convert-logos-to-webp.ts:4"}, "properties": {"repobilityId": "32f481827165dacf", "scanner": "scanner-primary", "fingerprint": "ce7c1a01a2c7a9fe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "convert-logos-to-webp.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-40c55d2bf54e73b3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in convert-remaining-logos.ts:4"}, "properties": {"repobilityId": "7d5dba35262d66a8", "scanner": "scanner-primary", "fingerprint": "40c55d2bf54e73b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "convert-remaining-logos.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-e2244bec32a8bfc8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/audit-orphan-images.ts:16"}, "properties": {"repobilityId": "3b4b48e55d48facc", "scanner": "scanner-primary", "fingerprint": "e2244bec32a8bfc8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/audit-orphan-images.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-9bd213996098e826", "level": "error", "message": {"text": "Possible secret in scripts/create-ricardo-user.ts"}, "properties": {"repobilityId": "ba6201e37a94237d", "scanner": "scanner-primary", "fingerprint": "9bd213996098e826", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/create-ricardo-user.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-4c8ad2bfbf65f005", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/recover-cliente-logos.ts:14"}, "properties": {"repobilityId": "6a30728ce19745fb", "scanner": "scanner-primary", "fingerprint": "4c8ad2bfbf65f005", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/recover-cliente-logos.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-8dcd430abafd88ff", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/recover-all-broken-refs.ts:13"}, "properties": {"repobilityId": "6b74348805a307f9", "scanner": "scanner-primary", "fingerprint": "8dcd430abafd88ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/recover-all-broken-refs.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-25c76a04850a64e1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/recover-broken-image-refs.ts:10"}, "properties": {"repobilityId": "fe9dfcad67357fb4", "scanner": "scanner-primary", "fingerprint": "25c76a04850a64e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/recover-broken-image-refs.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-d9251c0b78404c4f", "level": "error", "message": {"text": "Possible secret in scripts/create-admin.ts"}, "properties": {"repobilityId": "8d9c2612f3304c63", "scanner": "scanner-primary", "fingerprint": "d9251c0b78404c4f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/create-admin.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-213cef818ac20604", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/EJECUTAR-MIGRACION-COMPLETA.js:1"}, "properties": {"repobilityId": "18c939551d77c2e7", "scanner": "scanner-primary", "fingerprint": "213cef818ac20604", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/EJECUTAR-MIGRACION-COMPLETA.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a4e45762b310808", "level": "note", "message": {"text": "Insecure pattern 'document_write' in components/admin/ReportsExport.tsx:169"}, "properties": {"repobilityId": "eab76da196eb5da6", "scanner": "scanner-primary", "fingerprint": "0a4e45762b310808", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/admin/ReportsExport.tsx"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-77fc60550a3be526", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/sections/EspecialidadesTabs.tsx:164"}, "properties": {"repobilityId": "564a8ede871de3cb", "scanner": "scanner-primary", "fingerprint": "77fc60550a3be526", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/sections/EspecialidadesTabs.tsx"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-cb31c522447d1aa8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/seo/JsonLdSchema.tsx:98"}, "properties": {"repobilityId": "5e8499288fa17c46", "scanner": "scanner-primary", "fingerprint": "cb31c522447d1aa8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/seo/JsonLdSchema.tsx"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-d08c24c338c381b2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in playwright-report/index.html:46"}, "properties": {"repobilityId": "72bf5b0e0e2b9155", "scanner": "scanner-primary", "fingerprint": "d08c24c338c381b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "playwright-report/index.html"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-11eb4fdd154c2404", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "25c9661ce6fb6978", "scanner": "scanner-primary", "fingerprint": "11eb4fdd154c2404", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-to-prod.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-11eb4fdd154c2404", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "427549553f92e27d", "scanner": "scanner-primary", "fingerprint": "11eb4fdd154c2404", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-to-prod.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-c1add827a18cc861", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "020a225032232038", "scanner": "scanner-primary", "fingerprint": "c1add827a18cc861", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-to-cloudrun.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-c1add827a18cc861", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2ece457c0306baae", "scanner": "scanner-primary", "fingerprint": "c1add827a18cc861", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-to-cloudrun.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-c1add827a18cc861", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "020a225032232038", "scanner": "scanner-primary", "fingerprint": "c1add827a18cc861", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-to-cloudrun.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-c1add827a18cc861", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3a36ae8a0d31e823", "scanner": "scanner-primary", "fingerprint": "c1add827a18cc861", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-to-cloudrun.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-c1add827a18cc861", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a73f1b95bc7b9ca6", "scanner": "scanner-primary", "fingerprint": "c1add827a18cc861", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-to-cloudrun.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-3fa2b1f808af90a8", "level": "note", "message": {"text": "Very large file: scripts/canva-brochure/layouts.ts (2102 lines)"}, "properties": {"repobilityId": "26b206a94aeb75e5", "scanner": "scanner-primary", "fingerprint": "3fa2b1f808af90a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b60bf5353b1774d6", "level": "note", "message": {"text": "Very large file: prisma/seed-historicos.ts (2679 lines)"}, "properties": {"repobilityId": "0711fb779c4a7959", "scanner": "scanner-primary", "fingerprint": "b60bf5353b1774d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e7ead532457999db", "level": "note", "message": {"text": "Very large file: components/admin/CategoryEditModal.tsx (2123 lines)"}, "properties": {"repobilityId": "6ece642ae5937ea6", "scanner": "scanner-primary", "fingerprint": "e7ead532457999db", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3798fd7224c557eb", "level": "note", "message": {"text": "Very large file: components/admin/media/MediaManager.tsx (1509 lines)"}, "properties": {"repobilityId": "352c39a29e95389d", "scanner": "scanner-primary", "fingerprint": "3798fd7224c557eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-28446c4c71b53d0b", "level": "note", "message": {"text": "Very large file: lib/soluciones.ts (873 lines)"}, "properties": {"repobilityId": "7603d7a28d08b9d8", "scanner": "scanner-primary", "fingerprint": "28446c4c71b53d0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cf1af8d573c8c7d3", "level": "note", "message": {"text": "Very large file: lib/guias.ts (984 lines)"}, "properties": {"repobilityId": "e71e2872682fb2e2", "scanner": "scanner-primary", "fingerprint": "cf1af8d573c8c7d3", "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-777a13c1a0a37351", "level": "note", "message": {"text": "64 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "777a13c1a0a37351", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "935c4dbb855c73d2", "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": "ab5bba27d4e6285c", "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": "93147e56db37c2db", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "e866c74f6ed62ce8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "82952328323f19d0", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "3e03056a6ead9946", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "30b6fdad723fddaa", "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": "dc07b99719993048", "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": "9eec3560dde31af1", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-0688f16c474fad09", "level": "none", "message": {"text": "Commented-code block (5 lines) in playwright.config.ts:23"}, "properties": {"repobilityId": "1171a64d11156621", "scanner": "scanner-primary", "fingerprint": "0688f16c474fad09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c715d6273b482d93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/upscale-project-images.ts:103"}, "properties": {"repobilityId": "98dd527a48b300fa", "scanner": "scanner-primary", "fingerprint": "c715d6273b482d93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ca3d36fc5e998de", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/rewrite-local-urls-in-code.ts:42"}, "properties": {"repobilityId": "01115941dd438d70", "scanner": "scanner-primary", "fingerprint": "1ca3d36fc5e998de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d6e7c92b4df0a40", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate-real-project-images.ts:30"}, "properties": {"repobilityId": "f7b37ee9630a0aee", "scanner": "scanner-primary", "fingerprint": "0d6e7c92b4df0a40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-378191eaf504d690", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-drive-fotos-edificios.ts:77"}, "properties": {"repobilityId": "6f879c44a9a1cf05", "scanner": "scanner-primary", "fingerprint": "378191eaf504d690", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62fa2d6d0bbd79d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate-all-projects-by-category.ts:33"}, "properties": {"repobilityId": "54e5ab5a2af33a52", "scanner": "scanner-primary", "fingerprint": "62fa2d6d0bbd79d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e83283c7012c42aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/recover-external-images.ts:59"}, "properties": {"repobilityId": "b68c46e81f95090c", "scanner": "scanner-primary", "fingerprint": "e83283c7012c42aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3fa3fe5265195463", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-drive-stock-brochure.ts:78"}, "properties": {"repobilityId": "0797a99ebd516317", "scanner": "scanner-primary", "fingerprint": "3fa3fe5265195463", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ae04e09c4f37932", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/canva-brochure/layouts.ts:11"}, "properties": {"repobilityId": "407f865f07c56665", "scanner": "scanner-primary", "fingerprint": "2ae04e09c4f37932", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b9df97afff72f5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ProyectoHojaVidaForm.tsx:88"}, "properties": {"repobilityId": "11a8edd7e01048c3", "scanner": "scanner-primary", "fingerprint": "2b9df97afff72f5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5198ea798a32522f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageInpaintingEditor.tsx:234"}, "properties": {"repobilityId": "54e1e01737057bf6", "scanner": "scanner-primary", "fingerprint": "5198ea798a32522f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3187f94d057c34ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageCropModal.tsx:138"}, "properties": {"repobilityId": "b86afe28fc74645b", "scanner": "scanner-primary", "fingerprint": "3187f94d057c34ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e3eab8780f3a149", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/BeforeAfterComparison.tsx:78"}, "properties": {"repobilityId": "9f397a14f934003f", "scanner": "scanner-primary", "fingerprint": "8e3eab8780f3a149", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f653b848209718fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/ImageExpansionEditor.tsx:241"}, "properties": {"repobilityId": "6e1c6ccca4c1054e", "scanner": "scanner-primary", "fingerprint": "f653b848209718fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ccf5a88a64fd0d9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/MediaUploadImproved.tsx:58"}, "properties": {"repobilityId": "0af10c17b75b1bce", "scanner": "scanner-primary", "fingerprint": "ccf5a88a64fd0d9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-979d6105ca83933d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/MediaManager.tsx:73"}, "properties": {"repobilityId": "6213641dcd7eeef0", "scanner": "scanner-primary", "fingerprint": "979d6105ca83933d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a34276bfc23924c3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/CategoryEditModal.tsx:275"}, "properties": {"repobilityId": "f51b2109c857e7e9", "scanner": "scanner-primary", "fingerprint": "a34276bfc23924c3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b88b1b336720fe0a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/media/MediaManager.tsx:151"}, "properties": {"repobilityId": "c1c530a16fe52284", "scanner": "scanner-primary", "fingerprint": "b88b1b336720fe0a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d545fe4b9c3001ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/shared/ListCrudEditor.tsx:351"}, "properties": {"repobilityId": "c9a5fd143c863cfa", "scanner": "scanner-primary", "fingerprint": "d545fe4b9c3001ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2267a011211ad0db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/categories/CategoriaDetailEditor.tsx:345"}, "properties": {"repobilityId": "b9315a6aebe5d7d9", "scanner": "scanner-primary", "fingerprint": "2267a011211ad0db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c23fee762d066b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/services/ServicioDetailEditor.tsx:274"}, "properties": {"repobilityId": "c13fbcd43a398b82", "scanner": "scanner-primary", "fingerprint": "1c23fee762d066b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-197300f619ebbe55", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/obras/ObraDetailEditor.tsx:189"}, "properties": {"repobilityId": "aeb0ca48398c1455", "scanner": "scanner-primary", "fingerprint": "197300f619ebbe55", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e93fbf84dadc7dd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/guias/GuiaTemplate.tsx:1"}, "properties": {"repobilityId": "5e4051ae0173a2fb", "scanner": "scanner-primary", "fingerprint": "e93fbf84dadc7dd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f6af1889c4434fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/upscale-image/route.ts:82"}, "properties": {"repobilityId": "de088822a63c9a0e", "scanner": "scanner-primary", "fingerprint": "3f6af1889c4434fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e8c9bf9be5a1e7f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/inpaint-image/route.ts:94"}, "properties": {"repobilityId": "206196f6e674e7d9", "scanner": "scanner-primary", "fingerprint": "e8c9bf9be5a1e7f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00d7a86159ab4e84", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/optimize-image/route.ts:31"}, "properties": {"repobilityId": "0bb0e21b384ef9ca", "scanner": "scanner-primary", "fingerprint": "00d7a86159ab4e84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6687e8de32a9b62a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/expand-image/route.ts:94"}, "properties": {"repobilityId": "4ae66c5fbfa509d3", "scanner": "scanner-primary", "fingerprint": "6687e8de32a9b62a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed6de0bc61fdaf05", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/UsersAdminClient.tsx:144"}, "properties": {"repobilityId": "040466f49b9974ea", "scanner": "scanner-primary", "fingerprint": "ed6de0bc61fdaf05", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3074696282e37d4c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/clientes/[id]/page.tsx:182"}, "properties": {"repobilityId": "3058754bf90e6d16", "scanner": "scanner-primary", "fingerprint": "3074696282e37d4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a80bd39597c3b590", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/messages/[id]/page.tsx:102"}, "properties": {"repobilityId": "400bd0490abd2ff8", "scanner": "scanner-primary", "fingerprint": "a80bd39597c3b590", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-200d785f32575a6e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/contactos-whatsapp/ContactosWhatsAppClient.tsx:153"}, "properties": {"repobilityId": "3db325a2fa8b4d35", "scanner": "scanner-primary", "fingerprint": "200d785f32575a6e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68fb4c2a67520ed6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/contacto/ContactoContent.tsx:135"}, "properties": {"repobilityId": "240ba851be23710a", "scanner": "scanner-primary", "fingerprint": "68fb4c2a67520ed6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4876faf6e2e8e9fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(public)/estructuras-metalicas/[ciudad]/page.tsx:100"}, "properties": {"repobilityId": "f1ce8db9a62308cd", "scanner": "scanner-primary", "fingerprint": "4876faf6e2e8e9fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c7ffabb73905598", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/(public)/servicios/[slug]/page.tsx:147"}, "properties": {"repobilityId": "9f3aab7177cb0f90", "scanner": "scanner-primary", "fingerprint": "8c7ffabb73905598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c16952f36715bbde", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/soluciones.ts:3"}, "properties": {"repobilityId": "0c35879585a0849f", "scanner": "scanner-primary", "fingerprint": "c16952f36715bbde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3eb199cc7e5e9b2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/landings-schema.ts:1"}, "properties": {"repobilityId": "6782734aff489f07", "scanner": "scanner-primary", "fingerprint": "3eb199cc7e5e9b2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c62e523658d290a", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/ciudades.ts:3"}, "properties": {"repobilityId": "e178fc9f6fc467a4", "scanner": "scanner-primary", "fingerprint": "9c62e523658d290a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-816e388169b96e25", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/guias.ts:1"}, "properties": {"repobilityId": "8adbe94d73eafb9d", "scanner": "scanner-primary", "fingerprint": "816e388169b96e25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c3550e5973dae90", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/content/landings.ts:4"}, "properties": {"repobilityId": "201c3547a2230d35", "scanner": "scanner-primary", "fingerprint": "1c3550e5973dae90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59b992d62d86a65a", "level": "note", "message": {"text": "25 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "58b9516d72ffa8ba", "scanner": "scanner-primary", "fingerprint": "59b992d62d86a65a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}