{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-958d815c6701fa2b", "name": "Stray `console.log` in TS/JS \u2014 middleware.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 middleware.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcb6fc876df282b0", "name": "Stray `console.log` in TS/JS \u2014 tests/debug-widget.spec.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/debug-widget.spec.ts:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31b8f0770af87d60", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-widget.spec.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-widget.spec.ts:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d845c6600a3d039f", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/shortlink-redirect.spec.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/shortlink-redirect.spec.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-9ec8234a8bad3822", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/review-approval.spec.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/review-approval.spec.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-478ce5a91380257d", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-store-subscription.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-store-subscription.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ce21c20cf91ce84", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-salla-api.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-salla-api.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e12723a22306f61", "name": "Stray `console.log` in TS/JS \u2014 scripts/minify-widgets.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/minify-widgets.js: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-2de55cc676c12f89", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-salla-api.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-salla-api.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-436717b6b724ac40", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-review-status.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-review-status.js: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-9e6a98eeaea98bce", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-review.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-review.js: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-86fe556690ec6dbf", "name": "Stray `console.log` in TS/JS \u2014 scripts/get-merchant-feed-url.js:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-merchant-feed-url.js:155"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3bef7b190fd1b35", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-review-order-ids.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-review-order-ids.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f733bab49e80b0b", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-subscription-and-verify.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-subscription-and-verify.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe0405cdbfb41351", "name": "Stray `console.log` in TS/JS \u2014 scripts/force-link-reviews.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/force-link-reviews.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4dafa08ffdc1ac5", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-store-resolution.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-store-resolution.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31d02c4db6a76fe8", "name": "Stray `console.log` in TS/JS \u2014 scripts/repair-backfill-product-ids.js:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repair-backfill-product-ids.js:179"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7de5a9617e2770f5", "name": "Stray `console.log` in TS/JS \u2014 tools/salla-webhook-tester.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/salla-webhook-tester.js:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3566371b58f626fd", "name": "Stray `console.log` in TS/JS \u2014 tools/test-production-webhooks.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-production-webhooks.js:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f573102db1926499", "name": "Stray `console.log` in TS/JS \u2014 tools/verify-installation.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/verify-installation.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5a35e0d822801f5", "name": "Stray `console.log` in TS/JS \u2014 tools/test-easy-mode.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-easy-mode.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5091a835c28c8ac3", "name": "Stray `console.log` in TS/JS \u2014 tools/test-salla-webhook.js:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-salla-webhook.js:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a64e37267d6662b", "name": "Stray `console.log` in TS/JS \u2014 tools/webhook-tester-v2.js:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/webhook-tester-v2.js: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-79d323ccdb46ee7d", "name": "Stray `console.log` in TS/JS \u2014 tools/test-review-sending.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-review-sending.js: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-1716e55bb3d3c2ad", "name": "Stray `console.log` in TS/JS \u2014 tools/loadtest/k6/outbox-jobs-test.js:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/loadtest/k6/outbox-jobs-test.js: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-ec23817594665b17", "name": "Stray `console.log` in TS/JS \u2014 src/get-admin-token.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/get-admin-token.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45610858e0e2f4c7", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/rate-limit-kv.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/rate-limit-kv.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-7dccea530ebdc67c", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/notifications.ts:3", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/notifications.ts:3"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2163564f35b95d0", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/rate-limit-public.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/rate-limit-public.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-52df94490f6199ef", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/activity-tracker.ts:448", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/activity-tracker.ts:448"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a689c3763a515219", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/email-sendgrid.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/email-sendgrid.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db1b2d36bc538d68", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/email-dmail.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/email-dmail.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-910361620ca72909", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/send-sms.ts:231", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/send-sms.ts:231"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a1751104c94fa89", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/sync/common.ts:312", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/sync/common.ts:312"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9b0b537bb5f8f64", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/utils/salla-webhook.logger.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/utils/salla-webhook.logger.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-699a3167fd4bd597", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/triggers/review-created.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/triggers/review-created.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-f7f79310d26ace3c", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/monitoring/quota-tracker.ts:411", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/monitoring/quota-tracker.ts:411"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e33ac7d07ba27df", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/monitoring/alerts.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/monitoring/alerts.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-1d25615190977024", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/queue/webhook-retry.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/queue/webhook-retry.ts:185"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ed670e4cda13c56", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/middleware/request-id.ts:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/middleware/request-id.ts:81"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95da22ae91a813b2", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/notification.service.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/notification.service.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-4db6616dbcf6d0af", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/zid-webhook.service.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/zid-webhook.service.ts:94"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02dbb46c98ddf32b", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/registration.service.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/registration.service.ts:134"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00cf0f041b4ec55f", "name": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/auth.service.ts:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/auth.service.ts:210"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38e20284ab61338c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/frontend/components/FirebaseStorageWidget.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/frontend/components/FirebaseStorageWidget.tsx:245"}, "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-2f0c7d676392ec9d", "name": "Stray `console.log` in TS/JS \u2014 src/frontend/components/FirebaseStorageWidget.tsx:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/components/FirebaseStorageWidget.tsx: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-8f809d5cc1984219", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/JsonLd.tsx:3", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/JsonLd.tsx:3"}, "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-95831126fadc1a75", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ScannerSection.tsx:345", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ScannerSection.tsx:345"}, "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-e79a018c40240cee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/FirebaseStorageWidget.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FirebaseStorageWidget.tsx:245"}, "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-201b1a044fe0da30", "name": "Stray `console.log` in TS/JS \u2014 src/components/FirebaseStorageWidget.tsx:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FirebaseStorageWidget.tsx: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-4f1d4237a5a4624b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/_document.tsx:31", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/_document.tsx:31"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1cafd13723f2babb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/faq.tsx:263", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/faq.tsx:263"}, "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-23b7a3fd4ad47267", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/index.tsx:587", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/index.tsx:587"}, "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-7465454ee2b8e930", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/index.tsx:251", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/index.tsx:251"}, "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-55967d20387828c8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/scanner.tsx:192", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/scanner.tsx:192"}, "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-21603439706ee002", "name": "Stray `console.log` in TS/JS \u2014 src/pages/dashboard/integrations.tsx:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/dashboard/integrations.tsx: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-53b35ed6a9b69c28", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/cron/webhook-retry.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/cron/webhook-retry.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-ee35d31d6cdb4319", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/cron/sync-zid-reviews.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/cron/sync-zid-reviews.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-7123c4d1408fbc56", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/jobs/fetch-review-id.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/jobs/fetch-review-id.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-77937fbf2a06c254", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/_admin/zid-maintenance.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/_admin/zid-maintenance.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-13ae763174db6f8e", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/sync-reviews.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/sync-reviews.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-390f482cec2012ef", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/disconnect.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/disconnect.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-403334a195ee6005", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/webhook.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/webhook.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-633b0e974e5aa73f", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/callback.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/callback.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-2ae368d3e4d2b868", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/ai/insights.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/ai/insights.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-2408b038b5d9ff12", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/public/reviews/resolve.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/public/reviews/resolve.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-407e38794244135a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/store/[storeUid]/reviews.tsx:492", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/store/[storeUid]/reviews.tsx:492"}, "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-f2eed10d94d1cb85", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/blog/manage.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/blog/manage.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-d9167a9d0195d956", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/blog/[slug].tsx:265", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/blog/[slug].tsx:265"}, "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-ea506fc80d57427a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.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-72609feefb9926f5", "name": "Stray `console.log` in TS/JS \u2014 src/lib/auth/tokenManager.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auth/tokenManager.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-01ef92adc328a9d9", "name": "Stray `console.log` in TS/JS \u2014 src/lib/auth/login.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auth/login.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-c6a1fd50f2c1b30c", "name": "Stray `console.log` in TS/JS \u2014 functions/src/cleanup-metrics.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/cleanup-metrics.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-ab9e6451e38a50fb", "name": "Stray `console.log` in TS/JS \u2014 functions/src/backup-firestore.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/backup-firestore.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8899ad8b6d5a74b", "name": "Stray `console.log` in TS/JS \u2014 functions/src/alerts.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/alerts.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-9c371ff15082a705", "name": "Insecure pattern 'dangerous_innerhtml' in playwright-report/index.html:58", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in playwright-report/index.html:58"}, "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-9029cfde635dd36d", "name": "Insecure pattern 'direct_innerhtml_assignment' in playwright-report/index.html:57", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in playwright-report/index.html:57"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f4bbf84a0b36e364", "name": "Insecure pattern 'cors_wildcard' in src/backend/server/utils/cors.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/backend/server/utils/cors.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-2e008614335aab4b", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/_document.tsx:31", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/_document.tsx:31"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c97463974cbe9e5", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/faq.tsx:263", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/faq.tsx:263"}, "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-1c2b0ccc7463a7cd", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/index.tsx:251", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/index.tsx:251"}, "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-fe7f00ad56204970", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/feeds/google-product-reviews/[storeUid]/feed.xml.ts:47", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/feeds/google-product-reviews/[storeUid]/feed.xml.ts:47"}, "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-f70132f7b9a68de2", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/og/share-card.tsx:99", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/og/share-card.tsx:99"}, "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-493ad236ddf9f555", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/public/scan.ts:91", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/scan.ts:91"}, "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-dbf9b947ade29c92", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/public/store-profile.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/store-profile.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-87a04ee7a7611ca4", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/public/reviews.ts:33", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/reviews.ts:33"}, "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-093712cdc722fcf3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/api/public/widget.ts:72", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/api/public/widget.ts:72"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5695772d4dce0905", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/public/widget.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/widget.ts:5"}, "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-b1492e5bac29ffc7", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/public/consensus.ts:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/consensus.ts:10"}, "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-4fdbbc18fbec5f7a", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/public/reviews/resolve.ts:7", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/reviews/resolve.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-081ff3bc0f616a8e", "name": "Insecure pattern 'cors_wildcard' in src/pages/feeds/reviews.json.tsx:109", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/reviews.json.tsx:109"}, "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-1efc3e429306aedb", "name": "Insecure pattern 'cors_wildcard' in src/pages/feeds/reviews.rss.xml.tsx:113", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/reviews.rss.xml.tsx:113"}, "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-a15e214472b0c147", "name": "Insecure pattern 'cors_wildcard' in src/pages/feeds/product-ratings.xml.tsx:82", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/product-ratings.xml.tsx:82"}, "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-98e6b3250db9f0a8", "name": "Insecure pattern 'cors_wildcard' in src/pages/feeds/seller-ratings.xml.tsx:66", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/seller-ratings.xml.tsx:66"}, "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-77bbe2fe84856443", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/store/[storeUid]/reviews.tsx:492", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/store/[storeUid]/reviews.tsx:492"}, "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-2ddf7239f71487a5", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/blog/[slug].tsx:265", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/blog/[slug].tsx:265"}, "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-3af2105cef022df8", "name": "Insecure pattern 'dangerous_innerhtml' in .claude/settings.local.json:35", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in .claude/settings.local.json:35"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab166d4eb08fa1d3", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/feedback-widget-preview.html:180", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/feedback-widget-preview.html:180"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5362d34d99ef542", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/theqah-widget.js:55", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/theqah-widget.js:55"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8bac1de93c9346e", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/theqah-widget.min.js:2", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/theqah-widget.min.js:2"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f4c224942514637", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/loading-skeleton.js:120", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/loading-skeleton.js:120"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e0b306aeacde3e7", "name": "Very large file: src/pages/index.tsx (1112 lines)", "shortDescription": {"text": "Very large file: src/pages/index.tsx (1112 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-d61838338db9c08a", "name": "Very large file: src/pages/api/public/scan.ts (1230 lines)", "shortDescription": {"text": "Very large file: src/pages/api/public/scan.ts (1230 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-e6fefb60b4809e3a", "name": "Very large file: src/pages/store/[storeUid]/reviews.tsx (1059 lines)", "shortDescription": {"text": "Very large file: src/pages/store/[storeUid]/reviews.tsx (1059 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-9cf55245bfadf0c7", "name": "Very large file: public/widgets/theqah-widget.js (1991 lines)", "shortDescription": {"text": "Very large file: public/widgets/theqah-widget.js (1991 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": "37 test file(s) for 471 source file(s) (ratio 0.08). 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 447 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 82 placeholder/mock markers across 39 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-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. 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-2679282aa1c484b5", "name": "Agent authority lacks a verifier contract: AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d8a052d8c036aacc", "name": "Commented-code block (5 lines) in tests/e2e/shortlink-redirect.spec.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/shortlink-redirect.spec.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-149f1651050ee9c6", "name": "Commented-code block (6 lines) in scripts/delete-poisoned-domain-docs.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/delete-poisoned-domain-docs.cjs: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-6057f0a6d783559a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-salla-api.js:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-salla-api.js:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a9c688eca414976", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-salla-api.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-salla-api.ts:34"}, "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-5b493e19afbd59df", "name": "Commented-code block (6 lines) in scripts/get-merchant-feed-url.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/get-merchant-feed-url.js: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-3f42384459e8af46", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-review-order-ids.js:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-review-order-ids.js:74"}, "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-fd37d123c01f7092", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/force-link-reviews.js:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/force-link-reviews.js:52"}, "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-e160ad5c4081d5fb", "name": "Commented-code block (5 lines) in scripts/repair-backfill-product-ids.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/repair-backfill-product-ids.js: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-32fcca9739d17a06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tools/test-salla-webhook.js:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tools/test-salla-webhook.js:97"}, "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-a4282610d84b473c", "name": "Commented-code block (6 lines) in src/backend/server/rate-limit-public.ts:314", "shortDescription": {"text": "Commented-code block (6 lines) in src/backend/server/rate-limit-public.ts:314"}, "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-2e1f107ae3c9e699", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/monitoring/alerts.ts:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/monitoring/alerts.ts:144"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a60f46831918ea48", "name": "Commented-code block (8 lines) in src/backend/server/enrichment/build-consensus.ts:38", "shortDescription": {"text": "Commented-code block (8 lines) in src/backend/server/enrichment/build-consensus.ts:38"}, "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-b40f5be04805cd1a", "name": "Commented-code block (5 lines) in src/backend/server/services/salla-webhook.service.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in src/backend/server/services/salla-webhook.service.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9db47c9c1443dddb", "name": "Commented-code block (7 lines) in src/backend/server/services/verification.service.ts:53", "shortDescription": {"text": "Commented-code block (7 lines) in src/backend/server/services/verification.service.ts:53"}, "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-8e65ef61a8940019", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/services/zid-webhook.service.ts:431", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/services/zid-webhook.service.ts:431"}, "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-5f8331b4a51b1874", "name": "Legacy-named symbol `daysOld` in src/backend/server/services/maintenance.service.ts:131", "shortDescription": {"text": "Legacy-named symbol `daysOld` in src/backend/server/services/maintenance.service.ts:131"}, "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-3b6dfa3ff1ca7f48", "name": "Legacy-named symbol `scoreRemoteReviewLegacy` in src/backend/server/services/salla-review-id-lookup.service.ts:90", "shortDescription": {"text": "Legacy-named symbol `scoreRemoteReviewLegacy` in src/backend/server/services/salla-review-id-lookup.service.ts:90"}, "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-31e4ab27e6298c72", "name": "Commented-code block (8 lines) in src/backend/server/services/admin.service.ts:677", "shortDescription": {"text": "Commented-code block (8 lines) in src/backend/server/services/admin.service.ts:677"}, "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-1ab885d3295fb34e", "name": "Commented-code block (6 lines) in src/backend/server/services/store.service.ts:58", "shortDescription": {"text": "Commented-code block (6 lines) in src/backend/server/services/store.service.ts:58"}, "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-f0bda6647e580b14", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/services/zid-review-sync.service.ts:199", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/services/zid-review-sync.service.ts:199"}, "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-5948d0f33b4c1652", "name": "Commented-code block (10 lines) in src/backend/server/services/backfill/salla-backfill.service.ts:122", "shortDescription": {"text": "Commented-code block (10 lines) in src/backend/server/services/backfill/salla-backfill.service.ts:122"}, "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-d2147989ef1a426e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/lib/sallaClient.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/lib/sallaClient.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-704cb42c85ef418e", "name": "Commented-code block (5 lines) in src/utils/verifyStore.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/verifyStore.ts:118"}, "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-c5833ce4a90ed1a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/components/dashboard/Analytics.tsx:333", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/components/dashboard/Analytics.tsx:333"}, "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-a8cdface77e6032a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/components/admin/AdminMonitoring.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/components/admin/AdminMonitoring.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-6a2b7d704bbdbcb9", "name": "Commented-code block (6 lines) in src/frontend/features/flags/useFlag.ts:29", "shortDescription": {"text": "Commented-code block (6 lines) in src/frontend/features/flags/useFlag.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99acba369501f0ac", "name": "Commented-code block (11 lines) in src/components/JsonLd.tsx:5", "shortDescription": {"text": "Commented-code block (11 lines) in src/components/JsonLd.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-a3fc876118edbbb6", "name": "Commented-code block (6 lines) in src/components/ScannerSection.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ScannerSection.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-0c1a5190844de20a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/Analytics.tsx:365", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/Analytics.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-e83174feb946b841", "name": "Commented-code block (5 lines) in src/pages/sitemap.xml.tsx:144", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/sitemap.xml.tsx:144"}, "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-643db5a19fbf3686", "name": "Commented-code block (8 lines) in src/pages/scanner.tsx:7", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/scanner.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-655cd986a19ed198", "name": "Commented-code block (6 lines) in src/pages/api/cron/run-backfill.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/cron/run-backfill.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-b935d6bb83775edb", "name": "Commented-code block (5 lines) in src/pages/api/cron/sync-zid-reviews.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/api/cron/sync-zid-reviews.ts:31"}, "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-99320a10da783aa8", "name": "Commented-code block (5 lines) in src/pages/api/feeds/google-product-reviews/[storeUid]/feed.xml.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/api/feeds/google-product-reviews/[storeUid]/feed.xml.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-0b46201e23d61eed", "name": "Commented-code block (7 lines) in src/pages/api/og/share-card.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/api/og/share-card.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-c61366a957aa7f98", "name": "Legacy-named symbol `daysOld` in src/pages/api/admin/cleanup-metrics.ts:17", "shortDescription": {"text": "Legacy-named symbol `daysOld` in src/pages/api/admin/cleanup-metrics.ts:17"}, "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-943f0d0735713085", "name": "Commented-code block (6 lines) in src/pages/api/admin/outage-audit.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/admin/outage-audit.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-c4a88e543ab31a1c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/admin/trigger-updated-order.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/admin/trigger-updated-order.ts: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-4fb99762487e41ed", "name": "Legacy-named symbol `daysOld` in src/pages/api/admin/cleanup-sync-logs.ts:17", "shortDescription": {"text": "Legacy-named symbol `daysOld` in src/pages/api/admin/cleanup-sync-logs.ts:17"}, "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-9b7daf37daf18ce0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/admin/salla/register-webhooks.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/admin/salla/register-webhooks.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-46d7da2fcf946c2d", "name": "Commented-code block (6 lines) in src/pages/api/admin/backfill/probe-all.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/admin/backfill/probe-all.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-9218713e1ef58337", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_if_needed/salla/refresh.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_if_needed/salla/refresh.ts: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-f1a98cfe12c1185d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_admin/zid-maintenance.ts:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_admin/zid-maintenance.ts:102"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-549871a12eba6a73", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_admin/debug-salla-reviews.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_admin/debug-salla-reviews.ts:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d75ec9e122432ada", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/zid/callback.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/zid/callback.ts:54"}, "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-920ba5a49d5e35dd", "name": "Commented-code block (6 lines) in src/pages/api/public/scan.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/public/scan.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc1e79985eeff3ac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/public/scan.ts:877", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/public/scan.ts:877"}, "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-9f7c27372a258d90", "name": "Commented-code block (8 lines) in src/pages/api/public/store-profile.ts:50", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/api/public/store-profile.ts:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d25eb24b0de72347", "name": "Commented-code block (6 lines) in src/pages/feeds/reviews.rss.xml.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/feeds/reviews.rss.xml.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-09c309ef84bcc14a", "name": "Commented-code block (5 lines) in src/pages/feeds/seller-ratings.xml.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/feeds/seller-ratings.xml.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-66059dc19249e117", "name": "Commented-code block (8 lines) in src/pages/feeds/google-aggregator-sample.xml.tsx:11", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/feeds/google-aggregator-sample.xml.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-0ebcd6a22ec76d22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/feeds/google-aggregator-sample.xml.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/feeds/google-aggregator-sample.xml.tsx: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-7a38edb1765b4fe1", "name": "Commented-code block (9 lines) in src/pages/feeds/google-merchant-reviews-sample.xml.tsx:6", "shortDescription": {"text": "Commented-code block (9 lines) in src/pages/feeds/google-merchant-reviews-sample.xml.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-fffe6d56d8554cb5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/embedded/reviews.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/embedded/reviews.tsx: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-bfd318cdaf0962cf", "name": "Commented-code block (5 lines) in src/pages/og/share-card-html.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/og/share-card-html.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-dc02466ea82aa628", "name": "Commented-code block (5 lines) in src/pages/store/[storeUid]/reviews.tsx:188", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/store/[storeUid]/reviews.tsx:188"}, "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-390ba450f72f7dc0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/store/[storeUid]/reviews.tsx:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/store/[storeUid]/reviews.tsx:109"}, "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-8e209a66eaaff798", "name": "Commented-code block (6 lines) in src/pages/store/[storeUid]/certificate.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/store/[storeUid]/certificate.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-59ac5b742d3b14f6", "name": "Commented-code block (6 lines) in src/pages/blog/login.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/blog/login.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-24d5fe49156a7f7d", "name": "Commented-code block (7 lines) in src/pages/blog/rss.xml.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/blog/rss.xml.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-e52984db183aeff0", "name": "Commented-code block (6 lines) in src/features/flags/useFlag.ts:29", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/flags/useFlag.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b6d67b18978a54f", "name": "Commented-code block (5 lines) in src/lib/firebase.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/firebase.ts:35"}, "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-3b37c359a8ab428e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/sallaClient.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/sallaClient.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-f5e084d9663988f4", "name": "Commented-code block (5 lines) in src/lib/feeds/buildGoogleProductReviewsXml.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/feeds/buildGoogleProductReviewsXml.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40d49dae44e37459", "name": "Commented-code block (8 lines) in src/lib/feeds/buildReviewFeedData.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/feeds/buildReviewFeedData.ts: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-c0081b8afffbd8e8", "name": "Commented-code block (8 lines) in src/lib/feeds/buildGoogleMerchantReviewsXml.ts:14", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/feeds/buildGoogleMerchantReviewsXml.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0f94886e3964a51", "name": "Commented-code block (9 lines) in src/lib/feeds/buildGoogleAggregatorReviewsXml.ts:9", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/feeds/buildGoogleAggregatorReviewsXml.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b34b1943a4311870", "name": "Commented-code block (6 lines) in src/lib/schema/buildCertificateSchema.ts:98", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/schema/buildCertificateSchema.ts:98"}, "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-0c8a8967c002e81e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zid/auth.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zid/auth.ts:23"}, "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-810489840216c045", "name": "Commented-code block (5 lines) in src/lib/zid/tokens.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/zid/tokens.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb1da8ab3a7d4f5a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zid/client.ts:139", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zid/client.ts:139"}, "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-1d4ef5fb597f4f97", "name": "Legacy-named symbol `firestore_backup` in functions/src/backup-firestore.ts:181", "shortDescription": {"text": "Legacy-named symbol `firestore_backup` in functions/src/backup-firestore.ts:181"}, "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-00cdc4b7e8dfcfa2", "name": "Commented-code block (5 lines) in functions/src/backup-firestore.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in functions/src/backup-firestore.ts:35"}, "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-108402958899d161", "name": "`fetch()` without try/.catch or AbortSignal \u2014 zid/api/refresh.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 zid/api/refresh.ts:23"}, "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-305c8de9b3bacd29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 zid/pages/zid.tsx:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 zid/pages/zid.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-be1715cde205d3e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 zid/lib/auth.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 zid/lib/auth.ts:23"}, "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-1c73f3a233535924", "name": "Commented-code block (7 lines) in public/widgets/theqah-widget.js:7", "shortDescription": {"text": "Commented-code block (7 lines) in public/widgets/theqah-widget.js: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-0a6dd8b77e13299c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/widgets/theqah-widget.js:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/widgets/theqah-widget.js:144"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90dc2b407a9d0670", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/widgets/theqah-widget.min.js:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/widgets/theqah-widget.min.js:2"}, "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}}]}}, "automationDetails": {"id": "repobility/23961"}, "properties": {"repository": "ahmedfarouk145/theqah", "repoUrl": "https://github.com/ahmedfarouk145/theqah", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-958d815c6701fa2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 middleware.ts:66"}, "properties": {"repobilityId": "505c04a593fb184d", "scanner": "scanner-primary", "fingerprint": "958d815c6701fa2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fcb6fc876df282b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/debug-widget.spec.ts:4"}, "properties": {"repobilityId": "79280a62afef6e60", "scanner": "scanner-primary", "fingerprint": "fcb6fc876df282b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31b8f0770af87d60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/debug-widget.spec.ts:4"}, "properties": {"repobilityId": "377fa8e6cc0a321b", "scanner": "scanner-primary", "fingerprint": "31b8f0770af87d60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d845c6600a3d039f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/shortlink-redirect.spec.ts:46"}, "properties": {"repobilityId": "0143f4ad8c30a22c", "scanner": "scanner-primary", "fingerprint": "d845c6600a3d039f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ec8234a8bad3822", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/review-approval.spec.ts:79"}, "properties": {"repobilityId": "139861f31f981ce5", "scanner": "scanner-primary", "fingerprint": "9ec8234a8bad3822", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-478ce5a91380257d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-store-subscription.js:13"}, "properties": {"repobilityId": "0a3b923ce72a365e", "scanner": "scanner-primary", "fingerprint": "478ce5a91380257d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ce21c20cf91ce84", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-salla-api.js:14"}, "properties": {"repobilityId": "0843a387e4bf0532", "scanner": "scanner-primary", "fingerprint": "2ce21c20cf91ce84", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e12723a22306f61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/minify-widgets.js:45"}, "properties": {"repobilityId": "bfd30bc33e385f3d", "scanner": "scanner-primary", "fingerprint": "8e12723a22306f61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2de55cc676c12f89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-salla-api.ts:9"}, "properties": {"repobilityId": "3ce5262d209af6e5", "scanner": "scanner-primary", "fingerprint": "2de55cc676c12f89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-436717b6b724ac40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-review-status.js:26"}, "properties": {"repobilityId": "e7c13704fd8decf3", "scanner": "scanner-primary", "fingerprint": "436717b6b724ac40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e6a98eeaea98bce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-review.js:35"}, "properties": {"repobilityId": "898e62320c1d118a", "scanner": "scanner-primary", "fingerprint": "9e6a98eeaea98bce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86fe556690ec6dbf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-merchant-feed-url.js:155"}, "properties": {"repobilityId": "7ec23e4b919f4796", "scanner": "scanner-primary", "fingerprint": "86fe556690ec6dbf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3bef7b190fd1b35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-review-order-ids.js:13"}, "properties": {"repobilityId": "c536d872efb4c9ea", "scanner": "scanner-primary", "fingerprint": "a3bef7b190fd1b35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f733bab49e80b0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-subscription-and-verify.js:13"}, "properties": {"repobilityId": "e46dd1c6977c5d3d", "scanner": "scanner-primary", "fingerprint": "5f733bab49e80b0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe0405cdbfb41351", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/force-link-reviews.js:13"}, "properties": {"repobilityId": "a7cf7a1e9b3e2d9c", "scanner": "scanner-primary", "fingerprint": "fe0405cdbfb41351", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4dafa08ffdc1ac5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-store-resolution.js:15"}, "properties": {"repobilityId": "c37b9a54d798cc29", "scanner": "scanner-primary", "fingerprint": "b4dafa08ffdc1ac5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31d02c4db6a76fe8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repair-backfill-product-ids.js:179"}, "properties": {"repobilityId": "f952b62a8b8aad02", "scanner": "scanner-primary", "fingerprint": "31d02c4db6a76fe8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7de5a9617e2770f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/salla-webhook-tester.js:61"}, "properties": {"repobilityId": "c17a520732faf909", "scanner": "scanner-primary", "fingerprint": "7de5a9617e2770f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3566371b58f626fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-production-webhooks.js:49"}, "properties": {"repobilityId": "f95c478263687284", "scanner": "scanner-primary", "fingerprint": "3566371b58f626fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f573102db1926499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/verify-installation.js:14"}, "properties": {"repobilityId": "193fe72ace67ea1b", "scanner": "scanner-primary", "fingerprint": "f573102db1926499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5a35e0d822801f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-easy-mode.js:15"}, "properties": {"repobilityId": "292d5d9ae72c361f", "scanner": "scanner-primary", "fingerprint": "d5a35e0d822801f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5091a835c28c8ac3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-salla-webhook.js:107"}, "properties": {"repobilityId": "a275131a1508d865", "scanner": "scanner-primary", "fingerprint": "5091a835c28c8ac3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a64e37267d6662b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/webhook-tester-v2.js:129"}, "properties": {"repobilityId": "22b3e27891e0c076", "scanner": "scanner-primary", "fingerprint": "8a64e37267d6662b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79d323ccdb46ee7d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-review-sending.js:29"}, "properties": {"repobilityId": "acf1681371dd6aed", "scanner": "scanner-primary", "fingerprint": "79d323ccdb46ee7d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1716e55bb3d3c2ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/loadtest/k6/outbox-jobs-test.js:52"}, "properties": {"repobilityId": "1d0cbd08cd52fb74", "scanner": "scanner-primary", "fingerprint": "1716e55bb3d3c2ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec23817594665b17", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/get-admin-token.ts:17"}, "properties": {"repobilityId": "dbb28139d2630729", "scanner": "scanner-primary", "fingerprint": "ec23817594665b17", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45610858e0e2f4c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/rate-limit-kv.ts:35"}, "properties": {"repobilityId": "936a4172835a8b65", "scanner": "scanner-primary", "fingerprint": "45610858e0e2f4c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7dccea530ebdc67c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/notifications.ts:3"}, "properties": {"repobilityId": "8d3d9df78d4d58b8", "scanner": "scanner-primary", "fingerprint": "7dccea530ebdc67c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2163564f35b95d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/rate-limit-public.ts:40"}, "properties": {"repobilityId": "14fb76a9670f9d32", "scanner": "scanner-primary", "fingerprint": "e2163564f35b95d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52df94490f6199ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/activity-tracker.ts:448"}, "properties": {"repobilityId": "3ef6252479831072", "scanner": "scanner-primary", "fingerprint": "52df94490f6199ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a689c3763a515219", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/email-sendgrid.ts:23"}, "properties": {"repobilityId": "3308ee2a3bde6f5f", "scanner": "scanner-primary", "fingerprint": "a689c3763a515219", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db1b2d36bc538d68", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/email-dmail.ts:60"}, "properties": {"repobilityId": "809390cfd620cf7f", "scanner": "scanner-primary", "fingerprint": "db1b2d36bc538d68", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-910361620ca72909", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/messaging/send-sms.ts:231"}, "properties": {"repobilityId": "47e42886af1fc9c9", "scanner": "scanner-primary", "fingerprint": "910361620ca72909", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a1751104c94fa89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/sync/common.ts:312"}, "properties": {"repobilityId": "c7d82d3daf269de8", "scanner": "scanner-primary", "fingerprint": "1a1751104c94fa89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9b0b537bb5f8f64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/utils/salla-webhook.logger.ts:39"}, "properties": {"repobilityId": "8bae74e486dc021c", "scanner": "scanner-primary", "fingerprint": "d9b0b537bb5f8f64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-699a3167fd4bd597", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/triggers/review-created.ts:59"}, "properties": {"repobilityId": "bb48088558a432e5", "scanner": "scanner-primary", "fingerprint": "699a3167fd4bd597", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7f79310d26ace3c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/monitoring/quota-tracker.ts:411"}, "properties": {"repobilityId": "263649662ea5129c", "scanner": "scanner-primary", "fingerprint": "f7f79310d26ace3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e33ac7d07ba27df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/monitoring/alerts.ts:88"}, "properties": {"repobilityId": "1ea595e1723800d0", "scanner": "scanner-primary", "fingerprint": "2e33ac7d07ba27df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d25615190977024", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/queue/webhook-retry.ts:185"}, "properties": {"repobilityId": "01f928b2d50af6fe", "scanner": "scanner-primary", "fingerprint": "1d25615190977024", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ed670e4cda13c56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/middleware/request-id.ts:81"}, "properties": {"repobilityId": "35c3d7fd5e6ab81c", "scanner": "scanner-primary", "fingerprint": "6ed670e4cda13c56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95da22ae91a813b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/notification.service.ts:27"}, "properties": {"repobilityId": "c994b5f71012c7ca", "scanner": "scanner-primary", "fingerprint": "95da22ae91a813b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4db6616dbcf6d0af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/zid-webhook.service.ts:94"}, "properties": {"repobilityId": "7dc6ca1567dd8c9a", "scanner": "scanner-primary", "fingerprint": "4db6616dbcf6d0af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-02dbb46c98ddf32b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/registration.service.ts:134"}, "properties": {"repobilityId": "088cfc94d3756936", "scanner": "scanner-primary", "fingerprint": "02dbb46c98ddf32b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00cf0f041b4ec55f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/backend/server/services/auth.service.ts:210"}, "properties": {"repobilityId": "e143e24ab9fc5887", "scanner": "scanner-primary", "fingerprint": "00cf0f041b4ec55f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38e20284ab61338c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/frontend/components/FirebaseStorageWidget.tsx:245"}, "properties": {"repobilityId": "b2b6c8f18dcc055e", "scanner": "scanner-primary", "fingerprint": "38e20284ab61338c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f0c7d676392ec9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/components/FirebaseStorageWidget.tsx:82"}, "properties": {"repobilityId": "ba5b31046b068654", "scanner": "scanner-primary", "fingerprint": "2f0c7d676392ec9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f809d5cc1984219", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/JsonLd.tsx:3"}, "properties": {"repobilityId": "63d1555414765036", "scanner": "scanner-primary", "fingerprint": "8f809d5cc1984219", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-95831126fadc1a75", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ScannerSection.tsx:345"}, "properties": {"repobilityId": "7021a9751b8ad180", "scanner": "scanner-primary", "fingerprint": "95831126fadc1a75", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e79a018c40240cee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FirebaseStorageWidget.tsx:245"}, "properties": {"repobilityId": "4d5dbd22fba55171", "scanner": "scanner-primary", "fingerprint": "e79a018c40240cee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-201b1a044fe0da30", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FirebaseStorageWidget.tsx:82"}, "properties": {"repobilityId": "7977709c530ccf64", "scanner": "scanner-primary", "fingerprint": "201b1a044fe0da30", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f1d4237a5a4624b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/_document.tsx:31"}, "properties": {"repobilityId": "093d30a1b9c1eedc", "scanner": "scanner-primary", "fingerprint": "4f1d4237a5a4624b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1cafd13723f2babb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/faq.tsx:263"}, "properties": {"repobilityId": "e3bcd30dfc546685", "scanner": "scanner-primary", "fingerprint": "1cafd13723f2babb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-23b7a3fd4ad47267", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/index.tsx:587"}, "properties": {"repobilityId": "e908f2b9d759328f", "scanner": "scanner-primary", "fingerprint": "23b7a3fd4ad47267", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7465454ee2b8e930", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/index.tsx:251"}, "properties": {"repobilityId": "73acbcf1512cd40c", "scanner": "scanner-primary", "fingerprint": "7465454ee2b8e930", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-55967d20387828c8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/scanner.tsx:192"}, "properties": {"repobilityId": "c47036658a9b59c6", "scanner": "scanner-primary", "fingerprint": "55967d20387828c8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-21603439706ee002", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/dashboard/integrations.tsx:12"}, "properties": {"repobilityId": "05499484b84e7d70", "scanner": "scanner-primary", "fingerprint": "21603439706ee002", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53b35ed6a9b69c28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/cron/webhook-retry.ts:35"}, "properties": {"repobilityId": "eccc29c253399fe2", "scanner": "scanner-primary", "fingerprint": "53b35ed6a9b69c28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee35d31d6cdb4319", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/cron/sync-zid-reviews.ts:13"}, "properties": {"repobilityId": "727dc5a1e77da087", "scanner": "scanner-primary", "fingerprint": "ee35d31d6cdb4319", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7123c4d1408fbc56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/jobs/fetch-review-id.ts:30"}, "properties": {"repobilityId": "77221f684df03132", "scanner": "scanner-primary", "fingerprint": "7123c4d1408fbc56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-77937fbf2a06c254", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/_admin/zid-maintenance.ts:55"}, "properties": {"repobilityId": "ed65802fb541e2c7", "scanner": "scanner-primary", "fingerprint": "77937fbf2a06c254", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13ae763174db6f8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/sync-reviews.ts:53"}, "properties": {"repobilityId": "eb5ce1fdb0450aba", "scanner": "scanner-primary", "fingerprint": "13ae763174db6f8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-390f482cec2012ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/disconnect.ts:48"}, "properties": {"repobilityId": "dbc391ae4d8e230e", "scanner": "scanner-primary", "fingerprint": "390f482cec2012ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-403334a195ee6005", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/webhook.ts:41"}, "properties": {"repobilityId": "ea4ae752645b5699", "scanner": "scanner-primary", "fingerprint": "403334a195ee6005", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-633b0e974e5aa73f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zid/callback.ts:34"}, "properties": {"repobilityId": "d1967159272a9de5", "scanner": "scanner-primary", "fingerprint": "633b0e974e5aa73f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ae368d3e4d2b868", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/ai/insights.ts:60"}, "properties": {"repobilityId": "351a17cafbdeab10", "scanner": "scanner-primary", "fingerprint": "2ae368d3e4d2b868", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2408b038b5d9ff12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/public/reviews/resolve.ts:67"}, "properties": {"repobilityId": "1e56b535bebe5958", "scanner": "scanner-primary", "fingerprint": "2408b038b5d9ff12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-407e38794244135a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/store/[storeUid]/reviews.tsx:492"}, "properties": {"repobilityId": "1e89d81f273ad0b7", "scanner": "scanner-primary", "fingerprint": "407e38794244135a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f2eed10d94d1cb85", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/blog/manage.tsx:295"}, "properties": {"repobilityId": "1f255bf8f37fdd85", "scanner": "scanner-primary", "fingerprint": "f2eed10d94d1cb85", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9167a9d0195d956", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/blog/[slug].tsx:265"}, "properties": {"repobilityId": "8f6e434874848ad3", "scanner": "scanner-primary", "fingerprint": "d9167a9d0195d956", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ea506fc80d57427a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:29"}, "properties": {"repobilityId": "d91dbb6e420e1181", "scanner": "scanner-primary", "fingerprint": "ea506fc80d57427a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72609feefb9926f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auth/tokenManager.ts:12"}, "properties": {"repobilityId": "d11f75269bd53a47", "scanner": "scanner-primary", "fingerprint": "72609feefb9926f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01ef92adc328a9d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auth/login.ts:62"}, "properties": {"repobilityId": "e07f723a25d8d591", "scanner": "scanner-primary", "fingerprint": "01ef92adc328a9d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6a1fd50f2c1b30c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/cleanup-metrics.ts:52"}, "properties": {"repobilityId": "ba03baf9a217621e", "scanner": "scanner-primary", "fingerprint": "c6a1fd50f2c1b30c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab9e6451e38a50fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/backup-firestore.ts:76"}, "properties": {"repobilityId": "8a212cf481245b24", "scanner": "scanner-primary", "fingerprint": "ab9e6451e38a50fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8899ad8b6d5a74b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/alerts.ts:24"}, "properties": {"repobilityId": "c69a23b560450a7d", "scanner": "scanner-primary", "fingerprint": "c8899ad8b6d5a74b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c371ff15082a705", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in playwright-report/index.html:58"}, "properties": {"repobilityId": "5c1a4d4daf334529", "scanner": "scanner-primary", "fingerprint": "9c371ff15082a705", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "playwright-report/index.html"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-9029cfde635dd36d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in playwright-report/index.html:57"}, "properties": {"repobilityId": "72bf5b0e0e2b9155", "scanner": "scanner-primary", "fingerprint": "9029cfde635dd36d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "playwright-report/index.html"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-f4bbf84a0b36e364", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/backend/server/utils/cors.ts:18"}, "properties": {"repobilityId": "423c27c64c66d1e2", "scanner": "scanner-primary", "fingerprint": "f4bbf84a0b36e364", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/backend/server/utils/cors.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-2e008614335aab4b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/_document.tsx:31"}, "properties": {"repobilityId": "34360a427b4e66e0", "scanner": "scanner-primary", "fingerprint": "2e008614335aab4b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/_document.tsx"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-7c97463974cbe9e5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/faq.tsx:263"}, "properties": {"repobilityId": "531e5ae19b20b6a5", "scanner": "scanner-primary", "fingerprint": "7c97463974cbe9e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/faq.tsx"}, "region": {"startLine": 263}}}]}, {"ruleId": "scanner-1c2b0ccc7463a7cd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/index.tsx:251"}, "properties": {"repobilityId": "78dacad9ec3395c8", "scanner": "scanner-primary", "fingerprint": "1c2b0ccc7463a7cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/index.tsx"}, "region": {"startLine": 251}}}]}, {"ruleId": "scanner-fe7f00ad56204970", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/feeds/google-product-reviews/[storeUid]/feed.xml.ts:47"}, "properties": {"repobilityId": "c9d926110c09d87f", "scanner": "scanner-primary", "fingerprint": "fe7f00ad56204970", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/feeds/google-product-reviews/[storeUid]/feed.xml.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-f70132f7b9a68de2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/og/share-card.tsx:99"}, "properties": {"repobilityId": "28108cf5b3d08c6a", "scanner": "scanner-primary", "fingerprint": "f70132f7b9a68de2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/og/share-card.tsx"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-493ad236ddf9f555", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/scan.ts:91"}, "properties": {"repobilityId": "f6d4eb1534d3b1eb", "scanner": "scanner-primary", "fingerprint": "493ad236ddf9f555", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/public/scan.ts"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-dbf9b947ade29c92", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/store-profile.ts:11"}, "properties": {"repobilityId": "6f8694d65d53de8c", "scanner": "scanner-primary", "fingerprint": "dbf9b947ade29c92", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/public/store-profile.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-87a04ee7a7611ca4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/reviews.ts:33"}, "properties": {"repobilityId": "a42f35b96365e856", "scanner": "scanner-primary", "fingerprint": "87a04ee7a7611ca4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/public/reviews.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-093712cdc722fcf3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/api/public/widget.ts:72"}, "properties": {"repobilityId": "c21e9440a0125b3c", "scanner": "scanner-primary", "fingerprint": "093712cdc722fcf3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/public/widget.ts"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-5695772d4dce0905", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/widget.ts:5"}, "properties": {"repobilityId": "8d56c1a9fbe24ff0", "scanner": "scanner-primary", "fingerprint": "5695772d4dce0905", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/public/widget.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-b1492e5bac29ffc7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/consensus.ts:10"}, "properties": {"repobilityId": "23cad5edcac30b17", "scanner": "scanner-primary", "fingerprint": "b1492e5bac29ffc7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/public/consensus.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-4fdbbc18fbec5f7a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/public/reviews/resolve.ts:7"}, "properties": {"repobilityId": "71f8a02cd7116256", "scanner": "scanner-primary", "fingerprint": "4fdbbc18fbec5f7a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/public/reviews/resolve.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-081ff3bc0f616a8e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/reviews.json.tsx:109"}, "properties": {"repobilityId": "42cf3153946d7708", "scanner": "scanner-primary", "fingerprint": "081ff3bc0f616a8e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/feeds/reviews.json.tsx"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-1efc3e429306aedb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/reviews.rss.xml.tsx:113"}, "properties": {"repobilityId": "05e9fe8d731e31fe", "scanner": "scanner-primary", "fingerprint": "1efc3e429306aedb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/feeds/reviews.rss.xml.tsx"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-a15e214472b0c147", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/product-ratings.xml.tsx:82"}, "properties": {"repobilityId": "3a93a39d1711a6a4", "scanner": "scanner-primary", "fingerprint": "a15e214472b0c147", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/feeds/product-ratings.xml.tsx"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-98e6b3250db9f0a8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/feeds/seller-ratings.xml.tsx:66"}, "properties": {"repobilityId": "de3d63589384a7f5", "scanner": "scanner-primary", "fingerprint": "98e6b3250db9f0a8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/feeds/seller-ratings.xml.tsx"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-77bbe2fe84856443", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/store/[storeUid]/reviews.tsx:492"}, "properties": {"repobilityId": "f29a738c1c3ed5cc", "scanner": "scanner-primary", "fingerprint": "77bbe2fe84856443", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/store/[storeUid]/reviews.tsx"}, "region": {"startLine": 492}}}]}, {"ruleId": "scanner-2ddf7239f71487a5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/blog/[slug].tsx:265"}, "properties": {"repobilityId": "d5284d027e8bfa59", "scanner": "scanner-primary", "fingerprint": "2ddf7239f71487a5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/blog/[slug].tsx"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-3af2105cef022df8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in .claude/settings.local.json:35"}, "properties": {"repobilityId": "dcbbc0d7a46c8dd8", "scanner": "scanner-primary", "fingerprint": "3af2105cef022df8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-ab166d4eb08fa1d3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/feedback-widget-preview.html:180"}, "properties": {"repobilityId": "5712752ee698525f", "scanner": "scanner-primary", "fingerprint": "ab166d4eb08fa1d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/feedback-widget-preview.html"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-e5362d34d99ef542", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/theqah-widget.js:55"}, "properties": {"repobilityId": "6eeba9d4ce5b6b17", "scanner": "scanner-primary", "fingerprint": "e5362d34d99ef542", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/widgets/theqah-widget.js"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-c8bac1de93c9346e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/theqah-widget.min.js:2"}, "properties": {"repobilityId": "78a5e82cbd20add8", "scanner": "scanner-primary", "fingerprint": "c8bac1de93c9346e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/widgets/theqah-widget.min.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-8f4c224942514637", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/widgets/loading-skeleton.js:120"}, "properties": {"repobilityId": "822b0b9ea9c02ac8", "scanner": "scanner-primary", "fingerprint": "8f4c224942514637", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/widgets/loading-skeleton.js"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-7e0b306aeacde3e7", "level": "note", "message": {"text": "Very large file: src/pages/index.tsx (1112 lines)"}, "properties": {"repobilityId": "57d12fab49020244", "scanner": "scanner-primary", "fingerprint": "7e0b306aeacde3e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d61838338db9c08a", "level": "note", "message": {"text": "Very large file: src/pages/api/public/scan.ts (1230 lines)"}, "properties": {"repobilityId": "cb43b9d19d996e15", "scanner": "scanner-primary", "fingerprint": "d61838338db9c08a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e6fefb60b4809e3a", "level": "note", "message": {"text": "Very large file: src/pages/store/[storeUid]/reviews.tsx (1059 lines)"}, "properties": {"repobilityId": "4919f62243cbd6a3", "scanner": "scanner-primary", "fingerprint": "e6fefb60b4809e3a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9cf55245bfadf0c7", "level": "note", "message": {"text": "Very large file: public/widgets/theqah-widget.js (1991 lines)"}, "properties": {"repobilityId": "ec8ce27be7e8a308", "scanner": "scanner-primary", "fingerprint": "9cf55245bfadf0c7", "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": "5aa7ee5d6f150a90", "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": "4879eaec1f58487f", "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": "91f68009fb01e3b3", "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": "90b55f55643ebc26", "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": "e8bc8603f63aaa89", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "af4cbeac5f7a2c98", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2679282aa1c484b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "properties": {"repobilityId": "27d579812e6be614", "scanner": "scanner-primary", "fingerprint": "2679282aa1c484b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-d8a052d8c036aacc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/shortlink-redirect.spec.ts:22"}, "properties": {"repobilityId": "d7bb81d9ead2965d", "scanner": "scanner-primary", "fingerprint": "d8a052d8c036aacc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-149f1651050ee9c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/delete-poisoned-domain-docs.cjs:1"}, "properties": {"repobilityId": "82b76680feb5db85", "scanner": "scanner-primary", "fingerprint": "149f1651050ee9c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6057f0a6d783559a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-salla-api.js:72"}, "properties": {"repobilityId": "42ed66b7eb82d04a", "scanner": "scanner-primary", "fingerprint": "6057f0a6d783559a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a9c688eca414976", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-salla-api.ts:34"}, "properties": {"repobilityId": "317b7b35f9d2137f", "scanner": "scanner-primary", "fingerprint": "7a9c688eca414976", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b493e19afbd59df", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/get-merchant-feed-url.js:6"}, "properties": {"repobilityId": "ca00dfe7ab736fb1", "scanner": "scanner-primary", "fingerprint": "5b493e19afbd59df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f42384459e8af46", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-review-order-ids.js:74"}, "properties": {"repobilityId": "fe7cd7b3202426a5", "scanner": "scanner-primary", "fingerprint": "3f42384459e8af46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd37d123c01f7092", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/force-link-reviews.js:52"}, "properties": {"repobilityId": "6810b62c0263e144", "scanner": "scanner-primary", "fingerprint": "fd37d123c01f7092", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e160ad5c4081d5fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/repair-backfill-product-ids.js:3"}, "properties": {"repobilityId": "f18e0c65d31f1ad4", "scanner": "scanner-primary", "fingerprint": "e160ad5c4081d5fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32fcca9739d17a06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tools/test-salla-webhook.js:97"}, "properties": {"repobilityId": "d27682bad0ca0d09", "scanner": "scanner-primary", "fingerprint": "32fcca9739d17a06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a4282610d84b473c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/backend/server/rate-limit-public.ts:314"}, "properties": {"repobilityId": "8c8464f788f44b30", "scanner": "scanner-primary", "fingerprint": "a4282610d84b473c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e1f107ae3c9e699", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/monitoring/alerts.ts:144"}, "properties": {"repobilityId": "78195e55f2cf3b78", "scanner": "scanner-primary", "fingerprint": "2e1f107ae3c9e699", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a60f46831918ea48", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/backend/server/enrichment/build-consensus.ts:38"}, "properties": {"repobilityId": "63b9a0b8290c32d5", "scanner": "scanner-primary", "fingerprint": "a60f46831918ea48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b40f5be04805cd1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/backend/server/services/salla-webhook.service.ts:121"}, "properties": {"repobilityId": "c7a6b9ec1c81dc9c", "scanner": "scanner-primary", "fingerprint": "b40f5be04805cd1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9db47c9c1443dddb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/backend/server/services/verification.service.ts:53"}, "properties": {"repobilityId": "4fdab3c2bf034a18", "scanner": "scanner-primary", "fingerprint": "9db47c9c1443dddb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e65ef61a8940019", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/services/zid-webhook.service.ts:431"}, "properties": {"repobilityId": "57a2ea738f20381b", "scanner": "scanner-primary", "fingerprint": "8e65ef61a8940019", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f8331b4a51b1874", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in src/backend/server/services/maintenance.service.ts:131"}, "properties": {"repobilityId": "e5393e1eb8738462", "scanner": "scanner-primary", "fingerprint": "5f8331b4a51b1874", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3b6dfa3ff1ca7f48", "level": "note", "message": {"text": "Legacy-named symbol `scoreRemoteReviewLegacy` in src/backend/server/services/salla-review-id-lookup.service.ts:90"}, "properties": {"repobilityId": "8b88c820fbd6b2d5", "scanner": "scanner-primary", "fingerprint": "3b6dfa3ff1ca7f48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-31e4ab27e6298c72", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/backend/server/services/admin.service.ts:677"}, "properties": {"repobilityId": "a94e9eb8f90d6a33", "scanner": "scanner-primary", "fingerprint": "31e4ab27e6298c72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ab885d3295fb34e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/backend/server/services/store.service.ts:58"}, "properties": {"repobilityId": "f0e5158b5c196751", "scanner": "scanner-primary", "fingerprint": "1ab885d3295fb34e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0bda6647e580b14", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/server/services/zid-review-sync.service.ts:199"}, "properties": {"repobilityId": "20ece554d8f2c550", "scanner": "scanner-primary", "fingerprint": "f0bda6647e580b14", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5948d0f33b4c1652", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/backend/server/services/backfill/salla-backfill.service.ts:122"}, "properties": {"repobilityId": "5b9d1b2f02869dc9", "scanner": "scanner-primary", "fingerprint": "5948d0f33b4c1652", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2147989ef1a426e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/backend/lib/sallaClient.ts:46"}, "properties": {"repobilityId": "9a4f46324d02cc1e", "scanner": "scanner-primary", "fingerprint": "d2147989ef1a426e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-704cb42c85ef418e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/verifyStore.ts:118"}, "properties": {"repobilityId": "592528d215fa2342", "scanner": "scanner-primary", "fingerprint": "704cb42c85ef418e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5833ce4a90ed1a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/components/dashboard/Analytics.tsx:333"}, "properties": {"repobilityId": "2a8253363a76e3d2", "scanner": "scanner-primary", "fingerprint": "c5833ce4a90ed1a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8cdface77e6032a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/components/admin/AdminMonitoring.tsx:76"}, "properties": {"repobilityId": "89205dbbfe2ad79d", "scanner": "scanner-primary", "fingerprint": "a8cdface77e6032a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a2b7d704bbdbcb9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/frontend/features/flags/useFlag.ts:29"}, "properties": {"repobilityId": "85ed5923e82bf7a2", "scanner": "scanner-primary", "fingerprint": "6a2b7d704bbdbcb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99acba369501f0ac", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/components/JsonLd.tsx:5"}, "properties": {"repobilityId": "f9af5ff528c7f495", "scanner": "scanner-primary", "fingerprint": "99acba369501f0ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3fc876118edbbb6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ScannerSection.tsx:3"}, "properties": {"repobilityId": "1c0e17511c6baaa2", "scanner": "scanner-primary", "fingerprint": "a3fc876118edbbb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c1a5190844de20a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/Analytics.tsx:365"}, "properties": {"repobilityId": "5501a651596d6331", "scanner": "scanner-primary", "fingerprint": "0c1a5190844de20a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e83174feb946b841", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/sitemap.xml.tsx:144"}, "properties": {"repobilityId": "cd6449d21e8916d1", "scanner": "scanner-primary", "fingerprint": "e83174feb946b841", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-643db5a19fbf3686", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/scanner.tsx:7"}, "properties": {"repobilityId": "58ade41532e914b1", "scanner": "scanner-primary", "fingerprint": "643db5a19fbf3686", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-655cd986a19ed198", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/cron/run-backfill.ts:7"}, "properties": {"repobilityId": "d9bcfe2719d73c98", "scanner": "scanner-primary", "fingerprint": "655cd986a19ed198", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b935d6bb83775edb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/api/cron/sync-zid-reviews.ts:31"}, "properties": {"repobilityId": "76c9d3f2df9e79e8", "scanner": "scanner-primary", "fingerprint": "b935d6bb83775edb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99320a10da783aa8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/api/feeds/google-product-reviews/[storeUid]/feed.xml.ts:12"}, "properties": {"repobilityId": "718aa8190168d9c7", "scanner": "scanner-primary", "fingerprint": "99320a10da783aa8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b46201e23d61eed", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/api/og/share-card.tsx:3"}, "properties": {"repobilityId": "4b1f6ef46888e0c4", "scanner": "scanner-primary", "fingerprint": "0b46201e23d61eed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c61366a957aa7f98", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in src/pages/api/admin/cleanup-metrics.ts:17"}, "properties": {"repobilityId": "d38db9f316e57ba7", "scanner": "scanner-primary", "fingerprint": "c61366a957aa7f98", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-943f0d0735713085", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/admin/outage-audit.ts:7"}, "properties": {"repobilityId": "db4f2e97d668cd28", "scanner": "scanner-primary", "fingerprint": "943f0d0735713085", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4a88e543ab31a1c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/admin/trigger-updated-order.ts:37"}, "properties": {"repobilityId": "c349c410452bb269", "scanner": "scanner-primary", "fingerprint": "c4a88e543ab31a1c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4fb99762487e41ed", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in src/pages/api/admin/cleanup-sync-logs.ts:17"}, "properties": {"repobilityId": "64630382fcd10d90", "scanner": "scanner-primary", "fingerprint": "4fb99762487e41ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9b7daf37daf18ce0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/admin/salla/register-webhooks.ts:6"}, "properties": {"repobilityId": "756f662240274885", "scanner": "scanner-primary", "fingerprint": "9b7daf37daf18ce0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46d7da2fcf946c2d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/admin/backfill/probe-all.ts:6"}, "properties": {"repobilityId": "40a2834358706e57", "scanner": "scanner-primary", "fingerprint": "46d7da2fcf946c2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9218713e1ef58337", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_if_needed/salla/refresh.ts:29"}, "properties": {"repobilityId": "611e4b5b2505de40", "scanner": "scanner-primary", "fingerprint": "9218713e1ef58337", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1a98cfe12c1185d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_admin/zid-maintenance.ts:102"}, "properties": {"repobilityId": "6a06d807e2b9e825", "scanner": "scanner-primary", "fingerprint": "f1a98cfe12c1185d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-549871a12eba6a73", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/_admin/debug-salla-reviews.ts:33"}, "properties": {"repobilityId": "638ddd16e97a762d", "scanner": "scanner-primary", "fingerprint": "549871a12eba6a73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d75ec9e122432ada", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/zid/callback.ts:54"}, "properties": {"repobilityId": "8990ce93ea11b0d0", "scanner": "scanner-primary", "fingerprint": "d75ec9e122432ada", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-920ba5a49d5e35dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/public/scan.ts:3"}, "properties": {"repobilityId": "c18ba1de51fc6160", "scanner": "scanner-primary", "fingerprint": "920ba5a49d5e35dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc1e79985eeff3ac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/public/scan.ts:877"}, "properties": {"repobilityId": "c2579dc1415984ce", "scanner": "scanner-primary", "fingerprint": "cc1e79985eeff3ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f7c27372a258d90", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/api/public/store-profile.ts:50"}, "properties": {"repobilityId": "547ee2cd98377716", "scanner": "scanner-primary", "fingerprint": "9f7c27372a258d90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d25eb24b0de72347", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/feeds/reviews.rss.xml.tsx:3"}, "properties": {"repobilityId": "362e40534eb3e923", "scanner": "scanner-primary", "fingerprint": "d25eb24b0de72347", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09c309ef84bcc14a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/feeds/seller-ratings.xml.tsx:3"}, "properties": {"repobilityId": "c84e7ef04c53f42f", "scanner": "scanner-primary", "fingerprint": "09c309ef84bcc14a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66059dc19249e117", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/feeds/google-aggregator-sample.xml.tsx:11"}, "properties": {"repobilityId": "7fe74d12c75fdb99", "scanner": "scanner-primary", "fingerprint": "66059dc19249e117", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ebcd6a22ec76d22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/feeds/google-aggregator-sample.xml.tsx:40"}, "properties": {"repobilityId": "7ee59c936b815d77", "scanner": "scanner-primary", "fingerprint": "0ebcd6a22ec76d22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a38edb1765b4fe1", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/pages/feeds/google-merchant-reviews-sample.xml.tsx:6"}, "properties": {"repobilityId": "68eaef205a8432c3", "scanner": "scanner-primary", "fingerprint": "7a38edb1765b4fe1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fffe6d56d8554cb5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/embedded/reviews.tsx:67"}, "properties": {"repobilityId": "b9fe26b0557bdc50", "scanner": "scanner-primary", "fingerprint": "fffe6d56d8554cb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfd318cdaf0962cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/og/share-card-html.tsx:3"}, "properties": {"repobilityId": "95ca71fc830dc0e4", "scanner": "scanner-primary", "fingerprint": "bfd318cdaf0962cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc02466ea82aa628", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/store/[storeUid]/reviews.tsx:188"}, "properties": {"repobilityId": "6581ee5eb35f9052", "scanner": "scanner-primary", "fingerprint": "dc02466ea82aa628", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-390ba450f72f7dc0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/store/[storeUid]/reviews.tsx:109"}, "properties": {"repobilityId": "bb7d390b09fb5542", "scanner": "scanner-primary", "fingerprint": "390ba450f72f7dc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e209a66eaaff798", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/store/[storeUid]/certificate.tsx:3"}, "properties": {"repobilityId": "928ec6bebe521b4f", "scanner": "scanner-primary", "fingerprint": "8e209a66eaaff798", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59ac5b742d3b14f6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/blog/login.tsx:6"}, "properties": {"repobilityId": "62044749a4481cc9", "scanner": "scanner-primary", "fingerprint": "59ac5b742d3b14f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24d5fe49156a7f7d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/blog/rss.xml.tsx:4"}, "properties": {"repobilityId": "c0ab25f467f42633", "scanner": "scanner-primary", "fingerprint": "24d5fe49156a7f7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e52984db183aeff0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/flags/useFlag.ts:29"}, "properties": {"repobilityId": "8de62104295cdb12", "scanner": "scanner-primary", "fingerprint": "e52984db183aeff0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b6d67b18978a54f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/firebase.ts:35"}, "properties": {"repobilityId": "615953f6e132af7c", "scanner": "scanner-primary", "fingerprint": "9b6d67b18978a54f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b37c359a8ab428e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/sallaClient.ts:47"}, "properties": {"repobilityId": "de41849490f5430f", "scanner": "scanner-primary", "fingerprint": "3b37c359a8ab428e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f5e084d9663988f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/feeds/buildGoogleProductReviewsXml.ts:3"}, "properties": {"repobilityId": "5b38617d2e08ff6d", "scanner": "scanner-primary", "fingerprint": "f5e084d9663988f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40d49dae44e37459", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/feeds/buildReviewFeedData.ts:8"}, "properties": {"repobilityId": "0fb4482cec680a91", "scanner": "scanner-primary", "fingerprint": "40d49dae44e37459", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0081b8afffbd8e8", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/feeds/buildGoogleMerchantReviewsXml.ts:14"}, "properties": {"repobilityId": "9fb92ce788c14036", "scanner": "scanner-primary", "fingerprint": "c0081b8afffbd8e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0f94886e3964a51", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/feeds/buildGoogleAggregatorReviewsXml.ts:9"}, "properties": {"repobilityId": "1fae80d54cb6a135", "scanner": "scanner-primary", "fingerprint": "c0f94886e3964a51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b34b1943a4311870", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/schema/buildCertificateSchema.ts:98"}, "properties": {"repobilityId": "270f2cee30174e78", "scanner": "scanner-primary", "fingerprint": "b34b1943a4311870", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c8a8967c002e81e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zid/auth.ts:23"}, "properties": {"repobilityId": "900f4bc5efeee2cb", "scanner": "scanner-primary", "fingerprint": "0c8a8967c002e81e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-810489840216c045", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/zid/tokens.ts:3"}, "properties": {"repobilityId": "ee64d4037591a21f", "scanner": "scanner-primary", "fingerprint": "810489840216c045", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb1da8ab3a7d4f5a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zid/client.ts:139"}, "properties": {"repobilityId": "479c574b8b2b5588", "scanner": "scanner-primary", "fingerprint": "cb1da8ab3a7d4f5a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d4ef5fb597f4f97", "level": "note", "message": {"text": "Legacy-named symbol `firestore_backup` in functions/src/backup-firestore.ts:181"}, "properties": {"repobilityId": "54846c1c364c5716", "scanner": "scanner-primary", "fingerprint": "1d4ef5fb597f4f97", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-00cdc4b7e8dfcfa2", "level": "none", "message": {"text": "Commented-code block (5 lines) in functions/src/backup-firestore.ts:35"}, "properties": {"repobilityId": "c5474e296daeaa48", "scanner": "scanner-primary", "fingerprint": "00cdc4b7e8dfcfa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-108402958899d161", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 zid/api/refresh.ts:23"}, "properties": {"repobilityId": "928f9bf15be05739", "scanner": "scanner-primary", "fingerprint": "108402958899d161", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-305c8de9b3bacd29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 zid/pages/zid.tsx:20"}, "properties": {"repobilityId": "00249dbd394f3b8a", "scanner": "scanner-primary", "fingerprint": "305c8de9b3bacd29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be1715cde205d3e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 zid/lib/auth.ts:23"}, "properties": {"repobilityId": "0d015fbbb586ca99", "scanner": "scanner-primary", "fingerprint": "be1715cde205d3e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c73f3a233535924", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/widgets/theqah-widget.js:7"}, "properties": {"repobilityId": "035e877072f8bc3a", "scanner": "scanner-primary", "fingerprint": "1c73f3a233535924", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a6dd8b77e13299c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/widgets/theqah-widget.js:144"}, "properties": {"repobilityId": "cc930bfa748d5e2a", "scanner": "scanner-primary", "fingerprint": "0a6dd8b77e13299c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-90dc2b407a9d0670", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/widgets/theqah-widget.min.js:2"}, "properties": {"repobilityId": "e16d7e53894fd34b", "scanner": "scanner-primary", "fingerprint": "90dc2b407a9d0670", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}