{"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-612c8a39d36c3548", "name": "Stray `console.log` in TS/JS \u2014 functions/index.js:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/index.js:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c87049e36db024dd", "name": "Stray `console.log` in TS/JS \u2014 scripts/index-blog.js:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/index-blog.js:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-110d621a1bf5a3a4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/MarkdownRenderer.tsx:82", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/MarkdownRenderer.tsx:82"}, "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-91be2bb2432fb55c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/BlogContentRenderer.tsx:31", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/BlogContentRenderer.tsx:31"}, "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-0115fd9a60c1eca3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/ExpertQuote.tsx:60", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/ExpertQuote.tsx:60"}, "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-1a31d342b5168b93", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/FAQSection.tsx:49", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/FAQSection.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-536f0d3871ff3f93", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/PrefetchHints.tsx:82", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/PrefetchHints.tsx:82"}, "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-5e9cdb21126bfec9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/GlobalBusinessSchema.tsx:188", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/GlobalBusinessSchema.tsx:188"}, "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-1484e4c8b9ccc981", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/RecommendedReviews.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/RecommendedReviews.tsx:87"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fecdea93229ddfc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/RecommendedReviews.tsx:53", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/RecommendedReviews.tsx:53"}, "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-7b5bdc4d31b74e46", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/ProductTestResults.tsx:385", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/ProductTestResults.tsx:385"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f71781a16df9f6a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/ProductSchema.tsx:528", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/ProductSchema.tsx:528"}, "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-3924913464b3b028", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/StructuredDataSchemas.tsx:46", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/StructuredDataSchemas.tsx:46"}, "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-290293ed15a3dc28", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/ImageObjectSchema.tsx:189", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/ImageObjectSchema.tsx:189"}, "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-b42d98f007cc7e30", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/VariantSelector.tsx:144", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/VariantSelector.tsx:144"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed7efdbf42f33a6a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/indexing/route.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/indexing/route.ts: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-cbcb01a1ff2c3d44", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/layout.tsx:107", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/layout.tsx:107"}, "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-120093e8aa630a61", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/blog/[slug]/page.tsx:161", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/blog/[slug]/page.tsx:161"}, "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-23d6928bd47dc729", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/solutions/[slug]/page.tsx:87", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/solutions/[slug]/page.tsx:87"}, "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-a62229942825d5e6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/team/page.tsx:190", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/team/page.tsx:190"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a707d80e1d7c8413", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/team/page.tsx:91", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/team/page.tsx:91"}, "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-7b6cb5d9a951f7b1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:8", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:889"}, "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-c564168d343d72da", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/[brand]/[category]/[slug]/page.tsx:470", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/[brand]/[category]/[slug]/page.tsx:470"}, "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-d29fcf66917eb37e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/locations/[governorate]/page.tsx:153", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/locations/[governorate]/page.tsx:153"}, "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-0b03b0cae7650657", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/search/SearchClient.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/search/SearchClient.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-ebe3dd5414b24b69", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/admin/indexing/page.tsx:199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/admin/indexing/page.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-715439df96d07341", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/lab/page.tsx:140", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/lab/page.tsx:140"}, "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-46fc21878ea46fe5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/soundcore/page.tsx:126", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/soundcore/page.tsx:126"}, "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-257bb3da07878d74", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/verify/page.tsx:123", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/verify/page.tsx:123"}, "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-e11356435ec0fe3c", "name": "Icon-only button without accessible name \u2014 src/app/[locale]/checkout/page.tsx:375", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/[locale]/checkout/page.tsx:375"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c39e165e7fc4506", "name": "Stray `console.log` in TS/JS \u2014 src/app/go/[code]/route.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/go/[code]/route.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e670c2b5cc139ef0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/generic-category-helpers.tsx:316", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/generic-category-helpers.tsx:316"}, "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-569a9129e64515fa", "name": "Stray `console.log` in TS/JS \u2014 src/lib/analytics-tracking.ts:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/analytics-tracking.ts:131"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d8ae2ec4ce4939b1", "name": "Stray `console.log` in TS/JS \u2014 src/lib/google-sheets.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-sheets.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74da85f6b97903c6", "name": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58105b9e75c9c756", "name": "Insecure pattern 'node_child_process' in scripts/index-blog.js:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/index-blog.js:23"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54708b8ae54d48b2", "name": "Insecure pattern 'node_child_process' in scripts/detect-new-articles.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/detect-new-articles.mjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6177a71ee2427df4", "name": "Insecure pattern 'cors_wildcard' in src/middleware.ts:118", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/middleware.ts:118"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e03bdebdf329e093", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/BlogContentRenderer.tsx:31", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/BlogContentRenderer.tsx:31"}, "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-db6028808048857c", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/content/ExpertQuote.tsx:60", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/ExpertQuote.tsx:60"}, "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-73f1d9c075afe2cd", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/content/FAQSection.tsx:49", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/FAQSection.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-b82def637006d3c9", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/content/PrefetchHints.tsx:82", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/PrefetchHints.tsx:82"}, "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-0adc6d3f0cf99df6", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/content/GlobalBusinessSchema.tsx:188", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/GlobalBusinessSchema.tsx:188"}, "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-0eff0bb969ed608f", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/content/RecommendedReviews.tsx:53", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/RecommendedReviews.tsx:53"}, "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-63b4717ba4b263dc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/UX/InteractiveEffects.tsx:149", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/UX/InteractiveEffects.tsx:149"}, "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-9bb2ba15e52769d3", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/ProductSchema.tsx:528", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/ProductSchema.tsx:528"}, "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-c39e175dbcc56ede", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/StructuredDataSchemas.tsx:46", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/StructuredDataSchemas.tsx:46"}, "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-bf887f983c16fedc", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/ImageObjectSchema.tsx:189", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/ImageObjectSchema.tsx:189"}, "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-d053f29ef7647c31", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/interactive/MermaidDiagram.tsx:50", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/interactive/MermaidDiagram.tsx:50"}, "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-94775fc6895d85c5", "name": "Insecure pattern 'cors_wildcard' in src/app/api/v1/route.ts:53", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/route.ts:53"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a73cd4945c52b54c", "name": "Insecure pattern 'cors_wildcard' in src/app/api/v1/premium/lab-report/route.ts:51", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/premium/lab-report/route.ts:51"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f8699b869d7d104", "name": "Insecure pattern 'cors_wildcard' in src/app/api/v1/quick-cod/route.ts:134", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/quick-cod/route.ts:134"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0e9c7c8c680d6c88", "name": "Insecure pattern 'cors_wildcard' in src/app/api/openapi.json/route.ts:356", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/openapi.json/route.ts:356"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-367535cc2a19c7e7", "name": "Possible secret in src/app/admin/print-cards/page.tsx", "shortDescription": {"text": "Possible secret in src/app/admin/print-cards/page.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-a3380808cd4fa1c3", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/layout.tsx:107", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/layout.tsx:107"}, "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-f22fee6b355e31e4", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/blog/[slug]/page.tsx:161", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/blog/[slug]/page.tsx:161"}, "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-4e95d029796e5ef6", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/solutions/[slug]/page.tsx:87", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/solutions/[slug]/page.tsx:87"}, "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-d114709f84eb461a", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/team/page.tsx:91", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/team/page.tsx:91"}, "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-d3cbc60ae940700b", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:889", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:889"}, "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-86e5c7ac3c6c80b5", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/[brand]/[category]/[slug]/page.tsx:470", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/[brand]/[category]/[slug]/page.tsx:470"}, "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-c0564fe7f4ba6ec3", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/locations/[governorate]/page.tsx:153", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/locations/[governorate]/page.tsx:153"}, "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-1d300a722b876afb", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/lab/page.tsx:140", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/lab/page.tsx:140"}, "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-c4d44e8bc2babe8a", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/soundcore/page.tsx:126", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/soundcore/page.tsx:126"}, "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-44c05f3c60ce63e9", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/verify/page.tsx:123", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/verify/page.tsx:123"}, "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-f5316c938e1ab00f", "name": "Insecure pattern 'cors_wildcard' in src/app/openapi.json/route.ts:174", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/openapi.json/route.ts:174"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0d4ad0eef96b031", "name": "Insecure pattern 'dangerous_innerhtml' in src/lib/generic-category-helpers.tsx:316", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/lib/generic-category-helpers.tsx:316"}, "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-f1b24c22972133ec", "name": "Possible secret in src/lib/api-auth.ts", "shortDescription": {"text": "Possible secret in src/lib/api-auth.ts"}, "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-643e088d11ef9982", "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-4660e104ef2edbe6", "name": "Very large file: src/components/CategoryTemplate.tsx (805 lines)", "shortDescription": {"text": "Very large file: src/components/CategoryTemplate.tsx (805 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-e1519075a03464a3", "name": "Very large file: src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx (1023 lines)", "shortDescription": {"text": "Very large file: src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx (1023 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "2 test file(s) for 181 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca5f5e28a9234837", "name": "Node manifest has dependencies but no lockfile: functions/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: functions/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 85 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 34 placeholder/mock markers across 17 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, tests, operator-readme, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e1d028d8c872af4", "name": "Commented-code block (5 lines) in next.config.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in next.config.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-777daa17137990b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 functions/index.js:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/index.js:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-282d5b5f4bf7bc2b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/post-to-social.mjs:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/post-to-social.mjs:72"}, "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-48c6a4ebf76a9da1", "name": "Commented-code block (5 lines) in src/middleware.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in src/middleware.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a04e4ebf5c4d0d30", "name": "Commented-code block (5 lines) in src/i18n/routing.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in src/i18n/routing.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ace20583a4333cca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CategoryTemplate.tsx:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CategoryTemplate.tsx:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2891d8d5c904a91a", "name": "Commented-code block (6 lines) in src/components/ui/InstantLink.tsx:81", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ui/InstantLink.tsx:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-378d628723a15d60", "name": "Commented-code block (6 lines) in src/components/ui/MarkdownRenderer.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ui/MarkdownRenderer.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fc0e77ba17fa6d9", "name": "Commented-code block (5 lines) in src/components/content/CategoryOverviewBlock.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/content/CategoryOverviewBlock.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31137a9870054f84", "name": "Commented-code block (9 lines) in src/components/content/ExpertQuote.tsx:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/content/ExpertQuote.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f47ee4d5d550868", "name": "Commented-code block (6 lines) in src/components/content/RecommendedReviews.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/content/RecommendedReviews.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7302ffba4546ad7", "name": "Commented-code block (6 lines) in src/components/UX/BackupTimeCalculator.tsx:14", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/UX/BackupTimeCalculator.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8ce5beadbfa1731", "name": "Commented-code block (6 lines) in src/components/schemas/StructuredDataSchemas.tsx:216", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/schemas/StructuredDataSchemas.tsx:216"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2504dd7b4a5bca5", "name": "Commented-code block (6 lines) in src/app/sitemap.ts:178", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/sitemap.ts:178"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-502b1b95e5c949c7", "name": "Commented-code block (5 lines) in src/app/api/products/route.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/products/route.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71f6cd2061f3547b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/layout.tsx:277", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/layout.tsx:277"}, "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-924ad3670f5c17bc", "name": "Commented-code block (5 lines) in src/app/[locale]/error.tsx:18", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/[locale]/error.tsx:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0e811b1e5c303c2", "name": "Legacy-named symbol `content_copy` in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:238", "shortDescription": {"text": "Legacy-named symbol `content_copy` in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:238"}, "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-69961fd79312c8da", "name": "Commented-code block (5 lines) in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:310", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:310"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0d1459665270797", "name": "Commented-code block (5 lines) in src/app/[locale]/[brand]/[category]/[slug]/page.tsx:344", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/[locale]/[brand]/[category]/[slug]/page.tsx:344"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7d63334d3e1004f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/[brand]/[category]/[slug]/page.tsx:315", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/[brand]/[category]/[slug]/page.tsx:315"}, "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-ae3e87178852ce62", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/admin/indexing/page.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/admin/indexing/page.tsx:45"}, "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-c21460268760d1ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/checkout/page.tsx:180", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/checkout/page.tsx:180"}, "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-245ea277cea4d737", "name": "Commented-code block (13 lines) in src/app/go/[code]/route.ts:76", "shortDescription": {"text": "Commented-code block (13 lines) in src/app/go/[code]/route.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8be9cd278c37590", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiktokEventsApi.ts:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiktokEventsApi.ts:86"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-484dfcd9c2446cc4", "name": "Commented-code block (5 lines) in src/lib/ux-signals.ts:203", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/ux-signals.ts:203"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. 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/20889"}, "properties": {"repository": "taysirco/cairovolt.com", "repoUrl": "https://github.com/taysirco/cairovolt.com", "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-612c8a39d36c3548", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/index.js:93"}, "properties": {"repobilityId": "fc340c3549298d81", "scanner": "scanner-primary", "fingerprint": "612c8a39d36c3548", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c87049e36db024dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/index-blog.js:64"}, "properties": {"repobilityId": "783fc345a61b3165", "scanner": "scanner-primary", "fingerprint": "c87049e36db024dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-110d621a1bf5a3a4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/MarkdownRenderer.tsx:82"}, "properties": {"repobilityId": "7405f2c91470e077", "scanner": "scanner-primary", "fingerprint": "110d621a1bf5a3a4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-91be2bb2432fb55c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/BlogContentRenderer.tsx:31"}, "properties": {"repobilityId": "a3d0b4a2c758c9db", "scanner": "scanner-primary", "fingerprint": "91be2bb2432fb55c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0115fd9a60c1eca3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/ExpertQuote.tsx:60"}, "properties": {"repobilityId": "17520f0b2055665a", "scanner": "scanner-primary", "fingerprint": "0115fd9a60c1eca3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1a31d342b5168b93", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/FAQSection.tsx:49"}, "properties": {"repobilityId": "e981bba8656b6c42", "scanner": "scanner-primary", "fingerprint": "1a31d342b5168b93", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-536f0d3871ff3f93", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/PrefetchHints.tsx:82"}, "properties": {"repobilityId": "f402b4d051ed44ae", "scanner": "scanner-primary", "fingerprint": "536f0d3871ff3f93", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5e9cdb21126bfec9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/GlobalBusinessSchema.tsx:188"}, "properties": {"repobilityId": "661294e655b6e471", "scanner": "scanner-primary", "fingerprint": "5e9cdb21126bfec9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1484e4c8b9ccc981", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/RecommendedReviews.tsx:87"}, "properties": {"repobilityId": "45a63784452cd84d", "scanner": "scanner-primary", "fingerprint": "1484e4c8b9ccc981", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fecdea93229ddfc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/content/RecommendedReviews.tsx:53"}, "properties": {"repobilityId": "ff5f1a1f7cc01357", "scanner": "scanner-primary", "fingerprint": "0fecdea93229ddfc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7b5bdc4d31b74e46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/ProductTestResults.tsx:385"}, "properties": {"repobilityId": "9f34868a31e303e3", "scanner": "scanner-primary", "fingerprint": "7b5bdc4d31b74e46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f71781a16df9f6a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/ProductSchema.tsx:528"}, "properties": {"repobilityId": "4eb0561e2a0482b2", "scanner": "scanner-primary", "fingerprint": "5f71781a16df9f6a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3924913464b3b028", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/StructuredDataSchemas.tsx:46"}, "properties": {"repobilityId": "dac3c655d16e1d58", "scanner": "scanner-primary", "fingerprint": "3924913464b3b028", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-290293ed15a3dc28", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/schemas/ImageObjectSchema.tsx:189"}, "properties": {"repobilityId": "7676078cd20cd908", "scanner": "scanner-primary", "fingerprint": "290293ed15a3dc28", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b42d98f007cc7e30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/VariantSelector.tsx:144"}, "properties": {"repobilityId": "1102405b1c72ff31", "scanner": "scanner-primary", "fingerprint": "b42d98f007cc7e30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed7efdbf42f33a6a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/indexing/route.ts:95"}, "properties": {"repobilityId": "61b6dde12102f985", "scanner": "scanner-primary", "fingerprint": "ed7efdbf42f33a6a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cbcb01a1ff2c3d44", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/layout.tsx:107"}, "properties": {"repobilityId": "de918fa54268f3b9", "scanner": "scanner-primary", "fingerprint": "cbcb01a1ff2c3d44", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-120093e8aa630a61", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/blog/[slug]/page.tsx:161"}, "properties": {"repobilityId": "ceb2d112cca34f50", "scanner": "scanner-primary", "fingerprint": "120093e8aa630a61", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-23d6928bd47dc729", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/solutions/[slug]/page.tsx:87"}, "properties": {"repobilityId": "ffb0a025f6537d90", "scanner": "scanner-primary", "fingerprint": "23d6928bd47dc729", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a62229942825d5e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/team/page.tsx:190"}, "properties": {"repobilityId": "249e18ba089fd1d0", "scanner": "scanner-primary", "fingerprint": "a62229942825d5e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a707d80e1d7c8413", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/team/page.tsx:91"}, "properties": {"repobilityId": "d54f94f71682c709", "scanner": "scanner-primary", "fingerprint": "a707d80e1d7c8413", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7b6cb5d9a951f7b1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:889"}, "properties": {"repobilityId": "1942022da7198ca0", "scanner": "scanner-primary", "fingerprint": "7b6cb5d9a951f7b1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c564168d343d72da", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/[brand]/[category]/[slug]/page.tsx:470"}, "properties": {"repobilityId": "2f0754630350e891", "scanner": "scanner-primary", "fingerprint": "c564168d343d72da", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d29fcf66917eb37e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/locations/[governorate]/page.tsx:153"}, "properties": {"repobilityId": "045ba2d88f6ef015", "scanner": "scanner-primary", "fingerprint": "d29fcf66917eb37e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0b03b0cae7650657", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/search/SearchClient.tsx:137"}, "properties": {"repobilityId": "8a0cd481d189565e", "scanner": "scanner-primary", "fingerprint": "0b03b0cae7650657", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ebe3dd5414b24b69", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/[locale]/admin/indexing/page.tsx:199"}, "properties": {"repobilityId": "58f89db007abbabf", "scanner": "scanner-primary", "fingerprint": "ebe3dd5414b24b69", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-715439df96d07341", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/lab/page.tsx:140"}, "properties": {"repobilityId": "da212b99ca36b6bd", "scanner": "scanner-primary", "fingerprint": "715439df96d07341", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-46fc21878ea46fe5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/soundcore/page.tsx:126"}, "properties": {"repobilityId": "feb9941892da7ea5", "scanner": "scanner-primary", "fingerprint": "46fc21878ea46fe5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-257bb3da07878d74", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/[locale]/verify/page.tsx:123"}, "properties": {"repobilityId": "37c615eb8002141b", "scanner": "scanner-primary", "fingerprint": "257bb3da07878d74", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e11356435ec0fe3c", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/[locale]/checkout/page.tsx:375"}, "properties": {"repobilityId": "4c922ff921e2477f", "scanner": "scanner-primary", "fingerprint": "e11356435ec0fe3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-5c39e165e7fc4506", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/go/[code]/route.ts:74"}, "properties": {"repobilityId": "d1e7c2b9b0ea3410", "scanner": "scanner-primary", "fingerprint": "5c39e165e7fc4506", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e670c2b5cc139ef0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/generic-category-helpers.tsx:316"}, "properties": {"repobilityId": "6afd2f1bcc8019d6", "scanner": "scanner-primary", "fingerprint": "e670c2b5cc139ef0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-569a9129e64515fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/analytics-tracking.ts:131"}, "properties": {"repobilityId": "b0d6955cdb5a6ff1", "scanner": "scanner-primary", "fingerprint": "569a9129e64515fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d8ae2ec4ce4939b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-sheets.ts:34"}, "properties": {"repobilityId": "b638211a054c12e0", "scanner": "scanner-primary", "fingerprint": "d8ae2ec4ce4939b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74da85f6b97903c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:27"}, "properties": {"repobilityId": "d91dbb6e420e1181", "scanner": "scanner-primary", "fingerprint": "74da85f6b97903c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58105b9e75c9c756", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/index-blog.js:23"}, "properties": {"repobilityId": "e9137644a673bd07", "scanner": "scanner-primary", "fingerprint": "58105b9e75c9c756", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/index-blog.js"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-54708b8ae54d48b2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/detect-new-articles.mjs:7"}, "properties": {"repobilityId": "be7bc163b4163326", "scanner": "scanner-primary", "fingerprint": "54708b8ae54d48b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/detect-new-articles.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-6177a71ee2427df4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/middleware.ts:118"}, "properties": {"repobilityId": "7df0e822c2095082", "scanner": "scanner-primary", "fingerprint": "6177a71ee2427df4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/middleware.ts"}, "region": {"startLine": 118}}}]}, {"ruleId": "scanner-e03bdebdf329e093", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/BlogContentRenderer.tsx:31"}, "properties": {"repobilityId": "12792e082d722939", "scanner": "scanner-primary", "fingerprint": "e03bdebdf329e093", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/BlogContentRenderer.tsx"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-db6028808048857c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/ExpertQuote.tsx:60"}, "properties": {"repobilityId": "9285fc259a2e5988", "scanner": "scanner-primary", "fingerprint": "db6028808048857c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/content/ExpertQuote.tsx"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-73f1d9c075afe2cd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/FAQSection.tsx:49"}, "properties": {"repobilityId": "35e6d3711942888e", "scanner": "scanner-primary", "fingerprint": "73f1d9c075afe2cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/content/FAQSection.tsx"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-b82def637006d3c9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/PrefetchHints.tsx:82"}, "properties": {"repobilityId": "aa3fe5f979ac6377", "scanner": "scanner-primary", "fingerprint": "b82def637006d3c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/content/PrefetchHints.tsx"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-0adc6d3f0cf99df6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/GlobalBusinessSchema.tsx:188"}, "properties": {"repobilityId": "cd6fdf885d76c7a3", "scanner": "scanner-primary", "fingerprint": "0adc6d3f0cf99df6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/content/GlobalBusinessSchema.tsx"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-0eff0bb969ed608f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/content/RecommendedReviews.tsx:53"}, "properties": {"repobilityId": "af919b58c50cad9d", "scanner": "scanner-primary", "fingerprint": "0eff0bb969ed608f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/content/RecommendedReviews.tsx"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-63b4717ba4b263dc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/UX/InteractiveEffects.tsx:149"}, "properties": {"repobilityId": "9aca5dbcadd229dc", "scanner": "scanner-primary", "fingerprint": "63b4717ba4b263dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/UX/InteractiveEffects.tsx"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-9bb2ba15e52769d3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/ProductSchema.tsx:528"}, "properties": {"repobilityId": "ec27239da9be19da", "scanner": "scanner-primary", "fingerprint": "9bb2ba15e52769d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/schemas/ProductSchema.tsx"}, "region": {"startLine": 528}}}]}, {"ruleId": "scanner-c39e175dbcc56ede", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/StructuredDataSchemas.tsx:46"}, "properties": {"repobilityId": "621a7007b111b9d4", "scanner": "scanner-primary", "fingerprint": "c39e175dbcc56ede", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/schemas/StructuredDataSchemas.tsx"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-bf887f983c16fedc", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/schemas/ImageObjectSchema.tsx:189"}, "properties": {"repobilityId": "6c755cdc584a1702", "scanner": "scanner-primary", "fingerprint": "bf887f983c16fedc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/schemas/ImageObjectSchema.tsx"}, "region": {"startLine": 189}}}]}, {"ruleId": "scanner-d053f29ef7647c31", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/interactive/MermaidDiagram.tsx:50"}, "properties": {"repobilityId": "824049a92f5c2e84", "scanner": "scanner-primary", "fingerprint": "d053f29ef7647c31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/interactive/MermaidDiagram.tsx"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-94775fc6895d85c5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/route.ts:53"}, "properties": {"repobilityId": "7cf76098ce493bcd", "scanner": "scanner-primary", "fingerprint": "94775fc6895d85c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/v1/route.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-a73cd4945c52b54c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/premium/lab-report/route.ts:51"}, "properties": {"repobilityId": "0334b1db00e8fee9", "scanner": "scanner-primary", "fingerprint": "a73cd4945c52b54c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/v1/premium/lab-report/route.ts"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-3f8699b869d7d104", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/quick-cod/route.ts:134"}, "properties": {"repobilityId": "30e078e549bd23a2", "scanner": "scanner-primary", "fingerprint": "3f8699b869d7d104", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/v1/quick-cod/route.ts"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-0e9c7c8c680d6c88", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/openapi.json/route.ts:356"}, "properties": {"repobilityId": "47d90ef394ba0259", "scanner": "scanner-primary", "fingerprint": "0e9c7c8c680d6c88", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/openapi.json/route.ts"}, "region": {"startLine": 356}}}]}, {"ruleId": "scanner-367535cc2a19c7e7", "level": "error", "message": {"text": "Possible secret in src/app/admin/print-cards/page.tsx"}, "properties": {"repobilityId": "f868ac5478a61178", "scanner": "scanner-primary", "fingerprint": "367535cc2a19c7e7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/admin/print-cards/page.tsx"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-a3380808cd4fa1c3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/layout.tsx:107"}, "properties": {"repobilityId": "6221240d83c49cf6", "scanner": "scanner-primary", "fingerprint": "a3380808cd4fa1c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/layout.tsx"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-f22fee6b355e31e4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/blog/[slug]/page.tsx:161"}, "properties": {"repobilityId": "3a8ea360481912ca", "scanner": "scanner-primary", "fingerprint": "f22fee6b355e31e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/blog/[slug]/page.tsx"}, "region": {"startLine": 161}}}]}, {"ruleId": "scanner-4e95d029796e5ef6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/solutions/[slug]/page.tsx:87"}, "properties": {"repobilityId": "77eec0fd06d84c62", "scanner": "scanner-primary", "fingerprint": "4e95d029796e5ef6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/solutions/[slug]/page.tsx"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-d114709f84eb461a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/team/page.tsx:91"}, "properties": {"repobilityId": "22ba5d8a77968454", "scanner": "scanner-primary", "fingerprint": "d114709f84eb461a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/team/page.tsx"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-d3cbc60ae940700b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:889"}, "properties": {"repobilityId": "2ca2045e5a54910f", "scanner": "scanner-primary", "fingerprint": "d3cbc60ae940700b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx"}, "region": {"startLine": 889}}}]}, {"ruleId": "scanner-86e5c7ac3c6c80b5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/[brand]/[category]/[slug]/page.tsx:470"}, "properties": {"repobilityId": "dca290412b2e5968", "scanner": "scanner-primary", "fingerprint": "86e5c7ac3c6c80b5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/[brand]/[category]/[slug]/page.tsx"}, "region": {"startLine": 470}}}]}, {"ruleId": "scanner-c0564fe7f4ba6ec3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/locations/[governorate]/page.tsx:153"}, "properties": {"repobilityId": "0b0af788a33ead99", "scanner": "scanner-primary", "fingerprint": "c0564fe7f4ba6ec3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/locations/[governorate]/page.tsx"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-1d300a722b876afb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/lab/page.tsx:140"}, "properties": {"repobilityId": "eb3615e3233f1d71", "scanner": "scanner-primary", "fingerprint": "1d300a722b876afb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/lab/page.tsx"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-c4d44e8bc2babe8a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/soundcore/page.tsx:126"}, "properties": {"repobilityId": "9bd8ac3e25190b5f", "scanner": "scanner-primary", "fingerprint": "c4d44e8bc2babe8a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/soundcore/page.tsx"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-44c05f3c60ce63e9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/[locale]/verify/page.tsx:123"}, "properties": {"repobilityId": "51f1588fecd2f748", "scanner": "scanner-primary", "fingerprint": "44c05f3c60ce63e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/[locale]/verify/page.tsx"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-f5316c938e1ab00f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/openapi.json/route.ts:174"}, "properties": {"repobilityId": "12ae325876fb6d29", "scanner": "scanner-primary", "fingerprint": "f5316c938e1ab00f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/openapi.json/route.ts"}, "region": {"startLine": 174}}}]}, {"ruleId": "scanner-f0d4ad0eef96b031", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/lib/generic-category-helpers.tsx:316"}, "properties": {"repobilityId": "d70bae08f581eb3a", "scanner": "scanner-primary", "fingerprint": "f0d4ad0eef96b031", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/generic-category-helpers.tsx"}, "region": {"startLine": 316}}}]}, {"ruleId": "scanner-f1b24c22972133ec", "level": "error", "message": {"text": "Possible secret in src/lib/api-auth.ts"}, "properties": {"repobilityId": "bd08f198a4aee76d", "scanner": "scanner-primary", "fingerprint": "f1b24c22972133ec", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/api-auth.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-643e088d11ef9982", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "50080e29275c3373", "scanner": "scanner-primary", "fingerprint": "643e088d11ef9982", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-auto-post.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-643e088d11ef9982", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "143e58a4dc9d5046", "scanner": "scanner-primary", "fingerprint": "643e088d11ef9982", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-auto-post.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-4660e104ef2edbe6", "level": "note", "message": {"text": "Very large file: src/components/CategoryTemplate.tsx (805 lines)"}, "properties": {"repobilityId": "1c84e54c1978aee9", "scanner": "scanner-primary", "fingerprint": "4660e104ef2edbe6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1519075a03464a3", "level": "note", "message": {"text": "Very large file: src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx (1023 lines)"}, "properties": {"repobilityId": "8e11598a9a769d70", "scanner": "scanner-primary", "fingerprint": "e1519075a03464a3", "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-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "3fd68a2018135307", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "d7ea9363cd5afe9b", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ca5f5e28a9234837", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: functions/package.json"}, "properties": {"repobilityId": "a4c8bb207b8ba2e2", "scanner": "scanner-primary", "fingerprint": "ca5f5e28a9234837", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "functions/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ce60b8af21bf0cba", "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": "90a3128a23fea1c9", "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": "42821aa9fc5537cc", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "e938bcd1bb8e0707", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "d12e92803c59a45e", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "0bd9f6e1bf357c75", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "e460664357ae49ed", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-6e1d028d8c872af4", "level": "none", "message": {"text": "Commented-code block (5 lines) in next.config.ts:22"}, "properties": {"repobilityId": "6d6e52bcec66e524", "scanner": "scanner-primary", "fingerprint": "6e1d028d8c872af4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-777daa17137990b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/index.js:80"}, "properties": {"repobilityId": "c50ccad48d171041", "scanner": "scanner-primary", "fingerprint": "777daa17137990b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-282d5b5f4bf7bc2b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/post-to-social.mjs:72"}, "properties": {"repobilityId": "5ca35fdf5c179b08", "scanner": "scanner-primary", "fingerprint": "282d5b5f4bf7bc2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48c6a4ebf76a9da1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/middleware.ts:29"}, "properties": {"repobilityId": "4bbd1bcfe2a59115", "scanner": "scanner-primary", "fingerprint": "48c6a4ebf76a9da1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a04e4ebf5c4d0d30", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/i18n/routing.ts:18"}, "properties": {"repobilityId": "3b3484f4261aaace", "scanner": "scanner-primary", "fingerprint": "a04e4ebf5c4d0d30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ace20583a4333cca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CategoryTemplate.tsx:104"}, "properties": {"repobilityId": "a7a5c7f14ccd6f28", "scanner": "scanner-primary", "fingerprint": "ace20583a4333cca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2891d8d5c904a91a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ui/InstantLink.tsx:81"}, "properties": {"repobilityId": "f1e9ae830d22b5bd", "scanner": "scanner-primary", "fingerprint": "2891d8d5c904a91a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-378d628723a15d60", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ui/MarkdownRenderer.tsx:11"}, "properties": {"repobilityId": "12cb320babbed48b", "scanner": "scanner-primary", "fingerprint": "378d628723a15d60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fc0e77ba17fa6d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/content/CategoryOverviewBlock.tsx:5"}, "properties": {"repobilityId": "28f8fd480f0ab8bd", "scanner": "scanner-primary", "fingerprint": "0fc0e77ba17fa6d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31137a9870054f84", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/content/ExpertQuote.tsx:3"}, "properties": {"repobilityId": "532fdadd4ad15e4a", "scanner": "scanner-primary", "fingerprint": "31137a9870054f84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f47ee4d5d550868", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/content/RecommendedReviews.tsx:1"}, "properties": {"repobilityId": "d48337e07d376657", "scanner": "scanner-primary", "fingerprint": "3f47ee4d5d550868", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7302ffba4546ad7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/UX/BackupTimeCalculator.tsx:14"}, "properties": {"repobilityId": "eb6ac53a7a3a92a9", "scanner": "scanner-primary", "fingerprint": "d7302ffba4546ad7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8ce5beadbfa1731", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/schemas/StructuredDataSchemas.tsx:216"}, "properties": {"repobilityId": "79d115020b83f601", "scanner": "scanner-primary", "fingerprint": "f8ce5beadbfa1731", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2504dd7b4a5bca5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/sitemap.ts:178"}, "properties": {"repobilityId": "ad46c752d487f3e8", "scanner": "scanner-primary", "fingerprint": "f2504dd7b4a5bca5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-502b1b95e5c949c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/products/route.ts:9"}, "properties": {"repobilityId": "6c693df4290b00ab", "scanner": "scanner-primary", "fingerprint": "502b1b95e5c949c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71f6cd2061f3547b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/layout.tsx:277"}, "properties": {"repobilityId": "71fbf3f73ec36990", "scanner": "scanner-primary", "fingerprint": "71f6cd2061f3547b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-924ad3670f5c17bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/[locale]/error.tsx:18"}, "properties": {"repobilityId": "9bda094ef1c29456", "scanner": "scanner-primary", "fingerprint": "924ad3670f5c17bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0e811b1e5c303c2", "level": "note", "message": {"text": "Legacy-named symbol `content_copy` in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:238"}, "properties": {"repobilityId": "9c41ce859db2cde7", "scanner": "scanner-primary", "fingerprint": "f0e811b1e5c303c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-69961fd79312c8da", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/[locale]/[brand]/[category]/[slug]/ProductPageClient.tsx:310"}, "properties": {"repobilityId": "ac2d52080f9be55a", "scanner": "scanner-primary", "fingerprint": "69961fd79312c8da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0d1459665270797", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/[locale]/[brand]/[category]/[slug]/page.tsx:344"}, "properties": {"repobilityId": "e3b71e2511e79e9f", "scanner": "scanner-primary", "fingerprint": "f0d1459665270797", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7d63334d3e1004f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/[brand]/[category]/[slug]/page.tsx:315"}, "properties": {"repobilityId": "5c7b31c31ec3a11c", "scanner": "scanner-primary", "fingerprint": "a7d63334d3e1004f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae3e87178852ce62", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/admin/indexing/page.tsx:45"}, "properties": {"repobilityId": "f31760767199b591", "scanner": "scanner-primary", "fingerprint": "ae3e87178852ce62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c21460268760d1ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/[locale]/checkout/page.tsx:180"}, "properties": {"repobilityId": "dc879fc0b71affd2", "scanner": "scanner-primary", "fingerprint": "c21460268760d1ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-245ea277cea4d737", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/app/go/[code]/route.ts:76"}, "properties": {"repobilityId": "2b01d7dc28ffb4ee", "scanner": "scanner-primary", "fingerprint": "245ea277cea4d737", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8be9cd278c37590", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiktokEventsApi.ts:86"}, "properties": {"repobilityId": "e4f740363d1a7afc", "scanner": "scanner-primary", "fingerprint": "b8be9cd278c37590", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-484dfcd9c2446cc4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/ux-signals.ts:203"}, "properties": {"repobilityId": "3bb8c7ba563ff46a", "scanner": "scanner-primary", "fingerprint": "484dfcd9c2446cc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}