{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: tomlidgett1/bike-dashboard", "shortDescription": {"text": "Foundry mined blueprint gap alignment: tomlidgett1/bike-dashboard"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tomlidgett1/bike-dashboard#1\nRepo: tomlidgett1/bike-dashboard\nIssue/PR number: 1\nGraph consistency label: supported_by_verification_signal\nNodes: 41\nEdges: 85\nNode types: {'pr_file': 21, 'link_quality': 6, 'commit': 3, 'comment': 2, "}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: tomlidgett1/bike-dashboard", "shortDescription": {"text": "Foundry mined schema ui api mismatch: tomlidgett1/bike-dashboard"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tomlidgett1/bike-dashboard#1\nRepo: tomlidgett1/bike-dashboard\nIssue/PR number: 1\nGraph consistency label: supported_by_verification_signal\nNodes: 41\nEdges: 85\nNode types: {'pr_file': 21, 'link_quality': 6, 'commit': 3, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'thread': 1, 'repo"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af9c7902ee37f383", "name": "Stray `console.log` in TS/JS \u2014 middleware.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 middleware.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d008ae9aa4931aa2", "name": "Stray `console.log` in TS/JS \u2014 test-lightspeed-stock.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-lightspeed-stock.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1b096b22097626a", "name": "Stray `console.log` in TS/JS \u2014 generate-apple-secret.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 generate-apple-secret.js: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-759024cf399773ba", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-customer-inquiry-tom.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-customer-inquiry-tom.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-f361cec6dcffac61", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-apply.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-apply.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f13458b1a6c8196", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-hero-image-dedup.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-hero-image-dedup.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-bbad3af0a6c7d441", "name": "Stray `console.log` in TS/JS \u2014 scripts/query-julie-supabase.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-julie-supabase.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6e388a0d68ffa59", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-julie-by-phone.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-julie-by-phone.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c959d9dfe304cf8f", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-sarah-down-bike.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-sarah-down-bike.ts:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bc4cd09b16fa5c2", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-nest-phone-lookup.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-nest-phone-lookup.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b1692db09f7faea", "name": "Stray `console.log` in TS/JS \u2014 scripts/eval-genie-quality.ts:260", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval-genie-quality.ts:260"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24cec66a12080c73", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-prefilter.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-prefilter.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2d5949166a88a26", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-variants.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-variants.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a2606300421287b", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-category-pagination.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-category-pagination.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4a2761b474e957f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-xero-oauth.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-xero-oauth.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af314cc36553a4d3", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-primary-demotion.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-primary-demotion.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7c2f9c2e9bdf1fe", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-normalize.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-normalize.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-275b89f97656295c", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-genie-orchestration.ts:1472", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-genie-orchestration.ts:1472"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50e0a6e41cc7ba39", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-yellow-jersey-workorder.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-yellow-jersey-workorder.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90d0ddccf6cf3f8c", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-composio-gmail.ts:387", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-composio-gmail.ts:387"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bffd5d672b1a509d", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-nest-inbox-cache.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-nest-inbox-cache.ts:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0b6ff3ef3b8164a", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-lightspeed-phone-variants.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-lightspeed-phone-variants.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3722d64fcc2fa195", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-nest-phone-lookup.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-nest-phone-lookup.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-2df8267a84a8fc5e", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-to-canonical.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-to-canonical.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-0da07b36286f009c", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-grouping.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-grouping.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf5069a508c84504", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-lightspeed-payload.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-lightspeed-payload.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-028e82053d56a927", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/refresh-lightspeed-tokens/index.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/refresh-lightspeed-tokens/index.ts:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b240adae6750c06", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-lightspeed-inventory/index.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-lightspeed-inventory/index.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-8fe3fb8e64144be4", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-message-notification/index.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-message-notification/index.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-1decdcceeda942b7", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-from-cache/index.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-from-cache/index.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6cad90051b25182", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-product-images/index.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-product-images/index.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8113b70d038bf407", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-scheduled-listings/index.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-scheduled-listings/index.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-0d13b7b98bcad4c0", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-welcome-email/index.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-welcome-email/index.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e976921d2a9970b4", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-youtube-videos/index.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-youtube-videos/index.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3d8d35af3f4bdda", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/bulk-analyze-listings/index.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/bulk-analyze-listings/index.ts:162"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-910dcddd273e9f51", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/clean-product-names/index.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/clean-product-names/index.ts:162"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fee077ed2f702d9c", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/download-image/index.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/download-image/index.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbb69995daaccb5c", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-ai-expert/index.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-ai-expert/index.ts:72"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b023db83aaa85f50", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/curate-canonical-images/index.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/curate-canonical-images/index.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00bde78ae7ebca58", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-test-emails/index.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-test-emails/index.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-f6288d163dbd2702", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-recommendations/index.ts:373", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-recommendations/index.ts:373"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ebf550e5f3a16a7", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/migrate-images-to-cloudinary/index.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/migrate-images-to-cloudinary/index.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cfe404b9fa338d68", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyze-listing-ai/index.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyze-listing-ai/index.ts:168"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ee19b3fd305b5e9", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/enhance-product-image/index.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/enhance-product-image/index.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-e292f925753ba614", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-product-descriptions/index.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-product-descriptions/index.ts:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7b566331b8c3def", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/ai-auto-approve-images/index.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ai-auto-approve-images/index.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-9d4c1931db28c0db", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-inventory-stock/index.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-inventory-stock/index.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a97eb46be91288d3", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-image-discovery-queue/index.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-image-discovery-queue/index.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09ee687cba1d9887", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/group-photos-ai/index.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/group-photos-ai/index.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37d197b22fccaa6d", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-offer-notification/index.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-offer-notification/index.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-d795406ffbe81f87", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-listing-description/index.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-listing-description/index.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf42e88245faeb58", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-ecommerce-hero-queue/index.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-ecommerce-hero-queue/index.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-2af89137bc2d4c73", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/product-learn-ai/index.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/product-learn-ai/index.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf877fefdfef8add", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-ai-auto-approve-queue/index.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-ai-auto-approve-queue/index.ts:108"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e28dd3c8439fe35", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-purchase-notification/index.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-purchase-notification/index.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eeb096913a6c4a65", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-to-cloudinary/index.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-to-cloudinary/index.ts:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3e58acbafb8eacf", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-all-lightspeed-products/index.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-all-lightspeed-products/index.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-c637a52cf0af2426", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/categorise-canonical-products/index.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/categorise-canonical-products/index.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e8790d651ce3a1b", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/scrape-facebook-listing/index.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/scrape-facebook-listing/index.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-e04591d53f1fcdb4", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/discover-product-images/index.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/discover-product-images/index.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef4bbaef45471abb", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/canonical-matching.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/canonical-matching.ts:142"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e79feda7911fa6d2", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/canonical-service.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/canonical-service.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15a5edfb36577fa7", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/ecommerce-hero-openai.ts:147", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/ecommerce-hero-openai.ts:147"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6e0c0641b5dabff", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/resend-client.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/resend-client.ts:80"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47a78fbcd41665c6", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/openai-client.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/openai-client.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e3fa6a4e970aa49", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/image-downloader.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/image-downloader.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c4c006a68b6afac", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/openai-vision-selector.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/openai-vision-selector.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-c6510511b79ae9bd", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/cloudinary-uploader.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/cloudinary-uploader.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffd5d50e23e50fcc", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/ai-categorisation.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/ai-categorisation.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-502064fee4edca9b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-analytics-manager.tsx:461", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-analytics-manager.tsx:461"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba98d8e14eb1ef9b", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/store-analytics-manager.tsx:430", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/store-analytics-manager.tsx:430"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3302877df5f76c0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-nest-messages-panel.tsx:394", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-nest-messages-panel.tsx:394"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb64ad734a9ece66", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/store-nest-messages-panel.tsx:357", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/store-nest-messages-panel.tsx:357"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bac9f7698a0827a0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/auto-assign-carousels-panel.tsx:503", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/auto-assign-carousels-panel.tsx:503"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-175818953b057a73", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/deputy-roster-bento.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/deputy-roster-bento.tsx:224"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a82216da4a01707a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-messages-bento.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-messages-bento.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a9276a5f8809f98", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-sections-manager.tsx:468", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-sections-manager.tsx:468"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e724ce07c82e541d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-overview-lightspeed-panel.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-overview-lightspeed-panel.tsx:124"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a2e2d3ec5b2c3cf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-uber-manager.tsx:459", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-uber-manager.tsx:459"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75707080223423e9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/actions-page-header.tsx:397", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/actions-page-header.tsx:397"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e50a1a253534a56a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-online-products-manager.tsx:331", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-online-products-manager.tsx:331"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ddd0400f6d7160f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ecommerce-agent-bento.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ecommerce-agent-bento.tsx:295"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b71893747ea6e0e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-immersive-products-manager.tsx:184", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-immersive-products-manager.tsx:184"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-978941836650fc82", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-product-content-table.tsx:364", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-product-content-table.tsx:364"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e30ebbacaa0ef99", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-pickup-suggestion-ui.tsx:22", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-pickup-suggestion-ui.tsx:22"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0018aee5eb901eb4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/gmail-response-suggestion-ui.tsx:48", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/gmail-response-suggestion-ui.tsx:48"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-920cef47de4c600b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-rentals-manager.tsx:352", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-rentals-manager.tsx:352"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-797e67bccbd984fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-category-display-manager.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-category-display-manager.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-601b0944883ab933", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-brands-manager.tsx:390", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-brands-manager.tsx:390"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0aaea5435b67c99", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-auto-service-panel.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-auto-service-panel.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14cc1c2a8d5b9d1a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-categories-manager.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-categories-manager.tsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-624aa0b63aed353c", "name": "Stray `console.log` in TS/JS \u2014 src/components/settings/store-categories-manager.tsx:596", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/settings/store-categories-manager.tsx:596"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fddb611fc71d9b7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/uncategorised-bento.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/uncategorised-bento.tsx:88"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84af3825fa2a47fb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/missing-brands-bento.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/missing-brands-bento.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29c6dcc0290ddff5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-product-titles-manager.tsx:529", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-product-titles-manager.tsx:529"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fb0dce2724804e9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/overivewo-test-bento.tsx:156", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/overivewo-test-bento.tsx:156"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3db51f187c2451dd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-composer-rail.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-composer-rail.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c44c65b985578f67", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-tabbed.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-tabbed.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9127597893133d9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/inquiry-slide-panel.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/inquiry-slide-panel.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da3ddc6a2168cd46", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-thread.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-thread.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2d0825fd78531df", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-three-pane.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-three-pane.tsx:47"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fefe054e890f1292", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/customer-inquiries/inbox-filter-tabs.tsx:69", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/customer-inquiries/inbox-filter-tabs.tsx:69"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50f0fecfcfb8ccae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/parts.tsx:458", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/parts.tsx:458"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f66cc818173f472b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/enquiry-list.tsx:111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/enquiry-list.tsx:111"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-415ed32099b78f4f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/unified-inbox-table.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/unified-inbox-table.tsx:135"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a08ab1fadc4d2e8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/sidebar.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/sidebar.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3f90227add6d508", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/messages-dropdown.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/messages-dropdown.tsx:121"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a39cb7c87a9cc40", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/nest-messages-dropdown.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/nest-messages-dropdown.tsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27162c3164a98135", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/topbar.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/topbar.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c270a56f2c9449d8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/marketplace-sidebar.tsx:419", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/marketplace-sidebar.tsx:419"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96e9009f22577887", "name": "Stray `console.log` in TS/JS \u2014 src/components/layout/marketplace-sidebar.tsx:363", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/layout/marketplace-sidebar.tsx:363"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18f65de66c8abe33", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/sidebar-lightspeed-status.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/sidebar-lightspeed-status.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c810fec4986d5ab", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/sidebar-view-store-link.tsx:16", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/sidebar-view-store-link.tsx:16"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eda75237d5766fb7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/store-switcher.tsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/store-switcher.tsx:52"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0eb711467c3a27b2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/nav-user.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/nav-user.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c66f8dd07374b8b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-category-list.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-category-list.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-81b7066fcff607df", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-mobile-view.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-mobile-view.tsx:101"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa3317fbb7a1e838", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/ai-search-response.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/ai-search-response.tsx:176"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16b1358708098762", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/instant-search.tsx:779", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/instant-search.tsx:779"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d492900da6bba7d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-inquiry-button.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-inquiry-button.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-862a9d08cbb8d098", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/bike-stores-picker.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/bike-stores-picker.tsx:105"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56bd5a7f949e2a1d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/bike-spec-explore-panel.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/bike-spec-explore-panel.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cadac3143136129e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/checkout-sheet.tsx:646", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/checkout-sheet.tsx:646"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9455f8e9883605d", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/checkout-sheet.tsx:573", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/checkout-sheet.tsx:573"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-301dff13a166acb5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/unified-filter-bar.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/unified-filter-bar.tsx:212"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7b4da9b8f6f69ca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-search-bar.tsx:267", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-search-bar.tsx:267"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-342933493b8f17fd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-detail-modal.tsx:220", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-detail-modal.tsx:220"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bf89b8b65ae6499", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/product-detail-modal.tsx:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/product-detail-modal.tsx:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41debc4ae768dd5e", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/image-discovery-modal.tsx:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/image-discovery-modal.tsx:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15148dd8a5f98e4d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/edit-product-drawer.tsx:649", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/edit-product-drawer.tsx:649"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8683563173bb9be6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sellers-grid.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sellers-grid.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1c53de6737cd1b9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/marketplace-header.tsx:532", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/marketplace-header.tsx:532"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71994db050ceddd9", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/marketplace-header.tsx:821", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/marketplace-header.tsx:821"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c60991b5a209264e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-card.tsx:648", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-card.tsx:648"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3ab5e1f7d97d591", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-learn-panel.tsx:363", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-learn-panel.tsx:363"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a00f65c3da7c193", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/image-uploader.tsx:274", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/image-uploader.tsx:274"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-116bb4f07423bebe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/floating-upload-bar.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/floating-upload-bar.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ba0282f89f16e4c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-card.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-card.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2cda5aae66a8381b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/mobile-delivery-sheet.tsx:405", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/mobile-delivery-sheet.tsx:405"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f50474e53e01fe7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-details-panel.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-details-panel.tsx:285"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bbc8322a1a5affcd", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/product-details-panel.tsx:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/product-details-panel.tsx:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d99765ed67a86d8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/cart-drawer.tsx:1186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/cart-drawer.tsx:1186"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ebeb3870b4d3655", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/split-search-results.tsx:235", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/split-search-results.tsx:235"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78d9b7d526ee5bac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/settings/settings-row.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/settings/settings-row.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b14c19e6c08244f", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/settings/edit-profile-sheet.tsx:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/settings/edit-profile-sheet.tsx:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29722395af165609", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:218"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4836060207fde124", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:1833", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:1833"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-613ff9689333a183", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-profile-chrome.tsx:3", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-profile-chrome.tsx:360"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20e8180dbfe7de42", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-home-tab.tsx:1355", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-home-tab.tsx:1355"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84287077a1194969", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-detail/about-this-seller-section", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-detail/about-this-seller-section.tsx:278"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9a95249a106a755", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-photo-grouping-step.tsx:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-photo-grouping-step.tsx: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-20c5eec73a8d7c8b", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/facebook-import-flow.tsx:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/facebook-import-flow.tsx: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-d24bb6f9db50c10c", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/smart-upload-modal.tsx:159", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/smart-upload-modal.tsx:159"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec53fca7a506a30c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sell/bulk-upload-sheet.tsx:1280", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sell/bulk-upload-sheet.tsx:1280"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f0bc93ba0128743", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/qr-upload-section.tsx:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/qr-upload-section.tsx:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8da9e1ca617a758", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/smart-upload-flow.tsx:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/smart-upload-flow.tsx: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-9cb9752e1898a4e7", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-upload-flow.tsx:190", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-upload-flow.tsx:190"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b124ce05a0e723b8", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/facebook-import-modal.tsx:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/facebook-import-modal.tsx: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-ae40f485bf1e33da", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-7-photos.tsx:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-7-photos.tsx:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ea84a3b1673cd1b", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-1-item-type.tsx:383", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-1-item-type.tsx:383"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42e08403eddf96bb", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-product-card.tsx:226", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-product-card.tsx:226"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e874dff61349c85c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sell/sell-wizard.tsx:1641", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sell/sell-wizard.tsx:1641"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2eb39ae9e2ddf24", "name": "TODO/FIXME marker in shipping code \u2014 src/components/marketplace/sell/sell-wizard.tsx:795", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/marketplace/sell/sell-wizard.tsx:795"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b12bebf2983386c", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/sell-wizard.tsx:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/sell-wizard.tsx:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7bc2ee17e4e15cb2", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-4-photos.tsx:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-4-photos.tsx:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10d22531053609ef", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-photo-upload-step.tsx:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-photo-upload-step.tsx:119"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6bd648f8633a3d1a", "name": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/ai-results-review.tsx:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/ai-results-review.tsx:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffcea1da8105c77a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/seller-profile/seller-header.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/seller-profile/seller-header.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9254ae93e2ab3a43", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/for-you/for-you-carousel-row.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/for-you/for-you-carousel-row.tsx:129"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a48e75d45cd7fc6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:95", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:95"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbd1b1a83d0a29e9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/store-dashboard-manager.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/store-dashboard-manager.tsx:207"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd3480befd4a4472", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/dashboard-widget-edit-panel.tsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/dashboard-widget-edit-panel.tsx:266"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-804a6bd9bb0063a2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/dashboard-widget-settings-dialog.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/dashboard-widget-settings-dialog.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d90b1b96ec76f8d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/product-table-view.tsx:300", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/product-table-view.tsx:300"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b84294f070b4094", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/category-tree-view.tsx:133", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/category-tree-view.tsx:133"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29bac45561c43cca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/sync-progress-modal.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/sync-progress-modal.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf444fef5cf515bb", "name": "Stray `console.log` in TS/JS \u2014 src/components/providers/upload-provider.tsx:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/upload-provider.tsx:182"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c32a43b950b792cc", "name": "Stray `console.log` in TS/JS \u2014 src/components/providers/auth-provider.tsx:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/auth-provider.tsx:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8569b1f5979c0f4f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketing/used-grid.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketing/used-grid.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9a0bc01566c4b4a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/image-qa-auto-panel.tsx:696", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/image-qa-auto-panel.tsx:696"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-727d5906d20a94f4", "name": "Stray `console.log` in TS/JS \u2014 src/components/admin/image-review-modal.tsx:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/image-review-modal.tsx:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c661e70476fb27bf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/photos-panel.tsx:351", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/photos-panel.tsx:351"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3a364d031d8b80b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/deep-research-report.tsx:87", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/deep-research-report.tsx:87"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-70db504fdf0eebe0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-proposal-card.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-proposal-card.tsx:140"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3460a28dd69e9678", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/supplier-invoice-pill.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/supplier-invoice-pill.tsx:142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17c85fee298384af", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-purchase-order-card.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-purchase-order-card.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c3add312fd5b718", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/gmail-connect-card.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/gmail-connect-card.tsx:158"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcb45de32b7eb450", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/genie/genie-lessons-panel.tsx:158", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/genie/genie-lessons-panel.tsx:158"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58e4e6ed5f22912d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-workorder-cards.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-workorder-cards.tsx:109"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0c5d7ce932b75c3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-category-create-card.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-category-create-card.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57a32688b31f77ac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-store-product-cards.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-store-product-cards.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d86a4632d8ba310", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-pivot-table.tsx:282", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-pivot-table.tsx:282"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ab3a9e924cb82a2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-panel.tsx:470", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-panel.tsx:470"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-686d9dff7a6f792c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/genie-panel.tsx:422", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/genie-panel.tsx:422"}, "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-0bd864ef6d3630f6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-youtube-videos.tsx:30", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-youtube-videos.tsx:30"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-219a3b4be00c2b92", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-product-edit-card.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-product-edit-card.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-690d9acfce0c5b99", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-web-image-cards.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-web-image-cards.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e13392ddd8039987", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-marketplace-product-cards.tsx:48", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-marketplace-product-cards.tsx:48"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc5cc5463b8568cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-customer-profile-card.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-customer-profile-card.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b455750df05ffb18", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/product-genie-panel.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/product-genie-panel.tsx:158"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fe84d104597f4bd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/product-genie-panel.tsx:216", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/product-genie-panel.tsx:216"}, "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-4f390fe069a4c0a9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/messages/messages-panel.tsx:462", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/messages/messages-panel.tsx:462"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a102d4487242187f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/offers/offer-card.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/offers/offer-card.tsx:78"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c596bd58fb78635f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/offers/offer-confirmation-dialog.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/offers/offer-confirmation-dialog.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0765a4de8f884eaa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/store-approval-panel.tsx:340", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/store-approval-panel.tsx:340"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f361971d4eaf20fb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/floating-image-approval-card.tsx:896", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/floating-image-approval-card.tsx:896"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0521d22623f123d8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/catalogue-optimise-modal.tsx:2043", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/catalogue-optimise-modal.tsx:2043"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5146e7684f4b8e1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/bulk-optimise-workspace.tsx:1436", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/bulk-optimise-workspace.tsx:1436"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43914b2d269e00e0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/floating-optimize-jobs-card.tsx:308", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/floating-optimize-jobs-card.tsx:308"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc4c0e4d8a268748", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/copy-queue.tsx:625", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/copy-queue.tsx:625"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-586617114841acd6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/hero-images/hero-image-workspace.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/hero-images/hero-image-workspace.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bc07921c6bd2108", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-candidate-editor.tsx:157", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-candidate-editor.tsx:157"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62b1b69b55155e93", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-apply-dialog.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-apply-dialog.tsx:160"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f692815f86305a16", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-candidate-card.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-candidate-card.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecb1693a7bb95d1c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-group-manager.tsx:138", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-group-manager.tsx:138"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3cca86e6fca7d52", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/help-step-category.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/help-step-category.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d03e9188b55b91ff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/marketplace-readiness-badges.tsx:56", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/marketplace-readiness-badges.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12401afa4cbba9e5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/spec-sources.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/spec-sources.tsx:47"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ef6696e2ca14046", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/product-variant-cell.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/product-variant-cell.tsx:43"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56e288cb2bcb20fa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/edit-product-panel.tsx:1175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/edit-product-panel.tsx:1175"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a869c9b23284447", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/json-ld.tsx:15", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/json-ld.tsx:15"}, "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-bd5f839328224912", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/drafts/page.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/drafts/page.tsx:107"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-940ecf773bec5e5c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/purchases/page.tsx:496", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/purchases/page.tsx:496"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03c68dc49aa4b471", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/store/homev2/homev2-chat.tsx:1178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/store/homev2/homev2-chat.tsx:1178"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d513038d57b2384f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/settings/store/homev2/homev2-chat.tsx:558", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/settings/store/homev2/homev2-chat.tsx:558"}, "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-da9ff439f5b69d6f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/my-listings/page.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/my-listings/page.tsx:216"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2032103bcb6a9a13", "name": "TODO/FIXME marker in shipping code \u2014 src/app/settings/my-listings/page.tsx:405", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/settings/my-listings/page.tsx:405"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76aa5ace976cc12b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/store-cards.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/store-cards.tsx:41"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f944e23318fd60e8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/v2-product-card.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/v2-product-card.tsx:121"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-149f4e794c318fe4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/search-palette.tsx:351", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/search-palette.tsx:351"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77a57a1572eeb139", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/hero.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/hero.tsx:68"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b95d3f74157fa230", "name": "Stray `console.log` in TS/JS \u2014 src/app/upload/mobile/[token]/page.tsx:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/upload/mobile/[token]/page.tsx:183"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cddd595d88a54391", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/marketplace-page-content.tsx:1381", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/marketplace-page-content.tsx:1381"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-789389f3bca03e7b", "name": "Stray `console.log` in TS/JS \u2014 src/app/marketplace/marketplace-page-content.tsx:731", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/marketplace/marketplace-page-content.tsx:731"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-396e2aa9102410d9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/settings/page.tsx:391", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/settings/page.tsx:391"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0ecd45c243175fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/page.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/page.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c62bcce98e559962", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/detailed-specs.tsx:26", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/detailed-specs.tsx:261"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d92b718718cac49", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/price-research-guide.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/price-research-guide.tsx:288"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1f87d894f29cfdb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/flow-bulk.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/flow-bulk.tsx:150"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6ca96f187f72f42", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/flow-guided.tsx:267", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/flow-guided.tsx:267"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-865270035c63b43a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/product/[productId]/immersive-product-layout.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/product/[productId]/immersive-product-layout.tsx:207"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-860e9c6e6bf052b4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/mobile-prototypes/_components/filter-panel-opti", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/mobile-prototypes/_components/filter-panel-options.tsx:539"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5290e819faa265a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-stepper.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-stepper.tsx:404"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e2b1d12a63c2e5b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-deck.tsx:22", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-deck.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2a7209eb3387439", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-list.tsx:22", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-list.tsx:222"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a10165b40e2e56e4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/checkout/success/page.tsx:534", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/checkout/success/page.tsx:534"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e44d2328323474e1", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/stores/route.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/stores/route.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d88883e50cc8e44", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/stores/filters/route.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/stores/filters/route.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d243c04d3c3e71b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/route.ts:226", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/route.ts:226"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c3c845cc29ab0a0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/bulk/route.ts:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/bulk/route.ts:129"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98fab91d53b97271", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/upload-image/route.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/upload-image/route.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b07a4585ec1997b8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/process-image/route.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/process-image/route.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-d80faf1ead7f854e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/trending/route.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/trending/route.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e207f4951f129b6c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/search/route.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/search/route.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffd84d32cd6c9953", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/marketplace/purchases/route.ts:149", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/marketplace/purchases/route.ts:149"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a32cc50055783af", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/route.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/route.ts:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f13541187713c50f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/[id]/report-issue/route.ts:176", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/[id]/report-issue/route.ts:176"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d9d35248f4c825d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/[id]/confirm-receipt/route.ts:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/[id]/confirm-receipt/route.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-3b9e81bce3a824cb", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/category-counts/route.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/category-counts/route.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7737dd498df39baf", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/text-upload/sessions/route.ts:242", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/text-upload/sessions/route.ts:242"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb9d740c95152bfc", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/route.ts:286", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/route.ts:286"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ee4777e8f203014", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/[productId]/route.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/[productId]/route.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-932f2702ae46d22d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/[productId]/seller-products/route.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/[productId]/seller-products/route.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97a168d18b5fbc06", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/sellers/route.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/sellers/route.ts:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93e09c24c7118ea0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/tracking/route.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/tracking/route.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f6d2cdc4cc5d9af", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/recommendations/for-you/route.ts:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/recommendations/for-you/route.ts:122"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f475fc4ad0937d71", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/disconnect/route.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/disconnect/route.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cce8ed70135d356c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-from-cache/route.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-from-cache/route.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f686ca79b470f36", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/auth/callback/route.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/auth/callback/route.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa7148e0aa7e5c31", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/auth/initiate/route.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/auth/initiate/route.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af0728fd9dca4873", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/backfill-manufacturer-names/route.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/backfill-manufacturer-names/route.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-4bc4028fea58e9d0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/inventory-overview/route.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/inventory-overview/route.ts:133"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f03c5e712852b256", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/test/[query]/route.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/test/[query]/route.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3ef85beb1084032", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-selected/route.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-selected/route.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5647f3339d041efa", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/items/route.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/items/route.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-316d27e7b88df1a5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-inventory/route.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-inventory/route.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a455d1699c52d25", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/batch-sync/route.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/batch-sync/route.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a28a0d1931f39e92", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-all-products/route.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-all-products/route.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76ce44a96f31bbf7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/route.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/route.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-87271ea8cd8e584c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/process/route.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/process/route.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-fa8a0aa9d10c07c7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/queue/route.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/queue/route.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-27b4e13fdbbb34d2", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/admin/categorise-all-canonical/route.ts:36", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/admin/categorise-all-canonical/route.ts:36"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecdd53d005cd7651", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/categorise-all-canonical/route.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/categorise-all-canonical/route.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-248b044aae9338eb", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/scheduled-uploads/route.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/scheduled-uploads/route.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9dcc033fbb49a2f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/scheduled-uploads/users/route.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/scheduled-uploads/users/route.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-480d969aa3e6d08f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/manage/route.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/manage/route.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29c444b32fa71f3b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/process/route.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/process/route.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be4a11ce0771c0ec", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/add-image/route.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/add-image/route.ts:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f626e8916d2db67", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/queue/route.ts:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/queue/route.ts:165"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4ab8d5fe66ec7da", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/set-hero/route.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/set-hero/route.ts:120"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8d7e444643e6d06", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/products/route.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/products/route.ts:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f24fc18cfead446", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/search-images/route.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/search-images/route.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36c4ea355f5dc9de", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/curate/route.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/curate/route.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-da690d47e79f9e53", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/ai-auto-approve/route.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/ai-auto-approve/route.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-958ba7b92559bf8f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/product/[id]/route.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/product/[id]/route.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-7e763a5d09e463d3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/process-ai-queue/route.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/process-ai-queue/route.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15dccacd393cf59d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/discover/route.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/discover/route.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fd5c01182bffe4a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/download/route.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/download/route.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05c6ad36e3834717", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/approve/route.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/approve/route.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70fc735ccac22763", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/ai-search/route.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/ai-search/route.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c20cb55c284bffd3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/product-learn/route.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/product-learn/route.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1a38058a3676348", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/refresh-lightspeed-tokens/route.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/refresh-lightspeed-tokens/route.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0bc07425b13fa0c8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/release-funds/route.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/release-funds/route.ts:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd85992e45c24143", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/resume-copy-jobs/route.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/resume-copy-jobs/route.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ed6298263b48562", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/ecommerce-hero/route.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/ecommerce-hero/route.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-cc29c62fac616305", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/route.ts:151", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/route.ts:151"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-421063e39ce27d13", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/accept/route.ts:196", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/accept/route.ts:196"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd2f8b5a10bad1e5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/offers/[id]/accept/route.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/offers/[id]/accept/route.ts:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-87354af983f8bb74", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/reject/route.ts:126", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/reject/route.ts:126"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6014131178029d5", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/counter/route.ts:198", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/counter/route.ts:198"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7fbd7a26bdfd43a", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/cancel/route.ts:119", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/cancel/route.ts:119"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac7833c976fe01a4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/images/discover/route.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/images/discover/route.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-350b5d95da5611f3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/mobile-upload/create-session/route.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/mobile-upload/create-session/route.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34a37e85f97be1b7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/mobile-upload/session/[token]/upload/route.ts:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/mobile-upload/session/[token]/upload/route.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-7d8737f9004ee27c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/connect/status/route.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/connect/status/route.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec8a3fbdcbb0bcbc", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/connect/create-account/route.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/connect/create-account/route.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d8bec322dd32b19", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/stripe/webhook/route.ts:324", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/stripe/webhook/route.ts:324"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41d5226a3d1c65e5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/webhook/route.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/webhook/route.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a11a5ddd161832e8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-cart-checkout/route.ts:461", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-cart-checkout/route.ts:461"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8fe1944b54cb355e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/trigger-payout/route.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/trigger-payout/route.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4198f09a77e45313", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-checkout/route.ts:212", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-checkout/route.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-598f08aee8c5bff1", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-payment-intent/route.ts:221", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-payment-intent/route.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-7b8a9b2d7d2b4983", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/session/[sessionId]/route.ts:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/session/[sessionId]/route.ts:156"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07b381a1f98f28aa", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-checkout-offer/route.ts:257", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-checkout-offer/route.ts:257"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39cb21c9da489b5e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/manual-sync/route.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/manual-sync/route.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24bada4db95c18d7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/support/tickets/route.ts:405", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/support/tickets/route.ts:405"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d51283d2b2fe6da", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/post/route.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/post/route.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ca2f13f9478ceb1", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/generate-image/route.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/generate-image/route.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac9f15d3d6279afa", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/debug/route.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/debug/route.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e17c490c557975e6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/generate-description/route.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/generate-description/route.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-baef468d94dbcd1c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/products/[id]/images/route.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/[id]/images/route.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5836dc9f62fe3ed3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/products/delete-all/route.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/delete-all/route.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b00d9d01ebde04ed", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/products/clean-names/route.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/clean-names/route.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b07ed63b8afd36d0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/products/bulk-delete/route.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/bulk-delete/route.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1150b22eadc17a9", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/sms/send/route.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sms/send/route.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-a32b481d79b81d87", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/sms/order-confirmation/route.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sms/order-confirmation/route.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90280da8e8b14f72", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/test-panels/page.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/test-panels/page.tsx:238"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e7a523b41fe7c47", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/acme-storefront.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/acme-storefront.tsx:93"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2f84f08e06b6a2c", "name": "\"active\" state uses light bg in a dark theme \u2014 src/app/home2/_components/acme-bikes-demo.tsx:260", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/home2/_components/acme-bikes-demo.tsx:260"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cbb53bf214eb591c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/value-bentos.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/value-bentos.tsx:162"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c707d0422440377", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/marketplace-hero.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/marketplace-hero.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86aa31fca4ca8726", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/data-cleaning/page.tsx:601", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/data-cleaning/page.tsx:601"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2c631ec409d2ef0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/database/page.tsx:640", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/database/page.tsx:640"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-802d493fef2a25cb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/scheduled-uploads/page.tsx:2610", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/scheduled-uploads/page.tsx:2610"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c888473d3da5bdf1", "name": "Stray `console.log` in TS/JS \u2014 src/app/admin/scheduled-uploads/page.tsx:378", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/scheduled-uploads/page.tsx:378"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e30dbbe37deb6db", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/ecommerce-hero/page.tsx:2381", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/ecommerce-hero/page.tsx:2381"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e0dad0487a7c2bd", "name": "Stray `console.log` in TS/JS \u2014 src/app/admin/ecommerce-hero/page.tsx:622", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/ecommerce-hero/page.tsx:622"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c95d406dd78077bd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/image-qa/page.tsx:832", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/image-qa/page.tsx:832"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bc4b0e3b32b3a26", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/instagram-posts/page.tsx:263", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/instagram-posts/page.tsx:263"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4535aebe2e7e10da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/page.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/page.tsx:113"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2b8be9b4d0f82cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/settings/page.tsx:504", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/settings/page.tsx:504"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e902912264255c62", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/products/page.tsx:427", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/products/page.tsx:427"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-058e2195b15240d3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/_components/store-switcher.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/_components/store-switcher.tsx:43"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df637a4cd5eb44fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/_components/nav-user.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/_components/nav-user.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aac88b034cafe8b1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/messages/page.tsx:579", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/messages/page.tsx:579"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7bf94923cf155a7", "name": "TODO/FIXME marker in shipping code \u2014 src/app/messages/page.tsx:678", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/messages/page.tsx:678"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32e2470a598c2381", "name": "Stray `console.log` in TS/JS \u2014 src/app/onboarding/page.tsx:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/onboarding/page.tsx:77"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb1e44e2ff9d3a70", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/test-card-designs/page.tsx:519", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/test-card-designs/page.tsx:519"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-232862daf6c44796", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/products/page.tsx:917", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/products/page.tsx:917"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51c8a9b4436eca21", "name": "Stray `console.log` in TS/JS \u2014 src/lib/tracking/interaction-tracker.ts:227", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/tracking/interaction-tracker.ts:227"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef4ca416a36835a4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/keyword-matching.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/keyword-matching.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-200f450aab679b85", "name": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/onboarding-recommendations.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/onboarding-recommendations.ts:89"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53ac3f52312aedba", "name": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/algorithms.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/algorithms.ts:58"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a263c7013f199af4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/performance/web-vitals.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/performance/web-vitals.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-25d038cb983f044b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/utils/facebook-image-handler.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/utils/facebook-image-handler.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-d08bb665112c3f28", "name": "Stray `console.log` in TS/JS \u2014 src/lib/utils/image-compression.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/utils/image-compression.ts:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a52875c89a0d579", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-listing-form.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-listing-form.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-eecfca7111fe449f", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-conversations.ts:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-conversations.ts:199"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fec815d651aa9d61", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-combined-unread-count.ts:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-combined-unread-count.ts:129"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9270428f4fa642b1", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-conversation.ts:263", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-conversation.ts:263"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cc79c9fb312a0af", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-offers.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-offers.ts:123"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-001a19c437904761", "name": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-marketplace-products.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-marketplace-products.ts:91"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b1c7d3bc8dab689", "name": "Stray `console.log` in TS/JS \u2014 src/lib/supabase/middleware.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/supabase/middleware.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97bafb8055bf22ba", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/cloudinary-overlay.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/cloudinary-overlay.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c78c6e16baadd8a6", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/instagram-client.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/instagram-client.ts:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-63a0b938292f1606", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/product-images.ts:707", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/product-images.ts:707"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df24e488b5a2a688", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/cloudinary-upload.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/cloudinary-upload.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-645d5f8ee0bc5c12", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/config.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/config.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d79b292f90492ff7", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/token-manager.ts:214", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/token-manager.ts:214"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cba4c914e525ddb9", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/lightspeed-client.ts:351", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/lightspeed-client.ts:351"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-659bebe0c7cba489", "name": "Stray `console.log` in TS/JS \u2014 src/lib/services/image-processing/index.ts:224", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/image-processing/index.ts:224"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0bd3f7ec44d3cb38", "name": "Stray `console.log` in TS/JS \u2014 src/lib/stripe/payouts.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/stripe/payouts.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-526bb6728ee6b1eb", "name": "Runtime dotenv file present in repo: .env.vercel.production", "shortDescription": {"text": "Runtime dotenv file present in repo: .env.vercel.production"}, "fullDescription": {"text": "`.env.vercel.production` looks like a runtime dotenv file. It contains secret-looking assignments for VERCEL_OIDC_TOKEN. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f2d830d7ae5c1641", "name": "Runtime dotenv file present in repo: .env.test", "shortDescription": {"text": "Runtime dotenv file present in repo: .env.test"}, "fullDescription": {"text": "`.env.test` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8193d81dbaecfc1b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/process-scheduled-listings/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-scheduled-listings/index.ts:13"}, "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-14d64ea317d180f3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/bulk-analyze-listings/index.ts:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/bulk-analyze-listings/index.ts:20"}, "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-b7ac9342806ff3d4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/search-ai-expert/index.ts:61", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/search-ai-expert/index.ts:61"}, "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-c33645862f2a0ea6", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-test-emails/index.ts:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-test-emails/index.ts:15"}, "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-0a99568220db4f33", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/analyze-listing-ai/index.ts:138", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analyze-listing-ai/index.ts:138"}, "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-bd70e4d6aa8e61c3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/enhance-product-image/index.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/enhance-product-image/index.ts:18"}, "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-c3f3d8a949b01486", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-product-descriptions/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-product-descriptions/index.ts:11"}, "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-330942570abf1239", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/group-photos-ai/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/group-photos-ai/index.ts:25"}, "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-6bc8f9d4eb4a43ed", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-listing-description/index.ts:7", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-listing-description/index.ts:7"}, "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-8f1c68c98fa1e850", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/process-ecommerce-hero-queue/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-ecommerce-hero-queue/index.ts:19"}, "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-730a89a191a0b4b2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/product-learn-ai/index.ts:17", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/product-learn-ai/index.ts:17"}, "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-f4c41aae16b1a26d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-to-cloudinary/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-to-cloudinary/index.ts:13"}, "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-70d3a303e5448f24", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/cors.ts:2", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/cors.ts:2"}, "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-f36756e4816e3f59", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:95", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:95"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b79b1111926cf664", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/deep-research-report.tsx:87", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/deep-research-report.tsx:87"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-044f6d297813bf85", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/genie-panel.tsx:422", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/genie-panel.tsx:422"}, "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-e1475dbb252d8a0f", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/product-genie-panel.tsx:216", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/product-genie-panel.tsx:216"}, "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-f3cd7b62d26d59e5", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/json-ld.tsx:15", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/json-ld.tsx:15"}, "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-b2e781147f5be4c9", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/settings/store/homev2/homev2-chat.tsx:558", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/settings/store/homev2/homev2-chat.tsx:558"}, "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-388f440afde5e691", "name": "Possible secret in src/app/api/sms/send/route.ts", "shortDescription": {"text": "Possible secret in src/app/api/sms/send/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e98a275dda7e22c", "name": "Very large file: scripts/test-genie-orchestration.ts (1483 lines)", "shortDescription": {"text": "Very large file: scripts/test-genie-orchestration.ts (1483 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-1c499f6c5e7471a4", "name": "Very large file: src/components/settings/store-analytics-manager.tsx (1821 lines)", "shortDescription": {"text": "Very large file: src/components/settings/store-analytics-manager.tsx (1821 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-87c690cd937c7d2c", "name": "Very large file: src/components/settings/store-online-products-manager.tsx (1439 lines)", "shortDescription": {"text": "Very large file: src/components/settings/store-online-products-manager.tsx (1439 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-e7648d2f29457b6d", "name": "Very large file: src/components/settings/store-online-products-csv-panel.tsx (1553 lines)", "shortDescription": {"text": "Very large file: src/components/settings/store-online-products-csv-panel.tsx (1553 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-6a859c6c892652b0", "name": "Very large file: src/components/settings/store-categories-manager.tsx (2121 lines)", "shortDescription": {"text": "Very large file: src/components/settings/store-categories-manager.tsx (2121 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-8c58b83b963cc84f", "name": "Very large file: src/components/settings/store-homepage-manager.tsx (1323 lines)", "shortDescription": {"text": "Very large file: src/components/settings/store-homepage-manager.tsx (1323 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-22e5b8a3194c1332", "name": "Very large file: src/components/marketplace/store-profile/store-profile-view.tsx (1989 lines)", "shortDescription": {"text": "Very large file: src/components/marketplace/store-profile/store-profile-view.tsx (1989 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-7b53f080d2743355", "name": "Very large file: src/components/marketplace/store-profile/store-home-tab.tsx (1590 lines)", "shortDescription": {"text": "Very large file: src/components/marketplace/store-profile/store-home-tab.tsx (1590 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-d9ac4f80ee9a1149", "name": "Very large file: src/components/marketplace/sell/bulk-upload-sheet.tsx (2096 lines)", "shortDescription": {"text": "Very large file: src/components/marketplace/sell/bulk-upload-sheet.tsx (2096 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-9cc9d59dd3038fe1", "name": "Very large file: src/components/marketplace/sell/step-1-item-type.tsx (2216 lines)", "shortDescription": {"text": "Very large file: src/components/marketplace/sell/step-1-item-type.tsx (2216 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-9beece55e4c7c236", "name": "Very large file: src/components/marketplace/sell/sell-wizard.tsx (1752 lines)", "shortDescription": {"text": "Very large file: src/components/marketplace/sell/sell-wizard.tsx (1752 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-3c8c393efa6f3baa", "name": "Very large file: src/components/admin/image-qa-auto-panel.tsx (1175 lines)", "shortDescription": {"text": "Very large file: src/components/admin/image-qa-auto-panel.tsx (1175 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-0a59bc16ade041e2", "name": "Very large file: src/components/genie/genie-panel.tsx (1538 lines)", "shortDescription": {"text": "Very large file: src/components/genie/genie-panel.tsx (1538 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-04416179fe803140", "name": "Very large file: src/components/optimize/catalogue-optimise-modal.tsx (3410 lines)", "shortDescription": {"text": "Very large file: src/components/optimize/catalogue-optimise-modal.tsx (3410 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-14c9c5d5ec14f526", "name": "Very large file: src/components/optimize/bulk-optimise-workspace.tsx (2108 lines)", "shortDescription": {"text": "Very large file: src/components/optimize/bulk-optimise-workspace.tsx (2108 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-dd44767ee2338d9f", "name": "Very large file: src/components/products/edit-product-panel.tsx (1666 lines)", "shortDescription": {"text": "Very large file: src/components/products/edit-product-panel.tsx (1666 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-290481243692158b", "name": "Very large file: src/app/settings/purchases/page.tsx (4368 lines)", "shortDescription": {"text": "Very large file: src/app/settings/purchases/page.tsx (4368 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-661dd7f90fab14a1", "name": "Very large file: src/app/settings/store/homev2/homev2-chat.tsx (1968 lines)", "shortDescription": {"text": "Very large file: src/app/settings/store/homev2/homev2-chat.tsx (1968 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-806ec701539520fa", "name": "Very large file: src/app/test-cards/page.tsx (1693 lines)", "shortDescription": {"text": "Very large file: src/app/test-cards/page.tsx (1693 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-d60500793aee7cb7", "name": "Very large file: src/app/marketplace/marketplace-page-content.tsx (1735 lines)", "shortDescription": {"text": "Very large file: src/app/marketplace/marketplace-page-content.tsx (1735 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-b7bdebbf7e6ddb3c", "name": "Very large file: src/app/api/stripe/webhook/route.ts (1488 lines)", "shortDescription": {"text": "Very large file: src/app/api/stripe/webhook/route.ts (1488 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-1798b3bdfd3aa268", "name": "Very large file: src/app/test-panels/page.tsx (2299 lines)", "shortDescription": {"text": "Very large file: src/app/test-panels/page.tsx (2299 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-3526b53f8804e499", "name": "Very large file: src/app/connect-lightspeed/page.tsx (1439 lines)", "shortDescription": {"text": "Very large file: src/app/connect-lightspeed/page.tsx (1439 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-500287a82a09c878", "name": "Very large file: src/app/admin/scheduled-uploads/page.tsx (2685 lines)", "shortDescription": {"text": "Very large file: src/app/admin/scheduled-uploads/page.tsx (2685 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-47326fe156abc380", "name": "Very large file: src/app/admin/ecommerce-hero/page.tsx (3817 lines)", "shortDescription": {"text": "Very large file: src/app/admin/ecommerce-hero/page.tsx (3817 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-26be27fbc2ee3e61", "name": "Very large file: src/app/dev/product-designs/page.tsx (873 lines)", "shortDescription": {"text": "Very large file: src/app/dev/product-designs/page.tsx (873 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2487649ad4a8784d", "name": "Very large file: src/app/products/page.tsx (1650 lines)", "shortDescription": {"text": "Very large file: src/app/products/page.tsx (1650 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-f5f1955dc76e0ccb", "name": "Very large file: src/lib/constants/help-content.ts (2110 lines)", "shortDescription": {"text": "Very large file: src/lib/constants/help-content.ts (2110 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-c72a08af238a750e", "name": "Very large file: src/lib/genie/agent/tools.ts (10585 lines)", "shortDescription": {"text": "Very large file: src/lib/genie/agent/tools.ts (10585 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-82926de917de7d01", "name": "Very large file: src/lib/services/lightspeed/lightspeed-client.ts (1757 lines)", "shortDescription": {"text": "Very large file: src/lib/services/lightspeed/lightspeed-client.ts (1757 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": "26 test file(s) for 1322 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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 1740 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 739 placeholder/mock markers across 176 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-509dc79e5b58901b", "name": "Commented-code block (8 lines) in middleware.ts:33", "shortDescription": {"text": "Commented-code block (8 lines) in middleware.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6a572480ece0842", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test-lightspeed-stock.js:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test-lightspeed-stock.js:29"}, "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-7d387268fefdabde", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-sarah-down-bike.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-sarah-down-bike.ts:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41097c12db96cf26", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-apple-oauth.mjs:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-apple-oauth.mjs:16"}, "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-96b70f0edc757dd9", "name": "Commented-code block (5 lines) in scripts/test-yellow-jersey-workorder.ts:319", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/test-yellow-jersey-workorder.ts:319"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-831a63d183bc13fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-nest-phone-lookup.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-nest-phone-lookup.ts:43"}, "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-d656542d37eb5dcb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-google-oauth.mjs:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-google-oauth.mjs:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8a3a89ae5b7eeae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/refresh-lightspeed-tokens/index.ts:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/refresh-lightspeed-tokens/index.ts:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-790e85d72e43a075", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-lightspeed-inventory/index.ts:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-lightspeed-inventory/index.ts:156"}, "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-57402d5e05f95d6c", "name": "Commented-code block (5 lines) in supabase/functions/send-message-notification/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-message-notification/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9262a30cc2aec53e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-product-images/index.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-product-images/index.ts:49"}, "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-84307a717666f540", "name": "Commented-code block (7 lines) in supabase/functions/process-scheduled-listings/index.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/process-scheduled-listings/index.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-523477d3eee23628", "name": "Commented-code block (6 lines) in supabase/functions/send-welcome-email/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/send-welcome-email/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98098e6f8cdb5bdf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-youtube-videos/index.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-youtube-videos/index.ts:46"}, "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-db14a817d5be7fc5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/bulk-analyze-listings/index.ts:183", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/bulk-analyze-listings/index.ts:183"}, "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-ca1795085947ec64", "name": "Commented-code block (6 lines) in supabase/functions/clean-product-names/index.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/clean-product-names/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac684dafc5f4c806", "name": "Commented-code block (5 lines) in supabase/functions/download-image/index.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/download-image/index.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5b6baad01d446fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/download-image/index.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/download-image/index.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bd9080846ae59b9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-ai-expert/index.ts:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-ai-expert/index.ts:122"}, "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-fb4a20011cd27601", "name": "Commented-code block (5 lines) in supabase/functions/curate-canonical-images/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/curate-canonical-images/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1b2d4dba6762ffb", "name": "Commented-code block (5 lines) in supabase/functions/migrate-images-to-cloudinary/index.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/migrate-images-to-cloudinary/index.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82dd8fddcacef93f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/migrate-images-to-cloudinary/index.ts:317", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/migrate-images-to-cloudinary/index.ts:317"}, "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-dde823accda2b12f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/analyze-listing-ai/index.ts:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/analyze-listing-ai/index.ts:267"}, "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-af1f5dcccc2e94e5", "name": "Commented-code block (5 lines) in supabase/functions/enhance-product-image/index.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/enhance-product-image/index.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d233832ee43577b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/enhance-product-image/index.ts:170", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/enhance-product-image/index.ts:170"}, "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-c02733f6f4e695e8", "name": "Commented-code block (6 lines) in supabase/functions/generate-product-descriptions/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/generate-product-descriptions/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1783d1315667f7e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/update-inventory-stock/index.ts:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/update-inventory-stock/index.ts:101"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5262fc92a517f40", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/group-photos-ai/index.ts:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/group-photos-ai/index.ts:179"}, "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-fd6166608b37ef40", "name": "Commented-code block (5 lines) in supabase/functions/send-offer-notification/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-offer-notification/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-599c8c52ca76e158", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-listing-description/index.ts:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-listing-description/index.ts:122"}, "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-8dcd9da0372942cd", "name": "Commented-code block (5 lines) in supabase/functions/process-ecommerce-hero-queue/index.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/process-ecommerce-hero-queue/index.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bac3988812654d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/process-ecommerce-hero-queue/index.ts:387", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/process-ecommerce-hero-queue/index.ts:387"}, "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-7c7732dfc58dd6e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/product-learn-ai/index.ts:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/product-learn-ai/index.ts:152"}, "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-bef36479a8ba8d44", "name": "Commented-code block (5 lines) in supabase/functions/process-ai-auto-approve-queue/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/process-ai-auto-approve-queue/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad67a544d269e6cb", "name": "Commented-code block (5 lines) in supabase/functions/send-purchase-notification/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-purchase-notification/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-970d37af8b14df42", "name": "Commented-code block (5 lines) in supabase/functions/upload-to-cloudinary/index.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/upload-to-cloudinary/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0410ca64e7b9500b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/upload-to-cloudinary/index.ts:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/upload-to-cloudinary/index.ts:118"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eab5d1781a3a640d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-all-lightspeed-products/index.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-all-lightspeed-products/index.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-f9b9bb25260981ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/ecommerce-hero-openai.ts:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/ecommerce-hero-openai.ts:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95c4465908978497", "name": "Commented-code block (6 lines) in supabase/functions/_shared/openai-client.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/openai-client.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3072c4698e87cdb8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/openai-client.ts:248", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/openai-client.ts:248"}, "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-0bcd52130d1b6ec8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/cloudinary-uploader.ts:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/cloudinary-uploader.ts:114"}, "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-c66bd3acf4cef2e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/homev2-smart-suggestions.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/homev2-smart-suggestions.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-902478a5f46785d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-nest-messages-panel.tsx:275", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-nest-messages-panel.tsx:275"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b9d5b966cfd1ae3", "name": "Commented-code block (5 lines) in src/components/settings/store-sections-manager.tsx:45", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/settings/store-sections-manager.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-d66d6b5816c76c26", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-sections-manager.tsx:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-sections-manager.tsx: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-53414f78f5d08c92", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-message-templates-bento.tsx:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-message-templates-bento.tsx:20"}, "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-b906cddda3babbaf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-online-products-manager.tsx:897", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-online-products-manager.tsx:897"}, "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-20f01aa6da20bc91", "name": "Commented-code block (5 lines) in src/components/settings/store-services-manager.tsx:49", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/settings/store-services-manager.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-1eb1e9acc546119d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-services-manager.tsx:276", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-services-manager.tsx:276"}, "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-daa4da04a9915188", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-pickup-suggestion-ui.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-pickup-suggestion-ui.tsx:44"}, "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-6dcd0866a3ba53e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-rentals-manager.tsx:250", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-rentals-manager.tsx:250"}, "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-513d85a169765b12", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-category-display-manager.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-category-display-manager.tsx:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-633a96c3b505fd24", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-online-products-csv-panel.tsx:243", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-online-products-csv-panel.tsx:243"}, "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-9a4ea94183ad0e8a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-auto-service-panel.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-auto-service-panel.tsx:66"}, "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-81c4b3e6e39378ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-categories-manager.tsx:446", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-categories-manager.tsx:446"}, "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-c23576c1ec39e852", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-pickup-suggestions-dropdown.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-pickup-suggestions-dropdown.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ea718a4c8e7f4da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/customer-inquiries/use-unified-inbox-controller.ts", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/customer-inquiries/use-unified-inbox-controller.ts: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-f22cafb658ee3568", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/customer-inquiries/inquiry-slide-panel.tsx:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/customer-inquiries/inquiry-slide-panel.tsx:24"}, "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-90fc73a307f5269c", "name": "Commented-code block (5 lines) in src/components/layout/conditional-layout.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/layout/conditional-layout.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72e0c9d7c4a92375", "name": "Commented-code block (5 lines) in src/components/layout/notifications-dropdown.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/layout/notifications-dropdown.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16a0befc04e6015f", "name": "Commented-code block (6 lines) in src/components/marketplace/space-navigator.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/marketplace/space-navigator.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4e005aa491dd1a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/instant-search.tsx:435", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/instant-search.tsx:435"}, "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-d7fb26c7708dfe85", "name": "Commented-code block (5 lines) in src/components/marketplace/advanced-category-filter.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/advanced-category-filter.tsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0bcf65696b6a530", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-optimize-drawer.tsx:159", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-optimize-drawer.tsx:159"}, "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-fbdb0f047445162f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-inquiry-button.tsx:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-inquiry-button.tsx:155"}, "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-1b15083fa1f90ebd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/bike-stores-picker.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/bike-stores-picker.tsx:53"}, "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-6362a41040b593dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/checkout-sheet.tsx:252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/checkout-sheet.tsx:252"}, "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-3bf8a970971351a0", "name": "Commented-code block (5 lines) in src/components/marketplace/unified-filter-bar.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/unified-filter-bar.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e5da62b822565ea", "name": "Commented-code block (5 lines) in src/components/marketplace/store-search-bar.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-search-bar.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29a40bf0cbdefcb4", "name": "Commented-code block (5 lines) in src/components/marketplace/cart-button.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/cart-button.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15eb6a8428c4acfb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/browse-filters-toolbar.tsx:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/browse-filters-toolbar.tsx:122"}, "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-93205429acea84b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/image-discovery-modal.tsx:200", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/image-discovery-modal.tsx:200"}, "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-23e2566763ea4c28", "name": "Commented-code block (5 lines) in src/components/marketplace/edit-product-drawer.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/edit-product-drawer.tsx:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-639fbeca7b85659b", "name": "Commented-code block (5 lines) in src/components/marketplace/store-category-pills.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-category-pills.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19237e70e2d0fa10", "name": "Commented-code block (6 lines) in src/components/marketplace/buy-now-button.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/marketplace/buy-now-button.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-903c01354d03dd90", "name": "Commented-code block (5 lines) in src/components/marketplace/product-card.tsx:23", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/product-card.tsx:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5611a79fa0d8e72", "name": "Commented-code block (5 lines) in src/components/marketplace/listing-type-filter.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/listing-type-filter.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d0134e6582825ee", "name": "Commented-code block (5 lines) in src/components/marketplace/advanced-filters.tsx:29", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/advanced-filters.tsx: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-35095845c41a3873", "name": "Commented-code block (6 lines) in src/components/marketplace/cascading-category-filter.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/marketplace/cascading-category-filter.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d83b8ed34316cedf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/cascading-category-filter.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/cascading-category-filter.tsx:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7527f305ee0a6e5", "name": "Commented-code block (5 lines) in src/components/marketplace/uber-delivery-promo-banner.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/uber-delivery-promo-banner.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4e73650da3dbf4e", "name": "Commented-code block (7 lines) in src/components/marketplace/floating-upload-bar.tsx:10", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/marketplace/floating-upload-bar.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35543f4262e00136", "name": "Commented-code block (5 lines) in src/components/marketplace/store-filter-pills.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-filter-pills.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b9cb52b09629d5e", "name": "Commented-code block (5 lines) in src/components/marketplace/first-upload-promo-banner.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/first-upload-promo-banner.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7db229a44701b28d", "name": "Commented-code block (5 lines) in src/components/marketplace/view-mode-pills.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/view-mode-pills.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1a47b7a32062725", "name": "Commented-code block (8 lines) in src/components/marketplace/cart-drawer.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/marketplace/cart-drawer.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0da5e36f0306ec8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/cart-drawer.tsx:749", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/cart-drawer.tsx:749"}, "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-62027e6c1e9d1922", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/split-search-results.tsx:160", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/split-search-results.tsx:160"}, "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-532471c4d90b4975", "name": "Commented-code block (7 lines) in src/components/marketplace/add-to-cart-button.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/marketplace/add-to-cart-button.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfaed285372501ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/store-profile/rentals-section.tsx:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/store-profile/rentals-section.tsx:228"}, "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-ec82142b82b29438", "name": "Commented-code block (5 lines) in src/components/marketplace/store-profile/store-profile-view.tsx:62", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-profile/store-profile-view.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-375d0f96097a0e2a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:537", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:537"}, "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-cf1a8dc1018e6cd2", "name": "Commented-code block (6 lines) in src/components/marketplace/store-profile/services-section.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/marketplace/store-profile/services-section.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d29d5f29a48cba0f", "name": "Commented-code block (5 lines) in src/components/marketplace/store-profile/store-home-tab.tsx:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-profile/store-home-tab.tsx:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e56176b85c3dffc0", "name": "Commented-code block (9 lines) in src/components/marketplace/product-detail/enhanced-image-gallery.tsx:8", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/marketplace/product-detail/enhanced-image-gallery.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8a8df1e893a64ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-detail/similar-products-carousel.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-detail/similar-products-carousel.tsx:44"}, "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-1c2fe5050ef3972e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-photo-grouping-step.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-photo-grouping-step.tsx:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3999930dc058a97f", "name": "Commented-code block (8 lines) in src/components/marketplace/sell/smart-upload-modal.tsx:22", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/marketplace/sell/smart-upload-modal.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8af5f2be98d82522", "name": "Commented-code block (5 lines) in src/components/marketplace/sell/upload-method-choice.tsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/sell/upload-method-choice.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d38c6e58fad454a4", "name": "Commented-code block (6 lines) in src/components/marketplace/sell/bulk-upload-sheet.tsx:45", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/marketplace/sell/bulk-upload-sheet.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-d7df02f5ec72f100", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-upload-sheet.tsx:365", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-upload-sheet.tsx:365"}, "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-8a795fbb13187b7a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/photo-upload-smart.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/photo-upload-smart.tsx:66"}, "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-6545c3e39b3317ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/smart-upload-flow.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/smart-upload-flow.tsx:57"}, "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-8c750837f4d2e138", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-upload-flow.tsx:448", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-upload-flow.tsx:448"}, "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-01adc79d0a1b6bf4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-7-photos.tsx:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-7-photos.tsx:100"}, "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-ccd74f4f5d10b324", "name": "Commented-code block (5 lines) in src/components/marketplace/sell/bulk-product-carousel.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketplace/sell/bulk-product-carousel.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecba9f6867a682cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-1-item-type.tsx:728", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-1-item-type.tsx:728"}, "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-3bddb9517cb95d1f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/sell-wizard.tsx:245", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/sell-wizard.tsx:245"}, "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-a573b7e0a3e4ec8e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-4-photos.tsx:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-4-photos.tsx:100"}, "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-c813ee4bf93cd0bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-photo-upload-step.tsx:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-photo-upload-step.tsx:164"}, "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-9a63c9e09134155f", "name": "Commented-code block (6 lines) in src/components/marketplace/for-you/for-you-carousel-row.tsx:24", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/marketplace/for-you/for-you-carousel-row.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a85d3d17f6931be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/auth/auth-card.tsx:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/auth/auth-card.tsx: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-fcaaaa26152573b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/optimize-jobs-provider.tsx:381", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/optimize-jobs-provider.tsx:381"}, "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-efce9bf6924f37ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/genie-jobs-provider.tsx:341", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/genie-jobs-provider.tsx:341"}, "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-a85c1a2d1edada85", "name": "Legacy-named symbol `yj_cart_v1` in src/components/providers/cart-provider.tsx:18", "shortDescription": {"text": "Legacy-named symbol `yj_cart_v1` in src/components/providers/cart-provider.tsx:18"}, "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-06aeae8bae9f2e96", "name": "Commented-code block (8 lines) in src/components/providers/cart-provider.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/providers/cart-provider.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24258c7fe355a772", "name": "Commented-code block (6 lines) in src/components/providers/upload-provider.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/providers/upload-provider.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da0fcb93a211e92f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/upload-provider.tsx:232", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/upload-provider.tsx:232"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5efb576480713f07", "name": "Commented-code block (5 lines) in src/components/providers/stripe-elements-provider.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/providers/stripe-elements-provider.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc529b947ed54ffd", "name": "Commented-code block (5 lines) in src/components/providers/order-notifications-provider.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/providers/order-notifications-provider.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0346e7e11bb17d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/image-qa-auto-panel.tsx:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/image-qa-auto-panel.tsx:257"}, "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-c3c6426579bb651a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/hero-background-panel.tsx:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/hero-background-panel.tsx:132"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-100d436317f01632", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/image-qa-speed-panel.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/image-qa-speed-panel.tsx:71"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0903a46abbdb9a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/genie/genie-panel.tsx:868", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/genie/genie-panel.tsx:868"}, "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-0ceb7592597fddb7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/genie/product-genie-panel.tsx:525", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/genie/product-genie-panel.tsx:525"}, "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-0f245c933961b6e7", "name": "Commented-code block (5 lines) in src/components/messages/conversation-list-item.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/messages/conversation-list-item.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ba079a425aafe7a", "name": "Commented-code block (5 lines) in src/components/messages/message-thread.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/messages/message-thread.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f2ba2a9e49e7c44", "name": "Commented-code block (5 lines) in src/components/offers/pay-offer-button.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/offers/pay-offer-button.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39fa6d13769a3073", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/photo-queue.tsx:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/photo-queue.tsx:162"}, "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-ce5b1a1d3fea5ca6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/catalogue-optimise-modal.tsx:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/catalogue-optimise-modal.tsx:145"}, "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-897bc5236da7b8c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/bulk-optimise-workspace.tsx:177", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/bulk-optimise-workspace.tsx:177"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c82e71d74efc6632", "name": "Legacy-named symbol `missing_copy` in src/components/optimize/optimizer-shared.tsx:347", "shortDescription": {"text": "Legacy-named symbol `missing_copy` in src/components/optimize/optimizer-shared.tsx:347"}, "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-5b529a90623a55b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/optimizer-shared.tsx:436", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/optimizer-shared.tsx:436"}, "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-a34cf6f3ed9d4670", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/variants/variant-group-manager.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/variants/variant-group-manager.tsx:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67280b64c50493c4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/order-help-wizard.tsx:304", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/order-help-wizard.tsx:304"}, "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-9ec6e8dfb280378c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/help-step-details.tsx:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/help-step-details.tsx:114"}, "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-65e5a9169d62583f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/products/edit-product-panel.tsx:763", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/products/edit-product-panel.tsx:763"}, "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-d1c3e53162a0c24d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/feedback/floating-tom-feedback-button.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/feedback/floating-tom-feedback-button.tsx:123"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-928a3aee7d116017", "name": "Commented-code block (5 lines) in src/app/page.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/page.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-168660ede25986e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/settings/notifications/page.tsx:157", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/settings/notifications/page.tsx:157"}, "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-44e796168335d31f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/settings/purchases/page.tsx:2815", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/settings/purchases/page.tsx:2815"}, "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-eef85abbd60f7f7a", "name": "Commented-code block (5 lines) in src/app/v2/page.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/v2/page.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b3da273a8cefd1e", "name": "Commented-code block (6 lines) in src/app/v2/_lib/images.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/v2/_lib/images.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24ebef9de14cef93", "name": "Commented-code block (5 lines) in src/app/v2/_lib/data.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/v2/_lib/data.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-416f9c36911d6861", "name": "Commented-code block (5 lines) in src/app/v2/_components/v2-product-card.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/v2/_components/v2-product-card.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c181f5a75eeebde2", "name": "Commented-code block (7 lines) in src/app/v2/_components/v2-header.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/v2/_components/v2-header.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f463bcbcdb46004f", "name": "Commented-code block (6 lines) in src/app/v2/_components/search-palette.tsx:15", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/v2/_components/search-palette.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2e82ccfc8752b71", "name": "Commented-code block (6 lines) in src/app/v2/_components/brand-marquee.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/v2/_components/brand-marquee.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d13abead6e7fa08", "name": "Commented-code block (5 lines) in src/app/v2/_components/category-tiles.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/v2/_components/category-tiles.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c047c32d2bd6a0f8", "name": "Commented-code block (5 lines) in src/app/v2/_components/rail.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/v2/_components/rail.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b68d005f18c0f5d0", "name": "Commented-code block (7 lines) in src/app/v2/_components/hero.tsx:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/v2/_components/hero.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-678962ed8d4790c7", "name": "Commented-code block (8 lines) in src/app/upload/mobile/[token]/page.tsx:13", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/upload/mobile/[token]/page.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fde0663e5f76214d", "name": "Commented-code block (6 lines) in src/app/marketplace/marketplace-page-content.tsx:34", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/marketplace/marketplace-page-content.tsx:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d56ab5a7083175c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/marketplace-page-content.tsx:803", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/marketplace-page-content.tsx:803"}, "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-cd4515b25fc5d470", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/page-new.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/page-new.tsx:76"}, "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-788c888731860b02", "name": "Commented-code block (7 lines) in src/app/marketplace/sell-redesign/page.tsx:24", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/marketplace/sell-redesign/page.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcfc5f171d818e4b", "name": "Commented-code block (5 lines) in src/app/marketplace/sell-redesign/_components/services.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/marketplace/sell-redesign/_components/services.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98145de0144c959b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/sell-redesign/_components/services.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/sell-redesign/_components/services.ts:32"}, "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-e9a76b94d8c19a4b", "name": "Commented-code block (6 lines) in src/app/marketplace/sell-redesign/_components/data.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/marketplace/sell-redesign/_components/data.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-842eeff948a7bbd6", "name": "Commented-code block (5 lines) in src/app/marketplace/sell-redesign/_components/ui.tsx:18", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/marketplace/sell-redesign/_components/ui.tsx:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-beb2bfece9201720", "name": "Commented-code block (5 lines) in src/app/marketplace/product/[productId]/page.tsx:29", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/marketplace/product/[productId]/page.tsx: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-b986532fd56f0810", "name": "Commented-code block (5 lines) in src/app/marketplace/mobile-prototypes/_components/filter-panel-options.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/marketplace/mobile-prototypes/_components/filter-panel-options.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1cc3358c4f6d5f5", "name": "Commented-code block (5 lines) in src/app/marketplace/mobile-prototypes/_components/list-cta-options.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/marketplace/mobile-prototypes/_components/list-cta-options.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a2ee2bfd81d01ae", "name": "Commented-code block (5 lines) in src/app/marketplace/sell-prototypes/_components/shared.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/marketplace/sell-prototypes/_components/shared.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-225090ed1fa61837", "name": "Commented-code block (6 lines) in src/app/marketplace/store/[storeId]/store-profile-page-client.tsx:17", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/marketplace/store/[storeId]/store-profile-page-client.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2775bbbc157f2fab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/store/[storeId]/store-profile-page-client.tsx:160", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/store/[storeId]/store-profile-page-client.tsx:160"}, "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-a282eb2bc501da5b", "name": "Commented-code block (5 lines) in src/app/api/notifications/preferences/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/notifications/preferences/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04291c7629b76f18", "name": "Commented-code block (5 lines) in src/app/api/marketplace/stores/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/stores/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9dada0702f992dfd", "name": "Commented-code block (5 lines) in src/app/api/marketplace/stores/filters/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/stores/filters/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1458735db6f5916e", "name": "Commented-code block (5 lines) in src/app/api/marketplace/listings/route.ts:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/listings/route.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e28936ddf925bba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/marketplace/listings/process-image/route.ts:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/marketplace/listings/process-image/route.ts:57"}, "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-111f5223505a1b63", "name": "Commented-code block (8 lines) in src/app/api/marketplace/bike-specs/preview/route.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/marketplace/bike-specs/preview/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56831e6cf3110966", "name": "Commented-code block (5 lines) in src/app/api/marketplace/listing-pricing-research/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/listing-pricing-research/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6eb95d861f6bc956", "name": "Commented-code block (5 lines) in src/app/api/marketplace/categories/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/categories/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffd8cf8e1133b688", "name": "Commented-code block (7 lines) in src/app/api/marketplace/store-categories/route.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/marketplace/store-categories/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09089ea28771243a", "name": "Commented-code block (5 lines) in src/app/api/unread-counts/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/unread-counts/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07d39557848bc62b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/lightspeed/auth/callback/route.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/lightspeed/auth/callback/route.ts:83"}, "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-d53c8eb5a2bd0acc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/lightspeed/continue-sync/route.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/lightspeed/continue-sync/route.ts:39"}, "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-5a2b6eb86224fe78", "name": "Commented-code block (5 lines) in src/app/api/admin/database/tables/route.ts:30", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/database/tables/route.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bca37d562bd08e38", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/categorise-all-canonical/route.ts:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/categorise-all-canonical/route.ts: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-b961ebc9dcba6bd6", "name": "Commented-code block (5 lines) in src/app/api/admin/scheduled-uploads/users/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/scheduled-uploads/users/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d15a4c4a4949b547", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/process/route.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/process/route.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-5dbe55a13f9bbb88", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/add-image/route.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/add-image/route.ts:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2b513e018b4b406", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/set-hero/route.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/set-hero/route.ts:49"}, "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-938419385244bea1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/search-images/route.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/search-images/route.ts:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-037586fae75b34d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/enhance-preview/route.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/enhance-preview/route.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5268c6326e9ea13", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/ai-auto-approve/route.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/ai-auto-approve/route.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65b612704f498cfc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/process-ai-queue/route.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/process-ai-queue/route.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-789fafb8a7624907", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/studio-hero/route.ts:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/studio-hero/route.ts:88"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2694ea5bba7d5e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/approve-candidates/route.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/approve-candidates/route.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da7dd52917b74135", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/download/route.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/download/route.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bac6014cf8e6619", "name": "Commented-code block (5 lines) in src/app/api/admin/images/products/route.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/images/products/route.ts:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd310931bf073b52", "name": "Commented-code block (5 lines) in src/app/api/admin/images/hero-approve/route.ts:61", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/images/hero-approve/route.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-3afd9ec3e3aee070", "name": "Commented-code block (5 lines) in src/app/api/genie/route.ts:213", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/genie/route.ts:213"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2562151ab1cb6c9", "name": "Commented-code block (5 lines) in src/app/api/messages/conversations/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/messages/conversations/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9512e1662bb9ae0", "name": "Commented-code block (5 lines) in src/app/api/cron/release-funds/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/release-funds/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e09e880bdd911ae8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/resume-copy-jobs/route.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/resume-copy-jobs/route.ts:43"}, "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-3d76149b0e3edbfc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/ecommerce-hero/route.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/ecommerce-hero/route.ts:77"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-87cc8fd884ee5ed7", "name": "Commented-code block (5 lines) in src/app/api/offers/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/offers/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f833cc489435528", "name": "Commented-code block (6 lines) in src/app/api/offers/[id]/accept/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/offers/[id]/accept/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-651469785905c970", "name": "Commented-code block (6 lines) in src/app/api/offers/[id]/reject/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/offers/[id]/reject/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93c56306db5a70b8", "name": "Commented-code block (6 lines) in src/app/api/offers/[id]/counter/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/offers/[id]/counter/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53661bd84ca61ebc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/brands/import-logo/route.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/brands/import-logo/route.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-808a0102c4ecd3e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/categories/import-logo/route.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/categories/import-logo/route.ts:76"}, "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-a39291f664b90070", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/online-products/create/route.ts:250", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/online-products/create/route.ts:250"}, "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-d95e2c7690b7973c", "name": "Legacy-named symbol `missing_copy` in src/app/api/store/copy-summary/route.ts:36", "shortDescription": {"text": "Legacy-named symbol `missing_copy` in src/app/api/store/copy-summary/route.ts:36"}, "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-1a55db860cb8ffb0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/optimize/advance-copy-batch/route.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/optimize/advance-copy-batch/route.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55bb291bd9dd1403", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/images/discover/route.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/images/discover/route.ts:64"}, "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-4e17d0104df50010", "name": "Commented-code block (5 lines) in src/app/api/mobile-upload/create-session/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/mobile-upload/create-session/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-438686eac68add95", "name": "Commented-code block (5 lines) in src/app/api/mobile-upload/session/[token]/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/mobile-upload/session/[token]/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b79e17f96491e394", "name": "Commented-code block (5 lines) in src/app/api/mobile-upload/session/[token]/upload/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/mobile-upload/session/[token]/upload/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8ebdfb7fd8ef404", "name": "Commented-code block (5 lines) in src/app/api/stripe/connect/create-account/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/stripe/connect/create-account/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0fa1321588608c5", "name": "Commented-code block (5 lines) in src/app/api/stripe/webhook/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/stripe/webhook/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d14cc23b5cbbc1b7", "name": "Commented-code block (5 lines) in src/app/api/stripe/create-checkout/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/stripe/create-checkout/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c58b7d44a4b54fdc", "name": "Commented-code block (5 lines) in src/app/api/stripe/create-payment-intent/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/stripe/create-payment-intent/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5be113fc3c6d992", "name": "Commented-code block (5 lines) in src/app/api/stripe/manual-sync/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/stripe/manual-sync/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e388e3dbe6cb1033", "name": "Commented-code block (5 lines) in src/app/api/support/tickets/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/support/tickets/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc155d6e91527fab", "name": "Commented-code block (5 lines) in src/app/api/support/tickets/[id]/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/support/tickets/[id]/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0dc685cb13fba326", "name": "Commented-code block (5 lines) in src/app/api/support/tickets/[id]/messages/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/support/tickets/[id]/messages/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53b72dc2bd2c75cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/[id]/background-remove/route.ts:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/[id]/background-remove/route.ts:108"}, "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-d6797af205d168e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/clean-names/route.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/clean-names/route.ts:47"}, "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-8a9ee22bc5b83b20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/sms/send/route.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/sms/send/route.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-2b91f06f841488c0", "name": "Commented-code block (6 lines) in src/app/api/sms/order-confirmation/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sms/order-confirmation/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87f5dea751b14e0e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/connect-lightspeed/page-new.tsx:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/connect-lightspeed/page-new.tsx:150"}, "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-e4003cf6628acdba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/data-cleaning/page.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/data-cleaning/page.tsx:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-455307286af7bcb7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/database/page.tsx:282", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/database/page.tsx:282"}, "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-ea2f307efaf79218", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/scheduled-uploads/page.tsx:400", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/scheduled-uploads/page.tsx:400"}, "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-61377c5653060211", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/ecommerce-hero/page.tsx:566", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/ecommerce-hero/page.tsx:566"}, "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-1e51955b8d51efbb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/instagram-posts/page.tsx:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/instagram-posts/page.tsx:101"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3650760fe64057e", "name": "Commented-code block (5 lines) in src/app/messages/page.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/messages/page.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33ea87d67d6f9530", "name": "Commented-code block (7 lines) in src/app/dev/product-designs/page.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/dev/product-designs/page.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cf30730e76b1c74", "name": "Commented-code block (9 lines) in src/app/dev/service-cards/page.tsx:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/dev/service-cards/page.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-398501c3386abeae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/products/page.tsx:454", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/products/page.tsx:454"}, "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-98591d6b6f79c6b6", "name": "Commented-code block (6 lines) in src/app/for-you/for-you-content.tsx:30", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/for-you/for-you-content.tsx:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3f75c8a5d305915", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/uber-delivery.ts:224", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/uber-delivery.ts:224"}, "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-e165069b329f3c6a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/missing-brands/client.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/missing-brands/client.ts:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e45b8f2b381a014c", "name": "Commented-code block (6 lines) in src/lib/types/store.ts:140", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/types/store.ts:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e3f17e6d094743ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/customer-inquiries/unified-inbox-client.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/customer-inquiries/unified-inbox-client.ts:17"}, "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-324c77e407d8f304", "name": "Legacy-named symbol `yj_unified_inbox_v1` in src/lib/customer-inquiries/unified-inbox-cache.ts:4", "shortDescription": {"text": "Legacy-named symbol `yj_unified_inbox_v1` in src/lib/customer-inquiries/unified-inbox-cache.ts:4"}, "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-f37c60e2ffdec658", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/customer-inquiries/client.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/customer-inquiries/client.ts:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-431208b455b6ccab", "name": "Commented-code block (7 lines) in src/lib/ai/detect-product-variants.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/ai/detect-product-variants.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f4571868611b774", "name": "Commented-code block (5 lines) in src/lib/ai/discover-bike-specs.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/ai/discover-bike-specs.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-925f81edeafa12c1", "name": "Commented-code block (5 lines) in src/lib/utils/facebook-image-handler.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/utils/facebook-image-handler.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-46f66e7a890d9d0f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/facebook-image-handler.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/facebook-image-handler.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d5e3be9fc74d6b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/cloudinary.ts:216", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/cloudinary.ts:216"}, "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-20eb39e745c27f67", "name": "Commented-code block (12 lines) in src/lib/utils/cloudinary-transforms.ts:26", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/utils/cloudinary-transforms.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd279139c26eb2d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/bikes/bike-spec-serper-images.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/bikes/bike-spec-serper-images.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-4e83143cc5c5d906", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin/image-qa-speed.ts:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin/image-qa-speed.ts:85"}, "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-fdf4d7f17c7d77b5", "name": "Commented-code block (6 lines) in src/lib/genie/answer-verification.ts:373", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/genie/answer-verification.ts:373"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04f86925ac241d06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/genie/web-image-search.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/genie/web-image-search.ts:69"}, "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-7632f9a5341ab8ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/genie/youtube-video-search.ts:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/genie/youtube-video-search.ts:89"}, "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-75df5aaf3c31eba6", "name": "Commented-code block (9 lines) in src/lib/genie/agent/tools.ts:9407", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/genie/agent/tools.ts:9407"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c6cc629a913a54b", "name": "Commented-code block (6 lines) in src/lib/genie/agent/execute.ts:317", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/genie/agent/execute.ts:317"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72edba18eecadd3c", "name": "Commented-code block (5 lines) in src/lib/genie/deep-research/run-deep-research.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/genie/deep-research/run-deep-research.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6e9df2181d82dae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-listing-form.ts:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-listing-form.ts:114"}, "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-4e946f4152c79f1b", "name": "Commented-code block (5 lines) in src/lib/hooks/use-conversations.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-conversations.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a042d632a96eb105", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-conversations.ts:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-conversations.ts:137"}, "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-9f2b44a566350d2d", "name": "Commented-code block (5 lines) in src/lib/hooks/use-combined-unread-count.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-combined-unread-count.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64a490a81292940e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-notifications.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-notifications.ts:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-657afcf9d0e03047", "name": "Commented-code block (5 lines) in src/lib/hooks/use-conversation.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-conversation.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44f3a7ed0e129af0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-conversation.ts:375", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-conversation.ts:375"}, "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-81c30c24c87d2848", "name": "Commented-code block (5 lines) in src/lib/hooks/use-offers.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-offers.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de06fc386b973788", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-offers.ts:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-offers.ts:71"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bc4dcc6b3af1f6e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-marketplace-products.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-marketplace-products.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9724f08f7e6df034", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-marketplace-data.ts:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-marketplace-data.ts:66"}, "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-0b317c0446a960b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-nest-notifications.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-nest-notifications.ts:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a9f3fcea6c05203d", "name": "Commented-code block (11 lines) in src/lib/variants/grouping.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/variants/grouping.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59f34a0c3e3264b4", "name": "Commented-code block (8 lines) in src/lib/variants/normalize.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/variants/normalize.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57feab784b46c264", "name": "Commented-code block (6 lines) in src/lib/variants/apply-group.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/variants/apply-group.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90d04ec4acaf0bc6", "name": "Commented-code block (6 lines) in src/lib/variants/types.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/variants/types.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0632b25c80fa9e19", "name": "Commented-code block (8 lines) in src/lib/variants/prefilter.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/variants/prefilter.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59084394f8a475e3", "name": "Commented-code block (8 lines) in src/lib/variants/run-detection-job.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/variants/run-detection-job.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8d3e4852a938fcb", "name": "Commented-code block (12 lines) in src/lib/supabase/middleware.ts:82", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/supabase/middleware.ts:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fab4ba33e2550be", "name": "Commented-code block (5 lines) in src/lib/services/cloudinary-overlay.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/services/cloudinary-overlay.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-134d7560e12cb0f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/instagram-client.ts:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/instagram-client.ts:70"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edc6c01b126a958a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/xero/token-manager.ts:165", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/xero/token-manager.ts:165"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-900336a95309806b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/xero/client.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/xero/client.ts:64"}, "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-95444eafab2092b1", "name": "Commented-code block (6 lines) in src/lib/services/lightspeed/variant-matrix.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/services/lightspeed/variant-matrix.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3993cdabec2815d9", "name": "Commented-code block (7 lines) in src/lib/services/lightspeed/types.ts:439", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/services/lightspeed/types.ts:439"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c323bcfd5034cb3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/deputy/token-manager.ts:154", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/deputy/token-manager.ts:154"}, "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-5b2a6f969242518b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/deputy/client.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/deputy/client.ts:63"}, "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-fe21dfd12fe74439", "name": "Commented-code block (6 lines) in src/lib/services/image-processing/optimizer.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/services/image-processing/optimizer.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05518b43462f964e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/missing-categories/client.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/missing-categories/client.ts:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9df1b336f090b22b", "name": "Legacy-named symbol `yj_nest_workorder_suggestions_v1` in src/lib/nest/workorder-suggestions-cache.ts:9", "shortDescription": {"text": "Legacy-named symbol `yj_nest_workorder_suggestions_v1` in src/lib/nest/workorder-suggestions-cache.ts:9"}, "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-e9dec500a1179b95", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nest/messages-client.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nest/messages-client.ts:5"}, "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-3133720fcf829295", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nest/pickup-suggestions-client.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nest/pickup-suggestions-client.ts:6"}, "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-0f20d0395ca2f96a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/store/brand-logo-serper.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/store/brand-logo-serper.ts:67"}, "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-8cfc5d1f0653372b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/optimize/image-approval-queue.ts:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/optimize/image-approval-queue.ts:155"}, "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-de0a44185a58188f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/optimize/run-category-preload-job.ts:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/optimize/run-category-preload-job.ts:90"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb46a0748c3f8243", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio/gmail-attachments.ts:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio/gmail-attachments.ts:113"}, "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-9643c5e96ca9aa99", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio/gmail-response-suggestions-client.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio/gmail-response-suggestions-client.ts:20"}, "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-89f2dc5a9a6581c5", "name": "Commented-code block (7 lines) in src/lib/for-you/candidates.ts:10", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/for-you/candidates.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19423b71024a43d5", "name": "Commented-code block (5 lines) in src/lib/for-you/feed.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/for-you/feed.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-858f933d8369ee8a", "name": "Commented-code block (7 lines) in src/lib/for-you/llm.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/for-you/llm.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d577cc94d50f9aa9", "name": "Commented-code block (6 lines) in src/lib/for-you/engine.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/for-you/engine.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-b9ee7dbd52b81871", "name": "Commented-code block (6 lines) in src/lib/for-you/signals.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/for-you/signals.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21506"}, "properties": {"repository": "tomlidgett1/bike-dashboard", "repoUrl": "https://github.com/tomlidgett1/bike-dashboard", "branch": "main"}, "results": [{"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: tomlidgett1/bike-dashboard"}, "properties": {"repobilityId": 356834, "scanner": "foundry_dataset", "fingerprint": "dd3c107466b2f176daec8f12bffb33fb6f272e46487b34389915e060fa344a48", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 1, "feature": 1, "api_or_backend": 5, "schema_or_data": 1, "ui_or_frontend": 14, "source_or_other": 1, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 85, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 21, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 4, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 41, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 2, "pr_file": 21, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "tomlidgett1/bike-dashboard#1", "issue_number": "1", "quality_tiers": {"assumption_check": 2, "weak_supervision": 4}, "repo_full_name": "tomlidgett1/bike-dashboard", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-84409667148d52d2", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 25, "schema_or_data": 5, "ui_or_frontend": 70, "source_or_other": 5}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tomlidgett1/bike-dashboard#1\nRepo: tomlidgett1/bike-dashboard\nIssue/PR number: 1\nGraph consistency label: supported_by_verification_signal\nNodes: 41\nEdges: 85\nNode types: {'pr_file': 21, 'link_quality': 6, 'commit': 3, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 21, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 6, 'comment_chain_links_commit': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 14, 'api_or_backend': 5, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'api_integration_gap': 1, 'schema_or_data': 1, 'source_or_other': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'feature': 1, 'verification_or_tests': 1, 'bug_fix': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'weak_supervision': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tomlidgett1/bike-dashboard", "source_id": "graph-query-motif_query-c9b7491abf2f3057", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tomlidgett1/bike-dashboard", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: tomlidgett1/bike-dashboard"}, "properties": {"repobilityId": 331079, "scanner": "foundry_dataset", "fingerprint": "5eda1873cfbcbcbf4c90065ef9afe5fc50f046c89bc15421275685ba071ea16c", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 1, "feature": 1, "api_or_backend": 5, "schema_or_data": 1, "ui_or_frontend": 14, "source_or_other": 1, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 85, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 21, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 4, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 41, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 2, "pr_file": 21, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "tomlidgett1/bike-dashboard#1", "issue_number": "1", "quality_tiers": {"assumption_check": 2, "weak_supervision": 4}, "repo_full_name": "tomlidgett1/bike-dashboard", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-56510b40ecc8ad02", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 25, "schema_or_data": 5, "ui_or_frontend": 70, "source_or_other": 5}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: tomlidgett1/bike-dashboard\nThread: tomlidgett1/bike-dashboard#1\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tomlidgett1/bike-dashboard#1\nRepo: tomlidgett1/bike-dashboard\nIssue/PR number: 1\nGraph consistency label: supported_by_verification_signal\nNodes: 41\nEdges: 85\nNode types: {'pr_file': 21, 'link_quality': 6, 'commit': 3, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 21, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 6, 'comment_chain_links_commit': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 14, 'api_or_backend': 5, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'api_integration_gap': 1, 'schema_or_data': 1, 'source_or_other': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'feature': 1, 'verification_or_tests': 1, 'bug_fix': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'weak_supervision': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tomlidgett1/bike-dashboard", "source_id": "graph-query-motif_query-5cecc3a1bc2b3e2a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tomlidgett1/bike-dashboard", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-af9c7902ee37f383", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 middleware.ts:26"}, "properties": {"repobilityId": "505c04a593fb184d", "scanner": "scanner-primary", "fingerprint": "af9c7902ee37f383", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d008ae9aa4931aa2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-lightspeed-stock.js:7"}, "properties": {"repobilityId": "69c914862c0279b6", "scanner": "scanner-primary", "fingerprint": "d008ae9aa4931aa2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1b096b22097626a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 generate-apple-secret.js:54"}, "properties": {"repobilityId": "09e4ea32e7e57a7c", "scanner": "scanner-primary", "fingerprint": "f1b096b22097626a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-759024cf399773ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-customer-inquiry-tom.ts:40"}, "properties": {"repobilityId": "67025454e6f761cd", "scanner": "scanner-primary", "fingerprint": "759024cf399773ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f361cec6dcffac61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-apply.ts:12"}, "properties": {"repobilityId": "8f63a47bbd704e7f", "scanner": "scanner-primary", "fingerprint": "f361cec6dcffac61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f13458b1a6c8196", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-hero-image-dedup.ts:93"}, "properties": {"repobilityId": "b41783659d3ec754", "scanner": "scanner-primary", "fingerprint": "0f13458b1a6c8196", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbad3af0a6c7d441", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/query-julie-supabase.ts:13"}, "properties": {"repobilityId": "0264a340cdac0ccc", "scanner": "scanner-primary", "fingerprint": "bbad3af0a6c7d441", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6e388a0d68ffa59", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-julie-by-phone.ts:79"}, "properties": {"repobilityId": "5ead432c43f247ea", "scanner": "scanner-primary", "fingerprint": "d6e388a0d68ffa59", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c959d9dfe304cf8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-sarah-down-bike.ts:53"}, "properties": {"repobilityId": "18918f7476a41d43", "scanner": "scanner-primary", "fingerprint": "c959d9dfe304cf8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3bc4cd09b16fa5c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-nest-phone-lookup.ts:37"}, "properties": {"repobilityId": "17ee25b20edaea79", "scanner": "scanner-primary", "fingerprint": "3bc4cd09b16fa5c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b1692db09f7faea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eval-genie-quality.ts:260"}, "properties": {"repobilityId": "a3236325a06b6f16", "scanner": "scanner-primary", "fingerprint": "5b1692db09f7faea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-24cec66a12080c73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-prefilter.ts:7"}, "properties": {"repobilityId": "e88e97fa0326da08", "scanner": "scanner-primary", "fingerprint": "24cec66a12080c73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2d5949166a88a26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-variants.ts:7"}, "properties": {"repobilityId": "b54ba15a019a7707", "scanner": "scanner-primary", "fingerprint": "f2d5949166a88a26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a2606300421287b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-category-pagination.ts:26"}, "properties": {"repobilityId": "b9acb43dd16a9273", "scanner": "scanner-primary", "fingerprint": "4a2606300421287b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4a2761b474e957f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-xero-oauth.ts:16"}, "properties": {"repobilityId": "89faee9127cc800c", "scanner": "scanner-primary", "fingerprint": "a4a2761b474e957f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af314cc36553a4d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-primary-demotion.ts:18"}, "properties": {"repobilityId": "217c4859056f730e", "scanner": "scanner-primary", "fingerprint": "af314cc36553a4d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7c2f9c2e9bdf1fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-normalize.ts:16"}, "properties": {"repobilityId": "2caa024aef0436e2", "scanner": "scanner-primary", "fingerprint": "d7c2f9c2e9bdf1fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-275b89f97656295c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-genie-orchestration.ts:1472"}, "properties": {"repobilityId": "b2f087d04fb0dfa1", "scanner": "scanner-primary", "fingerprint": "275b89f97656295c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50e0a6e41cc7ba39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-yellow-jersey-workorder.ts:33"}, "properties": {"repobilityId": "c8eb1271e1bb6609", "scanner": "scanner-primary", "fingerprint": "50e0a6e41cc7ba39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90d0ddccf6cf3f8c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-composio-gmail.ts:387"}, "properties": {"repobilityId": "3d63973f9bdd6f12", "scanner": "scanner-primary", "fingerprint": "90d0ddccf6cf3f8c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bffd5d672b1a509d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-nest-inbox-cache.ts:151"}, "properties": {"repobilityId": "7ab0a64ef780eb5d", "scanner": "scanner-primary", "fingerprint": "bffd5d672b1a509d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0b6ff3ef3b8164a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-lightspeed-phone-variants.ts:22"}, "properties": {"repobilityId": "4258bdcc02da7406", "scanner": "scanner-primary", "fingerprint": "b0b6ff3ef3b8164a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3722d64fcc2fa195", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-nest-phone-lookup.ts:56"}, "properties": {"repobilityId": "53da7d77d197c044", "scanner": "scanner-primary", "fingerprint": "3722d64fcc2fa195", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2df8267a84a8fc5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-to-canonical.ts:56"}, "properties": {"repobilityId": "4cb9f4885e41ce98", "scanner": "scanner-primary", "fingerprint": "2df8267a84a8fc5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0da07b36286f009c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-grouping.ts:8"}, "properties": {"repobilityId": "fabf48830c6ceb29", "scanner": "scanner-primary", "fingerprint": "0da07b36286f009c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf5069a508c84504", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-variant-lightspeed-payload.ts:12"}, "properties": {"repobilityId": "cef38405feb0fb2e", "scanner": "scanner-primary", "fingerprint": "cf5069a508c84504", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-028e82053d56a927", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/refresh-lightspeed-tokens/index.ts:86"}, "properties": {"repobilityId": "b15f0d6fec37d290", "scanner": "scanner-primary", "fingerprint": "028e82053d56a927", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b240adae6750c06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-lightspeed-inventory/index.ts:38"}, "properties": {"repobilityId": "d5630550d5c5edc9", "scanner": "scanner-primary", "fingerprint": "1b240adae6750c06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8fe3fb8e64144be4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-message-notification/index.ts:74"}, "properties": {"repobilityId": "1423a726b1ee5093", "scanner": "scanner-primary", "fingerprint": "8fe3fb8e64144be4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1decdcceeda942b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-from-cache/index.ts:7"}, "properties": {"repobilityId": "a1cdce4424a23733", "scanner": "scanner-primary", "fingerprint": "1decdcceeda942b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6cad90051b25182", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-product-images/index.ts:19"}, "properties": {"repobilityId": "08add4d2729d892e", "scanner": "scanner-primary", "fingerprint": "b6cad90051b25182", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8113b70d038bf407", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-scheduled-listings/index.ts:40"}, "properties": {"repobilityId": "2222c77e9c835e49", "scanner": "scanner-primary", "fingerprint": "8113b70d038bf407", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d13b7b98bcad4c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-welcome-email/index.ts:16"}, "properties": {"repobilityId": "f47f10c5697fee54", "scanner": "scanner-primary", "fingerprint": "0d13b7b98bcad4c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e976921d2a9970b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-youtube-videos/index.ts:14"}, "properties": {"repobilityId": "a687014c1a3d516f", "scanner": "scanner-primary", "fingerprint": "e976921d2a9970b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3d8d35af3f4bdda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/bulk-analyze-listings/index.ts:162"}, "properties": {"repobilityId": "4294519d7c21a862", "scanner": "scanner-primary", "fingerprint": "a3d8d35af3f4bdda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-910dcddd273e9f51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/clean-product-names/index.ts:162"}, "properties": {"repobilityId": "989213ca3b57b724", "scanner": "scanner-primary", "fingerprint": "910dcddd273e9f51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fee077ed2f702d9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/download-image/index.ts:8"}, "properties": {"repobilityId": "f54a8b0821dcc9aa", "scanner": "scanner-primary", "fingerprint": "fee077ed2f702d9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbb69995daaccb5c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-ai-expert/index.ts:72"}, "properties": {"repobilityId": "d4bb118f23509799", "scanner": "scanner-primary", "fingerprint": "dbb69995daaccb5c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b023db83aaa85f50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/curate-canonical-images/index.ts:12"}, "properties": {"repobilityId": "ed53cea88b2b8aa2", "scanner": "scanner-primary", "fingerprint": "b023db83aaa85f50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00bde78ae7ebca58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-test-emails/index.ts:75"}, "properties": {"repobilityId": "da2843e70ada569b", "scanner": "scanner-primary", "fingerprint": "00bde78ae7ebca58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6288d163dbd2702", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-recommendations/index.ts:373"}, "properties": {"repobilityId": "398530af3889e65d", "scanner": "scanner-primary", "fingerprint": "f6288d163dbd2702", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ebf550e5f3a16a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/migrate-images-to-cloudinary/index.ts:8"}, "properties": {"repobilityId": "9a8e8468eb7365ba", "scanner": "scanner-primary", "fingerprint": "8ebf550e5f3a16a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cfe404b9fa338d68", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyze-listing-ai/index.ts:168"}, "properties": {"repobilityId": "118d2181fddfa6f2", "scanner": "scanner-primary", "fingerprint": "cfe404b9fa338d68", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ee19b3fd305b5e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/enhance-product-image/index.ts:30"}, "properties": {"repobilityId": "1918fb2974553c75", "scanner": "scanner-primary", "fingerprint": "2ee19b3fd305b5e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e292f925753ba614", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-product-descriptions/index.ts:68"}, "properties": {"repobilityId": "820531d67f3da5f9", "scanner": "scanner-primary", "fingerprint": "e292f925753ba614", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7b566331b8c3def", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ai-auto-approve-images/index.ts:9"}, "properties": {"repobilityId": "3d82cfc80ba73d0e", "scanner": "scanner-primary", "fingerprint": "c7b566331b8c3def", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d4c1931db28c0db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-inventory-stock/index.ts:99"}, "properties": {"repobilityId": "c9a08ccf6e8a2c43", "scanner": "scanner-primary", "fingerprint": "9d4c1931db28c0db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a97eb46be91288d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-image-discovery-queue/index.ts:8"}, "properties": {"repobilityId": "4024023db04b8d66", "scanner": "scanner-primary", "fingerprint": "a97eb46be91288d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09ee687cba1d9887", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/group-photos-ai/index.ts:79"}, "properties": {"repobilityId": "fcbcd554a3205118", "scanner": "scanner-primary", "fingerprint": "09ee687cba1d9887", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37d197b22fccaa6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-offer-notification/index.ts:56"}, "properties": {"repobilityId": "5e6d86d0efad7ec2", "scanner": "scanner-primary", "fingerprint": "37d197b22fccaa6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d795406ffbe81f87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-listing-description/index.ts:49"}, "properties": {"repobilityId": "acda4079fa1224c8", "scanner": "scanner-primary", "fingerprint": "d795406ffbe81f87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf42e88245faeb58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-ecommerce-hero-queue/index.ts:48"}, "properties": {"repobilityId": "b18c9afd4aa76a5c", "scanner": "scanner-primary", "fingerprint": "cf42e88245faeb58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2af89137bc2d4c73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/product-learn-ai/index.ts:69"}, "properties": {"repobilityId": "294ad92538f94f88", "scanner": "scanner-primary", "fingerprint": "2af89137bc2d4c73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf877fefdfef8add", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-ai-auto-approve-queue/index.ts:108"}, "properties": {"repobilityId": "d20b817adc7e0303", "scanner": "scanner-primary", "fingerprint": "bf877fefdfef8add", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e28dd3c8439fe35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-purchase-notification/index.ts:60"}, "properties": {"repobilityId": "13cf7f356bbab169", "scanner": "scanner-primary", "fingerprint": "8e28dd3c8439fe35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eeb096913a6c4a65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-to-cloudinary/index.ts:114"}, "properties": {"repobilityId": "f3a5fae2f85e6249", "scanner": "scanner-primary", "fingerprint": "eeb096913a6c4a65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3e58acbafb8eacf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-all-lightspeed-products/index.ts:34"}, "properties": {"repobilityId": "5d2597d9b882bb13", "scanner": "scanner-primary", "fingerprint": "a3e58acbafb8eacf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c637a52cf0af2426", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/categorise-canonical-products/index.ts:62"}, "properties": {"repobilityId": "afb7431036638b2c", "scanner": "scanner-primary", "fingerprint": "c637a52cf0af2426", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e8790d651ce3a1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/scrape-facebook-listing/index.ts:54"}, "properties": {"repobilityId": "70f289ade1563716", "scanner": "scanner-primary", "fingerprint": "0e8790d651ce3a1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e04591d53f1fcdb4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/discover-product-images/index.ts:8"}, "properties": {"repobilityId": "e1281432daa37224", "scanner": "scanner-primary", "fingerprint": "e04591d53f1fcdb4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef4bbaef45471abb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/canonical-matching.ts:142"}, "properties": {"repobilityId": "77189047f1486656", "scanner": "scanner-primary", "fingerprint": "ef4bbaef45471abb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e79feda7911fa6d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/canonical-service.ts:99"}, "properties": {"repobilityId": "7f9b1daa176436d1", "scanner": "scanner-primary", "fingerprint": "e79feda7911fa6d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15a5edfb36577fa7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/ecommerce-hero-openai.ts:147"}, "properties": {"repobilityId": "7726aae8dfc681d4", "scanner": "scanner-primary", "fingerprint": "15a5edfb36577fa7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6e0c0641b5dabff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/resend-client.ts:80"}, "properties": {"repobilityId": "c13bd549701c2799", "scanner": "scanner-primary", "fingerprint": "f6e0c0641b5dabff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47a78fbcd41665c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/openai-client.ts:46"}, "properties": {"repobilityId": "637e01765ceeab19", "scanner": "scanner-primary", "fingerprint": "47a78fbcd41665c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e3fa6a4e970aa49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/image-downloader.ts:28"}, "properties": {"repobilityId": "19302f5eec5d9bb0", "scanner": "scanner-primary", "fingerprint": "6e3fa6a4e970aa49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c4c006a68b6afac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/openai-vision-selector.ts:32"}, "properties": {"repobilityId": "62b733ecf1a8ad51", "scanner": "scanner-primary", "fingerprint": "0c4c006a68b6afac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6510511b79ae9bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/cloudinary-uploader.ts:45"}, "properties": {"repobilityId": "1ab694bff097cd11", "scanner": "scanner-primary", "fingerprint": "c6510511b79ae9bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffd5d50e23e50fcc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/ai-categorisation.ts:244"}, "properties": {"repobilityId": "6ce8be98d5403829", "scanner": "scanner-primary", "fingerprint": "ffd5d50e23e50fcc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-502064fee4edca9b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-analytics-manager.tsx:461"}, "properties": {"repobilityId": "fdd8e3f9f2cf4456", "scanner": "scanner-primary", "fingerprint": "502064fee4edca9b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba98d8e14eb1ef9b", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/store-analytics-manager.tsx:430"}, "properties": {"repobilityId": "cd9bf8976be6110a", "scanner": "scanner-primary", "fingerprint": "ba98d8e14eb1ef9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-a3302877df5f76c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-nest-messages-panel.tsx:394"}, "properties": {"repobilityId": "8b64654a1fbc28d6", "scanner": "scanner-primary", "fingerprint": "a3302877df5f76c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb64ad734a9ece66", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/store-nest-messages-panel.tsx:357"}, "properties": {"repobilityId": "045cb6382ba45597", "scanner": "scanner-primary", "fingerprint": "cb64ad734a9ece66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-bac9f7698a0827a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/auto-assign-carousels-panel.tsx:503"}, "properties": {"repobilityId": "41f3217af9a97024", "scanner": "scanner-primary", "fingerprint": "bac9f7698a0827a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-175818953b057a73", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/deputy-roster-bento.tsx:224"}, "properties": {"repobilityId": "976bc6401256b242", "scanner": "scanner-primary", "fingerprint": "175818953b057a73", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a82216da4a01707a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-messages-bento.tsx:92"}, "properties": {"repobilityId": "1807ccc1f713ed3e", "scanner": "scanner-primary", "fingerprint": "a82216da4a01707a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a9276a5f8809f98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-sections-manager.tsx:468"}, "properties": {"repobilityId": "c04d5cb2b7efe3de", "scanner": "scanner-primary", "fingerprint": "2a9276a5f8809f98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e724ce07c82e541d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-overview-lightspeed-panel.tsx:124"}, "properties": {"repobilityId": "2c22fff9a5c267a2", "scanner": "scanner-primary", "fingerprint": "e724ce07c82e541d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a2e2d3ec5b2c3cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-uber-manager.tsx:459"}, "properties": {"repobilityId": "c43d03b0951009ba", "scanner": "scanner-primary", "fingerprint": "2a2e2d3ec5b2c3cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75707080223423e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/actions-page-header.tsx:397"}, "properties": {"repobilityId": "585ffadfb39e572f", "scanner": "scanner-primary", "fingerprint": "75707080223423e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e50a1a253534a56a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-online-products-manager.tsx:331"}, "properties": {"repobilityId": "aa7ad8a9b3a5e387", "scanner": "scanner-primary", "fingerprint": "e50a1a253534a56a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ddd0400f6d7160f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ecommerce-agent-bento.tsx:295"}, "properties": {"repobilityId": "4f376393a375e7b2", "scanner": "scanner-primary", "fingerprint": "8ddd0400f6d7160f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b71893747ea6e0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-immersive-products-manager.tsx:184"}, "properties": {"repobilityId": "ac45066efc578890", "scanner": "scanner-primary", "fingerprint": "1b71893747ea6e0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-978941836650fc82", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-product-content-table.tsx:364"}, "properties": {"repobilityId": "7753f46a22f5b870", "scanner": "scanner-primary", "fingerprint": "978941836650fc82", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e30ebbacaa0ef99", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-pickup-suggestion-ui.tsx:22"}, "properties": {"repobilityId": "cb2be7e123974713", "scanner": "scanner-primary", "fingerprint": "6e30ebbacaa0ef99", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0018aee5eb901eb4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/gmail-response-suggestion-ui.tsx:48"}, "properties": {"repobilityId": "f12f80f70df38ba1", "scanner": "scanner-primary", "fingerprint": "0018aee5eb901eb4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-920cef47de4c600b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-rentals-manager.tsx:352"}, "properties": {"repobilityId": "aa1bec751a312562", "scanner": "scanner-primary", "fingerprint": "920cef47de4c600b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-797e67bccbd984fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-category-display-manager.tsx:171"}, "properties": {"repobilityId": "d9fabb76786f45e9", "scanner": "scanner-primary", "fingerprint": "797e67bccbd984fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-601b0944883ab933", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-brands-manager.tsx:390"}, "properties": {"repobilityId": "18317996769eb4c5", "scanner": "scanner-primary", "fingerprint": "601b0944883ab933", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0aaea5435b67c99", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/nest-auto-service-panel.tsx:166"}, "properties": {"repobilityId": "6f68bf90b9a175bb", "scanner": "scanner-primary", "fingerprint": "e0aaea5435b67c99", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14cc1c2a8d5b9d1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-categories-manager.tsx:132"}, "properties": {"repobilityId": "afd89818d4f67434", "scanner": "scanner-primary", "fingerprint": "14cc1c2a8d5b9d1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-624aa0b63aed353c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/settings/store-categories-manager.tsx:596"}, "properties": {"repobilityId": "ed03f06aecb79ef7", "scanner": "scanner-primary", "fingerprint": "624aa0b63aed353c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3fddb611fc71d9b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/uncategorised-bento.tsx:88"}, "properties": {"repobilityId": "ed7292315d1c77fb", "scanner": "scanner-primary", "fingerprint": "3fddb611fc71d9b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84af3825fa2a47fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/missing-brands-bento.tsx:117"}, "properties": {"repobilityId": "08b068ee2cad0107", "scanner": "scanner-primary", "fingerprint": "84af3825fa2a47fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29c6dcc0290ddff5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/store-product-titles-manager.tsx:529"}, "properties": {"repobilityId": "a664d4ef05fc873a", "scanner": "scanner-primary", "fingerprint": "29c6dcc0290ddff5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fb0dce2724804e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/overivewo-test-bento.tsx:156"}, "properties": {"repobilityId": "3329864bf9591af9", "scanner": "scanner-primary", "fingerprint": "0fb0dce2724804e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3db51f187c2451dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-composer-rail.tsx:74"}, "properties": {"repobilityId": "f06a8e6f7bd70213", "scanner": "scanner-primary", "fingerprint": "3db51f187c2451dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c44c65b985578f67", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-tabbed.tsx:61"}, "properties": {"repobilityId": "5f25039f80f991d8", "scanner": "scanner-primary", "fingerprint": "c44c65b985578f67", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f9127597893133d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/inquiry-slide-panel.tsx:159"}, "properties": {"repobilityId": "3fdb5ecdd07c059b", "scanner": "scanner-primary", "fingerprint": "f9127597893133d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da3ddc6a2168cd46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-thread.tsx:53"}, "properties": {"repobilityId": "ba5a9fe8e8bb349e", "scanner": "scanner-primary", "fingerprint": "da3ddc6a2168cd46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2d0825fd78531df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/design-three-pane.tsx:47"}, "properties": {"repobilityId": "314b895de24d43d3", "scanner": "scanner-primary", "fingerprint": "d2d0825fd78531df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fefe054e890f1292", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/settings/customer-inquiries/inbox-filter-tabs.tsx:69"}, "properties": {"repobilityId": "8fe257e66c526a2d", "scanner": "scanner-primary", "fingerprint": "fefe054e890f1292", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-50f0fecfcfb8ccae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/parts.tsx:458"}, "properties": {"repobilityId": "46988d07647ba6bf", "scanner": "scanner-primary", "fingerprint": "50f0fecfcfb8ccae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f66cc818173f472b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/enquiry-list.tsx:111"}, "properties": {"repobilityId": "17d25a829a2a26d1", "scanner": "scanner-primary", "fingerprint": "f66cc818173f472b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-415ed32099b78f4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/customer-inquiries/unified-inbox-table.tsx:135"}, "properties": {"repobilityId": "102f1fb15157d3c6", "scanner": "scanner-primary", "fingerprint": "415ed32099b78f4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a08ab1fadc4d2e8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/sidebar.tsx:110"}, "properties": {"repobilityId": "71d53859fbb6eed7", "scanner": "scanner-primary", "fingerprint": "0a08ab1fadc4d2e8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3f90227add6d508", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/messages-dropdown.tsx:121"}, "properties": {"repobilityId": "eff2724dabd72533", "scanner": "scanner-primary", "fingerprint": "f3f90227add6d508", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a39cb7c87a9cc40", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/nest-messages-dropdown.tsx:132"}, "properties": {"repobilityId": "b05a83ed0742813c", "scanner": "scanner-primary", "fingerprint": "6a39cb7c87a9cc40", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-27162c3164a98135", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/topbar.tsx:82"}, "properties": {"repobilityId": "fffa6b25af62c977", "scanner": "scanner-primary", "fingerprint": "27162c3164a98135", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c270a56f2c9449d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/marketplace-sidebar.tsx:419"}, "properties": {"repobilityId": "f82fe6e685eddf52", "scanner": "scanner-primary", "fingerprint": "c270a56f2c9449d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96e9009f22577887", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/layout/marketplace-sidebar.tsx:363"}, "properties": {"repobilityId": "5c9a680c17378731", "scanner": "scanner-primary", "fingerprint": "96e9009f22577887", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18f65de66c8abe33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/sidebar-lightspeed-status.tsx:90"}, "properties": {"repobilityId": "27051cae19ecf7c9", "scanner": "scanner-primary", "fingerprint": "18f65de66c8abe33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c810fec4986d5ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/sidebar-view-store-link.tsx:16"}, "properties": {"repobilityId": "6d76ceae87946581", "scanner": "scanner-primary", "fingerprint": "0c810fec4986d5ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eda75237d5766fb7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/store-switcher.tsx:52"}, "properties": {"repobilityId": "cad4f06eaec4e9df", "scanner": "scanner-primary", "fingerprint": "eda75237d5766fb7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0eb711467c3a27b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/app-sidebar/nav-user.tsx:65"}, "properties": {"repobilityId": "8907b42be9febe1c", "scanner": "scanner-primary", "fingerprint": "0eb711467c3a27b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c66f8dd07374b8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-category-list.tsx:119"}, "properties": {"repobilityId": "cdb662fb5991255f", "scanner": "scanner-primary", "fingerprint": "6c66f8dd07374b8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81b7066fcff607df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-mobile-view.tsx:101"}, "properties": {"repobilityId": "a8df25de49a1aec9", "scanner": "scanner-primary", "fingerprint": "81b7066fcff607df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa3317fbb7a1e838", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/ai-search-response.tsx:176"}, "properties": {"repobilityId": "4fd908dc6246f340", "scanner": "scanner-primary", "fingerprint": "fa3317fbb7a1e838", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16b1358708098762", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/instant-search.tsx:779"}, "properties": {"repobilityId": "401a851e4b7e5b53", "scanner": "scanner-primary", "fingerprint": "16b1358708098762", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d492900da6bba7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-inquiry-button.tsx:219"}, "properties": {"repobilityId": "71b736c90377dac3", "scanner": "scanner-primary", "fingerprint": "0d492900da6bba7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-862a9d08cbb8d098", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/bike-stores-picker.tsx:105"}, "properties": {"repobilityId": "549d42dbe7ae67d2", "scanner": "scanner-primary", "fingerprint": "862a9d08cbb8d098", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56bd5a7f949e2a1d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/bike-spec-explore-panel.tsx:171"}, "properties": {"repobilityId": "0d96b19de0edd6ab", "scanner": "scanner-primary", "fingerprint": "56bd5a7f949e2a1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cadac3143136129e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/checkout-sheet.tsx:646"}, "properties": {"repobilityId": "eeb45b133ca4bec2", "scanner": "scanner-primary", "fingerprint": "cadac3143136129e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e9455f8e9883605d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/checkout-sheet.tsx:573"}, "properties": {"repobilityId": "af9f2ab146031b06", "scanner": "scanner-primary", "fingerprint": "e9455f8e9883605d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-301dff13a166acb5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/unified-filter-bar.tsx:212"}, "properties": {"repobilityId": "9b5f6af57855f2c1", "scanner": "scanner-primary", "fingerprint": "301dff13a166acb5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7b4da9b8f6f69ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-search-bar.tsx:267"}, "properties": {"repobilityId": "63ca5cb186710a40", "scanner": "scanner-primary", "fingerprint": "b7b4da9b8f6f69ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-342933493b8f17fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-detail-modal.tsx:220"}, "properties": {"repobilityId": "e5444cff9a7bfb78", "scanner": "scanner-primary", "fingerprint": "342933493b8f17fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7bf89b8b65ae6499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/product-detail-modal.tsx:68"}, "properties": {"repobilityId": "5c67b81ea1325d86", "scanner": "scanner-primary", "fingerprint": "7bf89b8b65ae6499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-41debc4ae768dd5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/image-discovery-modal.tsx:99"}, "properties": {"repobilityId": "b7bb077929dbcc95", "scanner": "scanner-primary", "fingerprint": "41debc4ae768dd5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15148dd8a5f98e4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/edit-product-drawer.tsx:649"}, "properties": {"repobilityId": "d1cef456e52744ed", "scanner": "scanner-primary", "fingerprint": "15148dd8a5f98e4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8683563173bb9be6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sellers-grid.tsx:74"}, "properties": {"repobilityId": "acdf1da5f3941697", "scanner": "scanner-primary", "fingerprint": "8683563173bb9be6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1c53de6737cd1b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/marketplace-header.tsx:532"}, "properties": {"repobilityId": "990fdec33c41c3f4", "scanner": "scanner-primary", "fingerprint": "d1c53de6737cd1b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71994db050ceddd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/marketplace-header.tsx:821"}, "properties": {"repobilityId": "7f4d7ca00bf25354", "scanner": "scanner-primary", "fingerprint": "71994db050ceddd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c60991b5a209264e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-card.tsx:648"}, "properties": {"repobilityId": "00173be740f40ba1", "scanner": "scanner-primary", "fingerprint": "c60991b5a209264e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3ab5e1f7d97d591", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-learn-panel.tsx:363"}, "properties": {"repobilityId": "aa8fa7f9d2f78b5b", "scanner": "scanner-primary", "fingerprint": "d3ab5e1f7d97d591", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a00f65c3da7c193", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/image-uploader.tsx:274"}, "properties": {"repobilityId": "7efb499946cc2edc", "scanner": "scanner-primary", "fingerprint": "7a00f65c3da7c193", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-116bb4f07423bebe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/floating-upload-bar.tsx:209"}, "properties": {"repobilityId": "7768094b41679c5f", "scanner": "scanner-primary", "fingerprint": "116bb4f07423bebe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ba0282f89f16e4c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-card.tsx:81"}, "properties": {"repobilityId": "399d5f61bfbbfb6b", "scanner": "scanner-primary", "fingerprint": "1ba0282f89f16e4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2cda5aae66a8381b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/mobile-delivery-sheet.tsx:405"}, "properties": {"repobilityId": "84a98601c1b45589", "scanner": "scanner-primary", "fingerprint": "2cda5aae66a8381b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f50474e53e01fe7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-details-panel.tsx:285"}, "properties": {"repobilityId": "22e604899fafce87", "scanner": "scanner-primary", "fingerprint": "0f50474e53e01fe7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bbc8322a1a5affcd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/product-details-panel.tsx:60"}, "properties": {"repobilityId": "a3cabce043ab88e7", "scanner": "scanner-primary", "fingerprint": "bbc8322a1a5affcd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d99765ed67a86d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/cart-drawer.tsx:1186"}, "properties": {"repobilityId": "e389afa7b84f4f43", "scanner": "scanner-primary", "fingerprint": "1d99765ed67a86d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4ebeb3870b4d3655", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/split-search-results.tsx:235"}, "properties": {"repobilityId": "8186a102274bc445", "scanner": "scanner-primary", "fingerprint": "4ebeb3870b4d3655", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-78d9b7d526ee5bac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/settings/settings-row.tsx:62"}, "properties": {"repobilityId": "a65f908b18cbef35", "scanner": "scanner-primary", "fingerprint": "78d9b7d526ee5bac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b14c19e6c08244f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/settings/edit-profile-sheet.tsx:99"}, "properties": {"repobilityId": "42d366ad415baccc", "scanner": "scanner-primary", "fingerprint": "9b14c19e6c08244f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29722395af165609", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:218"}, "properties": {"repobilityId": "a04a099f3732eae2", "scanner": "scanner-primary", "fingerprint": "29722395af165609", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4836060207fde124", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:1833"}, "properties": {"repobilityId": "000ae2acd7c7ee75", "scanner": "scanner-primary", "fingerprint": "4836060207fde124", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-613ff9689333a183", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-profile-chrome.tsx:360"}, "properties": {"repobilityId": "e4a656ed64ea5925", "scanner": "scanner-primary", "fingerprint": "613ff9689333a183", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-20e8180dbfe7de42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/store-profile/store-home-tab.tsx:1355"}, "properties": {"repobilityId": "f0b5a7988c3e63e4", "scanner": "scanner-primary", "fingerprint": "20e8180dbfe7de42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84287077a1194969", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/product-detail/about-this-seller-section.tsx:278"}, "properties": {"repobilityId": "f724363ef61bbae8", "scanner": "scanner-primary", "fingerprint": "84287077a1194969", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e9a95249a106a755", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-photo-grouping-step.tsx:92"}, "properties": {"repobilityId": "60361c322dc3dea2", "scanner": "scanner-primary", "fingerprint": "e9a95249a106a755", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20c5eec73a8d7c8b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/facebook-import-flow.tsx:56"}, "properties": {"repobilityId": "7fb79b5b1e8f40b1", "scanner": "scanner-primary", "fingerprint": "20c5eec73a8d7c8b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d24bb6f9db50c10c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/smart-upload-modal.tsx:159"}, "properties": {"repobilityId": "d4d632135b23da39", "scanner": "scanner-primary", "fingerprint": "d24bb6f9db50c10c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec53fca7a506a30c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sell/bulk-upload-sheet.tsx:1280"}, "properties": {"repobilityId": "9eaedae794834cc1", "scanner": "scanner-primary", "fingerprint": "ec53fca7a506a30c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f0bc93ba0128743", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/qr-upload-section.tsx:61"}, "properties": {"repobilityId": "47a42a03b766e3b2", "scanner": "scanner-primary", "fingerprint": "9f0bc93ba0128743", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8da9e1ca617a758", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/smart-upload-flow.tsx:44"}, "properties": {"repobilityId": "ae1914c6a072c51f", "scanner": "scanner-primary", "fingerprint": "f8da9e1ca617a758", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9cb9752e1898a4e7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-upload-flow.tsx:190"}, "properties": {"repobilityId": "95c835fb7b130b44", "scanner": "scanner-primary", "fingerprint": "9cb9752e1898a4e7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b124ce05a0e723b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/facebook-import-modal.tsx:94"}, "properties": {"repobilityId": "92ad9bfc749f6cee", "scanner": "scanner-primary", "fingerprint": "b124ce05a0e723b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae40f485bf1e33da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-7-photos.tsx:79"}, "properties": {"repobilityId": "4d0d756be2b608e5", "scanner": "scanner-primary", "fingerprint": "ae40f485bf1e33da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ea84a3b1673cd1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-1-item-type.tsx:383"}, "properties": {"repobilityId": "31311d9d7dc8ebb1", "scanner": "scanner-primary", "fingerprint": "1ea84a3b1673cd1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42e08403eddf96bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-product-card.tsx:226"}, "properties": {"repobilityId": "d04bea767a1ffe63", "scanner": "scanner-primary", "fingerprint": "42e08403eddf96bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e874dff61349c85c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/sell/sell-wizard.tsx:1641"}, "properties": {"repobilityId": "0a6bfd762b1146d0", "scanner": "scanner-primary", "fingerprint": "e874dff61349c85c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2eb39ae9e2ddf24", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/marketplace/sell/sell-wizard.tsx:795"}, "properties": {"repobilityId": "4f193c0eb5bb98d7", "scanner": "scanner-primary", "fingerprint": "a2eb39ae9e2ddf24", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2b12bebf2983386c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/sell-wizard.tsx:110"}, "properties": {"repobilityId": "11022f0664004b9c", "scanner": "scanner-primary", "fingerprint": "2b12bebf2983386c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bc2ee17e4e15cb2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/step-4-photos.tsx:79"}, "properties": {"repobilityId": "01dbe5d7484639b7", "scanner": "scanner-primary", "fingerprint": "7bc2ee17e4e15cb2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10d22531053609ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/bulk-photo-upload-step.tsx:119"}, "properties": {"repobilityId": "affa673a7e63ffc6", "scanner": "scanner-primary", "fingerprint": "10d22531053609ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6bd648f8633a3d1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/marketplace/sell/ai-results-review.tsx:49"}, "properties": {"repobilityId": "e5bcad33681fbe63", "scanner": "scanner-primary", "fingerprint": "6bd648f8633a3d1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffcea1da8105c77a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/seller-profile/seller-header.tsx:117"}, "properties": {"repobilityId": "f068678d2b2fcee3", "scanner": "scanner-primary", "fingerprint": "ffcea1da8105c77a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9254ae93e2ab3a43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketplace/for-you/for-you-carousel-row.tsx:129"}, "properties": {"repobilityId": "d8ecb6b54a62a65b", "scanner": "scanner-primary", "fingerprint": "9254ae93e2ab3a43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a48e75d45cd7fc6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:95"}, "properties": {"repobilityId": "b8c68f17a4018107", "scanner": "scanner-primary", "fingerprint": "0a48e75d45cd7fc6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cbd1b1a83d0a29e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/store-dashboard-manager.tsx:207"}, "properties": {"repobilityId": "c946a22ab72bc566", "scanner": "scanner-primary", "fingerprint": "cbd1b1a83d0a29e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dd3480befd4a4472", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/dashboard-widget-edit-panel.tsx:266"}, "properties": {"repobilityId": "59af313ad4787802", "scanner": "scanner-primary", "fingerprint": "dd3480befd4a4472", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-804a6bd9bb0063a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/dashboard-widget-settings-dialog.tsx:179"}, "properties": {"repobilityId": "1838edcbbe6fae00", "scanner": "scanner-primary", "fingerprint": "804a6bd9bb0063a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d90b1b96ec76f8d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/product-table-view.tsx:300"}, "properties": {"repobilityId": "30784bfd4a52fc8a", "scanner": "scanner-primary", "fingerprint": "2d90b1b96ec76f8d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b84294f070b4094", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/category-tree-view.tsx:133"}, "properties": {"repobilityId": "f38049b31ebf2f5c", "scanner": "scanner-primary", "fingerprint": "1b84294f070b4094", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29bac45561c43cca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lightspeed/sync-progress-modal.tsx:66"}, "properties": {"repobilityId": "8fb971752c9d56af", "scanner": "scanner-primary", "fingerprint": "29bac45561c43cca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cf444fef5cf515bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/upload-provider.tsx:182"}, "properties": {"repobilityId": "c1b3a7e618e83692", "scanner": "scanner-primary", "fingerprint": "cf444fef5cf515bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c32a43b950b792cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/auth-provider.tsx:37"}, "properties": {"repobilityId": "ec079beeab4b940b", "scanner": "scanner-primary", "fingerprint": "c32a43b950b792cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8569b1f5979c0f4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/marketing/used-grid.tsx:46"}, "properties": {"repobilityId": "dc36811e0a7c717d", "scanner": "scanner-primary", "fingerprint": "8569b1f5979c0f4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f9a0bc01566c4b4a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/image-qa-auto-panel.tsx:696"}, "properties": {"repobilityId": "3b3a87fd1d683237", "scanner": "scanner-primary", "fingerprint": "f9a0bc01566c4b4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-727d5906d20a94f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/image-review-modal.tsx:50"}, "properties": {"repobilityId": "1c0f1ad22f82c6d5", "scanner": "scanner-primary", "fingerprint": "727d5906d20a94f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c661e70476fb27bf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/photos-panel.tsx:351"}, "properties": {"repobilityId": "44ffb66b039931a8", "scanner": "scanner-primary", "fingerprint": "c661e70476fb27bf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3a364d031d8b80b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/deep-research-report.tsx:87"}, "properties": {"repobilityId": "d3713fd3740a56f7", "scanner": "scanner-primary", "fingerprint": "c3a364d031d8b80b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-70db504fdf0eebe0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-proposal-card.tsx:140"}, "properties": {"repobilityId": "8824dba68afb679b", "scanner": "scanner-primary", "fingerprint": "70db504fdf0eebe0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3460a28dd69e9678", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/supplier-invoice-pill.tsx:142"}, "properties": {"repobilityId": "ff34efcbe28e5e63", "scanner": "scanner-primary", "fingerprint": "3460a28dd69e9678", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17c85fee298384af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-purchase-order-card.tsx:72"}, "properties": {"repobilityId": "b9fe529e66e6dea1", "scanner": "scanner-primary", "fingerprint": "17c85fee298384af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c3add312fd5b718", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/gmail-connect-card.tsx:158"}, "properties": {"repobilityId": "8b927ecb546ff9ca", "scanner": "scanner-primary", "fingerprint": "2c3add312fd5b718", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dcb45de32b7eb450", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/genie/genie-lessons-panel.tsx:158"}, "properties": {"repobilityId": "9e8715a6646c5cf7", "scanner": "scanner-primary", "fingerprint": "dcb45de32b7eb450", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-58e4e6ed5f22912d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-workorder-cards.tsx:109"}, "properties": {"repobilityId": "4c15a0c616099ec2", "scanner": "scanner-primary", "fingerprint": "58e4e6ed5f22912d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d0c5d7ce932b75c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-category-create-card.tsx:74"}, "properties": {"repobilityId": "41383794b501b657", "scanner": "scanner-primary", "fingerprint": "d0c5d7ce932b75c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-57a32688b31f77ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-store-product-cards.tsx:54"}, "properties": {"repobilityId": "645810cc72c64beb", "scanner": "scanner-primary", "fingerprint": "57a32688b31f77ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9d86a4632d8ba310", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-pivot-table.tsx:282"}, "properties": {"repobilityId": "b60c3e023836feea", "scanner": "scanner-primary", "fingerprint": "9d86a4632d8ba310", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ab3a9e924cb82a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-panel.tsx:470"}, "properties": {"repobilityId": "6df99afe3510532b", "scanner": "scanner-primary", "fingerprint": "3ab3a9e924cb82a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-686d9dff7a6f792c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/genie-panel.tsx:422"}, "properties": {"repobilityId": "cb6f1362b331730c", "scanner": "scanner-primary", "fingerprint": "686d9dff7a6f792c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0bd864ef6d3630f6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-youtube-videos.tsx:30"}, "properties": {"repobilityId": "e5aa468a66b939b4", "scanner": "scanner-primary", "fingerprint": "0bd864ef6d3630f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-219a3b4be00c2b92", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-product-edit-card.tsx:92"}, "properties": {"repobilityId": "90f355ab4a34a1b5", "scanner": "scanner-primary", "fingerprint": "219a3b4be00c2b92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-690d9acfce0c5b99", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-web-image-cards.tsx:40"}, "properties": {"repobilityId": "238a7d5614753fc5", "scanner": "scanner-primary", "fingerprint": "690d9acfce0c5b99", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e13392ddd8039987", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/genie-marketplace-product-cards.tsx:48"}, "properties": {"repobilityId": "cbddc337e3e6e941", "scanner": "scanner-primary", "fingerprint": "e13392ddd8039987", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc5cc5463b8568cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/lightspeed-customer-profile-card.tsx:117"}, "properties": {"repobilityId": "aa5ed2786e8e5dd9", "scanner": "scanner-primary", "fingerprint": "fc5cc5463b8568cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b455750df05ffb18", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/genie/product-genie-panel.tsx:158"}, "properties": {"repobilityId": "c3c06ade675360c1", "scanner": "scanner-primary", "fingerprint": "b455750df05ffb18", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3fe84d104597f4bd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/genie/product-genie-panel.tsx:216"}, "properties": {"repobilityId": "666c4b2fc71632da", "scanner": "scanner-primary", "fingerprint": "3fe84d104597f4bd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4f390fe069a4c0a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/messages/messages-panel.tsx:462"}, "properties": {"repobilityId": "9f609e5b9b1cac9b", "scanner": "scanner-primary", "fingerprint": "4f390fe069a4c0a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a102d4487242187f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/offers/offer-card.tsx:78"}, "properties": {"repobilityId": "327e84d0a75ce217", "scanner": "scanner-primary", "fingerprint": "a102d4487242187f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c596bd58fb78635f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/offers/offer-confirmation-dialog.tsx:119"}, "properties": {"repobilityId": "06b138679fc92107", "scanner": "scanner-primary", "fingerprint": "c596bd58fb78635f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0765a4de8f884eaa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/store-approval-panel.tsx:340"}, "properties": {"repobilityId": "8f330675bea3a70f", "scanner": "scanner-primary", "fingerprint": "0765a4de8f884eaa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f361971d4eaf20fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/floating-image-approval-card.tsx:896"}, "properties": {"repobilityId": "c394101353017933", "scanner": "scanner-primary", "fingerprint": "f361971d4eaf20fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0521d22623f123d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/catalogue-optimise-modal.tsx:2043"}, "properties": {"repobilityId": "7d390efad3566997", "scanner": "scanner-primary", "fingerprint": "0521d22623f123d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5146e7684f4b8e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/bulk-optimise-workspace.tsx:1436"}, "properties": {"repobilityId": "41e24472c17d5c07", "scanner": "scanner-primary", "fingerprint": "b5146e7684f4b8e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-43914b2d269e00e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/floating-optimize-jobs-card.tsx:308"}, "properties": {"repobilityId": "d192086867c07158", "scanner": "scanner-primary", "fingerprint": "43914b2d269e00e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc4c0e4d8a268748", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/copy-queue.tsx:625"}, "properties": {"repobilityId": "e6e33b4a561c22bb", "scanner": "scanner-primary", "fingerprint": "bc4c0e4d8a268748", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-586617114841acd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/hero-images/hero-image-workspace.tsx:191"}, "properties": {"repobilityId": "037a231899f83f88", "scanner": "scanner-primary", "fingerprint": "586617114841acd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2bc07921c6bd2108", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-candidate-editor.tsx:157"}, "properties": {"repobilityId": "3491d4f7e23bf1e0", "scanner": "scanner-primary", "fingerprint": "2bc07921c6bd2108", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62b1b69b55155e93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-apply-dialog.tsx:160"}, "properties": {"repobilityId": "f86bd9c77cb4050b", "scanner": "scanner-primary", "fingerprint": "62b1b69b55155e93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f692815f86305a16", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-candidate-card.tsx:167"}, "properties": {"repobilityId": "8d68c6a918d6c945", "scanner": "scanner-primary", "fingerprint": "f692815f86305a16", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecb1693a7bb95d1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/optimize/variants/variant-group-manager.tsx:138"}, "properties": {"repobilityId": "5b5a1032b75f2704", "scanner": "scanner-primary", "fingerprint": "ecb1693a7bb95d1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3cca86e6fca7d52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/help-step-category.tsx:134"}, "properties": {"repobilityId": "3733f867cc35bf87", "scanner": "scanner-primary", "fingerprint": "c3cca86e6fca7d52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d03e9188b55b91ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/marketplace-readiness-badges.tsx:56"}, "properties": {"repobilityId": "50cbcef4cddf8dd3", "scanner": "scanner-primary", "fingerprint": "d03e9188b55b91ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-12401afa4cbba9e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/spec-sources.tsx:47"}, "properties": {"repobilityId": "fccd775b0ef53d27", "scanner": "scanner-primary", "fingerprint": "12401afa4cbba9e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ef6696e2ca14046", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/product-variant-cell.tsx:43"}, "properties": {"repobilityId": "7acb760f406f9227", "scanner": "scanner-primary", "fingerprint": "8ef6696e2ca14046", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56e288cb2bcb20fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/products/edit-product-panel.tsx:1175"}, "properties": {"repobilityId": "6337f5ac567d3890", "scanner": "scanner-primary", "fingerprint": "56e288cb2bcb20fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a869c9b23284447", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/json-ld.tsx:15"}, "properties": {"repobilityId": "55764ea7310258e2", "scanner": "scanner-primary", "fingerprint": "4a869c9b23284447", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bd5f839328224912", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/drafts/page.tsx:107"}, "properties": {"repobilityId": "9126132b685ec6c1", "scanner": "scanner-primary", "fingerprint": "bd5f839328224912", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-940ecf773bec5e5c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/purchases/page.tsx:496"}, "properties": {"repobilityId": "df944b030418b68b", "scanner": "scanner-primary", "fingerprint": "940ecf773bec5e5c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03c68dc49aa4b471", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/store/homev2/homev2-chat.tsx:1178"}, "properties": {"repobilityId": "8868ff8cd4c377c5", "scanner": "scanner-primary", "fingerprint": "03c68dc49aa4b471", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d513038d57b2384f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/settings/store/homev2/homev2-chat.tsx:558"}, "properties": {"repobilityId": "6ab7f8290654eac6", "scanner": "scanner-primary", "fingerprint": "d513038d57b2384f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-da9ff439f5b69d6f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/settings/my-listings/page.tsx:216"}, "properties": {"repobilityId": "8fc4c66449aab05c", "scanner": "scanner-primary", "fingerprint": "da9ff439f5b69d6f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2032103bcb6a9a13", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/settings/my-listings/page.tsx:405"}, "properties": {"repobilityId": "57467e34a27a43cd", "scanner": "scanner-primary", "fingerprint": "2032103bcb6a9a13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-76aa5ace976cc12b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/store-cards.tsx:41"}, "properties": {"repobilityId": "ee63e433d70f892e", "scanner": "scanner-primary", "fingerprint": "76aa5ace976cc12b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f944e23318fd60e8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/v2-product-card.tsx:121"}, "properties": {"repobilityId": "64326765ccfa23c7", "scanner": "scanner-primary", "fingerprint": "f944e23318fd60e8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-149f4e794c318fe4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/search-palette.tsx:351"}, "properties": {"repobilityId": "b0e8fc6be3ba242f", "scanner": "scanner-primary", "fingerprint": "149f4e794c318fe4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-77a57a1572eeb139", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/v2/_components/hero.tsx:68"}, "properties": {"repobilityId": "88558f6053cbc25a", "scanner": "scanner-primary", "fingerprint": "77a57a1572eeb139", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b95d3f74157fa230", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/upload/mobile/[token]/page.tsx:183"}, "properties": {"repobilityId": "d0052d72de8a2d64", "scanner": "scanner-primary", "fingerprint": "b95d3f74157fa230", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cddd595d88a54391", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/marketplace-page-content.tsx:1381"}, "properties": {"repobilityId": "4e5934c82004d1b1", "scanner": "scanner-primary", "fingerprint": "cddd595d88a54391", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-789389f3bca03e7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/marketplace/marketplace-page-content.tsx:731"}, "properties": {"repobilityId": "838e37bd8d2b8c06", "scanner": "scanner-primary", "fingerprint": "789389f3bca03e7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-396e2aa9102410d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/settings/page.tsx:391"}, "properties": {"repobilityId": "f5d58e81597488e3", "scanner": "scanner-primary", "fingerprint": "396e2aa9102410d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0ecd45c243175fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/page.tsx:65"}, "properties": {"repobilityId": "5762083f77f9709a", "scanner": "scanner-primary", "fingerprint": "e0ecd45c243175fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c62bcce98e559962", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/detailed-specs.tsx:261"}, "properties": {"repobilityId": "b6632457f4962f57", "scanner": "scanner-primary", "fingerprint": "c62bcce98e559962", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d92b718718cac49", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/price-research-guide.tsx:288"}, "properties": {"repobilityId": "b3e3df74364660dd", "scanner": "scanner-primary", "fingerprint": "4d92b718718cac49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e1f87d894f29cfdb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/flow-bulk.tsx:150"}, "properties": {"repobilityId": "adabc4818061e9f0", "scanner": "scanner-primary", "fingerprint": "e1f87d894f29cfdb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b6ca96f187f72f42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-redesign/_components/flow-guided.tsx:267"}, "properties": {"repobilityId": "1323817a938e8052", "scanner": "scanner-primary", "fingerprint": "b6ca96f187f72f42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-865270035c63b43a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/product/[productId]/immersive-product-layout.tsx:207"}, "properties": {"repobilityId": "ec7efc9171bdab1c", "scanner": "scanner-primary", "fingerprint": "865270035c63b43a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-860e9c6e6bf052b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/mobile-prototypes/_components/filter-panel-options.tsx:539"}, "properties": {"repobilityId": "0feebd7337d35a7a", "scanner": "scanner-primary", "fingerprint": "860e9c6e6bf052b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e5290e819faa265a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-stepper.tsx:404"}, "properties": {"repobilityId": "f84cb921fd247666", "scanner": "scanner-primary", "fingerprint": "e5290e819faa265a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e2b1d12a63c2e5b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-deck.tsx:227"}, "properties": {"repobilityId": "e718b5210fda249c", "scanner": "scanner-primary", "fingerprint": "7e2b1d12a63c2e5b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2a7209eb3387439", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/sell-prototypes/_components/variant-list.tsx:222"}, "properties": {"repobilityId": "43808fbdbd5b5175", "scanner": "scanner-primary", "fingerprint": "b2a7209eb3387439", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a10165b40e2e56e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/marketplace/checkout/success/page.tsx:534"}, "properties": {"repobilityId": "a94378b36e877f59", "scanner": "scanner-primary", "fingerprint": "a10165b40e2e56e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e44d2328323474e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/stores/route.ts:24"}, "properties": {"repobilityId": "0cae55fc3b04aeb5", "scanner": "scanner-primary", "fingerprint": "e44d2328323474e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d88883e50cc8e44", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/stores/filters/route.ts:28"}, "properties": {"repobilityId": "623acc3d4a312f4e", "scanner": "scanner-primary", "fingerprint": "4d88883e50cc8e44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d243c04d3c3e71b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/route.ts:226"}, "properties": {"repobilityId": "aedaa4d94866a7bc", "scanner": "scanner-primary", "fingerprint": "1d243c04d3c3e71b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c3c845cc29ab0a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/bulk/route.ts:129"}, "properties": {"repobilityId": "692db695951937f8", "scanner": "scanner-primary", "fingerprint": "7c3c845cc29ab0a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98fab91d53b97271", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/upload-image/route.ts:61"}, "properties": {"repobilityId": "dca1b44e63a5db2f", "scanner": "scanner-primary", "fingerprint": "98fab91d53b97271", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b07a4585ec1997b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/listings/process-image/route.ts:54"}, "properties": {"repobilityId": "be51c1f75944a781", "scanner": "scanner-primary", "fingerprint": "b07a4585ec1997b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d80faf1ead7f854e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/trending/route.ts:103"}, "properties": {"repobilityId": "48cf2def6f5d83c4", "scanner": "scanner-primary", "fingerprint": "d80faf1ead7f854e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e207f4951f129b6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/search/route.ts:60"}, "properties": {"repobilityId": "27b2705314461df2", "scanner": "scanner-primary", "fingerprint": "e207f4951f129b6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffd84d32cd6c9953", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/marketplace/purchases/route.ts:149"}, "properties": {"repobilityId": "5d6446a0d13644f7", "scanner": "scanner-primary", "fingerprint": "ffd84d32cd6c9953", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8a32cc50055783af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/route.ts:86"}, "properties": {"repobilityId": "e04f68deb0c0e342", "scanner": "scanner-primary", "fingerprint": "8a32cc50055783af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f13541187713c50f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/[id]/report-issue/route.ts:176"}, "properties": {"repobilityId": "bb32cdd7273ba64e", "scanner": "scanner-primary", "fingerprint": "f13541187713c50f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d9d35248f4c825d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/purchases/[id]/confirm-receipt/route.ts:104"}, "properties": {"repobilityId": "6361d6335a6b3536", "scanner": "scanner-primary", "fingerprint": "0d9d35248f4c825d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b9e81bce3a824cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/category-counts/route.ts:52"}, "properties": {"repobilityId": "35a4aeb017b00aed", "scanner": "scanner-primary", "fingerprint": "3b9e81bce3a824cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7737dd498df39baf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/text-upload/sessions/route.ts:242"}, "properties": {"repobilityId": "345adcdf60a2963e", "scanner": "scanner-primary", "fingerprint": "7737dd498df39baf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb9d740c95152bfc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/route.ts:286"}, "properties": {"repobilityId": "9454681b6eaa6565", "scanner": "scanner-primary", "fingerprint": "bb9d740c95152bfc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ee4777e8f203014", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/[productId]/route.ts:29"}, "properties": {"repobilityId": "917070dc0a54fd87", "scanner": "scanner-primary", "fingerprint": "1ee4777e8f203014", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-932f2702ae46d22d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/products/[productId]/seller-products/route.ts:103"}, "properties": {"repobilityId": "847c5e2a6d4fe6fb", "scanner": "scanner-primary", "fingerprint": "932f2702ae46d22d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-97a168d18b5fbc06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/marketplace/sellers/route.ts:111"}, "properties": {"repobilityId": "bf656664f8b87465", "scanner": "scanner-primary", "fingerprint": "97a168d18b5fbc06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93e09c24c7118ea0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/tracking/route.ts:87"}, "properties": {"repobilityId": "0f98c42256fcf01f", "scanner": "scanner-primary", "fingerprint": "93e09c24c7118ea0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f6d2cdc4cc5d9af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/recommendations/for-you/route.ts:122"}, "properties": {"repobilityId": "5af5f58608f6d0a8", "scanner": "scanner-primary", "fingerprint": "1f6d2cdc4cc5d9af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f475fc4ad0937d71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/disconnect/route.ts:50"}, "properties": {"repobilityId": "56d31a8789b3a143", "scanner": "scanner-primary", "fingerprint": "f475fc4ad0937d71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cce8ed70135d356c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-from-cache/route.ts:24"}, "properties": {"repobilityId": "204ffcd0afb7f855", "scanner": "scanner-primary", "fingerprint": "cce8ed70135d356c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f686ca79b470f36", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/auth/callback/route.ts:28"}, "properties": {"repobilityId": "538c732e1f8b1cae", "scanner": "scanner-primary", "fingerprint": "9f686ca79b470f36", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa7148e0aa7e5c31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/auth/initiate/route.ts:21"}, "properties": {"repobilityId": "6862e00e1aaf4a3a", "scanner": "scanner-primary", "fingerprint": "fa7148e0aa7e5c31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af0728fd9dca4873", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/backfill-manufacturer-names/route.ts:40"}, "properties": {"repobilityId": "25c7972c9306f0ec", "scanner": "scanner-primary", "fingerprint": "af0728fd9dca4873", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4bc4028fea58e9d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/inventory-overview/route.ts:133"}, "properties": {"repobilityId": "9d14dc4ed39fe1f3", "scanner": "scanner-primary", "fingerprint": "4bc4028fea58e9d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f03c5e712852b256", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/test/[query]/route.ts:33"}, "properties": {"repobilityId": "1bdd5a4eaab85924", "scanner": "scanner-primary", "fingerprint": "f03c5e712852b256", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3ef85beb1084032", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-selected/route.ts:37"}, "properties": {"repobilityId": "40d89ddcb82376c7", "scanner": "scanner-primary", "fingerprint": "c3ef85beb1084032", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5647f3339d041efa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/items/route.ts:56"}, "properties": {"repobilityId": "1bd4640011af0b37", "scanner": "scanner-primary", "fingerprint": "5647f3339d041efa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-316d27e7b88df1a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-inventory/route.ts:37"}, "properties": {"repobilityId": "a3f55dbe84c4928c", "scanner": "scanner-primary", "fingerprint": "316d27e7b88df1a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a455d1699c52d25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/batch-sync/route.ts:27"}, "properties": {"repobilityId": "31dac542d89dd185", "scanner": "scanner-primary", "fingerprint": "3a455d1699c52d25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a28a0d1931f39e92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/lightspeed/sync-all-products/route.ts:26"}, "properties": {"repobilityId": "dfcbc29e8eff8e9b", "scanner": "scanner-primary", "fingerprint": "a28a0d1931f39e92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76ce44a96f31bbf7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/route.ts:39"}, "properties": {"repobilityId": "e38c5268170200a5", "scanner": "scanner-primary", "fingerprint": "76ce44a96f31bbf7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87271ea8cd8e584c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/process/route.ts:30"}, "properties": {"repobilityId": "08e2c253f468c1af", "scanner": "scanner-primary", "fingerprint": "87271ea8cd8e584c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa8a0aa9d10c07c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/data-cleaning/queue/route.ts:30"}, "properties": {"repobilityId": "9f12d51cc4fa4a45", "scanner": "scanner-primary", "fingerprint": "fa8a0aa9d10c07c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27b4e13fdbbb34d2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/admin/categorise-all-canonical/route.ts:36"}, "properties": {"repobilityId": "29e6929dcb145eb0", "scanner": "scanner-primary", "fingerprint": "27b4e13fdbbb34d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ecdd53d005cd7651", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/categorise-all-canonical/route.ts:38"}, "properties": {"repobilityId": "16b959ecfeb7be3d", "scanner": "scanner-primary", "fingerprint": "ecdd53d005cd7651", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-248b044aae9338eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/scheduled-uploads/route.ts:50"}, "properties": {"repobilityId": "cbabc45398078667", "scanner": "scanner-primary", "fingerprint": "248b044aae9338eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9dcc033fbb49a2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/scheduled-uploads/users/route.ts:38"}, "properties": {"repobilityId": "b01458634747aed5", "scanner": "scanner-primary", "fingerprint": "a9dcc033fbb49a2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-480d969aa3e6d08f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/manage/route.ts:52"}, "properties": {"repobilityId": "727629d305e627af", "scanner": "scanner-primary", "fingerprint": "480d969aa3e6d08f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29c444b32fa71f3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/process/route.ts:36"}, "properties": {"repobilityId": "5412a8be29cdff5b", "scanner": "scanner-primary", "fingerprint": "29c444b32fa71f3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be4a11ce0771c0ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/add-image/route.ts:95"}, "properties": {"repobilityId": "711c7bb7fdcbdc9b", "scanner": "scanner-primary", "fingerprint": "be4a11ce0771c0ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f626e8916d2db67", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/queue/route.ts:165"}, "properties": {"repobilityId": "9a63c35b0d27df53", "scanner": "scanner-primary", "fingerprint": "8f626e8916d2db67", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4ab8d5fe66ec7da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/set-hero/route.ts:120"}, "properties": {"repobilityId": "d691368548457a5f", "scanner": "scanner-primary", "fingerprint": "d4ab8d5fe66ec7da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8d7e444643e6d06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/products/route.ts:53"}, "properties": {"repobilityId": "80309f8d66a80340", "scanner": "scanner-primary", "fingerprint": "a8d7e444643e6d06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f24fc18cfead446", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ecommerce-hero/search-images/route.ts:46"}, "properties": {"repobilityId": "4648bdf84c1e003b", "scanner": "scanner-primary", "fingerprint": "3f24fc18cfead446", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36c4ea355f5dc9de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/curate/route.ts:32"}, "properties": {"repobilityId": "ff746742ac1dd68f", "scanner": "scanner-primary", "fingerprint": "36c4ea355f5dc9de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da690d47e79f9e53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/ai-auto-approve/route.ts:32"}, "properties": {"repobilityId": "3f7f1eec3902ce78", "scanner": "scanner-primary", "fingerprint": "da690d47e79f9e53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-958ba7b92559bf8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/product/[id]/route.ts:42"}, "properties": {"repobilityId": "efc603e65bdf6d10", "scanner": "scanner-primary", "fingerprint": "958ba7b92559bf8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e763a5d09e463d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/process-ai-queue/route.ts:28"}, "properties": {"repobilityId": "fd10292281a57385", "scanner": "scanner-primary", "fingerprint": "7e763a5d09e463d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15dccacd393cf59d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/discover/route.ts:31"}, "properties": {"repobilityId": "40fec5ee7e869599", "scanner": "scanner-primary", "fingerprint": "15dccacd393cf59d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fd5c01182bffe4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/download/route.ts:28"}, "properties": {"repobilityId": "1dedd7722c05b99a", "scanner": "scanner-primary", "fingerprint": "1fd5c01182bffe4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05c6ad36e3834717", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/images/approve/route.ts:55"}, "properties": {"repobilityId": "5bf2b14c95f78ed3", "scanner": "scanner-primary", "fingerprint": "05c6ad36e3834717", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70fc735ccac22763", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/ai-search/route.ts:26"}, "properties": {"repobilityId": "96d52fce358c6d9b", "scanner": "scanner-primary", "fingerprint": "70fc735ccac22763", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c20cb55c284bffd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/product-learn/route.ts:25"}, "properties": {"repobilityId": "da8ee25925ebcac0", "scanner": "scanner-primary", "fingerprint": "c20cb55c284bffd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1a38058a3676348", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/refresh-lightspeed-tokens/route.ts:59"}, "properties": {"repobilityId": "d5e2efbf952f985c", "scanner": "scanner-primary", "fingerprint": "b1a38058a3676348", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bc07425b13fa0c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/release-funds/route.ts:125"}, "properties": {"repobilityId": "ac2f5937f892a3f6", "scanner": "scanner-primary", "fingerprint": "0bc07425b13fa0c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd85992e45c24143", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/resume-copy-jobs/route.ts:55"}, "properties": {"repobilityId": "e576da7f9c104308", "scanner": "scanner-primary", "fingerprint": "cd85992e45c24143", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ed6298263b48562", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/ecommerce-hero/route.ts:34"}, "properties": {"repobilityId": "b5a5d594d0adaa78", "scanner": "scanner-primary", "fingerprint": "5ed6298263b48562", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc29c62fac616305", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/route.ts:151"}, "properties": {"repobilityId": "1d31553021d59c12", "scanner": "scanner-primary", "fingerprint": "cc29c62fac616305", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-421063e39ce27d13", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/accept/route.ts:196"}, "properties": {"repobilityId": "2436ffac54fa1e60", "scanner": "scanner-primary", "fingerprint": "421063e39ce27d13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-dd2f8b5a10bad1e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/offers/[id]/accept/route.ts:118"}, "properties": {"repobilityId": "ce29bcf1fbfd58a9", "scanner": "scanner-primary", "fingerprint": "dd2f8b5a10bad1e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87354af983f8bb74", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/reject/route.ts:126"}, "properties": {"repobilityId": "bb7af03df1f753b7", "scanner": "scanner-primary", "fingerprint": "87354af983f8bb74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e6014131178029d5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/counter/route.ts:198"}, "properties": {"repobilityId": "f93dda2fea566bff", "scanner": "scanner-primary", "fingerprint": "e6014131178029d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d7fbd7a26bdfd43a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/offers/[id]/cancel/route.ts:119"}, "properties": {"repobilityId": "6480caac950eeb4e", "scanner": "scanner-primary", "fingerprint": "d7fbd7a26bdfd43a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ac7833c976fe01a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/images/discover/route.ts:31"}, "properties": {"repobilityId": "a761ab63b281fca3", "scanner": "scanner-primary", "fingerprint": "ac7833c976fe01a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-350b5d95da5611f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/mobile-upload/create-session/route.ts:55"}, "properties": {"repobilityId": "21345d69efb9720e", "scanner": "scanner-primary", "fingerprint": "350b5d95da5611f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34a37e85f97be1b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/mobile-upload/session/[token]/upload/route.ts:149"}, "properties": {"repobilityId": "4b9a066139e49c69", "scanner": "scanner-primary", "fingerprint": "34a37e85f97be1b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d8737f9004ee27c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/connect/status/route.ts:16"}, "properties": {"repobilityId": "d95a898ba2f4313f", "scanner": "scanner-primary", "fingerprint": "7d8737f9004ee27c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec8a3fbdcbb0bcbc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/connect/create-account/route.ts:19"}, "properties": {"repobilityId": "904cfb0f3016ff9c", "scanner": "scanner-primary", "fingerprint": "ec8a3fbdcbb0bcbc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d8bec322dd32b19", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/stripe/webhook/route.ts:324"}, "properties": {"repobilityId": "f1ea72adc6e14d5c", "scanner": "scanner-primary", "fingerprint": "8d8bec322dd32b19", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-41d5226a3d1c65e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/webhook/route.ts:18"}, "properties": {"repobilityId": "e3501193b3efa3b7", "scanner": "scanner-primary", "fingerprint": "41d5226a3d1c65e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a11a5ddd161832e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-cart-checkout/route.ts:461"}, "properties": {"repobilityId": "2efe4e6989eb7ac6", "scanner": "scanner-primary", "fingerprint": "a11a5ddd161832e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8fe1944b54cb355e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/trigger-payout/route.ts:16"}, "properties": {"repobilityId": "f6b72d9febceb978", "scanner": "scanner-primary", "fingerprint": "8fe1944b54cb355e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4198f09a77e45313", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-checkout/route.ts:212"}, "properties": {"repobilityId": "5cb909d30f9b07fe", "scanner": "scanner-primary", "fingerprint": "4198f09a77e45313", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-598f08aee8c5bff1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-payment-intent/route.ts:221"}, "properties": {"repobilityId": "4c47bf4475390fe8", "scanner": "scanner-primary", "fingerprint": "598f08aee8c5bff1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b8a9b2d7d2b4983", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/session/[sessionId]/route.ts:156"}, "properties": {"repobilityId": "56c3e52734131ff7", "scanner": "scanner-primary", "fingerprint": "7b8a9b2d7d2b4983", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07b381a1f98f28aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/create-checkout-offer/route.ts:257"}, "properties": {"repobilityId": "d1920c4d5eff35ef", "scanner": "scanner-primary", "fingerprint": "07b381a1f98f28aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39cb21c9da489b5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/manual-sync/route.ts:69"}, "properties": {"repobilityId": "8f0bd3a069517cee", "scanner": "scanner-primary", "fingerprint": "39cb21c9da489b5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-24bada4db95c18d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/support/tickets/route.ts:405"}, "properties": {"repobilityId": "7aa6f3f317efaf8c", "scanner": "scanner-primary", "fingerprint": "24bada4db95c18d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d51283d2b2fe6da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/post/route.ts:21"}, "properties": {"repobilityId": "360b65a5dfb1f8be", "scanner": "scanner-primary", "fingerprint": "1d51283d2b2fe6da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ca2f13f9478ceb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/generate-image/route.ts:50"}, "properties": {"repobilityId": "9d684f95c5bae461", "scanner": "scanner-primary", "fingerprint": "9ca2f13f9478ceb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac9f15d3d6279afa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/instagram/debug/route.ts:67"}, "properties": {"repobilityId": "08c86af4658fc07d", "scanner": "scanner-primary", "fingerprint": "ac9f15d3d6279afa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e17c490c557975e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/generate-description/route.ts:25"}, "properties": {"repobilityId": "e51aca98ad7d9090", "scanner": "scanner-primary", "fingerprint": "e17c490c557975e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-baef468d94dbcd1c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/[id]/images/route.ts:27"}, "properties": {"repobilityId": "e4033e06e8a8e757", "scanner": "scanner-primary", "fingerprint": "baef468d94dbcd1c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5836dc9f62fe3ed3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/delete-all/route.ts:26"}, "properties": {"repobilityId": "ff5d422ffdb40a79", "scanner": "scanner-primary", "fingerprint": "5836dc9f62fe3ed3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b00d9d01ebde04ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/clean-names/route.ts:25"}, "properties": {"repobilityId": "dd13a9020587f48f", "scanner": "scanner-primary", "fingerprint": "b00d9d01ebde04ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b07ed63b8afd36d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/products/bulk-delete/route.ts:37"}, "properties": {"repobilityId": "f6d8a6f81d8aadea", "scanner": "scanner-primary", "fingerprint": "b07ed63b8afd36d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1150b22eadc17a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sms/send/route.ts:44"}, "properties": {"repobilityId": "aa9b6c647386f1df", "scanner": "scanner-primary", "fingerprint": "b1150b22eadc17a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a32b481d79b81d87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sms/order-confirmation/route.ts:78"}, "properties": {"repobilityId": "71892d1a5796758d", "scanner": "scanner-primary", "fingerprint": "a32b481d79b81d87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90280da8e8b14f72", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/test-panels/page.tsx:238"}, "properties": {"repobilityId": "02d98b4946207e19", "scanner": "scanner-primary", "fingerprint": "90280da8e8b14f72", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e7a523b41fe7c47", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/acme-storefront.tsx:93"}, "properties": {"repobilityId": "3b94bca5a5cc404d", "scanner": "scanner-primary", "fingerprint": "8e7a523b41fe7c47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2f84f08e06b6a2c", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/home2/_components/acme-bikes-demo.tsx:260"}, "properties": {"repobilityId": "09a0a3ddad85f963", "scanner": "scanner-primary", "fingerprint": "e2f84f08e06b6a2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-cbb53bf214eb591c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/value-bentos.tsx:162"}, "properties": {"repobilityId": "129de3e68e69c1ca", "scanner": "scanner-primary", "fingerprint": "cbb53bf214eb591c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c707d0422440377", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/home2/_components/marketplace-hero.tsx:70"}, "properties": {"repobilityId": "d63f1d408fd76d6f", "scanner": "scanner-primary", "fingerprint": "5c707d0422440377", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86aa31fca4ca8726", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/data-cleaning/page.tsx:601"}, "properties": {"repobilityId": "727e0ed271ec92c4", "scanner": "scanner-primary", "fingerprint": "86aa31fca4ca8726", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2c631ec409d2ef0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/database/page.tsx:640"}, "properties": {"repobilityId": "598a95058385b5a7", "scanner": "scanner-primary", "fingerprint": "b2c631ec409d2ef0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-802d493fef2a25cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/scheduled-uploads/page.tsx:2610"}, "properties": {"repobilityId": "01ad7453c8159ae4", "scanner": "scanner-primary", "fingerprint": "802d493fef2a25cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c888473d3da5bdf1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/scheduled-uploads/page.tsx:378"}, "properties": {"repobilityId": "533fd5894daefef4", "scanner": "scanner-primary", "fingerprint": "c888473d3da5bdf1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e30dbbe37deb6db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/ecommerce-hero/page.tsx:2381"}, "properties": {"repobilityId": "d5ff697fff19ee79", "scanner": "scanner-primary", "fingerprint": "6e30dbbe37deb6db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3e0dad0487a7c2bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/ecommerce-hero/page.tsx:622"}, "properties": {"repobilityId": "25a9b57640af17da", "scanner": "scanner-primary", "fingerprint": "3e0dad0487a7c2bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c95d406dd78077bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/image-qa/page.tsx:832"}, "properties": {"repobilityId": "5a9bbce7002b1929", "scanner": "scanner-primary", "fingerprint": "c95d406dd78077bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4bc4b0e3b32b3a26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/instagram-posts/page.tsx:263"}, "properties": {"repobilityId": "3214b178de1a5f38", "scanner": "scanner-primary", "fingerprint": "4bc4b0e3b32b3a26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4535aebe2e7e10da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/page.tsx:113"}, "properties": {"repobilityId": "f5763ede26937380", "scanner": "scanner-primary", "fingerprint": "4535aebe2e7e10da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2b8be9b4d0f82cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/settings/page.tsx:504"}, "properties": {"repobilityId": "84525521f254f7e1", "scanner": "scanner-primary", "fingerprint": "a2b8be9b4d0f82cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e902912264255c62", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/products/page.tsx:427"}, "properties": {"repobilityId": "18e6649dad0e3cd0", "scanner": "scanner-primary", "fingerprint": "e902912264255c62", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-058e2195b15240d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/_components/store-switcher.tsx:43"}, "properties": {"repobilityId": "2e5b52a51d0d09eb", "scanner": "scanner-primary", "fingerprint": "058e2195b15240d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df637a4cd5eb44fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/mockup/_components/nav-user.tsx:53"}, "properties": {"repobilityId": "f5b9506dec7e9209", "scanner": "scanner-primary", "fingerprint": "df637a4cd5eb44fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aac88b034cafe8b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/messages/page.tsx:579"}, "properties": {"repobilityId": "e0796a6989578b24", "scanner": "scanner-primary", "fingerprint": "aac88b034cafe8b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c7bf94923cf155a7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/messages/page.tsx:678"}, "properties": {"repobilityId": "252278a003dbc440", "scanner": "scanner-primary", "fingerprint": "c7bf94923cf155a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-32e2470a598c2381", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/onboarding/page.tsx:77"}, "properties": {"repobilityId": "11707b24071fc883", "scanner": "scanner-primary", "fingerprint": "32e2470a598c2381", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb1e44e2ff9d3a70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/test-card-designs/page.tsx:519"}, "properties": {"repobilityId": "f21a9bf565aa1f17", "scanner": "scanner-primary", "fingerprint": "cb1e44e2ff9d3a70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-232862daf6c44796", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/products/page.tsx:917"}, "properties": {"repobilityId": "0517105d31e0114d", "scanner": "scanner-primary", "fingerprint": "232862daf6c44796", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51c8a9b4436eca21", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/tracking/interaction-tracker.ts:227"}, "properties": {"repobilityId": "aaefbd02536c2fe0", "scanner": "scanner-primary", "fingerprint": "51c8a9b4436eca21", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef4ca416a36835a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/keyword-matching.ts:35"}, "properties": {"repobilityId": "594df9dd460717ff", "scanner": "scanner-primary", "fingerprint": "ef4ca416a36835a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-200f450aab679b85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/onboarding-recommendations.ts:89"}, "properties": {"repobilityId": "8eb5623958277679", "scanner": "scanner-primary", "fingerprint": "200f450aab679b85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53ac3f52312aedba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/recommendations/algorithms.ts:58"}, "properties": {"repobilityId": "b1d8cd34181ad6c8", "scanner": "scanner-primary", "fingerprint": "53ac3f52312aedba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a263c7013f199af4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/performance/web-vitals.ts:40"}, "properties": {"repobilityId": "6336ce29435f2f5c", "scanner": "scanner-primary", "fingerprint": "a263c7013f199af4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25d038cb983f044b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/utils/facebook-image-handler.ts:82"}, "properties": {"repobilityId": "545e75e478e146e6", "scanner": "scanner-primary", "fingerprint": "25d038cb983f044b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d08bb665112c3f28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/utils/image-compression.ts:88"}, "properties": {"repobilityId": "6938c3035ea6e46b", "scanner": "scanner-primary", "fingerprint": "d08bb665112c3f28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a52875c89a0d579", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-listing-form.ts:27"}, "properties": {"repobilityId": "86e60c9b1653d2ee", "scanner": "scanner-primary", "fingerprint": "5a52875c89a0d579", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eecfca7111fe449f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-conversations.ts:199"}, "properties": {"repobilityId": "eb28d5dab5d9a165", "scanner": "scanner-primary", "fingerprint": "eecfca7111fe449f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fec815d651aa9d61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-combined-unread-count.ts:129"}, "properties": {"repobilityId": "2e251af006b6a88e", "scanner": "scanner-primary", "fingerprint": "fec815d651aa9d61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9270428f4fa642b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-conversation.ts:263"}, "properties": {"repobilityId": "c0924f5ce4c4ea77", "scanner": "scanner-primary", "fingerprint": "9270428f4fa642b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cc79c9fb312a0af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-offers.ts:123"}, "properties": {"repobilityId": "b2fa432004b6b759", "scanner": "scanner-primary", "fingerprint": "1cc79c9fb312a0af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-001a19c437904761", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/hooks/use-marketplace-products.ts:91"}, "properties": {"repobilityId": "bac9c24a007dbbca", "scanner": "scanner-primary", "fingerprint": "001a19c437904761", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b1c7d3bc8dab689", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/supabase/middleware.ts:11"}, "properties": {"repobilityId": "6c6b6f4690d6f41f", "scanner": "scanner-primary", "fingerprint": "8b1c7d3bc8dab689", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-97bafb8055bf22ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/cloudinary-overlay.ts:28"}, "properties": {"repobilityId": "10df264dd5bf4095", "scanner": "scanner-primary", "fingerprint": "97bafb8055bf22ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c78c6e16baadd8a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/instagram-client.ts:51"}, "properties": {"repobilityId": "74714176f047f092", "scanner": "scanner-primary", "fingerprint": "c78c6e16baadd8a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63a0b938292f1606", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/product-images.ts:707"}, "properties": {"repobilityId": "4530ec6e54866fa7", "scanner": "scanner-primary", "fingerprint": "63a0b938292f1606", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df24e488b5a2a688", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/cloudinary-upload.ts:67"}, "properties": {"repobilityId": "c5b1670fdd562702", "scanner": "scanner-primary", "fingerprint": "df24e488b5a2a688", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-645d5f8ee0bc5c12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/config.ts:11"}, "properties": {"repobilityId": "c0a908a319a0ee48", "scanner": "scanner-primary", "fingerprint": "645d5f8ee0bc5c12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d79b292f90492ff7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/token-manager.ts:214"}, "properties": {"repobilityId": "dbb84e4860f8e3be", "scanner": "scanner-primary", "fingerprint": "d79b292f90492ff7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cba4c914e525ddb9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/lightspeed/lightspeed-client.ts:351"}, "properties": {"repobilityId": "a641c7e325d3c4bc", "scanner": "scanner-primary", "fingerprint": "cba4c914e525ddb9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-659bebe0c7cba489", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/services/image-processing/index.ts:224"}, "properties": {"repobilityId": "7c1a1163cf68d1ef", "scanner": "scanner-primary", "fingerprint": "659bebe0c7cba489", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bd3f7ec44d3cb38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/stripe/payouts.ts:43"}, "properties": {"repobilityId": "57006b9fae96fe29", "scanner": "scanner-primary", "fingerprint": "0bd3f7ec44d3cb38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-526bb6728ee6b1eb", "level": "error", "message": {"text": "Runtime dotenv file present in repo: .env.vercel.production"}, "properties": {"repobilityId": "2ab402e3b0e4d442", "scanner": "scanner-primary", "fingerprint": "526bb6728ee6b1eb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".env.vercel.production"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f2d830d7ae5c1641", "level": "error", "message": {"text": "Runtime dotenv file present in repo: .env.test"}, "properties": {"repobilityId": "25baea8a4d77c75a", "scanner": "scanner-primary", "fingerprint": "f2d830d7ae5c1641", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".env.test"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8193d81dbaecfc1b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-scheduled-listings/index.ts:13"}, "properties": {"repobilityId": "85d923566852d5a3", "scanner": "scanner-primary", "fingerprint": "8193d81dbaecfc1b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/process-scheduled-listings/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-14d64ea317d180f3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/bulk-analyze-listings/index.ts:20"}, "properties": {"repobilityId": "44ae6f126df3ccda", "scanner": "scanner-primary", "fingerprint": "14d64ea317d180f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/bulk-analyze-listings/index.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-b7ac9342806ff3d4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/search-ai-expert/index.ts:61"}, "properties": {"repobilityId": "b60f16e3c170fe94", "scanner": "scanner-primary", "fingerprint": "b7ac9342806ff3d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/search-ai-expert/index.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-c33645862f2a0ea6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-test-emails/index.ts:15"}, "properties": {"repobilityId": "9e5e55c0dfd7bb47", "scanner": "scanner-primary", "fingerprint": "c33645862f2a0ea6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-test-emails/index.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-0a99568220db4f33", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analyze-listing-ai/index.ts:138"}, "properties": {"repobilityId": "aa7b84415be9d21a", "scanner": "scanner-primary", "fingerprint": "0a99568220db4f33", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/analyze-listing-ai/index.ts"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-bd70e4d6aa8e61c3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/enhance-product-image/index.ts:18"}, "properties": {"repobilityId": "bc64d90cc09b6237", "scanner": "scanner-primary", "fingerprint": "bd70e4d6aa8e61c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/enhance-product-image/index.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-c3f3d8a949b01486", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-product-descriptions/index.ts:11"}, "properties": {"repobilityId": "c1517eea8dbfeb57", "scanner": "scanner-primary", "fingerprint": "c3f3d8a949b01486", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-product-descriptions/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-330942570abf1239", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/group-photos-ai/index.ts:25"}, "properties": {"repobilityId": "4768c2f4c0e17a2d", "scanner": "scanner-primary", "fingerprint": "330942570abf1239", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/group-photos-ai/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-6bc8f9d4eb4a43ed", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-listing-description/index.ts:7"}, "properties": {"repobilityId": "526a1c1a3c369026", "scanner": "scanner-primary", "fingerprint": "6bc8f9d4eb4a43ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-listing-description/index.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-8f1c68c98fa1e850", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-ecommerce-hero-queue/index.ts:19"}, "properties": {"repobilityId": "4fa80383f6543b0b", "scanner": "scanner-primary", "fingerprint": "8f1c68c98fa1e850", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/process-ecommerce-hero-queue/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-730a89a191a0b4b2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/product-learn-ai/index.ts:17"}, "properties": {"repobilityId": "5f75409d0b702985", "scanner": "scanner-primary", "fingerprint": "730a89a191a0b4b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/product-learn-ai/index.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-f4c41aae16b1a26d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-to-cloudinary/index.ts:13"}, "properties": {"repobilityId": "7692e5ca3a28959d", "scanner": "scanner-primary", "fingerprint": "f4c41aae16b1a26d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/upload-to-cloudinary/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-70d3a303e5448f24", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/cors.ts:2"}, "properties": {"repobilityId": "7c8e268f4e944077", "scanner": "scanner-primary", "fingerprint": "70d3a303e5448f24", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/cors.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-f36756e4816e3f59", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:95"}, "properties": {"repobilityId": "33f10636e53b4298", "scanner": "scanner-primary", "fingerprint": "f36756e4816e3f59", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/chart.tsx"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-b79b1111926cf664", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/deep-research-report.tsx:87"}, "properties": {"repobilityId": "13c627168772c9cf", "scanner": "scanner-primary", "fingerprint": "b79b1111926cf664", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/genie/deep-research-report.tsx"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-044f6d297813bf85", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/genie-panel.tsx:422"}, "properties": {"repobilityId": "16747c5f3c3a6d5d", "scanner": "scanner-primary", "fingerprint": "044f6d297813bf85", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/genie/genie-panel.tsx"}, "region": {"startLine": 422}}}]}, {"ruleId": "scanner-e1475dbb252d8a0f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/genie/product-genie-panel.tsx:216"}, "properties": {"repobilityId": "e3d45976521b4ee5", "scanner": "scanner-primary", "fingerprint": "e1475dbb252d8a0f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/genie/product-genie-panel.tsx"}, "region": {"startLine": 216}}}]}, {"ruleId": "scanner-f3cd7b62d26d59e5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/json-ld.tsx:15"}, "properties": {"repobilityId": "66802a6a4855f316", "scanner": "scanner-primary", "fingerprint": "f3cd7b62d26d59e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/seo/json-ld.tsx"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-b2e781147f5be4c9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/settings/store/homev2/homev2-chat.tsx:558"}, "properties": {"repobilityId": "ff2f308edbdf3b2b", "scanner": "scanner-primary", "fingerprint": "b2e781147f5be4c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/settings/store/homev2/homev2-chat.tsx"}, "region": {"startLine": 558}}}]}, {"ruleId": "scanner-388f440afde5e691", "level": "error", "message": {"text": "Possible secret in src/app/api/sms/send/route.ts"}, "properties": {"repobilityId": "efaefc4f7d7bf52e", "scanner": "scanner-primary", "fingerprint": "388f440afde5e691", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/sms/send/route.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-2e98a275dda7e22c", "level": "note", "message": {"text": "Very large file: scripts/test-genie-orchestration.ts (1483 lines)"}, "properties": {"repobilityId": "50b872e5fe70f158", "scanner": "scanner-primary", "fingerprint": "2e98a275dda7e22c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1c499f6c5e7471a4", "level": "note", "message": {"text": "Very large file: src/components/settings/store-analytics-manager.tsx (1821 lines)"}, "properties": {"repobilityId": "cb116ff70042d109", "scanner": "scanner-primary", "fingerprint": "1c499f6c5e7471a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-87c690cd937c7d2c", "level": "note", "message": {"text": "Very large file: src/components/settings/store-online-products-manager.tsx (1439 lines)"}, "properties": {"repobilityId": "11bf723b83dc9393", "scanner": "scanner-primary", "fingerprint": "87c690cd937c7d2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e7648d2f29457b6d", "level": "note", "message": {"text": "Very large file: src/components/settings/store-online-products-csv-panel.tsx (1553 lines)"}, "properties": {"repobilityId": "ef51bbd5f4c60269", "scanner": "scanner-primary", "fingerprint": "e7648d2f29457b6d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6a859c6c892652b0", "level": "note", "message": {"text": "Very large file: src/components/settings/store-categories-manager.tsx (2121 lines)"}, "properties": {"repobilityId": "cb401cf2f8649dfd", "scanner": "scanner-primary", "fingerprint": "6a859c6c892652b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8c58b83b963cc84f", "level": "note", "message": {"text": "Very large file: src/components/settings/store-homepage-manager.tsx (1323 lines)"}, "properties": {"repobilityId": "bd43b8e7a65cd741", "scanner": "scanner-primary", "fingerprint": "8c58b83b963cc84f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-22e5b8a3194c1332", "level": "note", "message": {"text": "Very large file: src/components/marketplace/store-profile/store-profile-view.tsx (1989 lines)"}, "properties": {"repobilityId": "d1c512681217209f", "scanner": "scanner-primary", "fingerprint": "22e5b8a3194c1332", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7b53f080d2743355", "level": "note", "message": {"text": "Very large file: src/components/marketplace/store-profile/store-home-tab.tsx (1590 lines)"}, "properties": {"repobilityId": "47c3da1009e90c30", "scanner": "scanner-primary", "fingerprint": "7b53f080d2743355", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d9ac4f80ee9a1149", "level": "note", "message": {"text": "Very large file: src/components/marketplace/sell/bulk-upload-sheet.tsx (2096 lines)"}, "properties": {"repobilityId": "3d3f3f6fdc965f71", "scanner": "scanner-primary", "fingerprint": "d9ac4f80ee9a1149", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9cc9d59dd3038fe1", "level": "note", "message": {"text": "Very large file: src/components/marketplace/sell/step-1-item-type.tsx (2216 lines)"}, "properties": {"repobilityId": "44cbbbffbaaa462c", "scanner": "scanner-primary", "fingerprint": "9cc9d59dd3038fe1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9beece55e4c7c236", "level": "note", "message": {"text": "Very large file: src/components/marketplace/sell/sell-wizard.tsx (1752 lines)"}, "properties": {"repobilityId": "c89701bfc0cf2962", "scanner": "scanner-primary", "fingerprint": "9beece55e4c7c236", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3c8c393efa6f3baa", "level": "note", "message": {"text": "Very large file: src/components/admin/image-qa-auto-panel.tsx (1175 lines)"}, "properties": {"repobilityId": "f81699841ad662b4", "scanner": "scanner-primary", "fingerprint": "3c8c393efa6f3baa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a59bc16ade041e2", "level": "note", "message": {"text": "Very large file: src/components/genie/genie-panel.tsx (1538 lines)"}, "properties": {"repobilityId": "620ed627983b84af", "scanner": "scanner-primary", "fingerprint": "0a59bc16ade041e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-04416179fe803140", "level": "note", "message": {"text": "Very large file: src/components/optimize/catalogue-optimise-modal.tsx (3410 lines)"}, "properties": {"repobilityId": "e67f8465a823bbe9", "scanner": "scanner-primary", "fingerprint": "04416179fe803140", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-14c9c5d5ec14f526", "level": "note", "message": {"text": "Very large file: src/components/optimize/bulk-optimise-workspace.tsx (2108 lines)"}, "properties": {"repobilityId": "04b830a6c878227a", "scanner": "scanner-primary", "fingerprint": "14c9c5d5ec14f526", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dd44767ee2338d9f", "level": "note", "message": {"text": "Very large file: src/components/products/edit-product-panel.tsx (1666 lines)"}, "properties": {"repobilityId": "c5d89483a7f4d3bf", "scanner": "scanner-primary", "fingerprint": "dd44767ee2338d9f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-290481243692158b", "level": "note", "message": {"text": "Very large file: src/app/settings/purchases/page.tsx (4368 lines)"}, "properties": {"repobilityId": "841ceb314ddcaa63", "scanner": "scanner-primary", "fingerprint": "290481243692158b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-661dd7f90fab14a1", "level": "note", "message": {"text": "Very large file: src/app/settings/store/homev2/homev2-chat.tsx (1968 lines)"}, "properties": {"repobilityId": "083b598685ab3057", "scanner": "scanner-primary", "fingerprint": "661dd7f90fab14a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-806ec701539520fa", "level": "note", "message": {"text": "Very large file: src/app/test-cards/page.tsx (1693 lines)"}, "properties": {"repobilityId": "e041660b7178969e", "scanner": "scanner-primary", "fingerprint": "806ec701539520fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d60500793aee7cb7", "level": "note", "message": {"text": "Very large file: src/app/marketplace/marketplace-page-content.tsx (1735 lines)"}, "properties": {"repobilityId": "dab1958c91d821b5", "scanner": "scanner-primary", "fingerprint": "d60500793aee7cb7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b7bdebbf7e6ddb3c", "level": "note", "message": {"text": "Very large file: src/app/api/stripe/webhook/route.ts (1488 lines)"}, "properties": {"repobilityId": "6a1070145b7ccfe0", "scanner": "scanner-primary", "fingerprint": "b7bdebbf7e6ddb3c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1798b3bdfd3aa268", "level": "note", "message": {"text": "Very large file: src/app/test-panels/page.tsx (2299 lines)"}, "properties": {"repobilityId": "61cd5e5bb2581a2d", "scanner": "scanner-primary", "fingerprint": "1798b3bdfd3aa268", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3526b53f8804e499", "level": "note", "message": {"text": "Very large file: src/app/connect-lightspeed/page.tsx (1439 lines)"}, "properties": {"repobilityId": "30a9709f05c25e0e", "scanner": "scanner-primary", "fingerprint": "3526b53f8804e499", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-500287a82a09c878", "level": "note", "message": {"text": "Very large file: src/app/admin/scheduled-uploads/page.tsx (2685 lines)"}, "properties": {"repobilityId": "5cfcdfe1ca3a6092", "scanner": "scanner-primary", "fingerprint": "500287a82a09c878", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-47326fe156abc380", "level": "note", "message": {"text": "Very large file: src/app/admin/ecommerce-hero/page.tsx (3817 lines)"}, "properties": {"repobilityId": "0976099ddbb0f368", "scanner": "scanner-primary", "fingerprint": "47326fe156abc380", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-26be27fbc2ee3e61", "level": "note", "message": {"text": "Very large file: src/app/dev/product-designs/page.tsx (873 lines)"}, "properties": {"repobilityId": "eb51270305ba7e05", "scanner": "scanner-primary", "fingerprint": "26be27fbc2ee3e61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2487649ad4a8784d", "level": "note", "message": {"text": "Very large file: src/app/products/page.tsx (1650 lines)"}, "properties": {"repobilityId": "94413ff2507c2fe3", "scanner": "scanner-primary", "fingerprint": "2487649ad4a8784d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f5f1955dc76e0ccb", "level": "note", "message": {"text": "Very large file: src/lib/constants/help-content.ts (2110 lines)"}, "properties": {"repobilityId": "4845f03069f2bbc9", "scanner": "scanner-primary", "fingerprint": "f5f1955dc76e0ccb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c72a08af238a750e", "level": "note", "message": {"text": "Very large file: src/lib/genie/agent/tools.ts (10585 lines)"}, "properties": {"repobilityId": "d1d4f568cd02a0c1", "scanner": "scanner-primary", "fingerprint": "c72a08af238a750e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-82926de917de7d01", "level": "note", "message": {"text": "Very large file: src/lib/services/lightspeed/lightspeed-client.ts (1757 lines)"}, "properties": {"repobilityId": "67f7d8c42d744fa8", "scanner": "scanner-primary", "fingerprint": "82926de917de7d01", "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": "96d35ad0f665a2d7", "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": "46404bb92e5f14dd", "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": "1b46d52fd95a9252", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "846a17c743593ca1", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "cd6acd59580c5061", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "159b3d47331d1992", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5b85cfca114cdc6d", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "fe6cd7418015ef1f", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "bca0b34d95e7e9f3", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-509dc79e5b58901b", "level": "none", "message": {"text": "Commented-code block (8 lines) in middleware.ts:33"}, "properties": {"repobilityId": "5899c9bc07232b0a", "scanner": "scanner-primary", "fingerprint": "509dc79e5b58901b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6a572480ece0842", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test-lightspeed-stock.js:29"}, "properties": {"repobilityId": "daba6204e9fe4493", "scanner": "scanner-primary", "fingerprint": "b6a572480ece0842", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d387268fefdabde", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-sarah-down-bike.ts:40"}, "properties": {"repobilityId": "55da2d447a9c33ef", "scanner": "scanner-primary", "fingerprint": "7d387268fefdabde", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41097c12db96cf26", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-apple-oauth.mjs:16"}, "properties": {"repobilityId": "ccd993e7fc62160d", "scanner": "scanner-primary", "fingerprint": "41097c12db96cf26", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96b70f0edc757dd9", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/test-yellow-jersey-workorder.ts:319"}, "properties": {"repobilityId": "6a0758a302541ffd", "scanner": "scanner-primary", "fingerprint": "96b70f0edc757dd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-831a63d183bc13fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-nest-phone-lookup.ts:43"}, "properties": {"repobilityId": "0d3b58b4da9bdb95", "scanner": "scanner-primary", "fingerprint": "831a63d183bc13fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d656542d37eb5dcb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-google-oauth.mjs:33"}, "properties": {"repobilityId": "2fd6860f4489441f", "scanner": "scanner-primary", "fingerprint": "d656542d37eb5dcb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8a3a89ae5b7eeae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/refresh-lightspeed-tokens/index.ts:151"}, "properties": {"repobilityId": "4ecf03abf2cfdc0a", "scanner": "scanner-primary", "fingerprint": "d8a3a89ae5b7eeae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-790e85d72e43a075", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-lightspeed-inventory/index.ts:156"}, "properties": {"repobilityId": "2f55a9f642ae9865", "scanner": "scanner-primary", "fingerprint": "790e85d72e43a075", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-57402d5e05f95d6c", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-message-notification/index.ts:1"}, "properties": {"repobilityId": "1ad96f29ee15a031", "scanner": "scanner-primary", "fingerprint": "57402d5e05f95d6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9262a30cc2aec53e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-product-images/index.ts:49"}, "properties": {"repobilityId": "795f68b23c622653", "scanner": "scanner-primary", "fingerprint": "9262a30cc2aec53e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84307a717666f540", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/process-scheduled-listings/index.ts:4"}, "properties": {"repobilityId": "4daadf188b5a64ba", "scanner": "scanner-primary", "fingerprint": "84307a717666f540", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-523477d3eee23628", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/send-welcome-email/index.ts:1"}, "properties": {"repobilityId": "8725b9a88266d58b", "scanner": "scanner-primary", "fingerprint": "523477d3eee23628", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98098e6f8cdb5bdf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-youtube-videos/index.ts:46"}, "properties": {"repobilityId": "75095794030fb610", "scanner": "scanner-primary", "fingerprint": "98098e6f8cdb5bdf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db14a817d5be7fc5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/bulk-analyze-listings/index.ts:183"}, "properties": {"repobilityId": "48af15691b9a684c", "scanner": "scanner-primary", "fingerprint": "db14a817d5be7fc5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca1795085947ec64", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/clean-product-names/index.ts:6"}, "properties": {"repobilityId": "4829f27a27f03053", "scanner": "scanner-primary", "fingerprint": "ca1795085947ec64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac684dafc5f4c806", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/download-image/index.ts:10"}, "properties": {"repobilityId": "1c9cc73570df2c97", "scanner": "scanner-primary", "fingerprint": "ac684dafc5f4c806", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5b6baad01d446fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/download-image/index.ts:55"}, "properties": {"repobilityId": "4a1790b660f16bf8", "scanner": "scanner-primary", "fingerprint": "a5b6baad01d446fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd9080846ae59b9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-ai-expert/index.ts:122"}, "properties": {"repobilityId": "2eb17e9c3da1e6e7", "scanner": "scanner-primary", "fingerprint": "bd9080846ae59b9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb4a20011cd27601", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/curate-canonical-images/index.ts:1"}, "properties": {"repobilityId": "363243113f55f61c", "scanner": "scanner-primary", "fingerprint": "fb4a20011cd27601", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1b2d4dba6762ffb", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/migrate-images-to-cloudinary/index.ts:10"}, "properties": {"repobilityId": "6cb21258b0d02bda", "scanner": "scanner-primary", "fingerprint": "b1b2d4dba6762ffb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82dd8fddcacef93f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/migrate-images-to-cloudinary/index.ts:317"}, "properties": {"repobilityId": "af84428ec4aa2db8", "scanner": "scanner-primary", "fingerprint": "82dd8fddcacef93f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dde823accda2b12f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/analyze-listing-ai/index.ts:267"}, "properties": {"repobilityId": "17c8922720348a0f", "scanner": "scanner-primary", "fingerprint": "dde823accda2b12f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af1f5dcccc2e94e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/enhance-product-image/index.ts:11"}, "properties": {"repobilityId": "56cddf2c636f70ad", "scanner": "scanner-primary", "fingerprint": "af1f5dcccc2e94e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d233832ee43577b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/enhance-product-image/index.ts:170"}, "properties": {"repobilityId": "2c9a2d00a72944fc", "scanner": "scanner-primary", "fingerprint": "d233832ee43577b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c02733f6f4e695e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/generate-product-descriptions/index.ts:1"}, "properties": {"repobilityId": "a73e41ff9f72a85c", "scanner": "scanner-primary", "fingerprint": "c02733f6f4e695e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1783d1315667f7e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/update-inventory-stock/index.ts:101"}, "properties": {"repobilityId": "9d6fee97830bb8a5", "scanner": "scanner-primary", "fingerprint": "1783d1315667f7e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5262fc92a517f40", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/group-photos-ai/index.ts:179"}, "properties": {"repobilityId": "d64898f0d570ed28", "scanner": "scanner-primary", "fingerprint": "e5262fc92a517f40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd6166608b37ef40", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-offer-notification/index.ts:1"}, "properties": {"repobilityId": "25b9c97328866ba3", "scanner": "scanner-primary", "fingerprint": "fd6166608b37ef40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-599c8c52ca76e158", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-listing-description/index.ts:122"}, "properties": {"repobilityId": "c6fd3d72cc51b63d", "scanner": "scanner-primary", "fingerprint": "599c8c52ca76e158", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8dcd9da0372942cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/process-ecommerce-hero-queue/index.ts:12"}, "properties": {"repobilityId": "0c6a5059b127816f", "scanner": "scanner-primary", "fingerprint": "8dcd9da0372942cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bac3988812654d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/process-ecommerce-hero-queue/index.ts:387"}, "properties": {"repobilityId": "27cf15c85c086ab2", "scanner": "scanner-primary", "fingerprint": "8bac3988812654d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c7732dfc58dd6e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/product-learn-ai/index.ts:152"}, "properties": {"repobilityId": "2d0b57a7460adc3b", "scanner": "scanner-primary", "fingerprint": "7c7732dfc58dd6e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bef36479a8ba8d44", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/process-ai-auto-approve-queue/index.ts:1"}, "properties": {"repobilityId": "d93ba5be280b396e", "scanner": "scanner-primary", "fingerprint": "bef36479a8ba8d44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad67a544d269e6cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-purchase-notification/index.ts:1"}, "properties": {"repobilityId": "182a293779b79b05", "scanner": "scanner-primary", "fingerprint": "ad67a544d269e6cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-970d37af8b14df42", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/upload-to-cloudinary/index.ts:6"}, "properties": {"repobilityId": "897a6ee6dd6fe1d3", "scanner": "scanner-primary", "fingerprint": "970d37af8b14df42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0410ca64e7b9500b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/upload-to-cloudinary/index.ts:118"}, "properties": {"repobilityId": "02aa50294a54f9d0", "scanner": "scanner-primary", "fingerprint": "0410ca64e7b9500b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eab5d1781a3a640d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-all-lightspeed-products/index.ts:93"}, "properties": {"repobilityId": "6061de19f9afc169", "scanner": "scanner-primary", "fingerprint": "eab5d1781a3a640d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9b9bb25260981ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/ecommerce-hero-openai.ts:151"}, "properties": {"repobilityId": "15c611588781c50f", "scanner": "scanner-primary", "fingerprint": "f9b9bb25260981ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95c4465908978497", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/openai-client.ts:1"}, "properties": {"repobilityId": "438e31619b064c22", "scanner": "scanner-primary", "fingerprint": "95c4465908978497", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3072c4698e87cdb8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/openai-client.ts:248"}, "properties": {"repobilityId": "38d2f367f3e61e1b", "scanner": "scanner-primary", "fingerprint": "3072c4698e87cdb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bcd52130d1b6ec8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/cloudinary-uploader.ts:114"}, "properties": {"repobilityId": "5e7564d3e49f1cb0", "scanner": "scanner-primary", "fingerprint": "0bcd52130d1b6ec8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c66bd3acf4cef2e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/homev2-smart-suggestions.tsx:41"}, "properties": {"repobilityId": "2c2f150d830dda71", "scanner": "scanner-primary", "fingerprint": "c66bd3acf4cef2e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-902478a5f46785d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-nest-messages-panel.tsx:275"}, "properties": {"repobilityId": "af547109128a8df4", "scanner": "scanner-primary", "fingerprint": "902478a5f46785d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b9d5b966cfd1ae3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/settings/store-sections-manager.tsx:45"}, "properties": {"repobilityId": "c2b57d35dd20b133", "scanner": "scanner-primary", "fingerprint": "5b9d5b966cfd1ae3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d66d6b5816c76c26", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-sections-manager.tsx:173"}, "properties": {"repobilityId": "bebf7caf0735be40", "scanner": "scanner-primary", "fingerprint": "d66d6b5816c76c26", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53414f78f5d08c92", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-message-templates-bento.tsx:20"}, "properties": {"repobilityId": "246c3e01b87ab823", "scanner": "scanner-primary", "fingerprint": "53414f78f5d08c92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b906cddda3babbaf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-online-products-manager.tsx:897"}, "properties": {"repobilityId": "62bff4f98e69ea98", "scanner": "scanner-primary", "fingerprint": "b906cddda3babbaf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20f01aa6da20bc91", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/settings/store-services-manager.tsx:49"}, "properties": {"repobilityId": "15e278cd0c8ec825", "scanner": "scanner-primary", "fingerprint": "20f01aa6da20bc91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1eb1e9acc546119d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-services-manager.tsx:276"}, "properties": {"repobilityId": "5a16420502c54db3", "scanner": "scanner-primary", "fingerprint": "1eb1e9acc546119d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-daa4da04a9915188", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-pickup-suggestion-ui.tsx:44"}, "properties": {"repobilityId": "008a338e42b4ea13", "scanner": "scanner-primary", "fingerprint": "daa4da04a9915188", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6dcd0866a3ba53e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-rentals-manager.tsx:250"}, "properties": {"repobilityId": "ee6fb549e5276d59", "scanner": "scanner-primary", "fingerprint": "6dcd0866a3ba53e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-513d85a169765b12", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-category-display-manager.tsx:80"}, "properties": {"repobilityId": "6c1aa75b2349c7cb", "scanner": "scanner-primary", "fingerprint": "513d85a169765b12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-633a96c3b505fd24", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-online-products-csv-panel.tsx:243"}, "properties": {"repobilityId": "1dc3677ae1489494", "scanner": "scanner-primary", "fingerprint": "633a96c3b505fd24", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a4ea94183ad0e8a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-auto-service-panel.tsx:66"}, "properties": {"repobilityId": "bd45ce6dd09ef22d", "scanner": "scanner-primary", "fingerprint": "9a4ea94183ad0e8a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81c4b3e6e39378ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/store-categories-manager.tsx:446"}, "properties": {"repobilityId": "c7fdc483f40c5bab", "scanner": "scanner-primary", "fingerprint": "81c4b3e6e39378ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c23576c1ec39e852", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/nest-pickup-suggestions-dropdown.tsx:37"}, "properties": {"repobilityId": "49f1cdcf4b8c5550", "scanner": "scanner-primary", "fingerprint": "c23576c1ec39e852", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ea718a4c8e7f4da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/customer-inquiries/use-unified-inbox-controller.ts:133"}, "properties": {"repobilityId": "f07fe87e24aecace", "scanner": "scanner-primary", "fingerprint": "0ea718a4c8e7f4da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f22cafb658ee3568", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/customer-inquiries/inquiry-slide-panel.tsx:24"}, "properties": {"repobilityId": "7ca340d0f10b1b54", "scanner": "scanner-primary", "fingerprint": "f22cafb658ee3568", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-90fc73a307f5269c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/layout/conditional-layout.tsx:8"}, "properties": {"repobilityId": "872a630f2d40e27b", "scanner": "scanner-primary", "fingerprint": "90fc73a307f5269c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72e0c9d7c4a92375", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/layout/notifications-dropdown.tsx:1"}, "properties": {"repobilityId": "a436eecb9a469a02", "scanner": "scanner-primary", "fingerprint": "72e0c9d7c4a92375", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16a0befc04e6015f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/marketplace/space-navigator.tsx:11"}, "properties": {"repobilityId": "5fb1f8f170e35a95", "scanner": "scanner-primary", "fingerprint": "16a0befc04e6015f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4e005aa491dd1a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/instant-search.tsx:435"}, "properties": {"repobilityId": "73349ea6052c0b4e", "scanner": "scanner-primary", "fingerprint": "c4e005aa491dd1a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d7fb26c7708dfe85", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/advanced-category-filter.tsx:25"}, "properties": {"repobilityId": "3ce0f0d8fafa606c", "scanner": "scanner-primary", "fingerprint": "d7fb26c7708dfe85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0bcf65696b6a530", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-optimize-drawer.tsx:159"}, "properties": {"repobilityId": "41247f842c1a0b83", "scanner": "scanner-primary", "fingerprint": "d0bcf65696b6a530", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fbdb0f047445162f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-inquiry-button.tsx:155"}, "properties": {"repobilityId": "7c94e74df421195b", "scanner": "scanner-primary", "fingerprint": "fbdb0f047445162f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1b15083fa1f90ebd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/bike-stores-picker.tsx:53"}, "properties": {"repobilityId": "a9c3ec0f1875e4c1", "scanner": "scanner-primary", "fingerprint": "1b15083fa1f90ebd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6362a41040b593dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/checkout-sheet.tsx:252"}, "properties": {"repobilityId": "efa46eb6f5c91946", "scanner": "scanner-primary", "fingerprint": "6362a41040b593dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bf8a970971351a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/unified-filter-bar.tsx:22"}, "properties": {"repobilityId": "f8b4dbb1ade101f4", "scanner": "scanner-primary", "fingerprint": "3bf8a970971351a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e5da62b822565ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-search-bar.tsx:10"}, "properties": {"repobilityId": "0acd23b60d15c7e9", "scanner": "scanner-primary", "fingerprint": "5e5da62b822565ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29a40bf0cbdefcb4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/cart-button.tsx:3"}, "properties": {"repobilityId": "ab768f90c19ee9e9", "scanner": "scanner-primary", "fingerprint": "29a40bf0cbdefcb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15eb6a8428c4acfb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/browse-filters-toolbar.tsx:122"}, "properties": {"repobilityId": "0ccdc5ef4ba8c9fb", "scanner": "scanner-primary", "fingerprint": "15eb6a8428c4acfb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-93205429acea84b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/image-discovery-modal.tsx:200"}, "properties": {"repobilityId": "35233390b5e4d212", "scanner": "scanner-primary", "fingerprint": "93205429acea84b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-23e2566763ea4c28", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/edit-product-drawer.tsx:64"}, "properties": {"repobilityId": "a771e281ccab32fa", "scanner": "scanner-primary", "fingerprint": "23e2566763ea4c28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-639fbeca7b85659b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-category-pills.tsx:7"}, "properties": {"repobilityId": "31a3f2a496582bbb", "scanner": "scanner-primary", "fingerprint": "639fbeca7b85659b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19237e70e2d0fa10", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/marketplace/buy-now-button.tsx:1"}, "properties": {"repobilityId": "dc7a92f81df36be7", "scanner": "scanner-primary", "fingerprint": "19237e70e2d0fa10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-903c01354d03dd90", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/product-card.tsx:23"}, "properties": {"repobilityId": "7517f52697b49743", "scanner": "scanner-primary", "fingerprint": "903c01354d03dd90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5611a79fa0d8e72", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/listing-type-filter.tsx:7"}, "properties": {"repobilityId": "f59e2b0c4797c65b", "scanner": "scanner-primary", "fingerprint": "e5611a79fa0d8e72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d0134e6582825ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/advanced-filters.tsx:29"}, "properties": {"repobilityId": "c12c6a1745e9faa6", "scanner": "scanner-primary", "fingerprint": "4d0134e6582825ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35095845c41a3873", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/marketplace/cascading-category-filter.tsx:9"}, "properties": {"repobilityId": "7fdc97f2dbfa0beb", "scanner": "scanner-primary", "fingerprint": "35095845c41a3873", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d83b8ed34316cedf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/cascading-category-filter.tsx:28"}, "properties": {"repobilityId": "ed42f08c31f19096", "scanner": "scanner-primary", "fingerprint": "d83b8ed34316cedf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7527f305ee0a6e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/uber-delivery-promo-banner.tsx:9"}, "properties": {"repobilityId": "993eb6ea18f23c3f", "scanner": "scanner-primary", "fingerprint": "b7527f305ee0a6e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4e73650da3dbf4e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/marketplace/floating-upload-bar.tsx:10"}, "properties": {"repobilityId": "afa5fbe043c8ffa9", "scanner": "scanner-primary", "fingerprint": "e4e73650da3dbf4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35543f4262e00136", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-filter-pills.tsx:8"}, "properties": {"repobilityId": "e428bbc57f4fc4ac", "scanner": "scanner-primary", "fingerprint": "35543f4262e00136", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b9cb52b09629d5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/first-upload-promo-banner.tsx:8"}, "properties": {"repobilityId": "95c9a523f62b09ac", "scanner": "scanner-primary", "fingerprint": "0b9cb52b09629d5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7db229a44701b28d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/view-mode-pills.tsx:7"}, "properties": {"repobilityId": "40fa18101421239b", "scanner": "scanner-primary", "fingerprint": "7db229a44701b28d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1a47b7a32062725", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/marketplace/cart-drawer.tsx:3"}, "properties": {"repobilityId": "47ad0c66c262d21a", "scanner": "scanner-primary", "fingerprint": "f1a47b7a32062725", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0da5e36f0306ec8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/cart-drawer.tsx:749"}, "properties": {"repobilityId": "1b361e6caa4034c3", "scanner": "scanner-primary", "fingerprint": "d0da5e36f0306ec8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62027e6c1e9d1922", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/split-search-results.tsx:160"}, "properties": {"repobilityId": "8b802f14a5b71a22", "scanner": "scanner-primary", "fingerprint": "62027e6c1e9d1922", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-532471c4d90b4975", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/marketplace/add-to-cart-button.tsx:3"}, "properties": {"repobilityId": "5015a4f3ec444faf", "scanner": "scanner-primary", "fingerprint": "532471c4d90b4975", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfaed285372501ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/store-profile/rentals-section.tsx:228"}, "properties": {"repobilityId": "870bcd340d21bc81", "scanner": "scanner-primary", "fingerprint": "dfaed285372501ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec82142b82b29438", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-profile/store-profile-view.tsx:62"}, "properties": {"repobilityId": "fc2f4ce62a8a8d6b", "scanner": "scanner-primary", "fingerprint": "ec82142b82b29438", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-375d0f96097a0e2a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/store-profile/store-profile-view.tsx:537"}, "properties": {"repobilityId": "85ffc072a9c33d42", "scanner": "scanner-primary", "fingerprint": "375d0f96097a0e2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf1a8dc1018e6cd2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/marketplace/store-profile/services-section.tsx:8"}, "properties": {"repobilityId": "c5535f7f70c34a87", "scanner": "scanner-primary", "fingerprint": "cf1a8dc1018e6cd2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d29d5f29a48cba0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/store-profile/store-home-tab.tsx:37"}, "properties": {"repobilityId": "8de5f5299f895760", "scanner": "scanner-primary", "fingerprint": "d29d5f29a48cba0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e56176b85c3dffc0", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/marketplace/product-detail/enhanced-image-gallery.tsx:8"}, "properties": {"repobilityId": "3fc6ea02152c4001", "scanner": "scanner-primary", "fingerprint": "e56176b85c3dffc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8a8df1e893a64ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/product-detail/similar-products-carousel.tsx:44"}, "properties": {"repobilityId": "97776e81af1b576b", "scanner": "scanner-primary", "fingerprint": "e8a8df1e893a64ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c2fe5050ef3972e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-photo-grouping-step.tsx:73"}, "properties": {"repobilityId": "72c7c99dc3ef77aa", "scanner": "scanner-primary", "fingerprint": "1c2fe5050ef3972e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3999930dc058a97f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/marketplace/sell/smart-upload-modal.tsx:22"}, "properties": {"repobilityId": "b73453014e67afd0", "scanner": "scanner-primary", "fingerprint": "3999930dc058a97f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8af5f2be98d82522", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/sell/upload-method-choice.tsx:15"}, "properties": {"repobilityId": "32c468f44eadd2de", "scanner": "scanner-primary", "fingerprint": "8af5f2be98d82522", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d38c6e58fad454a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/marketplace/sell/bulk-upload-sheet.tsx:45"}, "properties": {"repobilityId": "7c34dadbf19391b7", "scanner": "scanner-primary", "fingerprint": "d38c6e58fad454a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7df02f5ec72f100", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-upload-sheet.tsx:365"}, "properties": {"repobilityId": "d4c945f8e8f40817", "scanner": "scanner-primary", "fingerprint": "d7df02f5ec72f100", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a795fbb13187b7a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/photo-upload-smart.tsx:66"}, "properties": {"repobilityId": "06abc931283e513a", "scanner": "scanner-primary", "fingerprint": "8a795fbb13187b7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6545c3e39b3317ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/smart-upload-flow.tsx:57"}, "properties": {"repobilityId": "7e52717f9a8a4d4c", "scanner": "scanner-primary", "fingerprint": "6545c3e39b3317ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c750837f4d2e138", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-upload-flow.tsx:448"}, "properties": {"repobilityId": "5e3238fdd02d44ba", "scanner": "scanner-primary", "fingerprint": "8c750837f4d2e138", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01adc79d0a1b6bf4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-7-photos.tsx:100"}, "properties": {"repobilityId": "5e48e4c880744c8b", "scanner": "scanner-primary", "fingerprint": "01adc79d0a1b6bf4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ccd74f4f5d10b324", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketplace/sell/bulk-product-carousel.tsx:9"}, "properties": {"repobilityId": "fcef4be1d045412a", "scanner": "scanner-primary", "fingerprint": "ccd74f4f5d10b324", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecba9f6867a682cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-1-item-type.tsx:728"}, "properties": {"repobilityId": "64682c71f8fb6f8b", "scanner": "scanner-primary", "fingerprint": "ecba9f6867a682cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bddb9517cb95d1f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/sell-wizard.tsx:245"}, "properties": {"repobilityId": "f3b8bb9495c34221", "scanner": "scanner-primary", "fingerprint": "3bddb9517cb95d1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a573b7e0a3e4ec8e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/step-4-photos.tsx:100"}, "properties": {"repobilityId": "0e7d3e3ea6ab0743", "scanner": "scanner-primary", "fingerprint": "a573b7e0a3e4ec8e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c813ee4bf93cd0bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/marketplace/sell/bulk-photo-upload-step.tsx:164"}, "properties": {"repobilityId": "9c23bfe842d4bc03", "scanner": "scanner-primary", "fingerprint": "c813ee4bf93cd0bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a63c9e09134155f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/marketplace/for-you/for-you-carousel-row.tsx:24"}, "properties": {"repobilityId": "d51a94b180433f5b", "scanner": "scanner-primary", "fingerprint": "9a63c9e09134155f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a85d3d17f6931be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/auth/auth-card.tsx:173"}, "properties": {"repobilityId": "cc662963985af547", "scanner": "scanner-primary", "fingerprint": "8a85d3d17f6931be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fcaaaa26152573b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/optimize-jobs-provider.tsx:381"}, "properties": {"repobilityId": "7e13e7bdd7d02513", "scanner": "scanner-primary", "fingerprint": "fcaaaa26152573b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-efce9bf6924f37ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/genie-jobs-provider.tsx:341"}, "properties": {"repobilityId": "bafd0a192317ced7", "scanner": "scanner-primary", "fingerprint": "efce9bf6924f37ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a85c1a2d1edada85", "level": "note", "message": {"text": "Legacy-named symbol `yj_cart_v1` in src/components/providers/cart-provider.tsx:18"}, "properties": {"repobilityId": "3ff349e9c7ba5541", "scanner": "scanner-primary", "fingerprint": "a85c1a2d1edada85", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-06aeae8bae9f2e96", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/providers/cart-provider.tsx:3"}, "properties": {"repobilityId": "b339832bf4014f28", "scanner": "scanner-primary", "fingerprint": "06aeae8bae9f2e96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24258c7fe355a772", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/providers/upload-provider.tsx:8"}, "properties": {"repobilityId": "1bf9a6e7df446cda", "scanner": "scanner-primary", "fingerprint": "24258c7fe355a772", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da0fcb93a211e92f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/providers/upload-provider.tsx:232"}, "properties": {"repobilityId": "9b8ed6e4f49c6550", "scanner": "scanner-primary", "fingerprint": "da0fcb93a211e92f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5efb576480713f07", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/providers/stripe-elements-provider.tsx:8"}, "properties": {"repobilityId": "b6d99313773bb049", "scanner": "scanner-primary", "fingerprint": "5efb576480713f07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc529b947ed54ffd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/providers/order-notifications-provider.tsx:1"}, "properties": {"repobilityId": "81b1bba6e856a52e", "scanner": "scanner-primary", "fingerprint": "fc529b947ed54ffd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0346e7e11bb17d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/image-qa-auto-panel.tsx:257"}, "properties": {"repobilityId": "0fe62772da50bca3", "scanner": "scanner-primary", "fingerprint": "a0346e7e11bb17d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3c6426579bb651a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/hero-background-panel.tsx:132"}, "properties": {"repobilityId": "f321a6613187f63b", "scanner": "scanner-primary", "fingerprint": "c3c6426579bb651a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-100d436317f01632", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/image-qa-speed-panel.tsx:71"}, "properties": {"repobilityId": "5ea294ca5438dde6", "scanner": "scanner-primary", "fingerprint": "100d436317f01632", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d0903a46abbdb9a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/genie/genie-panel.tsx:868"}, "properties": {"repobilityId": "eef1fc53c87e080a", "scanner": "scanner-primary", "fingerprint": "2d0903a46abbdb9a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ceb7592597fddb7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/genie/product-genie-panel.tsx:525"}, "properties": {"repobilityId": "4ae2e6c7506e9850", "scanner": "scanner-primary", "fingerprint": "0ceb7592597fddb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f245c933961b6e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/messages/conversation-list-item.tsx:1"}, "properties": {"repobilityId": "a5694d0ff6dc186e", "scanner": "scanner-primary", "fingerprint": "0f245c933961b6e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ba079a425aafe7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/messages/message-thread.tsx:1"}, "properties": {"repobilityId": "a276f64c30c533fc", "scanner": "scanner-primary", "fingerprint": "6ba079a425aafe7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f2ba2a9e49e7c44", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/offers/pay-offer-button.tsx:1"}, "properties": {"repobilityId": "51c314a53d76fdd8", "scanner": "scanner-primary", "fingerprint": "2f2ba2a9e49e7c44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39fa6d13769a3073", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/photo-queue.tsx:162"}, "properties": {"repobilityId": "0beb4334e716843e", "scanner": "scanner-primary", "fingerprint": "39fa6d13769a3073", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ce5b1a1d3fea5ca6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/catalogue-optimise-modal.tsx:145"}, "properties": {"repobilityId": "d5c0813ef4d73f54", "scanner": "scanner-primary", "fingerprint": "ce5b1a1d3fea5ca6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-897bc5236da7b8c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/bulk-optimise-workspace.tsx:177"}, "properties": {"repobilityId": "4aea4563ee9d79e3", "scanner": "scanner-primary", "fingerprint": "897bc5236da7b8c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c82e71d74efc6632", "level": "note", "message": {"text": "Legacy-named symbol `missing_copy` in src/components/optimize/optimizer-shared.tsx:347"}, "properties": {"repobilityId": "40fe3c61e4b0b8a6", "scanner": "scanner-primary", "fingerprint": "c82e71d74efc6632", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5b529a90623a55b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/optimizer-shared.tsx:436"}, "properties": {"repobilityId": "dc8f24d24530e0a4", "scanner": "scanner-primary", "fingerprint": "5b529a90623a55b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a34cf6f3ed9d4670", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/optimize/variants/variant-group-manager.tsx:75"}, "properties": {"repobilityId": "2e78f632e3bf985b", "scanner": "scanner-primary", "fingerprint": "a34cf6f3ed9d4670", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67280b64c50493c4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/order-help-wizard.tsx:304"}, "properties": {"repobilityId": "952b62997a0e3c3b", "scanner": "scanner-primary", "fingerprint": "67280b64c50493c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ec6e8dfb280378c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/help-step-details.tsx:114"}, "properties": {"repobilityId": "62715ccc1ffa24cf", "scanner": "scanner-primary", "fingerprint": "9ec6e8dfb280378c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65e5a9169d62583f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/products/edit-product-panel.tsx:763"}, "properties": {"repobilityId": "acca18bb69c20b0c", "scanner": "scanner-primary", "fingerprint": "65e5a9169d62583f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d1c3e53162a0c24d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/feedback/floating-tom-feedback-button.tsx:123"}, "properties": {"repobilityId": "31da6560b6706c13", "scanner": "scanner-primary", "fingerprint": "d1c3e53162a0c24d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-928a3aee7d116017", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/page.tsx:5"}, "properties": {"repobilityId": "861edda83051923c", "scanner": "scanner-primary", "fingerprint": "928a3aee7d116017", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-168660ede25986e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/settings/notifications/page.tsx:157"}, "properties": {"repobilityId": "3998845267b1454d", "scanner": "scanner-primary", "fingerprint": "168660ede25986e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-44e796168335d31f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/settings/purchases/page.tsx:2815"}, "properties": {"repobilityId": "324199bf71ea2922", "scanner": "scanner-primary", "fingerprint": "44e796168335d31f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eef85abbd60f7f7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/v2/page.tsx:17"}, "properties": {"repobilityId": "29d1a1aa494dd5be", "scanner": "scanner-primary", "fingerprint": "eef85abbd60f7f7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b3da273a8cefd1e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/v2/_lib/images.ts:7"}, "properties": {"repobilityId": "b24d51688ac3ee10", "scanner": "scanner-primary", "fingerprint": "4b3da273a8cefd1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24ebef9de14cef93", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/v2/_lib/data.ts:12"}, "properties": {"repobilityId": "214195acf66fd6d8", "scanner": "scanner-primary", "fingerprint": "24ebef9de14cef93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-416f9c36911d6861", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/v2/_components/v2-product-card.tsx:8"}, "properties": {"repobilityId": "b60cb89a65c16bb4", "scanner": "scanner-primary", "fingerprint": "416f9c36911d6861", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c181f5a75eeebde2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/v2/_components/v2-header.tsx:4"}, "properties": {"repobilityId": "e66ab5db8b646089", "scanner": "scanner-primary", "fingerprint": "c181f5a75eeebde2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f463bcbcdb46004f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/v2/_components/search-palette.tsx:15"}, "properties": {"repobilityId": "042feef21541706f", "scanner": "scanner-primary", "fingerprint": "f463bcbcdb46004f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2e82ccfc8752b71", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/v2/_components/brand-marquee.tsx:3"}, "properties": {"repobilityId": "405df2b601d5fd2f", "scanner": "scanner-primary", "fingerprint": "b2e82ccfc8752b71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d13abead6e7fa08", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/v2/_components/category-tiles.tsx:6"}, "properties": {"repobilityId": "6cf07bb89efbe29d", "scanner": "scanner-primary", "fingerprint": "0d13abead6e7fa08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c047c32d2bd6a0f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/v2/_components/rail.tsx:7"}, "properties": {"repobilityId": "820b653df4119b88", "scanner": "scanner-primary", "fingerprint": "c047c32d2bd6a0f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b68d005f18c0f5d0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/v2/_components/hero.tsx:8"}, "properties": {"repobilityId": "5058dad09062d1cd", "scanner": "scanner-primary", "fingerprint": "b68d005f18c0f5d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-678962ed8d4790c7", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/upload/mobile/[token]/page.tsx:13"}, "properties": {"repobilityId": "da18c24ed83d0512", "scanner": "scanner-primary", "fingerprint": "678962ed8d4790c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fde0663e5f76214d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/marketplace/marketplace-page-content.tsx:34"}, "properties": {"repobilityId": "07c3dedc1418e83f", "scanner": "scanner-primary", "fingerprint": "fde0663e5f76214d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d56ab5a7083175c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/marketplace-page-content.tsx:803"}, "properties": {"repobilityId": "b6d623d89fc79bc5", "scanner": "scanner-primary", "fingerprint": "8d56ab5a7083175c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd4515b25fc5d470", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/page-new.tsx:76"}, "properties": {"repobilityId": "14d5c7f64ec947e4", "scanner": "scanner-primary", "fingerprint": "cd4515b25fc5d470", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-788c888731860b02", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/marketplace/sell-redesign/page.tsx:24"}, "properties": {"repobilityId": "bcc0029881911d53", "scanner": "scanner-primary", "fingerprint": "788c888731860b02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcfc5f171d818e4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/marketplace/sell-redesign/_components/services.ts:10"}, "properties": {"repobilityId": "82943910e0f3742e", "scanner": "scanner-primary", "fingerprint": "dcfc5f171d818e4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98145de0144c959b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/sell-redesign/_components/services.ts:32"}, "properties": {"repobilityId": "df66bfb88e23826a", "scanner": "scanner-primary", "fingerprint": "98145de0144c959b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9a76b94d8c19a4b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/marketplace/sell-redesign/_components/data.ts:6"}, "properties": {"repobilityId": "e905e174cc35cdd3", "scanner": "scanner-primary", "fingerprint": "e9a76b94d8c19a4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-842eeff948a7bbd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/marketplace/sell-redesign/_components/ui.tsx:18"}, "properties": {"repobilityId": "e720c7d8f118187c", "scanner": "scanner-primary", "fingerprint": "842eeff948a7bbd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beb2bfece9201720", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/marketplace/product/[productId]/page.tsx:29"}, "properties": {"repobilityId": "e8572dd0fa0abaec", "scanner": "scanner-primary", "fingerprint": "beb2bfece9201720", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b986532fd56f0810", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/marketplace/mobile-prototypes/_components/filter-panel-options.tsx:22"}, "properties": {"repobilityId": "53378d06b37f8a01", "scanner": "scanner-primary", "fingerprint": "b986532fd56f0810", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1cc3358c4f6d5f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/marketplace/mobile-prototypes/_components/list-cta-options.tsx:8"}, "properties": {"repobilityId": "bdf11c6f595f4dbf", "scanner": "scanner-primary", "fingerprint": "e1cc3358c4f6d5f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a2ee2bfd81d01ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/marketplace/sell-prototypes/_components/shared.tsx:13"}, "properties": {"repobilityId": "975f56278ecf3c52", "scanner": "scanner-primary", "fingerprint": "2a2ee2bfd81d01ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-225090ed1fa61837", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/marketplace/store/[storeId]/store-profile-page-client.tsx:17"}, "properties": {"repobilityId": "2ecdb3be630815e4", "scanner": "scanner-primary", "fingerprint": "225090ed1fa61837", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2775bbbc157f2fab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/marketplace/store/[storeId]/store-profile-page-client.tsx:160"}, "properties": {"repobilityId": "cae1280257ec64aa", "scanner": "scanner-primary", "fingerprint": "2775bbbc157f2fab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a282eb2bc501da5b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/notifications/preferences/route.ts:1"}, "properties": {"repobilityId": "bc55ee317a288ffa", "scanner": "scanner-primary", "fingerprint": "a282eb2bc501da5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04291c7629b76f18", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/stores/route.ts:4"}, "properties": {"repobilityId": "4231ef3c96bed068", "scanner": "scanner-primary", "fingerprint": "04291c7629b76f18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9dada0702f992dfd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/stores/filters/route.ts:4"}, "properties": {"repobilityId": "66cac046bd610127", "scanner": "scanner-primary", "fingerprint": "9dada0702f992dfd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1458735db6f5916e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/listings/route.ts:110"}, "properties": {"repobilityId": "b5041b94ea2caf9b", "scanner": "scanner-primary", "fingerprint": "1458735db6f5916e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e28936ddf925bba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/marketplace/listings/process-image/route.ts:57"}, "properties": {"repobilityId": "28a9460869016861", "scanner": "scanner-primary", "fingerprint": "6e28936ddf925bba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-111f5223505a1b63", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/marketplace/bike-specs/preview/route.ts:6"}, "properties": {"repobilityId": "48e18ce11034d48b", "scanner": "scanner-primary", "fingerprint": "111f5223505a1b63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56831e6cf3110966", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/listing-pricing-research/route.ts:7"}, "properties": {"repobilityId": "b920dd05006eec3f", "scanner": "scanner-primary", "fingerprint": "56831e6cf3110966", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6eb95d861f6bc956", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/marketplace/categories/route.ts:7"}, "properties": {"repobilityId": "14e8b13d68967e1b", "scanner": "scanner-primary", "fingerprint": "6eb95d861f6bc956", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffd8cf8e1133b688", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/marketplace/store-categories/route.ts:7"}, "properties": {"repobilityId": "23694668b988c73f", "scanner": "scanner-primary", "fingerprint": "ffd8cf8e1133b688", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09089ea28771243a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/unread-counts/route.ts:1"}, "properties": {"repobilityId": "cd5c60d5a43d245a", "scanner": "scanner-primary", "fingerprint": "09089ea28771243a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07d39557848bc62b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/lightspeed/auth/callback/route.ts:83"}, "properties": {"repobilityId": "5b899b2e25a5e92a", "scanner": "scanner-primary", "fingerprint": "07d39557848bc62b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d53c8eb5a2bd0acc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/lightspeed/continue-sync/route.ts:39"}, "properties": {"repobilityId": "bdd7f72447734f76", "scanner": "scanner-primary", "fingerprint": "d53c8eb5a2bd0acc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5a2b6eb86224fe78", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/database/tables/route.ts:30"}, "properties": {"repobilityId": "e7dc9012f1922c82", "scanner": "scanner-primary", "fingerprint": "5a2b6eb86224fe78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bca37d562bd08e38", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/categorise-all-canonical/route.ts:65"}, "properties": {"repobilityId": "19da312b08c4dc91", "scanner": "scanner-primary", "fingerprint": "bca37d562bd08e38", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b961ebc9dcba6bd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/scheduled-uploads/users/route.ts:4"}, "properties": {"repobilityId": "f800f10744be6c6a", "scanner": "scanner-primary", "fingerprint": "b961ebc9dcba6bd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d15a4c4a4949b547", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/process/route.ts:48"}, "properties": {"repobilityId": "8eecd2b5dad05e5c", "scanner": "scanner-primary", "fingerprint": "d15a4c4a4949b547", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5dbe55a13f9bbb88", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/add-image/route.ts:30"}, "properties": {"repobilityId": "ca4a22eca3355118", "scanner": "scanner-primary", "fingerprint": "5dbe55a13f9bbb88", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2b513e018b4b406", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/set-hero/route.ts:49"}, "properties": {"repobilityId": "94f3d2db381cfd40", "scanner": "scanner-primary", "fingerprint": "c2b513e018b4b406", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-938419385244bea1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ecommerce-hero/search-images/route.ts:51"}, "properties": {"repobilityId": "2cb57f443200e2fb", "scanner": "scanner-primary", "fingerprint": "938419385244bea1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-037586fae75b34d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/enhance-preview/route.ts:55"}, "properties": {"repobilityId": "142d85796320b9ab", "scanner": "scanner-primary", "fingerprint": "037586fae75b34d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5268c6326e9ea13", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/ai-auto-approve/route.ts:60"}, "properties": {"repobilityId": "54de8d5b08208223", "scanner": "scanner-primary", "fingerprint": "a5268c6326e9ea13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65b612704f498cfc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/process-ai-queue/route.ts:36"}, "properties": {"repobilityId": "a2446f70d4bc9813", "scanner": "scanner-primary", "fingerprint": "65b612704f498cfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-789fafb8a7624907", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/studio-hero/route.ts:88"}, "properties": {"repobilityId": "f0d5b557ee85573d", "scanner": "scanner-primary", "fingerprint": "789fafb8a7624907", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2694ea5bba7d5e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/approve-candidates/route.ts:28"}, "properties": {"repobilityId": "9ba02290a33c9f57", "scanner": "scanner-primary", "fingerprint": "d2694ea5bba7d5e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da7dd52917b74135", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/images/download/route.ts:58"}, "properties": {"repobilityId": "841a81a1fdf02d8a", "scanner": "scanner-primary", "fingerprint": "da7dd52917b74135", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bac6014cf8e6619", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/images/products/route.ts:62"}, "properties": {"repobilityId": "31a9e31249016993", "scanner": "scanner-primary", "fingerprint": "0bac6014cf8e6619", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd310931bf073b52", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/images/hero-approve/route.ts:61"}, "properties": {"repobilityId": "5c1e7f110e9926f6", "scanner": "scanner-primary", "fingerprint": "bd310931bf073b52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3afd9ec3e3aee070", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/genie/route.ts:213"}, "properties": {"repobilityId": "1d87fc2fa8ab0bf2", "scanner": "scanner-primary", "fingerprint": "3afd9ec3e3aee070", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2562151ab1cb6c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/messages/conversations/route.ts:1"}, "properties": {"repobilityId": "2aedeeb88ad49665", "scanner": "scanner-primary", "fingerprint": "f2562151ab1cb6c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9512e1662bb9ae0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/release-funds/route.ts:1"}, "properties": {"repobilityId": "45d32fa6ca9b8cb1", "scanner": "scanner-primary", "fingerprint": "a9512e1662bb9ae0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e09e880bdd911ae8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/resume-copy-jobs/route.ts:43"}, "properties": {"repobilityId": "ed270c1bea580c82", "scanner": "scanner-primary", "fingerprint": "e09e880bdd911ae8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3d76149b0e3edbfc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/ecommerce-hero/route.ts:77"}, "properties": {"repobilityId": "e4c19dbcf5f79aa0", "scanner": "scanner-primary", "fingerprint": "3d76149b0e3edbfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87cc8fd884ee5ed7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/offers/route.ts:1"}, "properties": {"repobilityId": "9f289e772802700a", "scanner": "scanner-primary", "fingerprint": "87cc8fd884ee5ed7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f833cc489435528", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/offers/[id]/accept/route.ts:1"}, "properties": {"repobilityId": "14d5a94b7a11dffa", "scanner": "scanner-primary", "fingerprint": "7f833cc489435528", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-651469785905c970", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/offers/[id]/reject/route.ts:1"}, "properties": {"repobilityId": "8adfa224a150783e", "scanner": "scanner-primary", "fingerprint": "651469785905c970", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93c56306db5a70b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/offers/[id]/counter/route.ts:1"}, "properties": {"repobilityId": "600bf8847d8ad094", "scanner": "scanner-primary", "fingerprint": "93c56306db5a70b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53661bd84ca61ebc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/brands/import-logo/route.ts:60"}, "properties": {"repobilityId": "dad22ddb2e7a7379", "scanner": "scanner-primary", "fingerprint": "53661bd84ca61ebc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-808a0102c4ecd3e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/categories/import-logo/route.ts:76"}, "properties": {"repobilityId": "e47969053590dd27", "scanner": "scanner-primary", "fingerprint": "808a0102c4ecd3e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a39291f664b90070", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/store/online-products/create/route.ts:250"}, "properties": {"repobilityId": "f3ef4ac2fef26fb4", "scanner": "scanner-primary", "fingerprint": "a39291f664b90070", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d95e2c7690b7973c", "level": "note", "message": {"text": "Legacy-named symbol `missing_copy` in src/app/api/store/copy-summary/route.ts:36"}, "properties": {"repobilityId": "d8e55807558cba87", "scanner": "scanner-primary", "fingerprint": "d95e2c7690b7973c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a55db860cb8ffb0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/optimize/advance-copy-batch/route.ts:60"}, "properties": {"repobilityId": "643079d56adfac1c", "scanner": "scanner-primary", "fingerprint": "1a55db860cb8ffb0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55bb291bd9dd1403", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/images/discover/route.ts:64"}, "properties": {"repobilityId": "c5c6fdd5c4362af2", "scanner": "scanner-primary", "fingerprint": "55bb291bd9dd1403", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e17d0104df50010", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/mobile-upload/create-session/route.ts:5"}, "properties": {"repobilityId": "334bbcc480caaca0", "scanner": "scanner-primary", "fingerprint": "4e17d0104df50010", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-438686eac68add95", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/mobile-upload/session/[token]/route.ts:4"}, "properties": {"repobilityId": "b5b4a4b47677f684", "scanner": "scanner-primary", "fingerprint": "438686eac68add95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b79e17f96491e394", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/mobile-upload/session/[token]/upload/route.ts:4"}, "properties": {"repobilityId": "9511f252d433b5bf", "scanner": "scanner-primary", "fingerprint": "b79e17f96491e394", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8ebdfb7fd8ef404", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/stripe/connect/create-account/route.ts:1"}, "properties": {"repobilityId": "1d35f6da5a854119", "scanner": "scanner-primary", "fingerprint": "e8ebdfb7fd8ef404", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0fa1321588608c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/stripe/webhook/route.ts:1"}, "properties": {"repobilityId": "592a277c8743e1bb", "scanner": "scanner-primary", "fingerprint": "a0fa1321588608c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d14cc23b5cbbc1b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/stripe/create-checkout/route.ts:1"}, "properties": {"repobilityId": "8f886d1472a1095c", "scanner": "scanner-primary", "fingerprint": "d14cc23b5cbbc1b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c58b7d44a4b54fdc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/stripe/create-payment-intent/route.ts:1"}, "properties": {"repobilityId": "f97296b9e660e5ea", "scanner": "scanner-primary", "fingerprint": "c58b7d44a4b54fdc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5be113fc3c6d992", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/stripe/manual-sync/route.ts:1"}, "properties": {"repobilityId": "515dc8eed808d7eb", "scanner": "scanner-primary", "fingerprint": "c5be113fc3c6d992", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e388e3dbe6cb1033", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/support/tickets/route.ts:1"}, "properties": {"repobilityId": "bb6288a5148e5baa", "scanner": "scanner-primary", "fingerprint": "e388e3dbe6cb1033", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc155d6e91527fab", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/support/tickets/[id]/route.ts:1"}, "properties": {"repobilityId": "8f26270e33bab106", "scanner": "scanner-primary", "fingerprint": "bc155d6e91527fab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dc685cb13fba326", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/support/tickets/[id]/messages/route.ts:1"}, "properties": {"repobilityId": "cf3a975ec6443438", "scanner": "scanner-primary", "fingerprint": "0dc685cb13fba326", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53b72dc2bd2c75cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/[id]/background-remove/route.ts:108"}, "properties": {"repobilityId": "b9f27566c20ee9de", "scanner": "scanner-primary", "fingerprint": "53b72dc2bd2c75cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6797af205d168e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/products/clean-names/route.ts:47"}, "properties": {"repobilityId": "d4d3e74329959e6a", "scanner": "scanner-primary", "fingerprint": "d6797af205d168e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a9ee22bc5b83b20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/sms/send/route.ts:48"}, "properties": {"repobilityId": "2fc7af1fc5f72928", "scanner": "scanner-primary", "fingerprint": "8a9ee22bc5b83b20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b91f06f841488c0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sms/order-confirmation/route.ts:1"}, "properties": {"repobilityId": "fecf68fc7050e790", "scanner": "scanner-primary", "fingerprint": "2b91f06f841488c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87f5dea751b14e0e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/connect-lightspeed/page-new.tsx:150"}, "properties": {"repobilityId": "4d751f4655ad9d45", "scanner": "scanner-primary", "fingerprint": "87f5dea751b14e0e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e4003cf6628acdba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/data-cleaning/page.tsx:107"}, "properties": {"repobilityId": "b1b31fa34b973a90", "scanner": "scanner-primary", "fingerprint": "e4003cf6628acdba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-455307286af7bcb7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/database/page.tsx:282"}, "properties": {"repobilityId": "d5738d4bdc314d9e", "scanner": "scanner-primary", "fingerprint": "455307286af7bcb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ea2f307efaf79218", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/scheduled-uploads/page.tsx:400"}, "properties": {"repobilityId": "e9a8820a08f80bd3", "scanner": "scanner-primary", "fingerprint": "ea2f307efaf79218", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61377c5653060211", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/ecommerce-hero/page.tsx:566"}, "properties": {"repobilityId": "32356f4af60422e8", "scanner": "scanner-primary", "fingerprint": "61377c5653060211", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1e51955b8d51efbb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/instagram-posts/page.tsx:101"}, "properties": {"repobilityId": "b839c7d804d8e834", "scanner": "scanner-primary", "fingerprint": "1e51955b8d51efbb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3650760fe64057e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/messages/page.tsx:1"}, "properties": {"repobilityId": "2517c34c8952749a", "scanner": "scanner-primary", "fingerprint": "f3650760fe64057e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33ea87d67d6f9530", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/dev/product-designs/page.tsx:5"}, "properties": {"repobilityId": "5ea94b9a0ece8384", "scanner": "scanner-primary", "fingerprint": "33ea87d67d6f9530", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cf30730e76b1c74", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/dev/service-cards/page.tsx:5"}, "properties": {"repobilityId": "d640343b9cc7fb22", "scanner": "scanner-primary", "fingerprint": "0cf30730e76b1c74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-398501c3386abeae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/products/page.tsx:454"}, "properties": {"repobilityId": "5ccb267ba9d74a20", "scanner": "scanner-primary", "fingerprint": "398501c3386abeae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98591d6b6f79c6b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/for-you/for-you-content.tsx:30"}, "properties": {"repobilityId": "8bd9f445636163cd", "scanner": "scanner-primary", "fingerprint": "98591d6b6f79c6b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3f75c8a5d305915", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/uber-delivery.ts:224"}, "properties": {"repobilityId": "a49e6b80d25ace80", "scanner": "scanner-primary", "fingerprint": "d3f75c8a5d305915", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e165069b329f3c6a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/missing-brands/client.ts:13"}, "properties": {"repobilityId": "3a6abb0f68d9f02c", "scanner": "scanner-primary", "fingerprint": "e165069b329f3c6a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e45b8f2b381a014c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/types/store.ts:140"}, "properties": {"repobilityId": "2487cf26cfff9806", "scanner": "scanner-primary", "fingerprint": "e45b8f2b381a014c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3f17e6d094743ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/customer-inquiries/unified-inbox-client.ts:17"}, "properties": {"repobilityId": "36c12b00d017457c", "scanner": "scanner-primary", "fingerprint": "e3f17e6d094743ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-324c77e407d8f304", "level": "note", "message": {"text": "Legacy-named symbol `yj_unified_inbox_v1` in src/lib/customer-inquiries/unified-inbox-cache.ts:4"}, "properties": {"repobilityId": "c26d09052437a1b4", "scanner": "scanner-primary", "fingerprint": "324c77e407d8f304", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f37c60e2ffdec658", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/customer-inquiries/client.ts:73"}, "properties": {"repobilityId": "3e4c51927d7893f5", "scanner": "scanner-primary", "fingerprint": "f37c60e2ffdec658", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-431208b455b6ccab", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/ai/detect-product-variants.ts:1"}, "properties": {"repobilityId": "47cca806d88b1eb9", "scanner": "scanner-primary", "fingerprint": "431208b455b6ccab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f4571868611b774", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/ai/discover-bike-specs.ts:19"}, "properties": {"repobilityId": "9eceef58bbaa6038", "scanner": "scanner-primary", "fingerprint": "9f4571868611b774", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-925f81edeafa12c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/utils/facebook-image-handler.ts:4"}, "properties": {"repobilityId": "6d31ff4ba312db03", "scanner": "scanner-primary", "fingerprint": "925f81edeafa12c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46f66e7a890d9d0f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/facebook-image-handler.ts:26"}, "properties": {"repobilityId": "7870ecb52a7f293a", "scanner": "scanner-primary", "fingerprint": "46f66e7a890d9d0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d5e3be9fc74d6b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/cloudinary.ts:216"}, "properties": {"repobilityId": "ed8c61d1b77e8d67", "scanner": "scanner-primary", "fingerprint": "1d5e3be9fc74d6b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20eb39e745c27f67", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/utils/cloudinary-transforms.ts:26"}, "properties": {"repobilityId": "770602a92555eaee", "scanner": "scanner-primary", "fingerprint": "20eb39e745c27f67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd279139c26eb2d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/bikes/bike-spec-serper-images.ts:79"}, "properties": {"repobilityId": "fa61e08aaab41103", "scanner": "scanner-primary", "fingerprint": "fd279139c26eb2d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e83143cc5c5d906", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/admin/image-qa-speed.ts:85"}, "properties": {"repobilityId": "3da7275718fe7836", "scanner": "scanner-primary", "fingerprint": "4e83143cc5c5d906", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fdf4d7f17c7d77b5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/genie/answer-verification.ts:373"}, "properties": {"repobilityId": "bc619fcb8932c6de", "scanner": "scanner-primary", "fingerprint": "fdf4d7f17c7d77b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04f86925ac241d06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/genie/web-image-search.ts:69"}, "properties": {"repobilityId": "87c49f56949f9bc9", "scanner": "scanner-primary", "fingerprint": "04f86925ac241d06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7632f9a5341ab8ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/genie/youtube-video-search.ts:89"}, "properties": {"repobilityId": "8d22b0452b839940", "scanner": "scanner-primary", "fingerprint": "7632f9a5341ab8ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75df5aaf3c31eba6", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/genie/agent/tools.ts:9407"}, "properties": {"repobilityId": "988e3d5fc7931b9d", "scanner": "scanner-primary", "fingerprint": "75df5aaf3c31eba6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c6cc629a913a54b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/genie/agent/execute.ts:317"}, "properties": {"repobilityId": "f30f71c9f5bca5f2", "scanner": "scanner-primary", "fingerprint": "4c6cc629a913a54b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72edba18eecadd3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/genie/deep-research/run-deep-research.ts:1"}, "properties": {"repobilityId": "2a591e005bdca4b5", "scanner": "scanner-primary", "fingerprint": "72edba18eecadd3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6e9df2181d82dae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-listing-form.ts:114"}, "properties": {"repobilityId": "9887b628ca506a96", "scanner": "scanner-primary", "fingerprint": "a6e9df2181d82dae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e946f4152c79f1b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-conversations.ts:1"}, "properties": {"repobilityId": "bb869e3e928866c2", "scanner": "scanner-primary", "fingerprint": "4e946f4152c79f1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a042d632a96eb105", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-conversations.ts:137"}, "properties": {"repobilityId": "1698f0c6f589dea7", "scanner": "scanner-primary", "fingerprint": "a042d632a96eb105", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f2b44a566350d2d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-combined-unread-count.ts:1"}, "properties": {"repobilityId": "de3c13eb754ecf79", "scanner": "scanner-primary", "fingerprint": "9f2b44a566350d2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64a490a81292940e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-notifications.ts:38"}, "properties": {"repobilityId": "6e18603f854f7739", "scanner": "scanner-primary", "fingerprint": "64a490a81292940e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-657afcf9d0e03047", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-conversation.ts:1"}, "properties": {"repobilityId": "f614d72fd9b3475d", "scanner": "scanner-primary", "fingerprint": "657afcf9d0e03047", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44f3a7ed0e129af0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-conversation.ts:375"}, "properties": {"repobilityId": "c9289eabde45c1fc", "scanner": "scanner-primary", "fingerprint": "44f3a7ed0e129af0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81c30c24c87d2848", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-offers.ts:1"}, "properties": {"repobilityId": "b75caa694b814f15", "scanner": "scanner-primary", "fingerprint": "81c30c24c87d2848", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de06fc386b973788", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-offers.ts:71"}, "properties": {"repobilityId": "4d8a26a40b2a6039", "scanner": "scanner-primary", "fingerprint": "de06fc386b973788", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bc4dcc6b3af1f6e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-marketplace-products.ts:60"}, "properties": {"repobilityId": "6fcf8d73a6197be7", "scanner": "scanner-primary", "fingerprint": "0bc4dcc6b3af1f6e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9724f08f7e6df034", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-marketplace-data.ts:66"}, "properties": {"repobilityId": "3d86efbd801925bb", "scanner": "scanner-primary", "fingerprint": "9724f08f7e6df034", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b317c0446a960b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/use-nest-notifications.ts:75"}, "properties": {"repobilityId": "89aef261e09fa39b", "scanner": "scanner-primary", "fingerprint": "0b317c0446a960b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a9f3fcea6c05203d", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/variants/grouping.ts:1"}, "properties": {"repobilityId": "d99abb90134e3353", "scanner": "scanner-primary", "fingerprint": "a9f3fcea6c05203d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59f34a0c3e3264b4", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/variants/normalize.ts:1"}, "properties": {"repobilityId": "302b33d9a6502abe", "scanner": "scanner-primary", "fingerprint": "59f34a0c3e3264b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57feab784b46c264", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/variants/apply-group.ts:1"}, "properties": {"repobilityId": "87febc158b88aabd", "scanner": "scanner-primary", "fingerprint": "57feab784b46c264", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90d04ec4acaf0bc6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/variants/types.ts:1"}, "properties": {"repobilityId": "ada94f20d2c98c9e", "scanner": "scanner-primary", "fingerprint": "90d04ec4acaf0bc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0632b25c80fa9e19", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/variants/prefilter.ts:1"}, "properties": {"repobilityId": "81ee7dc403e379c2", "scanner": "scanner-primary", "fingerprint": "0632b25c80fa9e19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59084394f8a475e3", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/variants/run-detection-job.ts:1"}, "properties": {"repobilityId": "57ebf3c9d0c90014", "scanner": "scanner-primary", "fingerprint": "59084394f8a475e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8d3e4852a938fcb", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/supabase/middleware.ts:82"}, "properties": {"repobilityId": "0ddbbce0409e72e9", "scanner": "scanner-primary", "fingerprint": "f8d3e4852a938fcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fab4ba33e2550be", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/services/cloudinary-overlay.ts:1"}, "properties": {"repobilityId": "2a2a62443927b373", "scanner": "scanner-primary", "fingerprint": "0fab4ba33e2550be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-134d7560e12cb0f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/instagram-client.ts:70"}, "properties": {"repobilityId": "6c99ee38168212ff", "scanner": "scanner-primary", "fingerprint": "134d7560e12cb0f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edc6c01b126a958a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/xero/token-manager.ts:165"}, "properties": {"repobilityId": "a5311b0efbf45838", "scanner": "scanner-primary", "fingerprint": "edc6c01b126a958a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-900336a95309806b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/xero/client.ts:64"}, "properties": {"repobilityId": "fae1797819b30027", "scanner": "scanner-primary", "fingerprint": "900336a95309806b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95444eafab2092b1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/services/lightspeed/variant-matrix.ts:1"}, "properties": {"repobilityId": "6236fd8168ffe6df", "scanner": "scanner-primary", "fingerprint": "95444eafab2092b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3993cdabec2815d9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/services/lightspeed/types.ts:439"}, "properties": {"repobilityId": "8f04d9450d8e47a1", "scanner": "scanner-primary", "fingerprint": "3993cdabec2815d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c323bcfd5034cb3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/deputy/token-manager.ts:154"}, "properties": {"repobilityId": "9cc609035498277e", "scanner": "scanner-primary", "fingerprint": "1c323bcfd5034cb3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b2a6f969242518b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/deputy/client.ts:63"}, "properties": {"repobilityId": "27023317c86e8c5b", "scanner": "scanner-primary", "fingerprint": "5b2a6f969242518b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe21dfd12fe74439", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/services/image-processing/optimizer.ts:1"}, "properties": {"repobilityId": "4c163379505e3530", "scanner": "scanner-primary", "fingerprint": "fe21dfd12fe74439", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05518b43462f964e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/missing-categories/client.ts:13"}, "properties": {"repobilityId": "2f14badfa44207c3", "scanner": "scanner-primary", "fingerprint": "05518b43462f964e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9df1b336f090b22b", "level": "note", "message": {"text": "Legacy-named symbol `yj_nest_workorder_suggestions_v1` in src/lib/nest/workorder-suggestions-cache.ts:9"}, "properties": {"repobilityId": "23a20f1e1d147566", "scanner": "scanner-primary", "fingerprint": "9df1b336f090b22b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e9dec500a1179b95", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nest/messages-client.ts:5"}, "properties": {"repobilityId": "a29646a8ee9c4367", "scanner": "scanner-primary", "fingerprint": "e9dec500a1179b95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3133720fcf829295", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nest/pickup-suggestions-client.ts:6"}, "properties": {"repobilityId": "e369d94ac79dd14a", "scanner": "scanner-primary", "fingerprint": "3133720fcf829295", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f20d0395ca2f96a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/store/brand-logo-serper.ts:67"}, "properties": {"repobilityId": "c359b5873b977038", "scanner": "scanner-primary", "fingerprint": "0f20d0395ca2f96a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8cfc5d1f0653372b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/optimize/image-approval-queue.ts:155"}, "properties": {"repobilityId": "ea9321d700aea128", "scanner": "scanner-primary", "fingerprint": "8cfc5d1f0653372b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de0a44185a58188f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/optimize/run-category-preload-job.ts:90"}, "properties": {"repobilityId": "c92d7f7597334a4f", "scanner": "scanner-primary", "fingerprint": "de0a44185a58188f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb46a0748c3f8243", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio/gmail-attachments.ts:113"}, "properties": {"repobilityId": "b1be41fcba7e626b", "scanner": "scanner-primary", "fingerprint": "cb46a0748c3f8243", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9643c5e96ca9aa99", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio/gmail-response-suggestions-client.ts:20"}, "properties": {"repobilityId": "dc3b753ddddfa093", "scanner": "scanner-primary", "fingerprint": "9643c5e96ca9aa99", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89f2dc5a9a6581c5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/for-you/candidates.ts:10"}, "properties": {"repobilityId": "cbe072895aecf261", "scanner": "scanner-primary", "fingerprint": "89f2dc5a9a6581c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19423b71024a43d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/for-you/feed.ts:10"}, "properties": {"repobilityId": "ad317f37bf0982ea", "scanner": "scanner-primary", "fingerprint": "19423b71024a43d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-858f933d8369ee8a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/for-you/llm.ts:6"}, "properties": {"repobilityId": "de7ee2d800d4dbe9", "scanner": "scanner-primary", "fingerprint": "858f933d8369ee8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d577cc94d50f9aa9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/for-you/engine.ts:18"}, "properties": {"repobilityId": "405a885162f5b756", "scanner": "scanner-primary", "fingerprint": "d577cc94d50f9aa9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9ee7dbd52b81871", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/for-you/signals.ts:11"}, "properties": {"repobilityId": "957ecf488799d034", "scanner": "scanner-primary", "fingerprint": "b9ee7dbd52b81871", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}