{"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-8beb83807e0a9ff1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/page.tsx:119", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/page.tsx:119"}, "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-4344ede9892ffc98", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/tools/promo-cards/page.tsx:81", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/tools/promo-cards/page.tsx:81"}, "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-a9311aab5f556236", "name": "Stray `console.log` in TS/JS \u2014 app/(marketing)/[locale]/x/page.tsx:361", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/(marketing)/[locale]/x/page.tsx:361"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4221a1b3f392d0ae", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/x/page.tsx:499", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/x/page.tsx:499"}, "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-cb69d3d279f0865d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/x/news/[slug]/page.tsx:104", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/x/news/[slug]/page.tsx:104"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8319e5b6c1d77786", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/roughtrade/page.tsx:117", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/roughtrade/page.tsx:117"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d7573cf4740c200c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/compare/[slug]/page.tsx:170", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/compare/[slug]/page.tsx:170"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a13b3b44f46c76cf", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/reviews/page.tsx:110", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/reviews/page.tsx:110"}, "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-84eae927f838aec8", "name": "Icon-only button without accessible name \u2014 app/(marketing)/[locale]/brand-guidelines/page.tsx:262", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/(marketing)/[locale]/brand-guidelines/page.tsx:262"}, "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-5c12df3de42edbc6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/brand-guidelines/page.tsx:25", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/brand-guidelines/page.tsx:25"}, "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-6327efa589a7df62", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/promo/page.tsx:304", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/promo/page.tsx:304"}, "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-ddfc9b7381a88242", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/blog/[slug]/page.tsx:124", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/blog/[slug]/page.tsx:124"}, "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-fb2c43d375a436e9", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate/promo-cards-assets.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate/promo-cards-assets.ts:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b8b2f96615f3b77", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate/webflow-assets.ts:193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate/webflow-assets.ts:193"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95b4664f131587c6", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/encoded-media-filenames.ts:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/encoded-media-filenames.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-10b202e864e3ee01", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/region-hero-translations.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/region-hero-translations.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-c5b46322f093cf0c", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/export-cms-for-localization.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/export-cms-for-localization.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c44d8c047da027", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-locale-overrides-schema.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-locale-overrides-schema.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3faddd1598b21eb3", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/localize-whats-news-columns.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/localize-whats-news-columns.ts:94"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9ec6af3c462760f", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/contact-db-guide-images.ts:132", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/contact-db-guide-images.ts:132"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f1820958a24820d", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/verify-localization.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/verify-localization.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c148a2edc710a5d4", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-cms-localization-schema.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-cms-localization-schema.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-babb4ea845f9213e", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/julio-estrada-image.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/julio-estrada-image.ts:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33aab2e58653a1b4", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/playlists-pricing-copy.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/playlists-pricing-copy.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-36ce00bed025a06d", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/add-brand-ambassadors-nav.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/add-brand-ambassadors-nav.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f393bc38710976d", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/nav-ai-mastering.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/nav-ai-mastering.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c24c2512bf3d793", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/backup-db-json.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/backup-db-json.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-f44f2f1dc00b1292", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/ambassador-hero-translations.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/ambassador-hero-translations.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a5826137fd31b865", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/perks-images.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/perks-images.ts:161"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4aa1a711fb80c76d", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/translation-data-cleanup.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/translation-data-cleanup.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f171124bdb561947", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/fix/translation-data-cleanup.ts:11", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/fix/translation-data-cleanup.ts:11"}, "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-8f9eae6d094e10b5", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/quarantine-404-overrides.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/quarantine-404-overrides.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f547870bcdf9377", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/sanitize-percent-filenames.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/sanitize-percent-filenames.ts:75"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-40cf2065b4f67d50", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-edit-foundation-schema.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-edit-foundation-schema.ts:48"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de5b051312d8e500", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/extract-strings.ts:221", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/extract-strings.ts:221"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-94bbf3904001a1b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-blog-posts-deepl.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-blog-posts-deepl.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f26a324eb9b97b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-seo-meta.ts:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-seo-meta.ts:122"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd51abd3e379b4e8", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-cms-translations.ts:212", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-cms-translations.ts:212"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0fb306ba60882ca1", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-collections-deepl.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-collections-deepl.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6aacefd0f5e95453", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-editable-pages.ts:164", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-editable-pages.ts:164"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79dbce9391f42cce", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/glossary.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/glossary.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1df9aebc3f66439b", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-seed-strings.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-seed-strings.ts:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5c4e8fe76c38aeb", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-legal-deepl.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-legal-deepl.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83447382c47e18e5", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/handlock-seed-strings.ts:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/handlock-seed-strings.ts:155"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5aca9527ca63bab5", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/resync-translations.ts:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/resync-translations.ts:113"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1be46d7b63f826a", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-globals-deepl.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-globals-deepl.ts:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0333178c775ec772", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-legal-from-live.ts:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-legal-from-live.ts:104"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20898576bb8d3bd6", "name": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-cms-richtext.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-cms-richtext.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a0b0e9f822dae03", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/08-redirects.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/08-redirects.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f39071ecb6cab07b", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/11-extras.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/11-extras.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31e9da3718bb25da", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/09-blog-bodies.ts:243", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/09-blog-bodies.ts:243"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0181ed24b7febf9", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/06-pages.ts:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/06-pages.ts:155"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45cb6c6cd86771cc", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/01-taxonomies.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/01-taxonomies.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46da4f577f73fb07", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/04-schedule.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/04-schedule.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce3943b455fb963b", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/03-people.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/03-people.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c51d43ca1fb2261b", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/10-competitors.ts:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/10-competitors.ts:136"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b8fbddccb6ffd9a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/import/10-competitors.ts:49", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/import/10-competitors.ts: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-8ca48b4613167144", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/run.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/run.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa0c5a6acc2269e9", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/14-regional-releases.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/14-regional-releases.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be6503d321820c37", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/02-static.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/02-static.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5881a836d55a5a22", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/05-blog.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/05-blog.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f0fb4990f7ecfea", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/99-clear-pages.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/99-clear-pages.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-6bca469d966edffe", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/07-media.ts:366", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/07-media.ts:366"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c6c4a95f58ea2c2", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/12-blog-popularity.ts:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/12-blog-popularity.ts:149"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-606ea7298ee98ec8", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/ls-roster.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/ls-roster.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d412631d0653168", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/seed-globals.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/seed-globals.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb693c0a3451f842", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/13-blog-bodies-to-lexical.ts:478", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/13-blog-bodies-to-lexical.ts:478"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7b02b22486e5bcd", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/utils.ts:173", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/utils.ts:173"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f274aedba9f4608a", "name": "Stray `console.log` in TS/JS \u2014 scripts/import/dittox-blog-bodies.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/dittox-blog-bodies.ts:244"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b11e7f21e6a495b2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/legal/LegalArticle.tsx:112", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/legal/LegalArticle.tsx:112"}, "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-4f4060c3d49b20b3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/store-page/StorePageView.tsx:44", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/store-page/StorePageView.tsx:44"}, "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-fb06f1048cc50189", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/PlaylistGridBlock.tsx:164", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/PlaylistGridBlock.tsx:164"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1dd0e12a348d50f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/PlaylistCard.tsx:24", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/PlaylistCard.tsx:24"}, "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-5252d8a1fb2221a3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/SmallBlocks.tsx:459", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/SmallBlocks.tsx:459"}, "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-b08b27387b775096", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/_EditableCta.tsx:100", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/_EditableCta.tsx:100"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63f5272e1848d2e2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/edit/Editable.tsx:60", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/edit/Editable.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-5046ce598598d1e8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/spotify.ts:41", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/spotify.ts:41"}, "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-2b3912fbb4134feb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/jsonld.ts:5", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/jsonld.ts:5"}, "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-db6eef69413914b5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/compare/loader.ts:43", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/compare/loader.ts:43"}, "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-1dc6d93628a77d26", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/cms/tiptap-render.ts:7", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/cms/tiptap-render.ts:7"}, "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-896ca16d833cfb4f", "name": "Insecure pattern 'node_child_process' in app/api/tools/spotify-canvas/render-mp4/route.ts:29", "shortDescription": {"text": "Insecure pattern 'node_child_process' in app/api/tools/spotify-canvas/render-mp4/route.ts:29"}, "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-c61065c00f323ac0", "name": "Insecure pattern 'cors_wildcard' in app/api/tools/promo-cards/image/route.ts:75", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in app/api/tools/promo-cards/image/route.ts:75"}, "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-b82f818064049734", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/page.tsx:119", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/page.tsx:119"}, "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-3194c79ba7af4249", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/tools/promo-cards/page.tsx:81", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/tools/promo-cards/page.tsx:81"}, "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-3c5000c6974c0cb3", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/x/page.tsx:499", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/x/page.tsx:499"}, "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-d76a0497c888aa92", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/x/news/[slug]/page.tsx:104", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/x/news/[slug]/page.tsx:104"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-424101c24276e0a1", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/roughtrade/page.tsx:117", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/roughtrade/page.tsx:117"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9c003ddd8d604618", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/compare/[slug]/page.tsx:170", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/compare/[slug]/page.tsx:170"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95f8cee65d3b6fef", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/reviews/page.tsx:110", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/reviews/page.tsx:110"}, "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-798956375ee64c8d", "name": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/blog/[slug]/page.tsx:124", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/blog/[slug]/page.tsx:124"}, "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-87c150ad374264f9", "name": "Insecure pattern 'node_child_process' in scripts/import/run.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/import/run.ts:6"}, "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-25ec9892c2df6f7e", "name": "Insecure pattern 'dangerous_innerhtml' in components/legal/LegalArticle.tsx:112", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/legal/LegalArticle.tsx:112"}, "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-d3488ae88a8acd66", "name": "Insecure pattern 'dangerous_innerhtml' in components/blocks/SmallBlocks.tsx:459", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/blocks/SmallBlocks.tsx:459"}, "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-1115cafb2604571c", "name": "Insecure pattern 'dangerous_innerhtml' in components/blocks/_EditableCta.tsx:100", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/blocks/_EditableCta.tsx:100"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-984189985ab45609", "name": "Insecure pattern 'direct_innerhtml_assignment' in components/edit/EditOverlay.tsx:119", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in components/edit/EditOverlay.tsx:119"}, "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-6fe0cae6273933df", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/spotify-canvas/generator.js:32", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/spotify-canvas/generator.js:32"}, "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-4b0bffd6a38de1af", "name": "Very large file: lib/seed/pages.ts (4047 lines)", "shortDescription": {"text": "Very large file: lib/seed/pages.ts (4047 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-135cf3143c7cf0bd", "name": "Very large file: lib/seed/legal.ts (909 lines)", "shortDescription": {"text": "Very large file: lib/seed/legal.ts (909 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-bd5c0a4bc4cd42a7", "name": "Very large file: cms/payload-types.ts (4432 lines)", "shortDescription": {"text": "Very large file: cms/payload-types.ts (4432 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-8e857d55d1946918", "name": "Very large file: migrations/20260508_115743.ts (2892 lines)", "shortDescription": {"text": "Very large file: migrations/20260508_115743.ts (2892 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": "0 test file(s) for 351 source file(s) (ratio 0.00). 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 296 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 54 placeholder/mock markers across 26 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a2cc06fd666ce13", "name": "Commented-code block (7 lines) in middleware.ts:69", "shortDescription": {"text": "Commented-code block (7 lines) in middleware.ts:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9f0176d4a66c4db", "name": "Commented-code block (5 lines) in next.config.ts:42", "shortDescription": {"text": "Commented-code block (5 lines) in next.config.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-361f6d9974520496", "name": "Commented-code block (6 lines) in app/layout.tsx:45", "shortDescription": {"text": "Commented-code block (6 lines) in app/layout.tsx:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-990da3872304adbf", "name": "Commented-code block (6 lines) in app/api/tools/spotify-canvas/render-mp4/route.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/tools/spotify-canvas/render-mp4/route.ts:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-91259eccd8ab4427", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/signup/subscribe/route.ts:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/signup/subscribe/route.ts:117"}, "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-de7bf388700c182e", "name": "Commented-code block (5 lines) in app/api/cms/copy/route.ts:192", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cms/copy/route.ts:192"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0199b9aa9d1db20e", "name": "Commented-code block (7 lines) in app/(marketing)/[locale]/layout.tsx:49", "shortDescription": {"text": "Commented-code block (7 lines) in app/(marketing)/[locale]/layout.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1f4feccf0a648a0", "name": "Commented-code block (7 lines) in app/(marketing)/[locale]/page.tsx:80", "shortDescription": {"text": "Commented-code block (7 lines) in app/(marketing)/[locale]/page.tsx:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-481c76b1ffae302e", "name": "Commented-code block (7 lines) in app/(marketing)/[locale]/[slug]/page.tsx:96", "shortDescription": {"text": "Commented-code block (7 lines) in app/(marketing)/[locale]/[slug]/page.tsx:96"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59ea8cccac75ee01", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(marketing)/[locale]/[slug]/page.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(marketing)/[locale]/[slug]/page.tsx:65"}, "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-755e5ce86dfbeb93", "name": "Commented-code block (5 lines) in app/(marketing)/[locale]/tools/[slug]/page.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in app/(marketing)/[locale]/tools/[slug]/page.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-551cd34fecc4d70b", "name": "Commented-code block (5 lines) in app/(marketing)/[locale]/x/page.tsx:95", "shortDescription": {"text": "Commented-code block (5 lines) in app/(marketing)/[locale]/x/page.tsx:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c62ecb8a2a5c102", "name": "Commented-code block (5 lines) in app/(marketing)/[locale]/reviews/page.tsx:65", "shortDescription": {"text": "Commented-code block (5 lines) in app/(marketing)/[locale]/reviews/page.tsx:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90194323f8ff8f5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate/promo-cards-assets.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate/promo-cards-assets.ts:79"}, "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-2476a97a251c332a", "name": "Commented-code block (6 lines) in scripts/i18n/extract-strings.ts:128", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/i18n/extract-strings.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-126295f730d1dde8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/translate-editable-pages.ts:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/translate-editable-pages.ts:130"}, "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-a34bf4ed01b24c13", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/glossary.ts:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/glossary.ts:68"}, "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-99910133aefdb729", "name": "Commented-code block (5 lines) in scripts/i18n/deepl.ts:111", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/i18n/deepl.ts:111"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3975de10fa0fc9cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/import-legal-from-live.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/import-legal-from-live.ts:48"}, "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-9d6fac071eeac25a", "name": "Commented-code block (5 lines) in scripts/import/11-extras.ts:146", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/import/11-extras.ts:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fa4ee4f598ec427", "name": "Commented-code block (5 lines) in scripts/import/03-people.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/import/03-people.ts:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05452f408bbf8bfa", "name": "Commented-code block (5 lines) in scripts/import/10-competitors.ts:163", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/import/10-competitors.ts:163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c505206ee70a7e1", "name": "Commented-code block (5 lines) in scripts/import/07-media.ts:272", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/import/07-media.ts:272"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a479d6590072ff4", "name": "Commented-code block (6 lines) in scripts/import/seed-globals.ts:102", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/import/seed-globals.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eafc5708f410988e", "name": "Commented-code block (5 lines) in scripts/import/dittox-blog-bodies.ts:125", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/import/dittox-blog-bodies.ts:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dedb8d825b1e1a9", "name": "Commented-code block (9 lines) in components/legal/LegalArticle.tsx:85", "shortDescription": {"text": "Commented-code block (9 lines) in components/legal/LegalArticle.tsx:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc3160b57286d5b5", "name": "Legacy-named symbol `imageOrLegacy` in components/store-page/StorePageView.tsx:107", "shortDescription": {"text": "Legacy-named symbol `imageOrLegacy` in components/store-page/StorePageView.tsx:107"}, "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-3da9dc52e5037f46", "name": "Commented-code block (5 lines) in components/store-page/StorePageView.tsx:227", "shortDescription": {"text": "Commented-code block (5 lines) in components/store-page/StorePageView.tsx:227"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f14051f40ab83cd4", "name": "Commented-code block (5 lines) in components/blocks/_DistroSoundwave.tsx:134", "shortDescription": {"text": "Commented-code block (5 lines) in components/blocks/_DistroSoundwave.tsx:134"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d45fe66d2027bb0f", "name": "Commented-code block (10 lines) in components/blocks/SmallBlocks.tsx:422", "shortDescription": {"text": "Commented-code block (10 lines) in components/blocks/SmallBlocks.tsx:422"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bc76d6024b9ff38", "name": "Commented-code block (6 lines) in components/blocks/PerksFeedBlock.tsx:55", "shortDescription": {"text": "Commented-code block (6 lines) in components/blocks/PerksFeedBlock.tsx:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b7c76774df2928f", "name": "Commented-code block (6 lines) in components/blocks/_FeatureSliderStage.tsx:48", "shortDescription": {"text": "Commented-code block (6 lines) in components/blocks/_FeatureSliderStage.tsx:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2a78e6600ffbc3c", "name": "Commented-code block (5 lines) in components/marketing/EarningsDashboard.tsx:114", "shortDescription": {"text": "Commented-code block (5 lines) in components/marketing/EarningsDashboard.tsx:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1405b6ff09a20d21", "name": "Commented-code block (6 lines) in components/edit/Editable.tsx:83", "shortDescription": {"text": "Commented-code block (6 lines) in components/edit/Editable.tsx:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37966ca0b515bae4", "name": "Commented-code block (8 lines) in components/edit/EditOverlay.tsx:97", "shortDescription": {"text": "Commented-code block (8 lines) in components/edit/EditOverlay.tsx:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a83b9dd88ad3cdce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/edit/EditOverlay.tsx:502", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/edit/EditOverlay.tsx:502"}, "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-80450779174d16e1", "name": "Commented-code block (5 lines) in components/nav/DittoNav.tsx:159", "shortDescription": {"text": "Commented-code block (5 lines) in components/nav/DittoNav.tsx:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bde06ba95caf25e", "name": "Commented-code block (8 lines) in components/nav/DittoFooter.tsx:54", "shortDescription": {"text": "Commented-code block (8 lines) in components/nav/DittoFooter.tsx:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b32f8564cf23364e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/region-prices/RegionPriceContext.tsx:133", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/region-prices/RegionPriceContext.tsx:133"}, "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-379d5caef2b0add5", "name": "Commented-code block (8 lines) in components/promo/PromoFx.tsx:50", "shortDescription": {"text": "Commented-code block (8 lines) in components/promo/PromoFx.tsx:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-895c907a2d5c6f09", "name": "Commented-code block (5 lines) in components/blog/BlogPagination.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in components/blog/BlogPagination.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11671f638481a30a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/playlists/PlaylistSubmitFlow.tsx:128", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/playlists/PlaylistSubmitFlow.tsx:128"}, "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-3d908a5cd6f7e515", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/contact-database/sheet.ts:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/contact-database/sheet.ts:115"}, "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-17f537bf839244f3", "name": "Commented-code block (5 lines) in lib/seo/metadata.ts:152", "shortDescription": {"text": "Commented-code block (5 lines) in lib/seo/metadata.ts:152"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ae46578897e1385", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/index.ts:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/index.ts:126"}, "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-72c7a88c48b57d6f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/catalog.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/catalog.ts:93"}, "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-3343e35a553bd2ef", "name": "Commented-code block (5 lines) in lib/i18n/translate-doc.ts:248", "shortDescription": {"text": "Commented-code block (5 lines) in lib/i18n/translate-doc.ts:248"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9db0bcfe9f04e58", "name": "Commented-code block (5 lines) in lib/seed/pages.ts:151", "shortDescription": {"text": "Commented-code block (5 lines) in lib/seed/pages.ts:151"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f77b25b72370319", "name": "Commented-code block (5 lines) in lib/seed/homepage.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in lib/seed/homepage.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-8c2551d7e330400c", "name": "Legacy-named symbol `2_copy` in lib/seed/perks.ts:281", "shortDescription": {"text": "Legacy-named symbol `2_copy` in lib/seed/perks.ts:281"}, "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-2516ce02403b9f04", "name": "Commented-code block (8 lines) in lib/seed/toolBlocks.ts:69", "shortDescription": {"text": "Commented-code block (8 lines) in lib/seed/toolBlocks.ts:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c7d2ce46321b1da", "name": "Commented-code block (5 lines) in lib/blog/loader.ts:691", "shortDescription": {"text": "Commented-code block (5 lines) in lib/blog/loader.ts:691"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12c1bdb3100beec5", "name": "Commented-code block (6 lines) in lib/cms/page-copy.ts:306", "shortDescription": {"text": "Commented-code block (6 lines) in lib/cms/page-copy.ts:306"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-516e53f3c147ee9f", "name": "Commented-code block (5 lines) in lib/cms/index.ts:146", "shortDescription": {"text": "Commented-code block (5 lines) in lib/cms/index.ts:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d002b73eb4514de", "name": "Commented-code block (5 lines) in lib/cms/editable-context.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in lib/cms/editable-context.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-ab5938304d9ce31f", "name": "Commented-code block (6 lines) in lib/cms/tiptap-render.ts:88", "shortDescription": {"text": "Commented-code block (6 lines) in lib/cms/tiptap-render.ts:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3f95497513cb81e", "name": "Commented-code block (6 lines) in lib/cms/sitemap.ts:67", "shortDescription": {"text": "Commented-code block (6 lines) in lib/cms/sitemap.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5841784384c0b095", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/promo-cards/usePromoCard.ts:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/promo-cards/usePromoCard.ts:173"}, "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-9ecc8cababbac617", "name": "Commented-code block (5 lines) in lib/promo-cards/hosts.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in lib/promo-cards/hosts.ts:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac262bc8a65646d0", "name": "Commented-code block (5 lines) in cms/payload.config.ts:85", "shortDescription": {"text": "Commented-code block (5 lines) in cms/payload.config.ts:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a726e56e9be398f6", "name": "Commented-code block (11 lines) in cms/globals/index.ts:28", "shortDescription": {"text": "Commented-code block (11 lines) in cms/globals/index.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18b589759ff7f54a", "name": "Commented-code block (5 lines) in cms/collections/PageCopyOverrides.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in cms/collections/PageCopyOverrides.ts:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ac340c2a7514854", "name": "Commented-code block (7 lines) in cms/collections/BlogPost.ts:61", "shortDescription": {"text": "Commented-code block (7 lines) in cms/collections/BlogPost.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41d3836df1237dc6", "name": "Commented-code block (5 lines) in cms/collections/StorePage.ts:88", "shortDescription": {"text": "Commented-code block (5 lines) in cms/collections/StorePage.ts:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bbb47770f0a053bc", "name": "Commented-code block (5 lines) in cms/collections/content.ts:563", "shortDescription": {"text": "Commented-code block (5 lines) in cms/collections/content.ts:563"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97317d8d6ac1c521", "name": "Commented-code block (5 lines) in migrations/20260521_093200.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in migrations/20260521_093200.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f69c0b7ff4f59707", "name": "Commented-code block (5 lines) in migrations/20260512_120537.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in migrations/20260512_120537.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-601a162905c315dd", "name": "Legacy-named symbol `review_copy` in migrations/20260508_115743.ts:1121", "shortDescription": {"text": "Legacy-named symbol `review_copy` in migrations/20260508_115743.ts:1121"}, "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-64bc033a45ab26f1", "name": "34 env vars used in code but missing from .env.example", "shortDescription": {"text": "34 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CSV_DIR`, `DATABASE_URL`, `DB_TIMEOUT_MS`, `DEEPL_API_KEY`, `EMAIL_FROM`, `EMAIL_FROM_NAME`, `FORCE`, `FORCE_REVIEWS` + 26 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25428"}, "properties": {"repository": "dittomusic-JK/dittomusic", "repoUrl": "https://github.com/dittomusic-JK/dittomusic", "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-8beb83807e0a9ff1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/page.tsx:119"}, "properties": {"repobilityId": "7879d1207325e8c4", "scanner": "scanner-primary", "fingerprint": "8beb83807e0a9ff1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4344ede9892ffc98", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/tools/promo-cards/page.tsx:81"}, "properties": {"repobilityId": "58cfc25f5e6dba1d", "scanner": "scanner-primary", "fingerprint": "4344ede9892ffc98", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a9311aab5f556236", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/(marketing)/[locale]/x/page.tsx:361"}, "properties": {"repobilityId": "0831fecb8530f99b", "scanner": "scanner-primary", "fingerprint": "a9311aab5f556236", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4221a1b3f392d0ae", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/x/page.tsx:499"}, "properties": {"repobilityId": "c1dbb480d4857f1e", "scanner": "scanner-primary", "fingerprint": "4221a1b3f392d0ae", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cb69d3d279f0865d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/x/news/[slug]/page.tsx:104"}, "properties": {"repobilityId": "1d393537283f860e", "scanner": "scanner-primary", "fingerprint": "cb69d3d279f0865d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8319e5b6c1d77786", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/roughtrade/page.tsx:117"}, "properties": {"repobilityId": "40ad7c937fecd8e6", "scanner": "scanner-primary", "fingerprint": "8319e5b6c1d77786", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d7573cf4740c200c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/compare/[slug]/page.tsx:170"}, "properties": {"repobilityId": "a63b2ae2a96dadc1", "scanner": "scanner-primary", "fingerprint": "d7573cf4740c200c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a13b3b44f46c76cf", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/reviews/page.tsx:110"}, "properties": {"repobilityId": "872663b66b06e038", "scanner": "scanner-primary", "fingerprint": "a13b3b44f46c76cf", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-84eae927f838aec8", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/(marketing)/[locale]/brand-guidelines/page.tsx:262"}, "properties": {"repobilityId": "8c3555557e3bfb39", "scanner": "scanner-primary", "fingerprint": "84eae927f838aec8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-5c12df3de42edbc6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/brand-guidelines/page.tsx:25"}, "properties": {"repobilityId": "0daf0c96f97a8b30", "scanner": "scanner-primary", "fingerprint": "5c12df3de42edbc6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6327efa589a7df62", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/promo/page.tsx:304"}, "properties": {"repobilityId": "235e39d6cb97d095", "scanner": "scanner-primary", "fingerprint": "6327efa589a7df62", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ddfc9b7381a88242", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(marketing)/[locale]/blog/[slug]/page.tsx:124"}, "properties": {"repobilityId": "7614978bcd45debc", "scanner": "scanner-primary", "fingerprint": "ddfc9b7381a88242", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fb2c43d375a436e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate/promo-cards-assets.ts:102"}, "properties": {"repobilityId": "e1944729d3d52670", "scanner": "scanner-primary", "fingerprint": "fb2c43d375a436e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b8b2f96615f3b77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate/webflow-assets.ts:193"}, "properties": {"repobilityId": "169df71ed46a4ecb", "scanner": "scanner-primary", "fingerprint": "7b8b2f96615f3b77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95b4664f131587c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/encoded-media-filenames.ts:131"}, "properties": {"repobilityId": "016fbe6133519776", "scanner": "scanner-primary", "fingerprint": "95b4664f131587c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10b202e864e3ee01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/region-hero-translations.ts:34"}, "properties": {"repobilityId": "f697e214c2281941", "scanner": "scanner-primary", "fingerprint": "10b202e864e3ee01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5b46322f093cf0c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/export-cms-for-localization.ts:55"}, "properties": {"repobilityId": "9f735e00f516cb22", "scanner": "scanner-primary", "fingerprint": "c5b46322f093cf0c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49c44d8c047da027", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-locale-overrides-schema.ts:47"}, "properties": {"repobilityId": "ff7b2734c46f488c", "scanner": "scanner-primary", "fingerprint": "49c44d8c047da027", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3faddd1598b21eb3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/localize-whats-news-columns.ts:94"}, "properties": {"repobilityId": "d0d5ba245c04271c", "scanner": "scanner-primary", "fingerprint": "3faddd1598b21eb3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9ec6af3c462760f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/contact-db-guide-images.ts:132"}, "properties": {"repobilityId": "4d8b1047809f3f9a", "scanner": "scanner-primary", "fingerprint": "e9ec6af3c462760f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f1820958a24820d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/verify-localization.ts:32"}, "properties": {"repobilityId": "695bd45f6050c258", "scanner": "scanner-primary", "fingerprint": "1f1820958a24820d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c148a2edc710a5d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-cms-localization-schema.ts:63"}, "properties": {"repobilityId": "2e0c220efeeb0e90", "scanner": "scanner-primary", "fingerprint": "c148a2edc710a5d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-babb4ea845f9213e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/julio-estrada-image.ts:71"}, "properties": {"repobilityId": "4c9d0ba3941dbf8d", "scanner": "scanner-primary", "fingerprint": "babb4ea845f9213e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-33aab2e58653a1b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/playlists-pricing-copy.ts:74"}, "properties": {"repobilityId": "6c3ea32e79a75668", "scanner": "scanner-primary", "fingerprint": "33aab2e58653a1b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36ce00bed025a06d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/add-brand-ambassadors-nav.ts:43"}, "properties": {"repobilityId": "43a550ca70e0c9e1", "scanner": "scanner-primary", "fingerprint": "36ce00bed025a06d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f393bc38710976d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/nav-ai-mastering.ts:56"}, "properties": {"repobilityId": "5b2b8f199511477e", "scanner": "scanner-primary", "fingerprint": "3f393bc38710976d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c24c2512bf3d793", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/backup-db-json.ts:34"}, "properties": {"repobilityId": "4f50046eefb9fdc3", "scanner": "scanner-primary", "fingerprint": "5c24c2512bf3d793", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f44f2f1dc00b1292", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/ambassador-hero-translations.ts:47"}, "properties": {"repobilityId": "d397a42d2d8997b4", "scanner": "scanner-primary", "fingerprint": "f44f2f1dc00b1292", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5826137fd31b865", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/perks-images.ts:161"}, "properties": {"repobilityId": "33dd2c3f3233bb49", "scanner": "scanner-primary", "fingerprint": "a5826137fd31b865", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4aa1a711fb80c76d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/translation-data-cleanup.ts:54"}, "properties": {"repobilityId": "ef2f9fff1d497c28", "scanner": "scanner-primary", "fingerprint": "4aa1a711fb80c76d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f171124bdb561947", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/fix/translation-data-cleanup.ts:11"}, "properties": {"repobilityId": "6e317993bc7bb179", "scanner": "scanner-primary", "fingerprint": "f171124bdb561947", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8f9eae6d094e10b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/quarantine-404-overrides.ts:44"}, "properties": {"repobilityId": "c6c628e69a64076f", "scanner": "scanner-primary", "fingerprint": "8f9eae6d094e10b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f547870bcdf9377", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/sanitize-percent-filenames.ts:75"}, "properties": {"repobilityId": "68ef830feb99aec2", "scanner": "scanner-primary", "fingerprint": "1f547870bcdf9377", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40cf2065b4f67d50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix/apply-edit-foundation-schema.ts:48"}, "properties": {"repobilityId": "76a4b7435c3bb03d", "scanner": "scanner-primary", "fingerprint": "40cf2065b4f67d50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de5b051312d8e500", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/extract-strings.ts:221"}, "properties": {"repobilityId": "04f863165d4f1b80", "scanner": "scanner-primary", "fingerprint": "de5b051312d8e500", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94bbf3904001a1b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-blog-posts-deepl.ts:82"}, "properties": {"repobilityId": "664a96a684e6ea4d", "scanner": "scanner-primary", "fingerprint": "94bbf3904001a1b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f26a324eb9b97b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-seo-meta.ts:122"}, "properties": {"repobilityId": "a158d0e700e55432", "scanner": "scanner-primary", "fingerprint": "4f26a324eb9b97b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd51abd3e379b4e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-cms-translations.ts:212"}, "properties": {"repobilityId": "2bb09e91fab96ddb", "scanner": "scanner-primary", "fingerprint": "dd51abd3e379b4e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0fb306ba60882ca1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-collections-deepl.ts:43"}, "properties": {"repobilityId": "55cf4b1e7a25e918", "scanner": "scanner-primary", "fingerprint": "0fb306ba60882ca1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6aacefd0f5e95453", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-editable-pages.ts:164"}, "properties": {"repobilityId": "afb068e2ba3d69a8", "scanner": "scanner-primary", "fingerprint": "6aacefd0f5e95453", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79dbce9391f42cce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/glossary.ts:92"}, "properties": {"repobilityId": "e6cb29967bd0e717", "scanner": "scanner-primary", "fingerprint": "79dbce9391f42cce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1df9aebc3f66439b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-seed-strings.ts:97"}, "properties": {"repobilityId": "a95da6ffe811f425", "scanner": "scanner-primary", "fingerprint": "1df9aebc3f66439b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5c4e8fe76c38aeb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-legal-deepl.ts:38"}, "properties": {"repobilityId": "3b4018323eaf4a6f", "scanner": "scanner-primary", "fingerprint": "e5c4e8fe76c38aeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83447382c47e18e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/handlock-seed-strings.ts:155"}, "properties": {"repobilityId": "0dee180cbda45249", "scanner": "scanner-primary", "fingerprint": "83447382c47e18e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5aca9527ca63bab5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/resync-translations.ts:113"}, "properties": {"repobilityId": "1c6a5adc9fe1309d", "scanner": "scanner-primary", "fingerprint": "5aca9527ca63bab5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1be46d7b63f826a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/translate-globals-deepl.ts:115"}, "properties": {"repobilityId": "acb0e2a4cd099504", "scanner": "scanner-primary", "fingerprint": "e1be46d7b63f826a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0333178c775ec772", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-legal-from-live.ts:104"}, "properties": {"repobilityId": "54ba9a448ba182dc", "scanner": "scanner-primary", "fingerprint": "0333178c775ec772", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20898576bb8d3bd6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/i18n/import-cms-richtext.ts:93"}, "properties": {"repobilityId": "668f1152c3903dce", "scanner": "scanner-primary", "fingerprint": "20898576bb8d3bd6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a0b0e9f822dae03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/08-redirects.ts:44"}, "properties": {"repobilityId": "170c14bb7d15330d", "scanner": "scanner-primary", "fingerprint": "9a0b0e9f822dae03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f39071ecb6cab07b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/11-extras.ts:42"}, "properties": {"repobilityId": "4cb9e4fb58f1d9a0", "scanner": "scanner-primary", "fingerprint": "f39071ecb6cab07b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31e9da3718bb25da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/09-blog-bodies.ts:243"}, "properties": {"repobilityId": "9f0eeec1f5ccc88e", "scanner": "scanner-primary", "fingerprint": "31e9da3718bb25da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0181ed24b7febf9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/06-pages.ts:155"}, "properties": {"repobilityId": "4b8637abb440d3bd", "scanner": "scanner-primary", "fingerprint": "b0181ed24b7febf9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45cb6c6cd86771cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/01-taxonomies.ts:9"}, "properties": {"repobilityId": "40d34c44d1da2c23", "scanner": "scanner-primary", "fingerprint": "45cb6c6cd86771cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46da4f577f73fb07", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/04-schedule.ts:70"}, "properties": {"repobilityId": "fcfdf62731806aba", "scanner": "scanner-primary", "fingerprint": "46da4f577f73fb07", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce3943b455fb963b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/03-people.ts:30"}, "properties": {"repobilityId": "f78a803a8e5e0c40", "scanner": "scanner-primary", "fingerprint": "ce3943b455fb963b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c51d43ca1fb2261b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/10-competitors.ts:136"}, "properties": {"repobilityId": "2250b4e7a26b7d89", "scanner": "scanner-primary", "fingerprint": "c51d43ca1fb2261b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b8fbddccb6ffd9a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/import/10-competitors.ts:49"}, "properties": {"repobilityId": "379a376df32d9d8a", "scanner": "scanner-primary", "fingerprint": "4b8fbddccb6ffd9a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8ca48b4613167144", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/run.ts:21"}, "properties": {"repobilityId": "d95c7b80a2ce8b13", "scanner": "scanner-primary", "fingerprint": "8ca48b4613167144", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa0c5a6acc2269e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/14-regional-releases.ts:82"}, "properties": {"repobilityId": "88d1f81249d21fd9", "scanner": "scanner-primary", "fingerprint": "fa0c5a6acc2269e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be6503d321820c37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/02-static.ts:10"}, "properties": {"repobilityId": "12769afccca772c8", "scanner": "scanner-primary", "fingerprint": "be6503d321820c37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5881a836d55a5a22", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/05-blog.ts:56"}, "properties": {"repobilityId": "011a67c53755b79d", "scanner": "scanner-primary", "fingerprint": "5881a836d55a5a22", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f0fb4990f7ecfea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/99-clear-pages.ts:27"}, "properties": {"repobilityId": "12999cb8ebab70f2", "scanner": "scanner-primary", "fingerprint": "9f0fb4990f7ecfea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6bca469d966edffe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/07-media.ts:366"}, "properties": {"repobilityId": "fe897ed297975966", "scanner": "scanner-primary", "fingerprint": "6bca469d966edffe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c6c4a95f58ea2c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/12-blog-popularity.ts:149"}, "properties": {"repobilityId": "1d35c06a48f972cb", "scanner": "scanner-primary", "fingerprint": "4c6c4a95f58ea2c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-606ea7298ee98ec8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/ls-roster.ts:55"}, "properties": {"repobilityId": "725c5eb440242b07", "scanner": "scanner-primary", "fingerprint": "606ea7298ee98ec8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d412631d0653168", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/seed-globals.ts:40"}, "properties": {"repobilityId": "b2887c8d45f9af07", "scanner": "scanner-primary", "fingerprint": "8d412631d0653168", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb693c0a3451f842", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/13-blog-bodies-to-lexical.ts:478"}, "properties": {"repobilityId": "47220cff012f9efc", "scanner": "scanner-primary", "fingerprint": "fb693c0a3451f842", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7b02b22486e5bcd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/utils.ts:173"}, "properties": {"repobilityId": "f9913c77ba9e5809", "scanner": "scanner-primary", "fingerprint": "b7b02b22486e5bcd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f274aedba9f4608a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import/dittox-blog-bodies.ts:244"}, "properties": {"repobilityId": "b62b907cab63bf93", "scanner": "scanner-primary", "fingerprint": "f274aedba9f4608a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b11e7f21e6a495b2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/legal/LegalArticle.tsx:112"}, "properties": {"repobilityId": "4a1e4f3542d6227f", "scanner": "scanner-primary", "fingerprint": "b11e7f21e6a495b2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4f4060c3d49b20b3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/store-page/StorePageView.tsx:44"}, "properties": {"repobilityId": "bac4b649810f85fa", "scanner": "scanner-primary", "fingerprint": "4f4060c3d49b20b3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fb06f1048cc50189", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/PlaylistGridBlock.tsx:164"}, "properties": {"repobilityId": "daf9373206d85767", "scanner": "scanner-primary", "fingerprint": "fb06f1048cc50189", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b1dd0e12a348d50f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/PlaylistCard.tsx:24"}, "properties": {"repobilityId": "35c53d7a2d1e7c3e", "scanner": "scanner-primary", "fingerprint": "b1dd0e12a348d50f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5252d8a1fb2221a3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/SmallBlocks.tsx:459"}, "properties": {"repobilityId": "78d0aa21c0fab5cc", "scanner": "scanner-primary", "fingerprint": "5252d8a1fb2221a3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b08b27387b775096", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/blocks/_EditableCta.tsx:100"}, "properties": {"repobilityId": "60a60456b7881360", "scanner": "scanner-primary", "fingerprint": "b08b27387b775096", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-63f5272e1848d2e2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/edit/Editable.tsx:60"}, "properties": {"repobilityId": "1690f05ce7005283", "scanner": "scanner-primary", "fingerprint": "63f5272e1848d2e2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5046ce598598d1e8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/spotify.ts:41"}, "properties": {"repobilityId": "901b929bb7c5ea12", "scanner": "scanner-primary", "fingerprint": "5046ce598598d1e8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2b3912fbb4134feb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/jsonld.ts:5"}, "properties": {"repobilityId": "377143d38e8ece67", "scanner": "scanner-primary", "fingerprint": "2b3912fbb4134feb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-db6eef69413914b5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/compare/loader.ts:43"}, "properties": {"repobilityId": "9ff7484a7c490b98", "scanner": "scanner-primary", "fingerprint": "db6eef69413914b5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1dc6d93628a77d26", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/cms/tiptap-render.ts:7"}, "properties": {"repobilityId": "eda1b955fac6d468", "scanner": "scanner-primary", "fingerprint": "1dc6d93628a77d26", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-896ca16d833cfb4f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in app/api/tools/spotify-canvas/render-mp4/route.ts:29"}, "properties": {"repobilityId": "2c87a5bf039781d8", "scanner": "scanner-primary", "fingerprint": "896ca16d833cfb4f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/tools/spotify-canvas/render-mp4/route.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-c61065c00f323ac0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in app/api/tools/promo-cards/image/route.ts:75"}, "properties": {"repobilityId": "4a70d8c1a0a6bc9b", "scanner": "scanner-primary", "fingerprint": "c61065c00f323ac0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/tools/promo-cards/image/route.ts"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-b82f818064049734", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/page.tsx:119"}, "properties": {"repobilityId": "6e3f788809042a48", "scanner": "scanner-primary", "fingerprint": "b82f818064049734", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/page.tsx"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-3194c79ba7af4249", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/tools/promo-cards/page.tsx:81"}, "properties": {"repobilityId": "60aa51c92e73423e", "scanner": "scanner-primary", "fingerprint": "3194c79ba7af4249", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/tools/promo-cards/page.tsx"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-3c5000c6974c0cb3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/x/page.tsx:499"}, "properties": {"repobilityId": "e6a2cb6ad71aeaaf", "scanner": "scanner-primary", "fingerprint": "3c5000c6974c0cb3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/x/page.tsx"}, "region": {"startLine": 499}}}]}, {"ruleId": "scanner-d76a0497c888aa92", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/x/news/[slug]/page.tsx:104"}, "properties": {"repobilityId": "9836bdad5d7d149c", "scanner": "scanner-primary", "fingerprint": "d76a0497c888aa92", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/x/news/[slug]/page.tsx"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-424101c24276e0a1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/roughtrade/page.tsx:117"}, "properties": {"repobilityId": "5852198d5ad77363", "scanner": "scanner-primary", "fingerprint": "424101c24276e0a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/roughtrade/page.tsx"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-9c003ddd8d604618", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/compare/[slug]/page.tsx:170"}, "properties": {"repobilityId": "97ebd1d45ec62fbd", "scanner": "scanner-primary", "fingerprint": "9c003ddd8d604618", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/compare/[slug]/page.tsx"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-95f8cee65d3b6fef", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/reviews/page.tsx:110"}, "properties": {"repobilityId": "52f8a0ed17812ca2", "scanner": "scanner-primary", "fingerprint": "95f8cee65d3b6fef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/reviews/page.tsx"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-798956375ee64c8d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(marketing)/[locale]/blog/[slug]/page.tsx:124"}, "properties": {"repobilityId": "fbafb0351d8d8053", "scanner": "scanner-primary", "fingerprint": "798956375ee64c8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(marketing)/[locale]/blog/[slug]/page.tsx"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-87c150ad374264f9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/import/run.ts:6"}, "properties": {"repobilityId": "6d029afe4ebcba93", "scanner": "scanner-primary", "fingerprint": "87c150ad374264f9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/import/run.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-25ec9892c2df6f7e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/legal/LegalArticle.tsx:112"}, "properties": {"repobilityId": "fcdca48a75e5eff6", "scanner": "scanner-primary", "fingerprint": "25ec9892c2df6f7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/legal/LegalArticle.tsx"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-d3488ae88a8acd66", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/blocks/SmallBlocks.tsx:459"}, "properties": {"repobilityId": "512af4dab0577a22", "scanner": "scanner-primary", "fingerprint": "d3488ae88a8acd66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/blocks/SmallBlocks.tsx"}, "region": {"startLine": 459}}}]}, {"ruleId": "scanner-1115cafb2604571c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/blocks/_EditableCta.tsx:100"}, "properties": {"repobilityId": "42f1d324b805218a", "scanner": "scanner-primary", "fingerprint": "1115cafb2604571c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/blocks/_EditableCta.tsx"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-984189985ab45609", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in components/edit/EditOverlay.tsx:119"}, "properties": {"repobilityId": "cbcc6fdbc5c2ddbd", "scanner": "scanner-primary", "fingerprint": "984189985ab45609", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/edit/EditOverlay.tsx"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-6fe0cae6273933df", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/spotify-canvas/generator.js:32"}, "properties": {"repobilityId": "d03f2d14cfd837fa", "scanner": "scanner-primary", "fingerprint": "6fe0cae6273933df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/spotify-canvas/generator.js"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-4b0bffd6a38de1af", "level": "note", "message": {"text": "Very large file: lib/seed/pages.ts (4047 lines)"}, "properties": {"repobilityId": "d687336da44eeaa8", "scanner": "scanner-primary", "fingerprint": "4b0bffd6a38de1af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-135cf3143c7cf0bd", "level": "note", "message": {"text": "Very large file: lib/seed/legal.ts (909 lines)"}, "properties": {"repobilityId": "eae88d436f6eced8", "scanner": "scanner-primary", "fingerprint": "135cf3143c7cf0bd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bd5c0a4bc4cd42a7", "level": "note", "message": {"text": "Very large file: cms/payload-types.ts (4432 lines)"}, "properties": {"repobilityId": "0b0e344e3aa56a9d", "scanner": "scanner-primary", "fingerprint": "bd5c0a4bc4cd42a7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8e857d55d1946918", "level": "note", "message": {"text": "Very large file: migrations/20260508_115743.ts (2892 lines)"}, "properties": {"repobilityId": "1e31b3137f15fff3", "scanner": "scanner-primary", "fingerprint": "8e857d55d1946918", "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": "c0dfd221485e84b4", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "e3fcde83f8353195", "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": "aec8c6decbcf7386", "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": "03bfd05f826f7112", "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": "82ac3f50da42319c", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "e365e76807bad3b5", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3a2cc06fd666ce13", "level": "none", "message": {"text": "Commented-code block (7 lines) in middleware.ts:69"}, "properties": {"repobilityId": "c5249c238b7b3680", "scanner": "scanner-primary", "fingerprint": "3a2cc06fd666ce13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9f0176d4a66c4db", "level": "none", "message": {"text": "Commented-code block (5 lines) in next.config.ts:42"}, "properties": {"repobilityId": "0e11fd1328b3bd11", "scanner": "scanner-primary", "fingerprint": "f9f0176d4a66c4db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-361f6d9974520496", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/layout.tsx:45"}, "properties": {"repobilityId": "8e95f5c59be3591b", "scanner": "scanner-primary", "fingerprint": "361f6d9974520496", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-990da3872304adbf", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/tools/spotify-canvas/render-mp4/route.ts:92"}, "properties": {"repobilityId": "615d0e9bee8bbf69", "scanner": "scanner-primary", "fingerprint": "990da3872304adbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91259eccd8ab4427", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/signup/subscribe/route.ts:117"}, "properties": {"repobilityId": "7cf0a9eb10fb678e", "scanner": "scanner-primary", "fingerprint": "91259eccd8ab4427", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de7bf388700c182e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cms/copy/route.ts:192"}, "properties": {"repobilityId": "44218cb71e54d7d0", "scanner": "scanner-primary", "fingerprint": "de7bf388700c182e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0199b9aa9d1db20e", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/(marketing)/[locale]/layout.tsx:49"}, "properties": {"repobilityId": "499c467bcfc976bf", "scanner": "scanner-primary", "fingerprint": "0199b9aa9d1db20e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1f4feccf0a648a0", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/(marketing)/[locale]/page.tsx:80"}, "properties": {"repobilityId": "e11be807bfe0149e", "scanner": "scanner-primary", "fingerprint": "a1f4feccf0a648a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-481c76b1ffae302e", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/(marketing)/[locale]/[slug]/page.tsx:96"}, "properties": {"repobilityId": "d9e7ef8b020a7d81", "scanner": "scanner-primary", "fingerprint": "481c76b1ffae302e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59ea8cccac75ee01", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(marketing)/[locale]/[slug]/page.tsx:65"}, "properties": {"repobilityId": "173424e9272bcc40", "scanner": "scanner-primary", "fingerprint": "59ea8cccac75ee01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-755e5ce86dfbeb93", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(marketing)/[locale]/tools/[slug]/page.tsx:47"}, "properties": {"repobilityId": "fd8acf34a63c1fed", "scanner": "scanner-primary", "fingerprint": "755e5ce86dfbeb93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-551cd34fecc4d70b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(marketing)/[locale]/x/page.tsx:95"}, "properties": {"repobilityId": "606c38316f1cfd15", "scanner": "scanner-primary", "fingerprint": "551cd34fecc4d70b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c62ecb8a2a5c102", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(marketing)/[locale]/reviews/page.tsx:65"}, "properties": {"repobilityId": "cdcbf6c4d0962162", "scanner": "scanner-primary", "fingerprint": "7c62ecb8a2a5c102", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90194323f8ff8f5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migrate/promo-cards-assets.ts:79"}, "properties": {"repobilityId": "38ce9cc8ade6c743", "scanner": "scanner-primary", "fingerprint": "90194323f8ff8f5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2476a97a251c332a", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/i18n/extract-strings.ts:128"}, "properties": {"repobilityId": "7622d2ff4b15d72e", "scanner": "scanner-primary", "fingerprint": "2476a97a251c332a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-126295f730d1dde8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/translate-editable-pages.ts:130"}, "properties": {"repobilityId": "7ece3c9b24151dac", "scanner": "scanner-primary", "fingerprint": "126295f730d1dde8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a34bf4ed01b24c13", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/glossary.ts:68"}, "properties": {"repobilityId": "e50ead98f8505412", "scanner": "scanner-primary", "fingerprint": "a34bf4ed01b24c13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99910133aefdb729", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/i18n/deepl.ts:111"}, "properties": {"repobilityId": "5a17e7bdf5905c32", "scanner": "scanner-primary", "fingerprint": "99910133aefdb729", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3975de10fa0fc9cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n/import-legal-from-live.ts:48"}, "properties": {"repobilityId": "f0fc62aaeee1aa63", "scanner": "scanner-primary", "fingerprint": "3975de10fa0fc9cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d6fac071eeac25a", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/import/11-extras.ts:146"}, "properties": {"repobilityId": "45384ed11b060fee", "scanner": "scanner-primary", "fingerprint": "9d6fac071eeac25a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fa4ee4f598ec427", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/import/03-people.ts:66"}, "properties": {"repobilityId": "7b08943b5ca4f8d1", "scanner": "scanner-primary", "fingerprint": "9fa4ee4f598ec427", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05452f408bbf8bfa", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/import/10-competitors.ts:163"}, "properties": {"repobilityId": "7c9307ec7a4097cf", "scanner": "scanner-primary", "fingerprint": "05452f408bbf8bfa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c505206ee70a7e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/import/07-media.ts:272"}, "properties": {"repobilityId": "c70849edb0516719", "scanner": "scanner-primary", "fingerprint": "9c505206ee70a7e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a479d6590072ff4", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/import/seed-globals.ts:102"}, "properties": {"repobilityId": "2ff27b3f6044bf55", "scanner": "scanner-primary", "fingerprint": "9a479d6590072ff4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eafc5708f410988e", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/import/dittox-blog-bodies.ts:125"}, "properties": {"repobilityId": "cdbbf4f6509205f9", "scanner": "scanner-primary", "fingerprint": "eafc5708f410988e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dedb8d825b1e1a9", "level": "none", "message": {"text": "Commented-code block (9 lines) in components/legal/LegalArticle.tsx:85"}, "properties": {"repobilityId": "e50c8e1a615b0032", "scanner": "scanner-primary", "fingerprint": "3dedb8d825b1e1a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc3160b57286d5b5", "level": "note", "message": {"text": "Legacy-named symbol `imageOrLegacy` in components/store-page/StorePageView.tsx:107"}, "properties": {"repobilityId": "39f71e15b8fcc1e3", "scanner": "scanner-primary", "fingerprint": "cc3160b57286d5b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3da9dc52e5037f46", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/store-page/StorePageView.tsx:227"}, "properties": {"repobilityId": "6f487b0d86d103dc", "scanner": "scanner-primary", "fingerprint": "3da9dc52e5037f46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f14051f40ab83cd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/blocks/_DistroSoundwave.tsx:134"}, "properties": {"repobilityId": "69f68632959e6b90", "scanner": "scanner-primary", "fingerprint": "f14051f40ab83cd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d45fe66d2027bb0f", "level": "none", "message": {"text": "Commented-code block (10 lines) in components/blocks/SmallBlocks.tsx:422"}, "properties": {"repobilityId": "174391d9bc219da6", "scanner": "scanner-primary", "fingerprint": "d45fe66d2027bb0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bc76d6024b9ff38", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/blocks/PerksFeedBlock.tsx:55"}, "properties": {"repobilityId": "5c357c30cfb1203e", "scanner": "scanner-primary", "fingerprint": "5bc76d6024b9ff38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b7c76774df2928f", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/blocks/_FeatureSliderStage.tsx:48"}, "properties": {"repobilityId": "b02a71564026d7bf", "scanner": "scanner-primary", "fingerprint": "2b7c76774df2928f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2a78e6600ffbc3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/marketing/EarningsDashboard.tsx:114"}, "properties": {"repobilityId": "34d997490a7e986d", "scanner": "scanner-primary", "fingerprint": "a2a78e6600ffbc3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1405b6ff09a20d21", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/edit/Editable.tsx:83"}, "properties": {"repobilityId": "06f904ac6c64298d", "scanner": "scanner-primary", "fingerprint": "1405b6ff09a20d21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37966ca0b515bae4", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/edit/EditOverlay.tsx:97"}, "properties": {"repobilityId": "575477c0a125d51d", "scanner": "scanner-primary", "fingerprint": "37966ca0b515bae4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a83b9dd88ad3cdce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/edit/EditOverlay.tsx:502"}, "properties": {"repobilityId": "9ceac842bf9584f7", "scanner": "scanner-primary", "fingerprint": "a83b9dd88ad3cdce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80450779174d16e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/nav/DittoNav.tsx:159"}, "properties": {"repobilityId": "1bd716d1b9c165f0", "scanner": "scanner-primary", "fingerprint": "80450779174d16e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bde06ba95caf25e", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/nav/DittoFooter.tsx:54"}, "properties": {"repobilityId": "c9c4198ef4d8abd5", "scanner": "scanner-primary", "fingerprint": "6bde06ba95caf25e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b32f8564cf23364e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/region-prices/RegionPriceContext.tsx:133"}, "properties": {"repobilityId": "af27eba9610dc951", "scanner": "scanner-primary", "fingerprint": "b32f8564cf23364e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-379d5caef2b0add5", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/promo/PromoFx.tsx:50"}, "properties": {"repobilityId": "d09895654a685299", "scanner": "scanner-primary", "fingerprint": "379d5caef2b0add5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-895c907a2d5c6f09", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/blog/BlogPagination.tsx:27"}, "properties": {"repobilityId": "fbeef8197e2ae745", "scanner": "scanner-primary", "fingerprint": "895c907a2d5c6f09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11671f638481a30a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/playlists/PlaylistSubmitFlow.tsx:128"}, "properties": {"repobilityId": "39651f883b5575c4", "scanner": "scanner-primary", "fingerprint": "11671f638481a30a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3d908a5cd6f7e515", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/contact-database/sheet.ts:115"}, "properties": {"repobilityId": "d6712ed092b632d7", "scanner": "scanner-primary", "fingerprint": "3d908a5cd6f7e515", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17f537bf839244f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/seo/metadata.ts:152"}, "properties": {"repobilityId": "b9f76e6fe445ab27", "scanner": "scanner-primary", "fingerprint": "17f537bf839244f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ae46578897e1385", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/index.ts:126"}, "properties": {"repobilityId": "ab2460e5a4848181", "scanner": "scanner-primary", "fingerprint": "5ae46578897e1385", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72c7a88c48b57d6f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/auth/catalog.ts:93"}, "properties": {"repobilityId": "b8ab5ecdd7273a8a", "scanner": "scanner-primary", "fingerprint": "72c7a88c48b57d6f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3343e35a553bd2ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/i18n/translate-doc.ts:248"}, "properties": {"repobilityId": "3a8d080b28b8c3b6", "scanner": "scanner-primary", "fingerprint": "3343e35a553bd2ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9db0bcfe9f04e58", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/seed/pages.ts:151"}, "properties": {"repobilityId": "d79749d4952fe271", "scanner": "scanner-primary", "fingerprint": "d9db0bcfe9f04e58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f77b25b72370319", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/seed/homepage.ts:18"}, "properties": {"repobilityId": "b67f704cd434155c", "scanner": "scanner-primary", "fingerprint": "2f77b25b72370319", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c2551d7e330400c", "level": "note", "message": {"text": "Legacy-named symbol `2_copy` in lib/seed/perks.ts:281"}, "properties": {"repobilityId": "8c0069f25e9c5334", "scanner": "scanner-primary", "fingerprint": "8c2551d7e330400c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2516ce02403b9f04", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/seed/toolBlocks.ts:69"}, "properties": {"repobilityId": "f38f8521257bd1c9", "scanner": "scanner-primary", "fingerprint": "2516ce02403b9f04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c7d2ce46321b1da", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/blog/loader.ts:691"}, "properties": {"repobilityId": "0d313c0221b63694", "scanner": "scanner-primary", "fingerprint": "7c7d2ce46321b1da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12c1bdb3100beec5", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/cms/page-copy.ts:306"}, "properties": {"repobilityId": "ffff5848f6deec99", "scanner": "scanner-primary", "fingerprint": "12c1bdb3100beec5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-516e53f3c147ee9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/cms/index.ts:146"}, "properties": {"repobilityId": "c65007e32124333f", "scanner": "scanner-primary", "fingerprint": "516e53f3c147ee9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d002b73eb4514de", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/cms/editable-context.ts:29"}, "properties": {"repobilityId": "5834d71bc12bb598", "scanner": "scanner-primary", "fingerprint": "2d002b73eb4514de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab5938304d9ce31f", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/cms/tiptap-render.ts:88"}, "properties": {"repobilityId": "0acf162fc4c28f1e", "scanner": "scanner-primary", "fingerprint": "ab5938304d9ce31f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3f95497513cb81e", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/cms/sitemap.ts:67"}, "properties": {"repobilityId": "2fda387bf1f3e3b7", "scanner": "scanner-primary", "fingerprint": "b3f95497513cb81e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5841784384c0b095", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/promo-cards/usePromoCard.ts:173"}, "properties": {"repobilityId": "fce01a5b7b30ab99", "scanner": "scanner-primary", "fingerprint": "5841784384c0b095", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ecc8cababbac617", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/promo-cards/hosts.ts:27"}, "properties": {"repobilityId": "99ec49c00eb93d2f", "scanner": "scanner-primary", "fingerprint": "9ecc8cababbac617", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac262bc8a65646d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in cms/payload.config.ts:85"}, "properties": {"repobilityId": "1c11a92e36f55413", "scanner": "scanner-primary", "fingerprint": "ac262bc8a65646d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a726e56e9be398f6", "level": "none", "message": {"text": "Commented-code block (11 lines) in cms/globals/index.ts:28"}, "properties": {"repobilityId": "0f7371d67190dd4c", "scanner": "scanner-primary", "fingerprint": "a726e56e9be398f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18b589759ff7f54a", "level": "none", "message": {"text": "Commented-code block (5 lines) in cms/collections/PageCopyOverrides.ts:73"}, "properties": {"repobilityId": "742d5841d0d51395", "scanner": "scanner-primary", "fingerprint": "18b589759ff7f54a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ac340c2a7514854", "level": "none", "message": {"text": "Commented-code block (7 lines) in cms/collections/BlogPost.ts:61"}, "properties": {"repobilityId": "ae73f6a8f2386de5", "scanner": "scanner-primary", "fingerprint": "9ac340c2a7514854", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41d3836df1237dc6", "level": "none", "message": {"text": "Commented-code block (5 lines) in cms/collections/StorePage.ts:88"}, "properties": {"repobilityId": "1b824f75ebb388bb", "scanner": "scanner-primary", "fingerprint": "41d3836df1237dc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bbb47770f0a053bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in cms/collections/content.ts:563"}, "properties": {"repobilityId": "96df18a7e9fbe748", "scanner": "scanner-primary", "fingerprint": "bbb47770f0a053bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97317d8d6ac1c521", "level": "none", "message": {"text": "Commented-code block (5 lines) in migrations/20260521_093200.ts:52"}, "properties": {"repobilityId": "eeddcb7d650bade0", "scanner": "scanner-primary", "fingerprint": "97317d8d6ac1c521", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f69c0b7ff4f59707", "level": "none", "message": {"text": "Commented-code block (5 lines) in migrations/20260512_120537.ts:4"}, "properties": {"repobilityId": "2d512a0d21938d3e", "scanner": "scanner-primary", "fingerprint": "f69c0b7ff4f59707", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-601a162905c315dd", "level": "note", "message": {"text": "Legacy-named symbol `review_copy` in migrations/20260508_115743.ts:1121"}, "properties": {"repobilityId": "e3bd1f5f1be5e452", "scanner": "scanner-primary", "fingerprint": "601a162905c315dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-64bc033a45ab26f1", "level": "note", "message": {"text": "34 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "dab9f6f977f9c414", "scanner": "scanner-primary", "fingerprint": "64bc033a45ab26f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}