{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b56cd0a868ae9130", "name": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/head.built.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/head.built.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ddfbb8ac1caa65a", "name": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/main.pretty.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/main.pretty.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acf9608130705d5d", "name": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/head.pretty.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/head.pretty.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dfa975bb20e468b3", "name": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/main.built.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/main.built.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c541440a3da9301e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/JsonLd.tsx:35", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/JsonLd.tsx:35"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1eb171b6c088c34", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:108", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:108"}, "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-5de37af24670db74", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/feedback/route.ts:33", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/feedback/route.ts:33"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b76c48c28f84eba9", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/landing/components/landing/LandingPage.tsx:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/landing/components/landing/LandingPage.tsx: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-dac8a87e319f41c9", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/upsell/utils/insuranceTelemetry.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/upsell/utils/insuranceTelemetry.ts: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-803761a9b35d28e2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/upsell/components/upsell/AccessoryDetailModa", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/upsell/components/upsell/AccessoryDetailModal.tsx:283"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ba99dbfd3d22d37", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/upsell/components/upsell/InsuranceDetailModa", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/upsell/components/upsell/InsuranceDetailModal.tsx:310"}, "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-ef4fef028cfce929", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/comparador/components/comparator/DesignStyle", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/comparador/components/comparator/DesignStyleB.tsx:185"}, "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-610f57d7522a719a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/hero/components/hero/SocialProof.tsx:208", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/hero/components/hero/SocialProof.tsx:208"}, "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-d2d24b9ffff66dc4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/quiz/components/quiz/progress/QuizProgress.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/quiz/components/quiz/progress/QuizProgress.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff71bc8f06bb69bf", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/quiz/quiz-preview/page.tsx:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/quiz/quiz-preview/page.tsx:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2963dbc2664e293", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/catalogo/catalog-preview/page.tsx:439", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/catalogo/catalog-preview/page.tsx:439"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4abd456ed5647587", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/CartBar.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/CartBar.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c965153dc86b91f8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/QuickUsageCards.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/QuickUsageCards.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dee2e2cd967ffbe2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/NavbarActions.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/NavbarActions.tsx:339"}, "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-0f0416f06ef42318", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/CartLimitModal.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/CartLimitModal.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3657ac0738a0a7e5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/ResumeFinancingC", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/ResumeFinancingCard.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f7c38af2199ca3d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/filters/brand/Br", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/filters/brand/BrandFilterV4.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a33e91536aaa2cc6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud/wizard/WizardProgress.tsx:70"}, "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-f0a33538792ad0ab", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud/fields/FileUpload.tsx:222"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1dcaead83265d87", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud/product/SelectedProductBar.tsx:124"}, "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-6a8c9d39c95e23ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/wizard-preview/seguros/page", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/wizard-preview/seguros/page.tsx:459"}, "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-67bfb33f17ce7070", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.6/[[...slug]]/LandingPageClient.tsx:403", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.6/[[...slug]]/LandingPageClient.tsx:403"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d36735ecdd1bba7", "name": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/solicitar/context/ProductContext.tsx:535", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/solicitar/context/ProductContext.tsx:535"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-787eacf82ce48e25", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/upsell/Access", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/upsell/AccessoryDetailModal.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bb2e7ec80077df1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/upsell/Insura", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/upsell/InsuranceDetailModal.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e325027919a630ad", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wiz", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/WizardProgress.tsx:199"}, "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-f056cdd570604be8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wi", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/MotivationalCard.tsx:93"}, "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-56453d59c6463623", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fie", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/FileUpload.tsx:268"}, "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-4effa8a9b983d46f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/pro", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/product/SelectedProductBar.tsx:141"}, "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-10ef4a81b7cdb14c", "name": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/product/SelectedPro", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/product/SelectedProductBar.tsx:60"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72b3bfa77ef07776", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/complementos/complemento", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/complementos/complementosClient.tsx:302"}, "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-fe20c06c9791f34d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/confirmacion/components/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/confirmacion/components/received/summary/ProductSummary.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-45752f0fe4d04f0c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/producto/components/detail/cronogr", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/producto/components/detail/cronograma/Cronograma.tsx:332"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ae0115d1b43fa45", "name": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/catalogo/GamerCatalogoClient.tsx:170", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/catalogo/GamerCatalogoClient.tsx:170"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b32457c9439a0d44", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/QuickU", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/QuickUsageCards.tsx:85"}, "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-a0f3403230e62cea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/Navbar", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/NavbarActions.tsx:241"}, "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-ff8dd494389ce30f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/CartLi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/CartLimitModal.tsx:86"}, "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-6d076b533c7473bd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/Search", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/SearchDrawer.tsx:292"}, "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-13baf3332569fbc6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/Resume", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/ResumeFinancingCard.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5564514de419a119", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/filter", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/filters/brand/BrandFilterV4.tsx:98"}, "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-f5b3ecab5563f295", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/sortin", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/sorting/SortDropdown.tsx:39"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-104ffaeb138898b1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/comparator/Des", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/comparator/DesignStyleB.tsx:189"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4002b493ee2b194e", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.6/hooks/useSolicitarFlow.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.6/hooks/useSolicitarFlow.ts:89"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5261d593790248a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:232", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:232"}, "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-b653699bdfec1d45", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/lead/LeadProductsSection.tsx:380", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/lead/LeadProductsSection.tsx:380"}, "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-278e1f8a040a42c6", "name": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/components/zona-gamer/GamerNavbar.tsx:40", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/components/zona-gamer/GamerNavbar.tsx:40"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e42d632ee844cd7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HeroSection.tsx:348", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HeroSection.tsx:348"}, "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-6cf287bcc3de3f1e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/components/hero/SocialProof.tsx:296", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/components/hero/SocialProof.tsx:296"}, "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-807fa1a4170e5a53", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/SocialProof.tsx:127", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/SocialProof.tsx:127"}, "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-71a0094731a3c4ca", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/Benefits.tsx:28", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/Benefits.tsx:28"}, "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-68d54170d254ddaa", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HowItWorks.tsx:108", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HowItWorks.tsx:108"}, "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-303004cbf4a41b29", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/FaqSection.tsx:95", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/FaqSection.tsx:95"}, "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-098730a193bfefd1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HeroCta.tsx:170", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HeroCta.tsx:170"}, "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-04b467dd5aa6e0ed", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioFaq.tsx:86", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioFaq.tsx:86"}, "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-3fee3066ad80e08f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonial", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cecb650a28153864", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonia", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx:49"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d5700ba7f349e29", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioCta.tsx:10", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioCta.tsx:100"}, "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-e9c174d34c3fac48", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/quiz/components/quiz/progress/QuizProgress.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/quiz/components/quiz/progress/QuizProgress.tsx:41"}, "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-0cb4a0d5cd76a404", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/laptops/page.tsx:776", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/laptops/page.tsx:776"}, "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-3468f1ef36a5d0f4", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.2/page.tsx:424", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.2/page.tsx:424"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55f88a31a448f395", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/rejection/alternatives/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/rejection/alternatives/ProductAlternativesV4.tsx:45"}, "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-fd976cd82b183e7f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/approval/share/ShareBut", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/approval/share/ShareButtonsV6.tsx:51"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1598a32f40a59e4b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/approval/nextsteps/Next", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/approval/nextsteps/NextStepsV2.tsx:44"}, "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-9f96d2dd290d9df6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV4.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aec933b2c5907192", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV5.tsx:59"}, "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-4f2633a1709f3dfb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV1.tsx:50"}, "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-cb77c23c5b755b16", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV3.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02aa37d529b06439", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV2.tsx:41"}, "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-658513824d3527e1", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV6.tsx:314", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV6.tsx:314"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76ccd2be3112aa71", "name": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV2.t", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV2.tsx:239"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d16508bd2e5c2646", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV2.tsx:243", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV2.tsx: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-def2fe7a7ccd403e", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV4.tsx:313", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV4.tsx:313"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75ea9d2a7a1f9ded", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV5.tsx:344", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV5.tsx:344"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f8643fba3a18d0e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/comparador/components/comparator/table/Compa", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/comparador/components/comparator/table/ComparisonTableV5.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4549d2ec0c2c293a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/producto/components/detail/similar/SimilarPr", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/producto/components/detail/similar/SimilarProductsV3.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8429c067dc41899b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/producto/components/detail/certifications/Ce", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/producto/components/detail/certifications/CertificationsV2.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d012f5cc0b6d9e88", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/hero/components/hero/social-proof/SocialProo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/hero/components/hero/social-proof/SocialProofV4.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbd1aa042dbd1323", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/hero/components/hero/social-proof/SocialProo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/hero/components/hero/social-proof/SocialProofV1.tsx:198"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-049536c11baea400", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/quiz/page.tsx:393", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/quiz/page.tsx:393"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57b7241595066790", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/progress/QuizProgress.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/progress/QuizProgress.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-721e5187eaa46cb7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV6.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV6.tsx:193"}, "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-fc140eee39e42460", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV1.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV1.tsx:181"}, "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-961c66c36ba7c39d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV2.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV2.tsx:192"}, "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-470988d0999cd918", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/catalogo/catalog-preview/page.tsx:471", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/catalogo/catalog-preview/page.tsx:471"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3f03e64afba909f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/catalogo/components/catalog/cards/ProductCar", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/catalogo/components/catalog/cards/ProductCardV5.tsx:170"}, "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-17ad8b2c4d319963", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/catalogo/components/catalog/filters/brand/Br", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/catalogo/components/catalog/filters/brand/BrandFilterV4.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f9618e995575245", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV2.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-750a706ea48d4fe6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV5.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a2e9b4b29e62cc3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV1.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a02d1554ecee64f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/intro/SolicitudIntroV1.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1209ec608c8d6c01", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/wizard-solicitud/wizard-preview/page.tsx:498", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/wizard-solicitud/wizard-preview/page.tsx:498"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f73975a75828e47f", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/estados/page.tsx:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/estados/page.tsx: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-604881530912591d", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/solicitud/page.tsx:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/solicitud/page.tsx: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-a2556cfd33eea8a2", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/solicitud/components/wizard/WizardContainer.tsx:246", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/solicitud/components/wizard/WizardContainer.tsx:246"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ce8e408daaae724", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV2.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e9c410bb9cd30a0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FileUploadV3", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FileUploadV3.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8e284802cfb7818", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV1.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0dc553a6692a9199", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV3.tsx:116"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5ae225538ea26ea", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/wizard/steps/personal/page.tsx:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/wizard/steps/personal/page.tsx: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-c4f9b063e2ab4e0a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/comparador/components/comparator/table/Compa", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/comparador/components/comparator/table/ComparisonTableV3.tsx:137"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cce76bbec3601693", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/page.tsx:230", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/page.tsx:230"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6beda60dedc01078", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/components/quiz/HelpQuiz.tsx:173", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/components/quiz/HelpQuiz.tsx:173"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f5f7798710b876c", "name": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/quiz-preview/page.tsx:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/quiz-preview/page.tsx: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-8f060d2976c99375", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/catalogo/components/catalog/filters/Commerci", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/catalogo/components/catalog/filters/CommercialFilters.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e4e37c477e4a052", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/catalogo/components/catalog/filters/Technica", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/catalogo/components/catalog/filters/TechnicalFilters.tsx:212"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3744d4f112034d6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/switch-demo/page.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/switch-demo/page.tsx:192"}, "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-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-886e1d023c31954c", "name": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/head.built.js:1", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/head.built.js:1"}, "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-4890a40ae8ae16bb", "name": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/main.pretty.js:1", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/main.pretty.js:1"}, "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-cae81adc332d281c", "name": "Insecure pattern 'insert_adjacent_html' in reference/apple-macbook-neo/main.pretty.js:1", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in reference/apple-macbook-neo/main.pretty.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47bdd3d6781063ae", "name": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/head.pretty.js:1", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/head.pretty.js:1"}, "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-a7fccb49b21719b0", "name": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/main.built.js:1", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/main.built.js:1"}, "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-3841721ddd549815", "name": "Insecure pattern 'insert_adjacent_html' in reference/apple-macbook-neo/main.built.js:1", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in reference/apple-macbook-neo/main.built.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ba55c9258b9e836", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/JsonLd.tsx:35", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/JsonLd.tsx:35"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b72c2961cbd46a39", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:108", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:108"}, "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-4a7f99bd0060ce41", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/Motivat", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/MotivationalCard.tsx:93"}, "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-11321b5259d5eb98", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/LocationModal.tsx:62"}, "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-bb7eb6ea98c0d973", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:232", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:232"}, "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-e02d82706bee06a3", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/lead/LeadProductsSection.tsx:380", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/lead/LeadProductsSection.tsx:380"}, "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-cdfbe6c6d0bceed7", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HeroSection.tsx:348", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HeroSection.tsx:348"}, "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-46c5a465b0fb317b", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/SocialProof.tsx:127", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/SocialProof.tsx:127"}, "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-6421191a3b3138f4", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/Benefits.tsx:28", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/Benefits.tsx:28"}, "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-83481aa45c9c5c97", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HowItWorks.tsx:108", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HowItWorks.tsx:108"}, "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-3e0357aa26c6d603", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/FaqSection.tsx:95", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/FaqSection.tsx:95"}, "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-f68b0bfb2ad93886", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HeroCta.tsx:170", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HeroCta.tsx:170"}, "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-57fb6f186af1e04d", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioFaq.tsx:86", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioFaq.tsx:86"}, "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-3babff516aea0099", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx:49", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx:49"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af04d9dd79256b89", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioCta.tsx:100", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioCta.tsx:100"}, "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-c047791528d10e22", "name": "Possible secret in src/app/prototipos/_shared/components/FeedbackButtonSimple.tsx", "shortDescription": {"text": "Possible secret in src/app/prototipos/_shared/components/FeedbackButtonSimple.tsx"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-2ba25fa38b3a12f6", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fi", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV3.tsx:204"}, "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-cff5f12dd64efe31", "name": "Possible secret in e2e/pricing/promotions.spec.ts", "shortDescription": {"text": "Possible secret in e2e/pricing/promotions.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-53c95902d1d00dd6", "name": "Possible secret in e2e/pricing/labels.spec.ts", "shortDescription": {"text": "Possible secret in e2e/pricing/labels.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3a353ab3b464b4db", "name": "Insecure pattern 'subprocess_shell_true' in .claude/skills/typescript-expert/scripts/ts_diagnostic.py:16", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in .claude/skills/typescript-expert/scripts/ts_diagnostic.py:16"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "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-ad6701f0a8405e22", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8e3fd04dea4e257", "name": "Very large file: src/app/prototipos/0.5/catalogo/catalog-preview/page.tsx (1564 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.5/catalogo/catalog-preview/page.tsx (1564 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-11ff43d8bae88b47", "name": "Very large file: src/app/prototipos/0.6/[landing]/layout.tsx (1654 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/[landing]/layout.tsx (1654 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-7d32cb576c2e2b1a", "name": "Very large file: src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx (1377 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx (1377 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-e4f2020a8247c326", "name": "Very large file: src/app/prototipos/0.6/[landing]/solicitar/[stepSlug]/StepClient.tsx (1502 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/[landing]/solicitar/[stepSlug]/StepClient.tsx (1502 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-11f93e92b3eb2849", "name": "Very large file: src/app/prototipos/0.6/[landing]/producto/GamerProductDetailClient.tsx (3098 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/[landing]/producto/GamerProductDetailClient.tsx (3098 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-1297c78ab7bb770f", "name": "Very large file: src/app/prototipos/0.6/[landing]/catalogo/CatalogoClient.tsx (2424 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/[landing]/catalogo/CatalogoClient.tsx (2424 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-b969df9c20e172f5", "name": "Very large file: src/app/prototipos/0.6/[landing]/catalogo/GamerCatalogoClient.tsx (2879 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/[landing]/catalogo/GamerCatalogoClient.tsx (2879 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-7e3cd06063d42875", "name": "Very large file: src/app/prototipos/0.6/components/product-landing/NvidiaLanding.tsx (874 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/components/product-landing/NvidiaLanding.tsx (874 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-df3ef7f8a7931ada", "name": "Very large file: src/app/prototipos/0.6/components/zona-gamer/GamerNavbar.tsx (1195 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/components/zona-gamer/GamerNavbar.tsx (1195 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-eae9a220322f6c17", "name": "Very large file: src/app/prototipos/0.6/services/catalogApi.ts (1487 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/services/catalogApi.ts (1487 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-f0f2cc202224c03e", "name": "Very large file: src/app/prototipos/0.6/services/landingApi.ts (1464 lines)", "shortDescription": {"text": "Very large file: src/app/prototipos/0.6/services/landingApi.ts (1464 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": "31 test file(s) for 1680 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df93ce207aaa8d5d", "name": "54 TODO/FIXME markers", "shortDescription": {"text": "54 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 88 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 532 placeholder/mock markers across 168 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-811550f2a497bb86", "name": "Agent instruction/config may expose a secret: .claude/agents/ui-ux-designer.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/ui-ux-designer.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2709eef5ede4320f", "name": "Agent instruction/config may expose a secret: .claude/agents/nextjs-architecture-expert.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/nextjs-architecture-expert.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac5d659eab58d762", "name": "Agent authority lacks a verifier contract: .claude/agents/nextjs-architecture-expert.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/nextjs-architecture-expert.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b8a4f2a9f9845937", "name": "Agent authority lacks a verifier contract: .claude/agents/cli-ui-designer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/cli-ui-designer.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b81115cef228be8a", "name": "Agent authority lacks a verifier contract: .claude/commands/nextjs-bundle-analyzer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/nextjs-bundle-analyzer.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e90f568b86ae306e", "name": "Agent authority lacks a verifier contract: .claude/docs/PLAN_ITERACION_SECCIONES.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/PLAN_ITERACION_SECCIONES.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1f81a87135704255", "name": "Agent authority lacks a verifier contract: .claude/docs/README.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4df0faf5a9110442", "name": "Agent instruction/config may expose a secret: .claude/docs/0.5/CONVENTIONS.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/docs/0.5/CONVENTIONS.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81a177c4d6046390", "name": "Agent authority lacks a verifier contract: .claude/docs/0.5/CONVENTIONS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.5/CONVENTIONS.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56d772f1ea0ee9d0", "name": "Agent authority lacks a verifier contract: .claude/docs/0.5/section-specs/README.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.5/section-specs/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-173523fe398ef9ba", "name": "Agent authority lacks a verifier contract: .claude/docs/0.6/CATALOGO.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.6/CATALOGO.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7dc18c9224d501e", "name": "Agent authority lacks a verifier contract: .claude/docs/0.6/DETALLE_PRODUCTO.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.6/DETALLE_PRODUCTO.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d106201a56ccf26", "name": "Agent authority lacks a verifier contract: .claude/docs/0.4/CONVENTIONS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.4/CONVENTIONS.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6bc01aa68b1bbf0b", "name": "Agent authority lacks a verifier contract: .claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8426cfef6a2e616c", "name": "Agent instruction contains unpinned remote install: .claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec543361f3370076", "name": "Agent authority lacks a verifier contract: .claude/docs/0.4/section-specs/README.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.4/section-specs/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00fdcb138bfed9c9", "name": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-515b4d034404f4e6", "name": "Agent instruction contains unpinned remote install: .claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-94569adff209d074", "name": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/PROMPT_01_HERO_LANDING.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/PROMPT_01_HERO_LANDING.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f45b722e7555c7ab", "name": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/README.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d75aaee2ba4e22b9", "name": "Agent authority lacks a verifier contract: .claude/docs/legacy/PROMPT_HERO_SECTION_BALDECASH.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/legacy/PROMPT_HERO_SECTION_BALDECASH.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3924094adfa37b56", "name": "Agent authority lacks a verifier contract: .claude/docs/legacy/WEBFLOW_LAPTOP_IMAGES.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/docs/legacy/WEBFLOW_LAPTOP_IMAGES.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5fb1e8f35168bc1", "name": "Agent authority lacks a verifier contract: .claude/skills/typescript-expert/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/typescript-expert/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3aff60e39fd80d7d", "name": "Agent authority lacks a verifier contract: .claude/skills/web-performance-optimization/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/web-performance-optimization/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-94b9ea35c7d9104c", "name": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/rendering-svg-precision.", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/rendering-svg-precision.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-279dd155a377008a", "name": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/async-parallel.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/async-parallel.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2280db2247d9bef", "name": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/server-cache-react.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/server-cache-react.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4f15068aec1835e", "name": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/server-parallel-fetching", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/server-parallel-fetching.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6539440eda40883", "name": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/async-dependencies.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/async-dependencies.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a308dcba8e92e44e", "name": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/js-length-check-first.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/js-length-check-first.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd25e2ab85c5e3d2", "name": "Commented-code block (6 lines) in jest.setup.js:46", "shortDescription": {"text": "Commented-code block (6 lines) in jest.setup.js:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4a2401539db88bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 reference/apple-macbook-neo/main.pretty.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 reference/apple-macbook-neo/main.pretty.js:1"}, "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-08101ff3c61f7286", "name": "`fetch()` without try/.catch or AbortSignal \u2014 reference/apple-macbook-neo/main.built.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 reference/apple-macbook-neo/main.built.js:1"}, "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-aee2a7ba5b33440a", "name": "Commented-code block (9 lines) in src/app/api/feedback/route.ts:36", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/feedback/route.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6495ce412bfc1cb2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feedback/route.ts:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feedback/route.ts:50"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-784f30cb433410e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.5/catalogo/lib/api.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.5/catalogo/lib/api.ts:40"}, "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-d5e1d7b1229e73f1", "name": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/layout.tsx:640", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/layout.tsx:640"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d568dd442ed39337", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/layout.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/layout.tsx:90"}, "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-4f94701385a13191", "name": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx:296", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx:296"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-288192e86f9b3d90", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx:421", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx:421"}, "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-1039785517cb5331", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/solicitar/context/SessionContext.tsx:251", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/solicitar/context/SessionContext.tsx:251"}, "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-d4797deda6853054", "name": "Commented-code block (6 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/AddressAutocomp", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/AddressAutocompleteField.tsx:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb025fd838ad73f9", "name": "Commented-code block (10 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/LocationModal.", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/LocationModal.tsx:241"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87e936ae7e4cfc51", "name": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/CascadingSelect", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/CascadingSelectField.tsx:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e53a611beec0a364", "name": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/sections/AccessoriesSe", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/sections/AccessoriesSection.tsx:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa3c30f2670e37d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/producto/api/productDetailApi.ts:628", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/producto/api/productDetailApi.ts:628"}, "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-229fc45f938de7eb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/producto/utils/pdf/utils.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/producto/utils/pdf/utils.ts:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a605be0d93ed7e5d", "name": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/catalogo/CatalogoClient.tsx:175", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/catalogo/CatalogoClient.tsx:175"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-420460e904476ff7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/catalogo/hooks/useCatalogProducts.ts:460", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/catalogo/hooks/useCatalogProducts.ts:460"}, "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-4c6d3be97fc71284", "name": "Commented-code block (7 lines) in src/app/prototipos/0.6/[landing]/catalogo/components/catalog/cards/ProductCard.tsx:231", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/prototipos/0.6/[landing]/catalogo/components/catalog/cards/ProductCard.tsx:231"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd707524262571e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/lead/LeadLeadForm.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-42670d45baab24a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/hero/VipCountdownOverlay.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/hero/VipCountdownOverlay.tsx:123"}, "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-e5d0abe951243f98", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/hero/DniModal.tsx:184", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/hero/DniModal.tsx:184"}, "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-12f3c1b4098a4880", "name": "Legacy-named symbol `ApiFilterOptionsLegacy` in src/app/prototipos/0.6/services/catalogApi.ts:200", "shortDescription": {"text": "Legacy-named symbol `ApiFilterOptionsLegacy` in src/app/prototipos/0.6/services/catalogApi.ts:200"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ecb17578f0aa32f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/catalogApi.ts:441", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/catalogApi.ts:441"}, "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-55d5386b5d65a2fb", "name": "Commented-code block (6 lines) in src/app/prototipos/0.6/services/wizardApi.ts:130", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/prototipos/0.6/services/wizardApi.ts:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e991d6459a31bd1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/wizardApi.ts:232", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/wizardApi.ts:232"}, "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-f6ec35d807c5d564", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/quizApi.ts:177", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/quizApi.ts:177"}, "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-3c9a307fb0a5ca3a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/landingApi.ts:255", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/landingApi.ts:255"}, "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-7607918b5fb305d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/applicationApi.ts:165", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/applicationApi.ts:165"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c774888656a9ecd", "name": "Commented-code block (5 lines) in src/app/prototipos/_shared/hooks/usePrototypeConfig.ts:134", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/prototipos/_shared/hooks/usePrototypeConfig.ts:134"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfc364332573fe44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/hooks/usePrototypeConfig.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/hooks/usePrototypeConfig.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f221dfbf708db44f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/components/FeedbackButtonSimple.tsx:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/components/FeedbackButtonSimple.tsx:105"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56f32a6530015100", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/components/FeedbackModal.tsx:270", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/components/FeedbackModal.tsx:270"}, "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-d395c2876c825196", "name": "Commented-code block (7 lines) in src/app/prototipos/0.4/comparador/components/comparator/table/ComparisonTableV1.tsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/prototipos/0.4/comparador/components/comparator/table/ComparisonTableV1.tsx:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bce7e8284cc85068", "name": "Commented-code block (7 lines) in src/app/prototipos/0.4/quiz/types/quiz.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/prototipos/0.4/quiz/types/quiz.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}}]}}, "automationDetails": {"id": "repobility/24465"}, "properties": {"repository": "baldecash-team/baldecash", "repoUrl": "https://github.com/baldecash-team/baldecash", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-b56cd0a868ae9130", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/head.built.js:1"}, "properties": {"repobilityId": "7b1d47c77f8825dd", "scanner": "scanner-primary", "fingerprint": "b56cd0a868ae9130", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ddfbb8ac1caa65a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/main.pretty.js:1"}, "properties": {"repobilityId": "405579bb353d7eda", "scanner": "scanner-primary", "fingerprint": "0ddfbb8ac1caa65a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acf9608130705d5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/head.pretty.js:1"}, "properties": {"repobilityId": "1bf3b9ec28100c0c", "scanner": "scanner-primary", "fingerprint": "acf9608130705d5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dfa975bb20e468b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 reference/apple-macbook-neo/main.built.js:1"}, "properties": {"repobilityId": "c701abacea0312a8", "scanner": "scanner-primary", "fingerprint": "dfa975bb20e468b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c541440a3da9301e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/JsonLd.tsx:35"}, "properties": {"repobilityId": "2fb567f8d556af52", "scanner": "scanner-primary", "fingerprint": "c541440a3da9301e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b1eb171b6c088c34", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:108"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "b1eb171b6c088c34", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5de37af24670db74", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/feedback/route.ts:33"}, "properties": {"repobilityId": "668045210d9e5226", "scanner": "scanner-primary", "fingerprint": "5de37af24670db74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b76c48c28f84eba9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/landing/components/landing/LandingPage.tsx:21"}, "properties": {"repobilityId": "824437dc096bbe6c", "scanner": "scanner-primary", "fingerprint": "b76c48c28f84eba9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dac8a87e319f41c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/upsell/utils/insuranceTelemetry.ts:101"}, "properties": {"repobilityId": "1b56a20ddae98c36", "scanner": "scanner-primary", "fingerprint": "dac8a87e319f41c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-803761a9b35d28e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/upsell/components/upsell/AccessoryDetailModal.tsx:283"}, "properties": {"repobilityId": "f4c5f3af5beae7ce", "scanner": "scanner-primary", "fingerprint": "803761a9b35d28e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ba99dbfd3d22d37", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/upsell/components/upsell/InsuranceDetailModal.tsx:310"}, "properties": {"repobilityId": "f0bdfdc5d2c89034", "scanner": "scanner-primary", "fingerprint": "0ba99dbfd3d22d37", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef4fef028cfce929", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/comparador/components/comparator/DesignStyleB.tsx:185"}, "properties": {"repobilityId": "cb00779c37362f16", "scanner": "scanner-primary", "fingerprint": "ef4fef028cfce929", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-610f57d7522a719a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/hero/components/hero/SocialProof.tsx:208"}, "properties": {"repobilityId": "b90d820fc26a1d0c", "scanner": "scanner-primary", "fingerprint": "610f57d7522a719a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2d24b9ffff66dc4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/quiz/components/quiz/progress/QuizProgress.tsx:40"}, "properties": {"repobilityId": "4aebd5408d840b61", "scanner": "scanner-primary", "fingerprint": "d2d24b9ffff66dc4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff71bc8f06bb69bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/quiz/quiz-preview/page.tsx:95"}, "properties": {"repobilityId": "cdef9911e65d50ec", "scanner": "scanner-primary", "fingerprint": "ff71bc8f06bb69bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2963dbc2664e293", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.5/catalogo/catalog-preview/page.tsx:439"}, "properties": {"repobilityId": "25455ebfaae6aab0", "scanner": "scanner-primary", "fingerprint": "e2963dbc2664e293", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4abd456ed5647587", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/CartBar.tsx:82"}, "properties": {"repobilityId": "fb17c7689233c5b3", "scanner": "scanner-primary", "fingerprint": "4abd456ed5647587", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c965153dc86b91f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/QuickUsageCards.tsx:114"}, "properties": {"repobilityId": "3bcfd8743bef9a48", "scanner": "scanner-primary", "fingerprint": "c965153dc86b91f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dee2e2cd967ffbe2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/NavbarActions.tsx:339"}, "properties": {"repobilityId": "deb49a2e6c4e11d0", "scanner": "scanner-primary", "fingerprint": "dee2e2cd967ffbe2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f0416f06ef42318", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/CartLimitModal.tsx:90"}, "properties": {"repobilityId": "f7a31cd122ca2647", "scanner": "scanner-primary", "fingerprint": "0f0416f06ef42318", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3657ac0738a0a7e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/ResumeFinancingCard.tsx:90"}, "properties": {"repobilityId": "bebd2a8aec07525b", "scanner": "scanner-primary", "fingerprint": "3657ac0738a0a7e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f7c38af2199ca3d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/catalogo/components/catalog/filters/brand/BrandFilterV4.tsx:97"}, "properties": {"repobilityId": "a4943ff5242331c2", "scanner": "scanner-primary", "fingerprint": "9f7c38af2199ca3d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a33e91536aaa2cc6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud/wizard/WizardProgress.tsx:70"}, "properties": {"repobilityId": "67cdd6b5595dcf17", "scanner": "scanner-primary", "fingerprint": "a33e91536aaa2cc6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0a33538792ad0ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud/fields/FileUpload.tsx:222"}, "properties": {"repobilityId": "4077e090755a06d7", "scanner": "scanner-primary", "fingerprint": "f0a33538792ad0ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e1dcaead83265d87", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/components/wizard-solicitud/product/SelectedProductBar.tsx:124"}, "properties": {"repobilityId": "df9a768b89b452dc", "scanner": "scanner-primary", "fingerprint": "e1dcaead83265d87", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a8c9d39c95e23ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.5/wizard-solicitud/wizard-preview/seguros/page.tsx:459"}, "properties": {"repobilityId": "154cc0ae64761579", "scanner": "scanner-primary", "fingerprint": "6a8c9d39c95e23ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67bfb33f17ce7070", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.6/[[...slug]]/LandingPageClient.tsx:403"}, "properties": {"repobilityId": "bf9691ddc878cb36", "scanner": "scanner-primary", "fingerprint": "67bfb33f17ce7070", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d36735ecdd1bba7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/solicitar/context/ProductContext.tsx:535"}, "properties": {"repobilityId": "89118dae419c86da", "scanner": "scanner-primary", "fingerprint": "4d36735ecdd1bba7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-787eacf82ce48e25", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/upsell/AccessoryDetailModal.tsx:73"}, "properties": {"repobilityId": "5c84ef8d934741ae", "scanner": "scanner-primary", "fingerprint": "787eacf82ce48e25", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bb2e7ec80077df1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/upsell/InsuranceDetailModal.tsx:89"}, "properties": {"repobilityId": "099dc5b6be0080e2", "scanner": "scanner-primary", "fingerprint": "3bb2e7ec80077df1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e325027919a630ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/WizardProgress.tsx:199"}, "properties": {"repobilityId": "4f89f148be340397", "scanner": "scanner-primary", "fingerprint": "e325027919a630ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f056cdd570604be8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/MotivationalCard.tsx:93"}, "properties": {"repobilityId": "e838e60ce5517e1f", "scanner": "scanner-primary", "fingerprint": "f056cdd570604be8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-56453d59c6463623", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/FileUpload.tsx:268"}, "properties": {"repobilityId": "c7569549cc12c0cb", "scanner": "scanner-primary", "fingerprint": "56453d59c6463623", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4effa8a9b983d46f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/product/SelectedProductBar.tsx:141"}, "properties": {"repobilityId": "9f1fa3fd8f5cb425", "scanner": "scanner-primary", "fingerprint": "4effa8a9b983d46f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-10ef4a81b7cdb14c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/product/SelectedProductBar.tsx:60"}, "properties": {"repobilityId": "0a306553a2f92140", "scanner": "scanner-primary", "fingerprint": "10ef4a81b7cdb14c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-72b3bfa77ef07776", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/complementos/complementosClient.tsx:302"}, "properties": {"repobilityId": "7f4013cf0eae023d", "scanner": "scanner-primary", "fingerprint": "72b3bfa77ef07776", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe20c06c9791f34d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/solicitar/confirmacion/components/received/summary/ProductSummary.tsx:262"}, "properties": {"repobilityId": "d582867b5fb949f9", "scanner": "scanner-primary", "fingerprint": "fe20c06c9791f34d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-45752f0fe4d04f0c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/producto/components/detail/cronograma/Cronograma.tsx:332"}, "properties": {"repobilityId": "1de3bcf32080612b", "scanner": "scanner-primary", "fingerprint": "45752f0fe4d04f0c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ae0115d1b43fa45", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/[landing]/catalogo/GamerCatalogoClient.tsx:170"}, "properties": {"repobilityId": "ff464225f7ae0e27", "scanner": "scanner-primary", "fingerprint": "1ae0115d1b43fa45", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b32457c9439a0d44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/QuickUsageCards.tsx:85"}, "properties": {"repobilityId": "b9abb3874a05b53c", "scanner": "scanner-primary", "fingerprint": "b32457c9439a0d44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0f3403230e62cea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/NavbarActions.tsx:241"}, "properties": {"repobilityId": "255797852d905768", "scanner": "scanner-primary", "fingerprint": "a0f3403230e62cea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff8dd494389ce30f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/CartLimitModal.tsx:86"}, "properties": {"repobilityId": "55a952a9d5e89182", "scanner": "scanner-primary", "fingerprint": "ff8dd494389ce30f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d076b533c7473bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/SearchDrawer.tsx:292"}, "properties": {"repobilityId": "d9fe5a11225334d7", "scanner": "scanner-primary", "fingerprint": "6d076b533c7473bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13baf3332569fbc6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/ResumeFinancingCard.tsx:90"}, "properties": {"repobilityId": "c710b4b43dab94ae", "scanner": "scanner-primary", "fingerprint": "13baf3332569fbc6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5564514de419a119", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/filters/brand/BrandFilterV4.tsx:98"}, "properties": {"repobilityId": "baebfe7c899a7a71", "scanner": "scanner-primary", "fingerprint": "5564514de419a119", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f5b3ecab5563f295", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/catalog/sorting/SortDropdown.tsx:39"}, "properties": {"repobilityId": "d19a07d8bba82d24", "scanner": "scanner-primary", "fingerprint": "f5b3ecab5563f295", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-104ffaeb138898b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/[landing]/catalogo/components/comparator/DesignStyleB.tsx:189"}, "properties": {"repobilityId": "ad51293576b21e07", "scanner": "scanner-primary", "fingerprint": "104ffaeb138898b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4002b493ee2b194e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.6/hooks/useSolicitarFlow.ts:89"}, "properties": {"repobilityId": "86b203e5c88ccc01", "scanner": "scanner-primary", "fingerprint": "4002b493ee2b194e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5261d593790248a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:232"}, "properties": {"repobilityId": "976314e073dfdd23", "scanner": "scanner-primary", "fingerprint": "d5261d593790248a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b653699bdfec1d45", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/lead/LeadProductsSection.tsx:380"}, "properties": {"repobilityId": "830f8779ee467083", "scanner": "scanner-primary", "fingerprint": "b653699bdfec1d45", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-278e1f8a040a42c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.6/components/zona-gamer/GamerNavbar.tsx:40"}, "properties": {"repobilityId": "85388d07169cc647", "scanner": "scanner-primary", "fingerprint": "278e1f8a040a42c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7e42d632ee844cd7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HeroSection.tsx:348"}, "properties": {"repobilityId": "83d2333d92bbf2c8", "scanner": "scanner-primary", "fingerprint": "7e42d632ee844cd7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6cf287bcc3de3f1e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/components/hero/SocialProof.tsx:296"}, "properties": {"repobilityId": "74606ea1b32ec801", "scanner": "scanner-primary", "fingerprint": "6cf287bcc3de3f1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-807fa1a4170e5a53", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/SocialProof.tsx:127"}, "properties": {"repobilityId": "ab48c6b9fbe55abd", "scanner": "scanner-primary", "fingerprint": "807fa1a4170e5a53", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-71a0094731a3c4ca", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/Benefits.tsx:28"}, "properties": {"repobilityId": "8c05f4cdb07e1a59", "scanner": "scanner-primary", "fingerprint": "71a0094731a3c4ca", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-68d54170d254ddaa", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HowItWorks.tsx:108"}, "properties": {"repobilityId": "8582d5971e30b30f", "scanner": "scanner-primary", "fingerprint": "68d54170d254ddaa", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-303004cbf4a41b29", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/FaqSection.tsx:95"}, "properties": {"repobilityId": "efc28ad07aaa20f6", "scanner": "scanner-primary", "fingerprint": "303004cbf4a41b29", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-098730a193bfefd1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/HeroCta.tsx:170"}, "properties": {"repobilityId": "1c947657f00e1d4b", "scanner": "scanner-primary", "fingerprint": "098730a193bfefd1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-04b467dd5aa6e0ed", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioFaq.tsx:86"}, "properties": {"repobilityId": "2b741f481b78ae97", "scanner": "scanner-primary", "fingerprint": "04b467dd5aa6e0ed", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3fee3066ad80e08f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx:103"}, "properties": {"repobilityId": "ae481ec5fc2a8ab8", "scanner": "scanner-primary", "fingerprint": "3fee3066ad80e08f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cecb650a28153864", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx:49"}, "properties": {"repobilityId": "38d358b994c43e52", "scanner": "scanner-primary", "fingerprint": "cecb650a28153864", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1d5700ba7f349e29", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/prototipos/0.6/components/hero/convenio/ConvenioCta.tsx:100"}, "properties": {"repobilityId": "5b78a6d03261f423", "scanner": "scanner-primary", "fingerprint": "1d5700ba7f349e29", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e9c174d34c3fac48", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.6/quiz/components/quiz/progress/QuizProgress.tsx:41"}, "properties": {"repobilityId": "00f22d1f8b7b7417", "scanner": "scanner-primary", "fingerprint": "e9c174d34c3fac48", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0cb4a0d5cd76a404", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/laptops/page.tsx:776"}, "properties": {"repobilityId": "ce5f9d7da17e8ec6", "scanner": "scanner-primary", "fingerprint": "0cb4a0d5cd76a404", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3468f1ef36a5d0f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.2/page.tsx:424"}, "properties": {"repobilityId": "a786e570857feb68", "scanner": "scanner-primary", "fingerprint": "3468f1ef36a5d0f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55f88a31a448f395", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/rejection/alternatives/ProductAlternativesV4.tsx:45"}, "properties": {"repobilityId": "0978573c32ad23b7", "scanner": "scanner-primary", "fingerprint": "55f88a31a448f395", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd976cd82b183e7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/approval/share/ShareButtonsV6.tsx:51"}, "properties": {"repobilityId": "73812c5af68e49e9", "scanner": "scanner-primary", "fingerprint": "fd976cd82b183e7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1598a32f40a59e4b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/resultado/components/approval/nextsteps/NextStepsV2.tsx:44"}, "properties": {"repobilityId": "6aa1715f8fa9d6cb", "scanner": "scanner-primary", "fingerprint": "1598a32f40a59e4b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f96d2dd290d9df6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV4.tsx:89"}, "properties": {"repobilityId": "23a1409cb5de3be8", "scanner": "scanner-primary", "fingerprint": "9f96d2dd290d9df6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aec933b2c5907192", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV5.tsx:59"}, "properties": {"repobilityId": "dbf084b20020cd33", "scanner": "scanner-primary", "fingerprint": "aec933b2c5907192", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f2633a1709f3dfb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV1.tsx:50"}, "properties": {"repobilityId": "29daff5930450df7", "scanner": "scanner-primary", "fingerprint": "4f2633a1709f3dfb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb77c23c5b755b16", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV3.tsx:72"}, "properties": {"repobilityId": "ed098d349f6a506f", "scanner": "scanner-primary", "fingerprint": "cb77c23c5b755b16", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02aa37d529b06439", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/upsell/components/upsell/accessories/breakdown/PriceBreakdownV2.tsx:41"}, "properties": {"repobilityId": "817891b5cf08b31e", "scanner": "scanner-primary", "fingerprint": "02aa37d529b06439", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-658513824d3527e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV6.tsx:314"}, "properties": {"repobilityId": "d3a0a4eab57f7215", "scanner": "scanner-primary", "fingerprint": "658513824d3527e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76ccd2be3112aa71", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV2.tsx:239"}, "properties": {"repobilityId": "b54d1c96835b5b67", "scanner": "scanner-primary", "fingerprint": "76ccd2be3112aa71", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d16508bd2e5c2646", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV2.tsx:243"}, "properties": {"repobilityId": "b1358f01b6bb1046", "scanner": "scanner-primary", "fingerprint": "d16508bd2e5c2646", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-def2fe7a7ccd403e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV4.tsx:313"}, "properties": {"repobilityId": "b70f6886c7482d5c", "scanner": "scanner-primary", "fingerprint": "def2fe7a7ccd403e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75ea9d2a7a1f9ded", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/comparador/components/comparator/layout/ComparatorLayoutV5.tsx:344"}, "properties": {"repobilityId": "50e01eb89d339aae", "scanner": "scanner-primary", "fingerprint": "75ea9d2a7a1f9ded", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f8643fba3a18d0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/comparador/components/comparator/table/ComparisonTableV5.tsx:89"}, "properties": {"repobilityId": "1ca8f9de350620a4", "scanner": "scanner-primary", "fingerprint": "6f8643fba3a18d0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4549d2ec0c2c293a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/producto/components/detail/similar/SimilarProductsV3.tsx:102"}, "properties": {"repobilityId": "9ab7b308c0bb292b", "scanner": "scanner-primary", "fingerprint": "4549d2ec0c2c293a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8429c067dc41899b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/producto/components/detail/certifications/CertificationsV2.tsx:63"}, "properties": {"repobilityId": "a9a893bc49390fa7", "scanner": "scanner-primary", "fingerprint": "8429c067dc41899b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d012f5cc0b6d9e88", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/hero/components/hero/social-proof/SocialProofV4.tsx:92"}, "properties": {"repobilityId": "68d7cd4aae3ae91e", "scanner": "scanner-primary", "fingerprint": "d012f5cc0b6d9e88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dbd1aa042dbd1323", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/hero/components/hero/social-proof/SocialProofV1.tsx:198"}, "properties": {"repobilityId": "5042054a3b68250d", "scanner": "scanner-primary", "fingerprint": "dbd1aa042dbd1323", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-049536c11baea400", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/quiz/page.tsx:393"}, "properties": {"repobilityId": "42c8aeabc607b152", "scanner": "scanner-primary", "fingerprint": "049536c11baea400", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-57b7241595066790", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/progress/QuizProgress.tsx:40"}, "properties": {"repobilityId": "ad2de79874b9bd19", "scanner": "scanner-primary", "fingerprint": "57b7241595066790", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-721e5187eaa46cb7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV6.tsx:193"}, "properties": {"repobilityId": "b6b808bd51b001c1", "scanner": "scanner-primary", "fingerprint": "721e5187eaa46cb7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc140eee39e42460", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV1.tsx:181"}, "properties": {"repobilityId": "ab15d534d0087e7f", "scanner": "scanner-primary", "fingerprint": "fc140eee39e42460", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-961c66c36ba7c39d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/quiz/components/quiz/results/QuizResultsV2.tsx:192"}, "properties": {"repobilityId": "6f96a4f4fb8bf521", "scanner": "scanner-primary", "fingerprint": "961c66c36ba7c39d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-470988d0999cd918", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/catalogo/catalog-preview/page.tsx:471"}, "properties": {"repobilityId": "91964a93ec64d5dc", "scanner": "scanner-primary", "fingerprint": "470988d0999cd918", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3f03e64afba909f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/catalogo/components/catalog/cards/ProductCardV5.tsx:170"}, "properties": {"repobilityId": "e5fdf319a2909a9c", "scanner": "scanner-primary", "fingerprint": "d3f03e64afba909f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17ad8b2c4d319963", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/catalogo/components/catalog/filters/brand/BrandFilterV4.tsx:97"}, "properties": {"repobilityId": "77357e3bf255041a", "scanner": "scanner-primary", "fingerprint": "17ad8b2c4d319963", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f9618e995575245", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV2.tsx:73"}, "properties": {"repobilityId": "741f513c7bf34e73", "scanner": "scanner-primary", "fingerprint": "5f9618e995575245", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-750a706ea48d4fe6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV5.tsx:73"}, "properties": {"repobilityId": "ed0d8b8e2e7e3e13", "scanner": "scanner-primary", "fingerprint": "750a706ea48d4fe6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a2e9b4b29e62cc3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV1.tsx:79"}, "properties": {"repobilityId": "34f39d1b44cd2143", "scanner": "scanner-primary", "fingerprint": "1a2e9b4b29e62cc3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a02d1554ecee64f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/intro/SolicitudIntroV1.tsx:73"}, "properties": {"repobilityId": "e2cc0008f8670d9b", "scanner": "scanner-primary", "fingerprint": "7a02d1554ecee64f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1209ec608c8d6c01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.4/wizard-solicitud/wizard-preview/page.tsx:498"}, "properties": {"repobilityId": "dff6635b3730c25c", "scanner": "scanner-primary", "fingerprint": "1209ec608c8d6c01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f73975a75828e47f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/estados/page.tsx:40"}, "properties": {"repobilityId": "6370ac45ea65f1af", "scanner": "scanner-primary", "fingerprint": "f73975a75828e47f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-604881530912591d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/solicitud/page.tsx:29"}, "properties": {"repobilityId": "f94d3c79ea067a1d", "scanner": "scanner-primary", "fingerprint": "604881530912591d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2556cfd33eea8a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/solicitud/components/wizard/WizardContainer.tsx:246"}, "properties": {"repobilityId": "bbab05e7d41bafa8", "scanner": "scanner-primary", "fingerprint": "a2556cfd33eea8a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ce8e408daaae724", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV2.tsx:62"}, "properties": {"repobilityId": "ee725e7ca355c657", "scanner": "scanner-primary", "fingerprint": "2ce8e408daaae724", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e9c410bb9cd30a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FileUploadV3.tsx:110"}, "properties": {"repobilityId": "5d88c29b5b0488e0", "scanner": "scanner-primary", "fingerprint": "8e9c410bb9cd30a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8e284802cfb7818", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV1.tsx:53"}, "properties": {"repobilityId": "396c14d4cf988294", "scanner": "scanner-primary", "fingerprint": "b8e284802cfb7818", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0dc553a6692a9199", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/wizard/components/fields/upload/FilePreviewV3.tsx:116"}, "properties": {"repobilityId": "218adac943794ce0", "scanner": "scanner-primary", "fingerprint": "0dc553a6692a9199", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5ae225538ea26ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/wizard/steps/personal/page.tsx:30"}, "properties": {"repobilityId": "9bbc7b460af82e4a", "scanner": "scanner-primary", "fingerprint": "a5ae225538ea26ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c4f9b063e2ab4e0a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/comparador/components/comparator/table/ComparisonTableV3.tsx:137"}, "properties": {"repobilityId": "22a72d310eb16104", "scanner": "scanner-primary", "fingerprint": "c4f9b063e2ab4e0a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cce76bbec3601693", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/page.tsx:230"}, "properties": {"repobilityId": "b13dac6393475506", "scanner": "scanner-primary", "fingerprint": "cce76bbec3601693", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6beda60dedc01078", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/components/quiz/HelpQuiz.tsx:173"}, "properties": {"repobilityId": "c9d31c88bfe21555", "scanner": "scanner-primary", "fingerprint": "6beda60dedc01078", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f5f7798710b876c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/prototipos/0.3/quiz/quiz-preview/page.tsx:45"}, "properties": {"repobilityId": "ff69ba7578fc7191", "scanner": "scanner-primary", "fingerprint": "9f5f7798710b876c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f060d2976c99375", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/catalogo/components/catalog/filters/CommercialFilters.tsx:112"}, "properties": {"repobilityId": "9807af562ca6478e", "scanner": "scanner-primary", "fingerprint": "8f060d2976c99375", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e4e37c477e4a052", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/catalogo/components/catalog/filters/TechnicalFilters.tsx:212"}, "properties": {"repobilityId": "202107896f8203a7", "scanner": "scanner-primary", "fingerprint": "5e4e37c477e4a052", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3744d4f112034d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/prototipos/0.3/switch-demo/page.tsx:192"}, "properties": {"repobilityId": "b0e22eabd6015f6c", "scanner": "scanner-primary", "fingerprint": "f3744d4f112034d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-886e1d023c31954c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/head.built.js:1"}, "properties": {"repobilityId": "96da7b2d523a9a86", "scanner": "scanner-primary", "fingerprint": "886e1d023c31954c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference/apple-macbook-neo/head.built.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4890a40ae8ae16bb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/main.pretty.js:1"}, "properties": {"repobilityId": "15485a6c6db24051", "scanner": "scanner-primary", "fingerprint": "4890a40ae8ae16bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference/apple-macbook-neo/main.pretty.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cae81adc332d281c", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in reference/apple-macbook-neo/main.pretty.js:1"}, "properties": {"repobilityId": "d947f5341b78b71d", "scanner": "scanner-primary", "fingerprint": "cae81adc332d281c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference/apple-macbook-neo/main.pretty.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47bdd3d6781063ae", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/head.pretty.js:1"}, "properties": {"repobilityId": "f4e103c20b618fbf", "scanner": "scanner-primary", "fingerprint": "47bdd3d6781063ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference/apple-macbook-neo/head.pretty.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7fccb49b21719b0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in reference/apple-macbook-neo/main.built.js:1"}, "properties": {"repobilityId": "01c12ac028af061a", "scanner": "scanner-primary", "fingerprint": "a7fccb49b21719b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference/apple-macbook-neo/main.built.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3841721ddd549815", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in reference/apple-macbook-neo/main.built.js:1"}, "properties": {"repobilityId": "f0319e36168c3242", "scanner": "scanner-primary", "fingerprint": "3841721ddd549815", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference/apple-macbook-neo/main.built.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2ba55c9258b9e836", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/JsonLd.tsx:35"}, "properties": {"repobilityId": "a555857d0238d302", "scanner": "scanner-primary", "fingerprint": "2ba55c9258b9e836", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/JsonLd.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-b72c2961cbd46a39", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:108"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "b72c2961cbd46a39", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-4a7f99bd0060ce41", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/MotivationalCard.tsx:93"}, "properties": {"repobilityId": "24e8cbf3a33b2951", "scanner": "scanner-primary", "fingerprint": "4a7f99bd0060ce41", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/wizard/MotivationalCard.tsx"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-11321b5259d5eb98", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/LocationModal.tsx:62"}, "properties": {"repobilityId": "406b55f69cb17ba2", "scanner": "scanner-primary", "fingerprint": "11321b5259d5eb98", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/LocationModal.tsx"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-bb7eb6ea98c0d973", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:232"}, "properties": {"repobilityId": "c12a41b99aa86038", "scanner": "scanner-primary", "fingerprint": "bb7eb6ea98c0d973", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx"}, "region": {"startLine": 232}}}]}, {"ruleId": "scanner-e02d82706bee06a3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/lead/LeadProductsSection.tsx:380"}, "properties": {"repobilityId": "5602a509aa66d689", "scanner": "scanner-primary", "fingerprint": "e02d82706bee06a3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/lead/LeadProductsSection.tsx"}, "region": {"startLine": 380}}}]}, {"ruleId": "scanner-cdfbe6c6d0bceed7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HeroSection.tsx:348"}, "properties": {"repobilityId": "580868cd16928c35", "scanner": "scanner-primary", "fingerprint": "cdfbe6c6d0bceed7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/HeroSection.tsx"}, "region": {"startLine": 348}}}]}, {"ruleId": "scanner-46c5a465b0fb317b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/SocialProof.tsx:127"}, "properties": {"repobilityId": "26ae81a966cf8c56", "scanner": "scanner-primary", "fingerprint": "46c5a465b0fb317b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/SocialProof.tsx"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-6421191a3b3138f4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/Benefits.tsx:28"}, "properties": {"repobilityId": "b111fd6cd23ef672", "scanner": "scanner-primary", "fingerprint": "6421191a3b3138f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/Benefits.tsx"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-83481aa45c9c5c97", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HowItWorks.tsx:108"}, "properties": {"repobilityId": "55b15bf7c50eda30", "scanner": "scanner-primary", "fingerprint": "83481aa45c9c5c97", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/HowItWorks.tsx"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-3e0357aa26c6d603", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/FaqSection.tsx:95"}, "properties": {"repobilityId": "815c085de624ccb4", "scanner": "scanner-primary", "fingerprint": "3e0357aa26c6d603", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/FaqSection.tsx"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-f68b0bfb2ad93886", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/HeroCta.tsx:170"}, "properties": {"repobilityId": "86f6acc59e4d133f", "scanner": "scanner-primary", "fingerprint": "f68b0bfb2ad93886", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/HeroCta.tsx"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-57fb6f186af1e04d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioFaq.tsx:86"}, "properties": {"repobilityId": "0bd2f589a12e912c", "scanner": "scanner-primary", "fingerprint": "57fb6f186af1e04d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/convenio/ConvenioFaq.tsx"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-3babff516aea0099", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx:49"}, "properties": {"repobilityId": "c8a51a7d4fba37a2", "scanner": "scanner-primary", "fingerprint": "3babff516aea0099", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/convenio/ConvenioTestimonials.tsx"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-af04d9dd79256b89", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/prototipos/0.6/components/hero/convenio/ConvenioCta.tsx:100"}, "properties": {"repobilityId": "d20cd3f909420195", "scanner": "scanner-primary", "fingerprint": "af04d9dd79256b89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.6/components/hero/convenio/ConvenioCta.tsx"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-c047791528d10e22", "level": "error", "message": {"text": "Possible secret in src/app/prototipos/_shared/components/FeedbackButtonSimple.tsx"}, "properties": {"repobilityId": "35b282cddf264843", "scanner": "scanner-primary", "fingerprint": "c047791528d10e22", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/_shared/components/FeedbackButtonSimple.tsx"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-2ba25fa38b3a12f6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV3.tsx:204"}, "properties": {"repobilityId": "08d6e192c93e2767", "scanner": "scanner-primary", "fingerprint": "2ba25fa38b3a12f6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/prototipos/0.4/wizard-solicitud/components/wizard-solicitud/fields/UploadFieldV3.tsx"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-cff5f12dd64efe31", "level": "error", "message": {"text": "Possible secret in e2e/pricing/promotions.spec.ts"}, "properties": {"repobilityId": "9766cfa5a9adab3a", "scanner": "scanner-primary", "fingerprint": "cff5f12dd64efe31", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/pricing/promotions.spec.ts"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-53c95902d1d00dd6", "level": "error", "message": {"text": "Possible secret in e2e/pricing/labels.spec.ts"}, "properties": {"repobilityId": "0caeeb5209b4c520", "scanner": "scanner-primary", "fingerprint": "53c95902d1d00dd6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/pricing/labels.spec.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-3a353ab3b464b4db", "level": "error", "message": {"text": "Insecure pattern 'subprocess_shell_true' in .claude/skills/typescript-expert/scripts/ts_diagnostic.py:16"}, "properties": {"repobilityId": "1ba819a8f8e9893f", "scanner": "scanner-primary", "fingerprint": "3a353ab3b464b4db", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/typescript-expert/scripts/ts_diagnostic.py"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bee6b8956e03198c", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7368aacdd03a98e3", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b70dbcc8f54d72ab", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "419d1ec7943efec2", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-ad6701f0a8405e22", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8384c23520d55657", "scanner": "scanner-primary", "fingerprint": "ad6701f0a8405e22", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f8e3fd04dea4e257", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.5/catalogo/catalog-preview/page.tsx (1564 lines)"}, "properties": {"repobilityId": "3c2bc8c4678f2740", "scanner": "scanner-primary", "fingerprint": "f8e3fd04dea4e257", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-11ff43d8bae88b47", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/[landing]/layout.tsx (1654 lines)"}, "properties": {"repobilityId": "df201861c8fd080e", "scanner": "scanner-primary", "fingerprint": "11ff43d8bae88b47", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7d32cb576c2e2b1a", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx (1377 lines)"}, "properties": {"repobilityId": "aa4d460ea5f19f71", "scanner": "scanner-primary", "fingerprint": "7d32cb576c2e2b1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e4f2020a8247c326", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/[landing]/solicitar/[stepSlug]/StepClient.tsx (1502 lines)"}, "properties": {"repobilityId": "b11d68599b3b2732", "scanner": "scanner-primary", "fingerprint": "e4f2020a8247c326", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-11f93e92b3eb2849", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/[landing]/producto/GamerProductDetailClient.tsx (3098 lines)"}, "properties": {"repobilityId": "45e361bfdf0d6f6f", "scanner": "scanner-primary", "fingerprint": "11f93e92b3eb2849", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1297c78ab7bb770f", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/[landing]/catalogo/CatalogoClient.tsx (2424 lines)"}, "properties": {"repobilityId": "4e46912d0e364fe8", "scanner": "scanner-primary", "fingerprint": "1297c78ab7bb770f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b969df9c20e172f5", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/[landing]/catalogo/GamerCatalogoClient.tsx (2879 lines)"}, "properties": {"repobilityId": "ca00ca59326fc0ff", "scanner": "scanner-primary", "fingerprint": "b969df9c20e172f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7e3cd06063d42875", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/components/product-landing/NvidiaLanding.tsx (874 lines)"}, "properties": {"repobilityId": "1cc4c9e072ed54b7", "scanner": "scanner-primary", "fingerprint": "7e3cd06063d42875", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-df3ef7f8a7931ada", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/components/zona-gamer/GamerNavbar.tsx (1195 lines)"}, "properties": {"repobilityId": "7d95c13f41d1ab1c", "scanner": "scanner-primary", "fingerprint": "df3ef7f8a7931ada", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-eae9a220322f6c17", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/services/catalogApi.ts (1487 lines)"}, "properties": {"repobilityId": "d5b77b49f1252c70", "scanner": "scanner-primary", "fingerprint": "eae9a220322f6c17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f0f2cc202224c03e", "level": "note", "message": {"text": "Very large file: src/app/prototipos/0.6/services/landingApi.ts (1464 lines)"}, "properties": {"repobilityId": "89635abe7f7b3bce", "scanner": "scanner-primary", "fingerprint": "f0f2cc202224c03e", "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-df93ce207aaa8d5d", "level": "note", "message": {"text": "54 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "df93ce207aaa8d5d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b3c7208c9b7c3ffe", "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": "0ca223c0a051870e", "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": "582c4d0154ad21d6", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-811550f2a497bb86", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/ui-ux-designer.md"}, "properties": {"repobilityId": "30bf234a9aa0e7a1", "scanner": "scanner-primary", "fingerprint": "811550f2a497bb86", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/ui-ux-designer.md"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-2709eef5ede4320f", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/nextjs-architecture-expert.md"}, "properties": {"repobilityId": "3c99bb15a08fe3d3", "scanner": "scanner-primary", "fingerprint": "2709eef5ede4320f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/nextjs-architecture-expert.md"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-ac5d659eab58d762", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/nextjs-architecture-expert.md"}, "properties": {"repobilityId": "11ac5cc7fdc757a5", "scanner": "scanner-primary", "fingerprint": "ac5d659eab58d762", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/nextjs-architecture-expert.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b8a4f2a9f9845937", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/cli-ui-designer.md"}, "properties": {"repobilityId": "013d3bc76806b401", "scanner": "scanner-primary", "fingerprint": "b8a4f2a9f9845937", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/cli-ui-designer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b81115cef228be8a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/nextjs-bundle-analyzer.md"}, "properties": {"repobilityId": "ab7d6ec9bcbcfcc5", "scanner": "scanner-primary", "fingerprint": "b81115cef228be8a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/nextjs-bundle-analyzer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e90f568b86ae306e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/PLAN_ITERACION_SECCIONES.md"}, "properties": {"repobilityId": "9e0d7ede55839f59", "scanner": "scanner-primary", "fingerprint": "e90f568b86ae306e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/PLAN_ITERACION_SECCIONES.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f81a87135704255", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/README.md"}, "properties": {"repobilityId": "6ae5d062d500eaa6", "scanner": "scanner-primary", "fingerprint": "1f81a87135704255", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4df0faf5a9110442", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/docs/0.5/CONVENTIONS.md"}, "properties": {"repobilityId": "e5f9343fb8249a0b", "scanner": "scanner-primary", "fingerprint": "4df0faf5a9110442", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.5/CONVENTIONS.md"}, "region": {"startLine": 2552}}}]}, {"ruleId": "scanner-81a177c4d6046390", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.5/CONVENTIONS.md"}, "properties": {"repobilityId": "81013c4b07cf8663", "scanner": "scanner-primary", "fingerprint": "81a177c4d6046390", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.5/CONVENTIONS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56d772f1ea0ee9d0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.5/section-specs/README.md"}, "properties": {"repobilityId": "0f01aca5bbbdc41d", "scanner": "scanner-primary", "fingerprint": "56d772f1ea0ee9d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.5/section-specs/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-173523fe398ef9ba", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.6/CATALOGO.md"}, "properties": {"repobilityId": "9f4f6fe2b8749b6f", "scanner": "scanner-primary", "fingerprint": "173523fe398ef9ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.6/CATALOGO.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b7dc18c9224d501e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.6/DETALLE_PRODUCTO.md"}, "properties": {"repobilityId": "6c6b83a59097b757", "scanner": "scanner-primary", "fingerprint": "b7dc18c9224d501e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.6/DETALLE_PRODUCTO.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9d106201a56ccf26", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.4/CONVENTIONS.md"}, "properties": {"repobilityId": "5aa416f1280c4d4c", "scanner": "scanner-primary", "fingerprint": "9d106201a56ccf26", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.4/CONVENTIONS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6bc01aa68b1bbf0b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "properties": {"repobilityId": "9376cb49891b2c7d", "scanner": "scanner-primary", "fingerprint": "6bc01aa68b1bbf0b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8426cfef6a2e616c", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "properties": {"repobilityId": "ea7a1507d314de35", "scanner": "scanner-primary", "fingerprint": "8426cfef6a2e616c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.4/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-ec543361f3370076", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.4/section-specs/README.md"}, "properties": {"repobilityId": "d18e0c5ce13f49aa", "scanner": "scanner-primary", "fingerprint": "ec543361f3370076", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.4/section-specs/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-00fdcb138bfed9c9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "properties": {"repobilityId": "096dc95d40eaf1a9", "scanner": "scanner-primary", "fingerprint": "00fdcb138bfed9c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-515b4d034404f4e6", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "properties": {"repobilityId": "cfb1c87892d21e01", "scanner": "scanner-primary", "fingerprint": "515b4d034404f4e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.3/section-specs/GUIA_TRABAJO_CLAUDE_TERMINAL.md"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-94569adff209d074", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/PROMPT_01_HERO_LANDING.md"}, "properties": {"repobilityId": "f30037a0dbb5f3c4", "scanner": "scanner-primary", "fingerprint": "94569adff209d074", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.3/section-specs/PROMPT_01_HERO_LANDING.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f45b722e7555c7ab", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/0.3/section-specs/README.md"}, "properties": {"repobilityId": "97f1e0df140137bc", "scanner": "scanner-primary", "fingerprint": "f45b722e7555c7ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/0.3/section-specs/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d75aaee2ba4e22b9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/legacy/PROMPT_HERO_SECTION_BALDECASH.md"}, "properties": {"repobilityId": "9582f053b7e9e47c", "scanner": "scanner-primary", "fingerprint": "d75aaee2ba4e22b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/legacy/PROMPT_HERO_SECTION_BALDECASH.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3924094adfa37b56", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/docs/legacy/WEBFLOW_LAPTOP_IMAGES.md"}, "properties": {"repobilityId": "cb10ae44c692b18a", "scanner": "scanner-primary", "fingerprint": "3924094adfa37b56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/docs/legacy/WEBFLOW_LAPTOP_IMAGES.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5fb1e8f35168bc1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/typescript-expert/SKILL.md"}, "properties": {"repobilityId": "ba6dad77e4481ad1", "scanner": "scanner-primary", "fingerprint": "b5fb1e8f35168bc1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/typescript-expert/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3aff60e39fd80d7d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/web-performance-optimization/SKILL.md"}, "properties": {"repobilityId": "086fe10230c1dfd8", "scanner": "scanner-primary", "fingerprint": "3aff60e39fd80d7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/web-performance-optimization/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-94b9ea35c7d9104c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/rendering-svg-precision.md"}, "properties": {"repobilityId": "2eb7e9b45ec04f75", "scanner": "scanner-primary", "fingerprint": "94b9ea35c7d9104c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/react-best-practices/references/rules/rendering-svg-precision.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-279dd155a377008a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/async-parallel.md"}, "properties": {"repobilityId": "2b6b1c5e610985b5", "scanner": "scanner-primary", "fingerprint": "279dd155a377008a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/react-best-practices/references/rules/async-parallel.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2280db2247d9bef", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/server-cache-react.md"}, "properties": {"repobilityId": "e87bbf26169dfb1c", "scanner": "scanner-primary", "fingerprint": "c2280db2247d9bef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/react-best-practices/references/rules/server-cache-react.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b4f15068aec1835e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/server-parallel-fetching.md"}, "properties": {"repobilityId": "d15b69d37b9f05d9", "scanner": "scanner-primary", "fingerprint": "b4f15068aec1835e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/react-best-practices/references/rules/server-parallel-fetching.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c6539440eda40883", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/async-dependencies.md"}, "properties": {"repobilityId": "7d256d85e99478d0", "scanner": "scanner-primary", "fingerprint": "c6539440eda40883", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/react-best-practices/references/rules/async-dependencies.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a308dcba8e92e44e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/react-best-practices/references/rules/js-length-check-first.md"}, "properties": {"repobilityId": "5a0b0189ec6971a5", "scanner": "scanner-primary", "fingerprint": "a308dcba8e92e44e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/react-best-practices/references/rules/js-length-check-first.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fd25e2ab85c5e3d2", "level": "none", "message": {"text": "Commented-code block (6 lines) in jest.setup.js:46"}, "properties": {"repobilityId": "1e49ca63816ba04a", "scanner": "scanner-primary", "fingerprint": "fd25e2ab85c5e3d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4a2401539db88bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 reference/apple-macbook-neo/main.pretty.js:1"}, "properties": {"repobilityId": "f99244df2aa866df", "scanner": "scanner-primary", "fingerprint": "d4a2401539db88bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08101ff3c61f7286", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 reference/apple-macbook-neo/main.built.js:1"}, "properties": {"repobilityId": "e439eb57f1d7d513", "scanner": "scanner-primary", "fingerprint": "08101ff3c61f7286", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aee2a7ba5b33440a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/feedback/route.ts:36"}, "properties": {"repobilityId": "22cfdf0ba92276b5", "scanner": "scanner-primary", "fingerprint": "aee2a7ba5b33440a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6495ce412bfc1cb2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feedback/route.ts:50"}, "properties": {"repobilityId": "e0d900aabe0f3d87", "scanner": "scanner-primary", "fingerprint": "6495ce412bfc1cb2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-784f30cb433410e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.5/catalogo/lib/api.ts:40"}, "properties": {"repobilityId": "64938781a49178ae", "scanner": "scanner-primary", "fingerprint": "784f30cb433410e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d5e1d7b1229e73f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/layout.tsx:640"}, "properties": {"repobilityId": "a56f223f8adca872", "scanner": "scanner-primary", "fingerprint": "d5e1d7b1229e73f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d568dd442ed39337", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/layout.tsx:90"}, "properties": {"repobilityId": "0a216dd6616d35d9", "scanner": "scanner-primary", "fingerprint": "d568dd442ed39337", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f94701385a13191", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx:296"}, "properties": {"repobilityId": "ec48db030e979fc7", "scanner": "scanner-primary", "fingerprint": "4f94701385a13191", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-288192e86f9b3d90", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/solicitar/GamerSolicitarClient.tsx:421"}, "properties": {"repobilityId": "e9afe8849c4ab223", "scanner": "scanner-primary", "fingerprint": "288192e86f9b3d90", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1039785517cb5331", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/solicitar/context/SessionContext.tsx:251"}, "properties": {"repobilityId": "c6e3b43666745408", "scanner": "scanner-primary", "fingerprint": "1039785517cb5331", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4797deda6853054", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/AddressAutocompleteField.tsx:132"}, "properties": {"repobilityId": "e1f81cf2976fbcce", "scanner": "scanner-primary", "fingerprint": "d4797deda6853054", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb025fd838ad73f9", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/LocationModal.tsx:241"}, "properties": {"repobilityId": "89d18984193f8251", "scanner": "scanner-primary", "fingerprint": "eb025fd838ad73f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87e936ae7e4cfc51", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/fields/CascadingSelectField.tsx:74"}, "properties": {"repobilityId": "2daad1e5f41a6d0b", "scanner": "scanner-primary", "fingerprint": "87e936ae7e4cfc51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e53a611beec0a364", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/solicitar/components/solicitar/sections/AccessoriesSection.tsx:121"}, "properties": {"repobilityId": "fc5d661a84fb0ec2", "scanner": "scanner-primary", "fingerprint": "e53a611beec0a364", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa3c30f2670e37d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/producto/api/productDetailApi.ts:628"}, "properties": {"repobilityId": "4c8c1a97f926e106", "scanner": "scanner-primary", "fingerprint": "fa3c30f2670e37d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-229fc45f938de7eb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/producto/utils/pdf/utils.ts:56"}, "properties": {"repobilityId": "07907a49b95e0557", "scanner": "scanner-primary", "fingerprint": "229fc45f938de7eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a605be0d93ed7e5d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/prototipos/0.6/[landing]/catalogo/CatalogoClient.tsx:175"}, "properties": {"repobilityId": "2129119d3be1b215", "scanner": "scanner-primary", "fingerprint": "a605be0d93ed7e5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-420460e904476ff7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/[landing]/catalogo/hooks/useCatalogProducts.ts:460"}, "properties": {"repobilityId": "c737a6995d417c91", "scanner": "scanner-primary", "fingerprint": "420460e904476ff7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c6d3be97fc71284", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/prototipos/0.6/[landing]/catalogo/components/catalog/cards/ProductCard.tsx:231"}, "properties": {"repobilityId": "c04b068cb31e7d79", "scanner": "scanner-primary", "fingerprint": "4c6d3be97fc71284", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd707524262571e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/lead/LeadLeadForm.tsx:138"}, "properties": {"repobilityId": "470462855259abb5", "scanner": "scanner-primary", "fingerprint": "dd707524262571e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42670d45baab24a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/hero/VipCountdownOverlay.tsx:123"}, "properties": {"repobilityId": "9f854f59940409c4", "scanner": "scanner-primary", "fingerprint": "42670d45baab24a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5d0abe951243f98", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/components/hero/DniModal.tsx:184"}, "properties": {"repobilityId": "935e0471adef8b99", "scanner": "scanner-primary", "fingerprint": "e5d0abe951243f98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-12f3c1b4098a4880", "level": "note", "message": {"text": "Legacy-named symbol `ApiFilterOptionsLegacy` in src/app/prototipos/0.6/services/catalogApi.ts:200"}, "properties": {"repobilityId": "298400eef29b590a", "scanner": "scanner-primary", "fingerprint": "12f3c1b4098a4880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ecb17578f0aa32f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/catalogApi.ts:441"}, "properties": {"repobilityId": "e82fcf116089ea24", "scanner": "scanner-primary", "fingerprint": "ecb17578f0aa32f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55d5386b5d65a2fb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/prototipos/0.6/services/wizardApi.ts:130"}, "properties": {"repobilityId": "a74ad8be60d79482", "scanner": "scanner-primary", "fingerprint": "55d5386b5d65a2fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e991d6459a31bd1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/wizardApi.ts:232"}, "properties": {"repobilityId": "4ba36aedee41bb26", "scanner": "scanner-primary", "fingerprint": "8e991d6459a31bd1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f6ec35d807c5d564", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/quizApi.ts:177"}, "properties": {"repobilityId": "04a1bcb0d3289da8", "scanner": "scanner-primary", "fingerprint": "f6ec35d807c5d564", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c9a307fb0a5ca3a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/landingApi.ts:255"}, "properties": {"repobilityId": "21efa6a53efed6c1", "scanner": "scanner-primary", "fingerprint": "3c9a307fb0a5ca3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7607918b5fb305d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/0.6/services/applicationApi.ts:165"}, "properties": {"repobilityId": "03fc6c4e72ba4b48", "scanner": "scanner-primary", "fingerprint": "7607918b5fb305d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c774888656a9ecd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/prototipos/_shared/hooks/usePrototypeConfig.ts:134"}, "properties": {"repobilityId": "e97d21b68bb6b2f3", "scanner": "scanner-primary", "fingerprint": "2c774888656a9ecd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfc364332573fe44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/hooks/usePrototypeConfig.ts:55"}, "properties": {"repobilityId": "154dc247a40593da", "scanner": "scanner-primary", "fingerprint": "cfc364332573fe44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f221dfbf708db44f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/components/FeedbackButtonSimple.tsx:105"}, "properties": {"repobilityId": "9365901701e91a96", "scanner": "scanner-primary", "fingerprint": "f221dfbf708db44f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-56f32a6530015100", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/prototipos/_shared/components/FeedbackModal.tsx:270"}, "properties": {"repobilityId": "4bc884d5683ea51d", "scanner": "scanner-primary", "fingerprint": "56f32a6530015100", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d395c2876c825196", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/prototipos/0.4/comparador/components/comparator/table/ComparisonTableV1.tsx:128"}, "properties": {"repobilityId": "359a9b0dd9757ef9", "scanner": "scanner-primary", "fingerprint": "d395c2876c825196", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bce7e8284cc85068", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/prototipos/0.4/quiz/types/quiz.ts:1"}, "properties": {"repobilityId": "328ac2e801db0735", "scanner": "scanner-primary", "fingerprint": "bce7e8284cc85068", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}