{"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-61f49afbbfd18d74", "name": "Stray `console.log` in TS/JS \u2014 config/api.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 config/api.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a54646aaa5419b51", "name": "Stray `console.log` in TS/JS \u2014 tests/smoke.spec.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/smoke.spec.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56cce337c518ad4d", "name": "Stray `console.log` in TS/JS \u2014 tests/cloudinary-upload-e2e.spec.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/cloudinary-upload-e2e.spec.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd081ebeecd29d7a", "name": "Stray `console.log` in TS/JS \u2014 tests/overnight-functionality.spec.ts:643", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/overnight-functionality.spec.ts:643"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b40741969f42540f", "name": "Stray `console.log` in TS/JS \u2014 api/codex.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/codex.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-785de79b8faac736", "name": "Stray `console.log` in TS/JS \u2014 api/upload.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/upload.ts:244"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed621fa523553c5c", "name": "Stray `console.log` in TS/JS \u2014 api/geocoding.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/geocoding.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-262740871598534f", "name": "Stray `console.log` in TS/JS \u2014 api/entities.ts:443", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/entities.ts:443"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25d6c8cc2889aac4", "name": "TODO/FIXME marker in shipping code \u2014 api/http.ts:2", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 api/http.ts:2"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2994519052616f0e", "name": "Stray `console.log` in TS/JS \u2014 api/http.ts:258", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/http.ts:258"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c5f306bcbc47375", "name": "Stray `console.log` in TS/JS \u2014 scripts/repeat-command.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repeat-command.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-67021fd74d85728e", "name": "Stray `console.log` in TS/JS \u2014 scripts/patch-lottie-ios.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/patch-lottie-ios.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-a47b438085e1da61", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-env-alignment.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-env-alignment.ts:148"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1456973d98f0291", "name": "Stray `console.log` in TS/JS \u2014 scripts/system-architecture-audit.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/system-architecture-audit.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-b4156d5fa68b9c94", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-env-alignment.js:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-env-alignment.js:130"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ba564598471181d", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-play-service-account.js:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-play-service-account.js: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-4958c49db621fe6c", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-coach-organization.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-coach-organization.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c6315a10c14cb1d", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-async-handler-usage.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-async-handler-usage.js: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-62fe067163775e04", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-with-retry.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-with-retry.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-0a331ad764bb9f5f", "name": "Stray `console.log` in TS/JS \u2014 scripts/overnight-improvements.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/overnight-improvements.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f61aa03a7d52513", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-email-system.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-email-system.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44e77644311794e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-sendgrid-templates.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-sendgrid-templates.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-020c95c81e4b9120", "name": "Stray `console.log` in TS/JS \u2014 scripts/exportForSendGrid.js:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/exportForSendGrid.js:162"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbf29b3f8ba6ebc9", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-profile-pages.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-profile-pages.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a983ca01ceacbd7", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-user-cache-invalidation.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user-cache-invalidation.js: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-fae68aac2d0950ac", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-secret-literals.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-secret-literals.js:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d35b82125c75712", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-error-envelope-usage.js:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-error-envelope-usage.js:98"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5af3fa299a3f5d1b", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-all-emails.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-all-emails.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6f04c2efdab699a", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-games.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-games.js:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9f6402a94cc2270", "name": "Stray `console.log` in TS/JS \u2014 utils/testingMonitor.web.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/testingMonitor.web.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-4692fdec2b3d5543", "name": "Stray `console.log` in TS/JS \u2014 utils/ensureUploadableUri.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/ensureUploadableUri.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7ad5979ff8d60ce", "name": "Stray `console.log` in TS/JS \u2014 utils/analytics.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/analytics.ts:120"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-290ed3d071063419", "name": "Stray `console.log` in TS/JS \u2014 utils/uploadUtils.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/uploadUtils.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-86ada24c4729ff16", "name": "Stray `console.log` in TS/JS \u2014 utils/darkModeFixGuide.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/darkModeFixGuide.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-3d4c27098021cf6a", "name": "Stray `console.log` in TS/JS \u2014 utils/share.ts:124", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/share.ts:124"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ef91588ed661ba6", "name": "Stray `console.log` in TS/JS \u2014 utils/materializeICloudAsset.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/materializeICloudAsset.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-f9ddf8a79bf8d9fa", "name": "Stray `console.log` in TS/JS \u2014 utils/sentry.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/sentry.ts:148"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23e917963ccae22c", "name": "Stray `console.log` in TS/JS \u2014 utils/pushNotifications.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/pushNotifications.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-e4ec3107e6f38416", "name": "Stray `console.log` in TS/JS \u2014 components/NotificationTapHandler.tsx:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/NotificationTapHandler.tsx:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6919fa70803bb013", "name": "Stray `console.log` in TS/JS \u2014 app/team-page.tsx:642", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/team-page.tsx:642"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d37ca2cd3499490", "name": "Stray `console.log` in TS/JS \u2014 app/sign-in.tsx:175", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/sign-in.tsx:175"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69cccad6ef504478", "name": "Stray `console.log` in TS/JS \u2014 app/_layout.tsx:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/_layout.tsx:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b184b922d5b86b5", "name": "TODO/FIXME marker in shipping code \u2014 app/manage-users.tsx:84", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/manage-users.tsx:84"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01e4d09b023a516b", "name": "TODO/FIXME marker in shipping code \u2014 app/season-stats.tsx:155", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/season-stats.tsx:155"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-520913fe5fb5454e", "name": "TODO/FIXME marker in shipping code \u2014 app/settings/request-host-event.tsx:28", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/settings/request-host-event.tsx:28"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77e17f05b08f8f57", "name": "Stray `console.log` in TS/JS \u2014 app/onboarding/index.tsx:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/onboarding/index.tsx:89"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f5f970b91259531", "name": "Stray `console.log` in TS/JS \u2014 app/game-details/GameDetailsScreen.tsx:1046", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/game-details/GameDetailsScreen.tsx:1046"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d92f257c6e02fc5f", "name": "Stray `console.log` in TS/JS \u2014 app/game-details/__tests__/GameDetailsScreen.vote.test.tsx:224", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/game-details/__tests__/GameDetailsScreen.vote.test.tsx:224"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec5d23ef7174ccc3", "name": "Stray `console.log` in TS/JS \u2014 hooks/useAdIAP.ts:366", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useAdIAP.ts:366"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2330c2ee619dd174", "name": "Stray `console.log` in TS/JS \u2014 hooks/useAppleAuth.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useAppleAuth.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79294975d7f440ee", "name": "Stray `console.log` in TS/JS \u2014 hooks/useUploadProgress.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useUploadProgress.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-d12d7950c1d540cf", "name": "Stray `console.log` in TS/JS \u2014 hooks/useIAP.ts:251", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useIAP.ts:251"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a074c24cd240af8e", "name": "Stray `console.log` in TS/JS \u2014 hooks/useAnalytics.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useAnalytics.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46e9b4e2f0ac4076", "name": "Stray `console.log` in TS/JS \u2014 server/test-cloudinary.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/test-cloudinary.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-9663f2227f70c260", "name": "Stray `console.log` in TS/JS \u2014 server/_test_emails.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/_test_emails.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3628a695742aeec4", "name": "Stray `console.log` in TS/JS \u2014 server/_find_admin.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/_find_admin.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba8776a00e434db1", "name": "Stray `console.log` in TS/JS \u2014 server/mock-server.js:323", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/mock-server.js:323"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8a7e11cfc419c78", "name": "Stray `console.log` in TS/JS \u2014 server/check-db.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/check-db.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a70923b2a2a2380", "name": "Stray `console.log` in TS/JS \u2014 server/verify-email.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/verify-email.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-7cb54034c493e244", "name": "Stray `console.log` in TS/JS \u2014 server/check_users.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/check_users.js: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-cb36400550745abe", "name": "Stray `console.log` in TS/JS \u2014 server/seed-games.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-games.js:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70deaca74351812a", "name": "Stray `console.log` in TS/JS \u2014 server/fix-onboarding.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/fix-onboarding.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-942b891216b965af", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-guard-bypass.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-guard-bypass.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd21a9bfac6d9617", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/db-integrity-check.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/db-integrity-check.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a854b56e55593a52", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/prepare-coach-uat-accounts.ts:585", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/prepare-coach-uat-accounts.ts:585"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5917d3c90e82e453", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/concurrent-test.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/concurrent-test.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aef5c061aa5c07a5", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/notification-test.ts:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/notification-test.ts:184"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41b885eece00cdae", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-rate-limit-coverage.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-rate-limit-coverage.ts:168"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5692e6e8c42044d4", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/create-demo-account.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-demo-account.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-495731ad119f5ab6", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-polling-approval.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-polling-approval.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5204e96fc2f8dee", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-cloudinary.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-cloudinary.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6f25a59f0e1403e", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-coach-approval-drift.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-coach-approval-drift.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-cca20831ef1352de", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-ad-dashboard-review-flow.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-ad-dashboard-review-flow.ts:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbdb138bed77f3da", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/check-coordinates.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/check-coordinates.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a6955afdc13f70f", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-ad-approval-flow.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-ad-approval-flow.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-403bb7c6dd30b204", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-identity-uniqueness.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-identity-uniqueness.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-f42ac8c9209c37de", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-event-approval-flow.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-event-approval-flow.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-a5bd178cc9d6cc6c", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/update-demo-images.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/update-demo-images.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-463c6491c9444364", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-user-billing-state-drift.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-user-billing-state-drift.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-9cef71eaccf6d5ef", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/geofencing-test.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/geofencing-test.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9df31f6fffa4cf42", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-session-enforcement.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-session-enforcement.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2fcf3cf57b2b7448", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/test-production-email.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/test-production-email.ts: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-21e0cb5bc10959c6", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/cross-role-e2e-audit.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/cross-role-e2e-audit.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-def9f94bb3b07e39", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-templates.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-templates.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-dd37f4e09c0504cc", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/api-contract-tests.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/api-contract-tests.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b98b77a9b721e1", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/geocode-single-game.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/geocode-single-game.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c681da0ec950d3", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-org-manager-access.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-org-manager-access.ts:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39938aa198cc7333", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-organizations.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-organizations.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-1db7ca9115178a05", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/create-test-games.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-test-games.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-129ad6f6f73031c2", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-route-battery.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-route-battery.ts:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c12adae992cc397", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-creating-flow.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-creating-flow.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1ed9f5167b90390", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/fan-journey-test.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fan-journey-test.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-c9831ad9242a47da", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-onboarding-persistence.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-onboarding-persistence.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-c8db71fe18ddf097", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/reconcile-post-upvotes.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/reconcile-post-upvotes.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc2bc68c9fdb72cc", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/preflight-team-org-required.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/preflight-team-org-required.ts:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6db43515ed3239fc", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-join-request-approved-system.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-join-request-approved-system.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-85f9df177f812d9f", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-config.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-config.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-3c159aaa676c1a12", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/ghost-user-test.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ghost-user-test.ts:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2ba1733f86668ba", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-beta-data.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-beta-data.js: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-220c8839727d5930", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/test-api-key.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/test-api-key.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff28ef1f64703d40", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/security-test.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/security-test.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b65ddc06ab42c6f8", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/comprehensive-test-suite.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/comprehensive-test-suite.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e69b90da247e3da", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/ux-verification-final.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ux-verification-final.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-274194b77e0cbd7c", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-production-health.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-production-health.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e41768dd747b1a56", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/final-exhaustive-tests.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/final-exhaustive-tests.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50808903d0c45942", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-all-data.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-all-data.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-2c1acfa3275a914a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/admin-e2e-audit.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/admin-e2e-audit.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60eba95e05e267a6", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/diagnose-email.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/diagnose-email.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-27b3ffd461f7fd0b", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/coach-journey-test.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/coach-journey-test.ts:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36fb5bc862897348", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/add-test-coordinates.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/add-test-coordinates.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-4d5b485912e21959", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/create-promo.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-promo.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7bdbb6e9ad30c033", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/start-verify-api.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/start-verify-api.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-9b1f7dbe3361a50e", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-approval.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-approval.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-2237cf3d3cd0d4d4", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/test-email-send.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/test-email-send.ts:89"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-856e652e182fe3a8", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/geocode-all-games.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/geocode-all-games.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcfdb0173fc62cff", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/performance-baseline-test.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/performance-baseline-test.ts:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47c514667af5cab6", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-flow.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-flow.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0f908f4c5398031", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/ghost-test-production.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ghost-test-production.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2abf1686e10a5a1b", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-push-token-registration.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-push-token-registration.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31ea555f32810308", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-demo-matchups.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-demo-matchups.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01b5df7995949f8e", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-production.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-production.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-093e81b7ff190508", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/exercise-all-email-flows.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/exercise-all-email-flows.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29faa1fd86a865c5", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/create-fifa-worldcup-2026.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-fifa-worldcup-2026.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-00b5a8609eea2142", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-usernames.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-usernames.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-2dd694507b2c67da", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-user-auth-state-drift.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-user-auth-state-drift.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-d9bdec47f38ce697", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/rate-limit-test.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/rate-limit-test.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-8308e3ea881db616", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-full-regression.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-full-regression.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-c96b3db49f841936", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-session-isolation.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-session-isolation.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14311d1b870d19b2", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/preview-all-emails.ts:549", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/preview-all-emails.ts:549"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85e9d1ca4efb5b6f", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/auth-security-test.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/auth-security-test.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eac543119f4f89a5", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/security-smoke-tests.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/security-smoke-tests.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-254384532b7a8010", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/create-sample-event.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-sample-event.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-253cffc0cac8467a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-admin-tools.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-admin-tools.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a96cb447047bfab", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-auth-canary.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-auth-canary.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-3cbf12b3e2b15954", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/ad-hosting-test.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ad-hosting-test.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-37b8e8bb3a1e3626", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-coach-agreements.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-coach-agreements.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b55315870ec202d", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-db.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-db.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd179723313b9a33", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-profile-team-security.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-profile-team-security.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-185feac21e98a8d5", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-go-live.ts:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-go-live.ts:180"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8e59160f02bb591", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/seed-demo-matchups.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/seed-demo-matchups.ts:161"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30f2acd9ff008912", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-teams-orgs.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-teams-orgs.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8951601a8841a269", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-app-review-account.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-app-review-account.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-5f06d7aa73a7c05a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-fan-flow.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-fan-flow.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-e0d6072e2fd942b1", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/email-delivery-test.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/email-delivery-test.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-fbf93049d38db9a3", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/fifa/create-fifa-events.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fifa/create-fifa-events.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-62bf23abd14f5a60", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/fifa/rename-cote-divoire.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fifa/rename-cote-divoire.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-ad5b3cd5b473d934", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/load/validate-distributed-lock.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/load/validate-distributed-lock.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-730ffefa7423baee", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/load/p0-load-smoke.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/load/p0-load-smoke.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2415435632a0b18a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/one-off/create-one-off-events.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/one-off/create-one-off-events.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-21488ea86493e457", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/stripe/create_stripe_prices.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/stripe/create_stripe_prices.js: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-de02c5ddb232eb2c", "name": "Stray `console.log` in TS/JS \u2014 server/prisma/beta-seed.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/prisma/beta-seed.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00471dd812490e20", "name": "Stray `console.log` in TS/JS \u2014 server/prisma/seed.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/prisma/seed.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f00f87c9744e5479", "name": "Stray `console.log` in TS/JS \u2014 server/prisma/beta-seed.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/prisma/beta-seed.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d5f8f5a79bfce69", "name": "Stray `console.log` in TS/JS \u2014 server/src/index.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/index.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c2bc111e8fcb6e5", "name": "Stray `console.log` in TS/JS \u2014 server/src/__tests__/access-matrix.test.ts:850", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/__tests__/access-matrix.test.ts:850"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5668a852b7d9af05", "name": "TODO/FIXME marker in shipping code \u2014 server/src/__tests__/error-handling.test.ts:12", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/__tests__/error-handling.test.ts:12"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cb79b04f00b70d8", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/coachStateDriftProbe.ts:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/coachStateDriftProbe.ts:170"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c38ed5fbbed87e31", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/email.ts:1482", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/email.ts:1482"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a16e39456a3f5ce1", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/debugLog.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/debugLog.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65fa5e466b4fe93f", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/paymentInternals.ts:1070", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/paymentInternals.ts:1070"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-529ad493f5c0a6f8", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/appleIapReconciliation.ts:236", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/appleIapReconciliation.ts:236"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-249fc8dd6fad9917", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/sms.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/sms.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b8e7c6965c0f7df", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/stripeReconciliation.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/stripeReconciliation.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-7655e67bc4d81a83", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/approvalService.ts:1220", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/approvalService.ts:1220"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12ab8b16f473112b", "name": "Stray `console.log` in TS/JS \u2014 server/src/lib/dbBackupSync.ts:242", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/dbBackupSync.ts:242"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-032f7324486b3782", "name": "Stray `console.log` in TS/JS \u2014 server/src/workers/dataExportWorker.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/workers/dataExportWorker.ts:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7689b0bbd5ceb40b", "name": "Stray `console.log` in TS/JS \u2014 server/src/cron/overnightTasks.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/cron/overnightTasks.ts:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7446db8cd5ca1c83", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/email/EmailService.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/email/EmailService.ts:105"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3afe0964279483ac", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/email/service.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/email/service.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59347c45ff334951", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/scheduler.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/scheduler.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-0099a0e2af845281", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/queues.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/queues.ts:123"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd7d679673fd0197", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/workers/emailWorker.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/workers/emailWorker.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d74ea5f0dd1c0eca", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/workers/notificationWorker.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/workers/notificationWorker.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce515def155e271a", "name": "Stray `console.log` in TS/JS \u2014 tools/diagnose-buttons.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/diagnose-buttons.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5bdeddef2af645b1", "name": "Stray `console.log` in TS/JS \u2014 tools/ensure-simple-swizzle.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/ensure-simple-swizzle.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-b22cd2ba04185aa5", "name": "Stray `console.log` in TS/JS \u2014 tools/ensure-debug-index.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/ensure-debug-index.js: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-dcf7d57ebbbf504c", "name": "Stray `console.log` in TS/JS \u2014 tools/ensure-is-arrayish.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/ensure-is-arrayish.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-2a7101cab868b0d8", "name": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-expo-updates-bouncycastle.js:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-expo-updates-bouncycastle.js:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b50c89d8f983d297", "name": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-router-sitemap.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-router-sitemap.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-6bd5b467265be9e5", "name": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-button.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-button.js:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b6ae18b2103b042", "name": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-data.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-data.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb0536e5f3812735", "name": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-all.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-all.js: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-e22ee64d00eecf1e", "name": "Stray `console.log` in TS/JS \u2014 context/onboardingReducer.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 context/onboardingReducer.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd28f8f45b9df8cc", "name": "Stray `console.log` in TS/JS \u2014 context/AuthProvider.tsx:278", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 context/AuthProvider.tsx:278"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f44bfd6b3074ea5", "name": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidManifestCleanup.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidManifestCleanup.js: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-5dcad9642e3a35d4", "name": "Stray `console.log` in TS/JS \u2014 plugins/withStripeProguardFix.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withStripeProguardFix.js:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c1cea99bc5bf52b", "name": "Stray `console.log` in TS/JS \u2014 plugins/withGoogleMaps.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withGoogleMaps.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-f919c0aa66e85e7f", "name": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidBuildConfig.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidBuildConfig.js:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-342f57253e057d60", "name": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidLintExtraTranslationFix.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidLintExtraTranslationFix.js:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f37c7bc4e88c0cc", "name": "Stray `console.log` in TS/JS \u2014 plugins/withGoogleOAuth.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withGoogleOAuth.js:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb91bdcfb9c46243", "name": "Privileged port 11 in use", "shortDescription": {"text": "Privileged port 11 in use"}, "fullDescription": {"text": "Port 11 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b78043210ed11a4", "name": "Privileged port 12 in use", "shortDescription": {"text": "Privileged port 12 in use"}, "fullDescription": {"text": "Port 12 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe245eb896bfa316", "name": "Privileged port 35 in use", "shortDescription": {"text": "Privileged port 35 in use"}, "fullDescription": {"text": "Port 35 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91218874247567bf", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f15ad5b775a5391", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64def0b1ef09c966", "name": "Privileged port 4 in use", "shortDescription": {"text": "Privileged port 4 in use"}, "fullDescription": {"text": "Port 4 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7da8dba9c6c53daf", "name": "Privileged port 40 in use", "shortDescription": {"text": "Privileged port 40 in use"}, "fullDescription": {"text": "Port 40 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b69f45b2dcff8d24", "name": "Dockerfile runs as root: server/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: server/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1f008f0713d4a6cc", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c82517a62bfec3b", "name": "Insecure pattern 'node_child_process' in __tests__/auth-screen-snapshot-contract.test.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in __tests__/auth-screen-snapshot-contract.test.ts:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3b07ffad0f2d7240", "name": "Insecure pattern 'node_child_process' in scripts/repeat-command.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/repeat-command.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9a3264ca048bb133", "name": "Possible secret in scripts/test-login-flow.sh", "shortDescription": {"text": "Possible secret in scripts/test-login-flow.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1d20e4e1fd6ebfb5", "name": "Insecure pattern 'node_child_process' in scripts/ensure-server-prisma-client.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ensure-server-prisma-client.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b16e92beadae0595", "name": "Possible secret in scripts/email-verification-test.sh", "shortDescription": {"text": "Possible secret in scripts/email-verification-test.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-8e546fea1c0c5016", "name": "Insecure pattern 'node_child_process' in scripts/check-async-handler-usage.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-async-handler-usage.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c27b15caf62a9e4", "name": "Insecure pattern 'node_child_process' in scripts/run-with-retry.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/run-with-retry.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32f58b031eff7c4f", "name": "Possible secret in scripts/prod-cross-system-e2e.sh", "shortDescription": {"text": "Possible secret in scripts/prod-cross-system-e2e.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5f84161df8dd3790", "name": "Insecure pattern 'node_child_process' in scripts/check-user-cache-invalidation.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-user-cache-invalidation.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-50abf1bec99d8a9f", "name": "Insecure pattern 'node_child_process' in scripts/check-secret-literals.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-secret-literals.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-501374e9d4ad917f", "name": "Insecure pattern 'node_child_process' in scripts/check-error-envelope-usage.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-error-envelope-usage.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e38d28ca9e66e71", "name": "Insecure pattern 'cors_wildcard' in server/mock-server.js:7", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/mock-server.js: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-2ff5276b419ebc13", "name": "Possible secret in server/scripts/verify-guard-bypass.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-guard-bypass.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-0b7f609ad3ae497c", "name": "Possible secret in server/scripts/concurrent-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/concurrent-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7fd655f907cc223a", "name": "Possible secret in server/scripts/notification-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/notification-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-bcf4ff961591de7d", "name": "Possible secret in server/scripts/verify-polling-approval.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-polling-approval.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5e9dd9a547d0b65e", "name": "Possible secret in server/scripts/verify-ad-dashboard-review-flow.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-ad-dashboard-review-flow.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-16ecf381406ff9eb", "name": "Possible secret in server/scripts/verify-ad-approval-flow.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-ad-approval-flow.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9a47b80678787069", "name": "Possible secret in server/scripts/verify-identity-uniqueness.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-identity-uniqueness.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f415d1aacfe014a6", "name": "Possible secret in server/scripts/verify-event-approval-flow.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-event-approval-flow.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f9c70550e3763650", "name": "Possible secret in server/scripts/geofencing-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/geofencing-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-847afbb58d7d79f2", "name": "Possible secret in server/scripts/verify-session-enforcement.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-session-enforcement.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-16574634013f1e7d", "name": "Possible secret in server/scripts/cross-role-e2e-audit.ts", "shortDescription": {"text": "Possible secret in server/scripts/cross-role-e2e-audit.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3e4c6b3275eb0db5", "name": "Possible secret in server/scripts/verify-org-manager-access.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-org-manager-access.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b1932801c30a54a7", "name": "Possible secret in server/scripts/verify-coach-creating-flow.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-coach-creating-flow.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-0b59aee7bffda769", "name": "Possible secret in server/scripts/verify-onboarding-persistence.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-onboarding-persistence.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-513e9f1cec90be19", "name": "Possible secret in server/scripts/ghost-user-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/ghost-user-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f9eeaf6eb466168c", "name": "Possible secret in server/scripts/security-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/security-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-86a19b568361ec25", "name": "Possible secret in server/scripts/comprehensive-test-suite.ts", "shortDescription": {"text": "Possible secret in server/scripts/comprehensive-test-suite.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5b7a9f8a0faf3a35", "name": "Possible secret in server/scripts/ux-verification-final.ts", "shortDescription": {"text": "Possible secret in server/scripts/ux-verification-final.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ea4be881be60c10e", "name": "Possible secret in server/scripts/admin-e2e-audit.ts", "shortDescription": {"text": "Possible secret in server/scripts/admin-e2e-audit.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-be7365f8300e7c95", "name": "Possible secret in server/scripts/coach-journey-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/coach-journey-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4767e93833fb6c53", "name": "Possible secret in server/scripts/smoke-test-approvals.sh", "shortDescription": {"text": "Possible secret in server/scripts/smoke-test-approvals.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-79b6494c9d9af8b4", "name": "Possible secret in server/scripts/performance-baseline-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/performance-baseline-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ca5c292aab3e0c5c", "name": "Possible secret in server/scripts/verify-coach-flow.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-coach-flow.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5c7cdfe93e3fcce2", "name": "Possible secret in server/scripts/verify-push-token-registration.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-push-token-registration.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-2181af65d23f3738", "name": "Possible secret in server/scripts/rate-limit-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-cd292b6d142603f7", "name": "Possible secret in server/scripts/verify-full-regression.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-full-regression.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-c40113029bf99dc7", "name": "Possible secret in server/scripts/verify-session-isolation.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-session-isolation.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ab14fe470b6c42fd", "name": "Possible secret in server/scripts/auth-security-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/auth-security-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d18ff590ec106724", "name": "Possible secret in server/scripts/verify-admin-tools.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-admin-tools.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f8e5e608c85c9e95", "name": "Possible secret in server/scripts/ad-hosting-test.ts", "shortDescription": {"text": "Possible secret in server/scripts/ad-hosting-test.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-88b2a87b844089a2", "name": "Possible secret in server/scripts/verify-profile-team-security.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-profile-team-security.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-0a5c4248e0e6bdb2", "name": "Possible secret in server/scripts/verify-app-review-account.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-app-review-account.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-c81269731d50fb1f", "name": "Possible secret in server/scripts/verify-fan-flow.ts", "shortDescription": {"text": "Possible secret in server/scripts/verify-fan-flow.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-20ce4b32c8cf585e", "name": "Insecure pattern 'node_child_process' in server/scripts/load/validate-distributed-lock.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/scripts/load/validate-distributed-lock.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8c9cbc83ac3339a", "name": "Possible secret in server/scripts/load/p0-load-smoke.ts", "shortDescription": {"text": "Possible secret in server/scripts/load/p0-load-smoke.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ef482213f26a4ddf", "name": "Insecure pattern 'node_child_process' in server/scripts/lib/railwayVerificationEnv.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/scripts/lib/railwayVerificationEnv.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8487684dfed4379", "name": "Possible secret in server/scripts/e2e/test-integration-crossmatrix.sh", "shortDescription": {"text": "Possible secret in server/scripts/e2e/test-integration-crossmatrix.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-444f1822fa504387", "name": "Possible secret in server/scripts/e2e/test-single-session.sh", "shortDescription": {"text": "Possible secret in server/scripts/e2e/test-single-session.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-e97712ec1c9815eb", "name": "Possible secret in server/scripts/e2e/README.md", "shortDescription": {"text": "Possible secret in server/scripts/e2e/README.md"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6d9be84e50a31a90", "name": "Possible secret in server/scripts/e2e/test-coach-application-flow.sh", "shortDescription": {"text": "Possible secret in server/scripts/e2e/test-coach-application-flow.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-65acb237b7f85be7", "name": "Possible secret in server/src/__tests__/helpers/authE2eTestUtils.ts", "shortDescription": {"text": "Possible secret in server/src/__tests__/helpers/authE2eTestUtils.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-17c0177327adfbfd", "name": "Insecure pattern 'document_write' in server/src/routes/ads.ts:1387", "shortDescription": {"text": "Insecure pattern 'document_write' in server/src/routes/ads.ts:1387"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7138758703724ba", "name": "Insecure pattern 'node_child_process' in .github/workflows/auto-changelog.yml:40", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .github/workflows/auto-changelog.yml:40"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-399a4264d01a417e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e0386baf311680b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89967f6ed179377b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd8893acf75b50f9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81a21d670c72ed61", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b334f519343762d4", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c13ba795f853b63", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12522bf27bea173c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa26942120bbaad6", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c17d89558969814b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-04e08f82c9274098", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e87c163515399669", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9da62c7eb0e365f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d69cb1ac2fbd86b", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9ef14c492341d2c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30f5eb26fa7e355f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d5430ba799ede0f", "name": "GitHub Action tracks a moving branch", "shortDescription": {"text": "GitHub Action tracks a moving branch"}, "fullDescription": {"text": "snyk/actions/setup@master can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b15be8f4d15c427", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8b2216765f37902", "name": "Very large file: components/QuickAddGameModal.tsx (2090 lines)", "shortDescription": {"text": "Very large file: components/QuickAddGameModal.tsx (2090 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-8884cf06bd1f8273", "name": "Very large file: app/team-page.tsx (1748 lines)", "shortDescription": {"text": "Very large file: app/team-page.tsx (1748 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-ebe7de132636ef3f", "name": "Very large file: app/manage-season.tsx (2768 lines)", "shortDescription": {"text": "Very large file: app/manage-season.tsx (2768 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-dd0bea3bb1252779", "name": "Very large file: app/profile.tsx (2539 lines)", "shortDescription": {"text": "Very large file: app/profile.tsx (2539 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-ffee1b833cc1f650", "name": "Very large file: app/admin-dashboard.tsx (1218 lines)", "shortDescription": {"text": "Very large file: app/admin-dashboard.tsx (1218 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-42ff1ededdfcba40", "name": "Very large file: app/create-fan-event.tsx (1618 lines)", "shortDescription": {"text": "Very large file: app/create-fan-event.tsx (1618 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-21870aaa993fffd1", "name": "Very large file: app/ad-calendar.tsx (1575 lines)", "shortDescription": {"text": "Very large file: app/ad-calendar.tsx (1575 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-8ab6828c6ec4d124", "name": "Very large file: app/highlights.tsx (1711 lines)", "shortDescription": {"text": "Very large file: app/highlights.tsx (1711 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-98367a260b0a3c87", "name": "Very large file: app/post-detail.tsx (2607 lines)", "shortDescription": {"text": "Very large file: app/post-detail.tsx (2607 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-15158dbe7be0d6ce", "name": "Very large file: app/settings/index.tsx (1554 lines)", "shortDescription": {"text": "Very large file: app/settings/index.tsx (1554 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-6ebb888b29c8e4f8", "name": "Very large file: app/onboarding/step-3-league.tsx (2491 lines)", "shortDescription": {"text": "Very large file: app/onboarding/step-3-league.tsx (2491 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-bc538b14cd967206", "name": "Very large file: app/game-details/GameDetailsScreen.tsx (5026 lines)", "shortDescription": {"text": "Very large file: app/game-details/GameDetailsScreen.tsx (5026 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-5119394e10212ab0", "name": "Very large file: app/game-details/GameVerticalFeedScreen.tsx (1995 lines)", "shortDescription": {"text": "Very large file: app/game-details/GameVerticalFeedScreen.tsx (1995 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-bc9ec2037c5d5510", "name": "Very large file: app/features/navigation/screens/FeedScreen.tsx (2909 lines)", "shortDescription": {"text": "Very large file: app/features/navigation/screens/FeedScreen.tsx (2909 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-8ada6565b54d7a21", "name": "Very large file: app/features/navigation/screens/ProfileScreen.tsx (2631 lines)", "shortDescription": {"text": "Very large file: app/features/navigation/screens/ProfileScreen.tsx (2631 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-6e78c7fbd5f0b30b", "name": "Very large file: app/(tabs)/create-team.tsx (1816 lines)", "shortDescription": {"text": "Very large file: app/(tabs)/create-team.tsx (1816 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-b09fedf71d7128a2", "name": "Very large file: app/(tabs)/create-post.tsx (2689 lines)", "shortDescription": {"text": "Very large file: app/(tabs)/create-post.tsx (2689 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-abb8f1f9660c41b2", "name": "Very large file: app/(tabs)/team-contacts.tsx (3048 lines)", "shortDescription": {"text": "Very large file: app/(tabs)/team-contacts.tsx (3048 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-f97bae7fc2a7555e", "name": "Very large file: app/(tabs)/edit-profile.tsx (1709 lines)", "shortDescription": {"text": "Very large file: app/(tabs)/edit-profile.tsx (1709 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-66897cdd92fd5076", "name": "Very large file: app/(tabs)/discover/mobile-community.tsx (2940 lines)", "shortDescription": {"text": "Very large file: app/(tabs)/discover/mobile-community.tsx (2940 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-1ec57c30595dbc1a", "name": "Very large file: server/src/__tests__/coach-approval.test.ts (1388 lines)", "shortDescription": {"text": "Very large file: server/src/__tests__/coach-approval.test.ts (1388 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-77a582366ad4dc56", "name": "Very large file: server/src/lib/email.ts (2603 lines)", "shortDescription": {"text": "Very large file: server/src/lib/email.ts (2603 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-1ec912cd75c6d5bb", "name": "Very large file: server/src/routes/auth.ts (4023 lines)", "shortDescription": {"text": "Very large file: server/src/routes/auth.ts (4023 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-83edce41fc092265", "name": "Very large file: server/src/routes/organizations.ts (3887 lines)", "shortDescription": {"text": "Very large file: server/src/routes/organizations.ts (3887 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-58c659ebc662ed91", "name": "Very large file: server/src/routes/users.ts (1436 lines)", "shortDescription": {"text": "Very large file: server/src/routes/users.ts (1436 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-f7293f727c25cb6f", "name": "Very large file: server/src/routes/payments.ts (4022 lines)", "shortDescription": {"text": "Very large file: server/src/routes/payments.ts (4022 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-7739b936950fd341", "name": "Very large file: server/src/routes/games.ts (2761 lines)", "shortDescription": {"text": "Very large file: server/src/routes/games.ts (2761 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-aa47e144f76dd739", "name": "Very large file: server/src/routes/ads.ts (1859 lines)", "shortDescription": {"text": "Very large file: server/src/routes/ads.ts (1859 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-15bad539df917f2d", "name": "Very large file: server/src/routes/posts.ts (2198 lines)", "shortDescription": {"text": "Very large file: server/src/routes/posts.ts (2198 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-01b0502ca5494ff1", "name": "Very large file: server/src/routes/teams.ts (2628 lines)", "shortDescription": {"text": "Very large file: server/src/routes/teams.ts (2628 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-c89aa75df1c4f1b1", "name": "Very large file: server/src/routes/events.ts (1816 lines)", "shortDescription": {"text": "Very large file: server/src/routes/events.ts (1816 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-357de3e379aead4b", "name": "Very large file: context/AuthProvider.tsx (1328 lines)", "shortDescription": {"text": "Very large file: context/AuthProvider.tsx (1328 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-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 2433 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 297 placeholder/mock markers across 114 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-303734d19207d504", "name": "Agent authority lacks a verifier contract: .claude/commands/summary.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/summary.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-39902a3bf011a65f", "name": "Agent authority lacks a verifier contract: .cursor/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .cursor/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-0f9e4fc2065f5975", "name": "Commented-code block (9 lines) in app.config.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in app.config.js: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-54862a9a74879c84", "name": "Network/subprocess call without timeout or try/except \u2014 start_metro.py:9", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 start_metro.py:9"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77507d2f38eeadbe", "name": "Commented-code block (12 lines) in __tests__/http.test.ts:237", "shortDescription": {"text": "Commented-code block (12 lines) in __tests__/http.test.ts:237"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e97fed39d757dfd8", "name": "Commented-code block (6 lines) in __tests__/coach-event-approval.integration.test.tsx:31", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/coach-event-approval.integration.test.tsx: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-8d45a3bc166371df", "name": "Commented-code block (5 lines) in __tests__/session-flow-invariants.test.ts:78", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/session-flow-invariants.test.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-295db33dbca8a564", "name": "Commented-code block (5 lines) in tests/api/teams-api.spec.ts:212", "shortDescription": {"text": "Commented-code block (5 lines) in tests/api/teams-api.spec.ts:212"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe1d73ce21b4af23", "name": "Commented-code block (12 lines) in api/auth.ts:268", "shortDescription": {"text": "Commented-code block (12 lines) in api/auth.ts:268"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-791a480b72b3dd7d", "name": "Commented-code block (6 lines) in api/upload.ts:402", "shortDescription": {"text": "Commented-code block (6 lines) in api/upload.ts:402"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2523c6e75e67727", "name": "Commented-code block (10 lines) in api/http.ts:418", "shortDescription": {"text": "Commented-code block (10 lines) in api/http.ts:418"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-719918c5c15c5111", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/exportForSendGrid.js:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/exportForSendGrid.js:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6cc10baee74f6a0", "name": "Commented-code block (7 lines) in app/sign-in.tsx:125", "shortDescription": {"text": "Commented-code block (7 lines) in app/sign-in.tsx:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a08f9d9e4b24650f", "name": "Commented-code block (5 lines) in app/payment-cancel.tsx:23", "shortDescription": {"text": "Commented-code block (5 lines) in app/payment-cancel.tsx:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a92299d6c2ae58ff", "name": "Commented-code block (5 lines) in app/organization-join-requests.tsx:89", "shortDescription": {"text": "Commented-code block (5 lines) in app/organization-join-requests.tsx:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99753d44008b0155", "name": "Commented-code block (5 lines) in app/admin-dashboard.tsx:93", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin-dashboard.tsx:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f39017a059a8e731", "name": "Commented-code block (6 lines) in app/index.tsx:25", "shortDescription": {"text": "Commented-code block (6 lines) in app/index.tsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67306edaf1f4bf08", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/highlights.tsx:547", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/highlights.tsx:547"}, "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-9a8430d16f7aedfb", "name": "Commented-code block (6 lines) in app/forgot-password.tsx:77", "shortDescription": {"text": "Commented-code block (6 lines) in app/forgot-password.tsx:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dead46799b4f8e56", "name": "Commented-code block (6 lines) in app/onboarding/step-1-role.tsx:306", "shortDescription": {"text": "Commented-code block (6 lines) in app/onboarding/step-1-role.tsx:306"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-803e5e5e673d0f48", "name": "Commented-code block (6 lines) in app/onboarding/step-2-basic.tsx:388", "shortDescription": {"text": "Commented-code block (6 lines) in app/onboarding/step-2-basic.tsx:388"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d20e59b2eebbcf7", "name": "Commented-code block (6 lines) in app/onboarding/index.tsx:62", "shortDescription": {"text": "Commented-code block (6 lines) in app/onboarding/index.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e46a55240ed39e3b", "name": "Commented-code block (6 lines) in app/onboarding/step-3-league.tsx:571", "shortDescription": {"text": "Commented-code block (6 lines) in app/onboarding/step-3-league.tsx:571"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b222256eb4ed7bb", "name": "Commented-code block (5 lines) in app/onboarding/_layout.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in app/onboarding/_layout.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecfc3e0a3ec153f6", "name": "Commented-code block (5 lines) in app/features/navigation/screens/FeedScreen.tsx:302", "shortDescription": {"text": "Commented-code block (5 lines) in app/features/navigation/screens/FeedScreen.tsx:302"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f58cfbd0dc319c8", "name": "Commented-code block (6 lines) in hooks/useRequireCoach.ts:27", "shortDescription": {"text": "Commented-code block (6 lines) in hooks/useRequireCoach.ts:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b3e7f5912db8973", "name": "Legacy-named symbol `vh_pending_ad_iap_receipt_verifications_v1` in hooks/useAdIAP.ts:53", "shortDescription": {"text": "Legacy-named symbol `vh_pending_ad_iap_receipt_verifications_v1` in hooks/useAdIAP.ts:53"}, "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-476920b01bc71e66", "name": "Commented-code block (8 lines) in hooks/useAppleAuth.ts:52", "shortDescription": {"text": "Commented-code block (8 lines) in hooks/useAppleAuth.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f21b96d1b42ec915", "name": "Commented-code block (5 lines) in hooks/useGoogleAuth.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in hooks/useGoogleAuth.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df76686579861ae3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useGoogleAuth.ts:231", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useGoogleAuth.ts:231"}, "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-d44ad9d5ead3c4e9", "name": "Commented-code block (10 lines) in server/jest.config.js:19", "shortDescription": {"text": "Commented-code block (10 lines) in server/jest.config.js:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-718cd4dd20a43323", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/verify-cloudinary.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/verify-cloudinary.ts:27"}, "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-4429d5dbd6c2425c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/verify-production-health.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/verify-production-health.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-9c8b8844385dbc39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/wipe-all-data.ts:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/wipe-all-data.ts:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ece08c8622c28df", "name": "Commented-code block (5 lines) in server/scripts/ad-hosting-test.ts:546", "shortDescription": {"text": "Commented-code block (5 lines) in server/scripts/ad-hosting-test.ts:546"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29de7b9b54e3fd7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/load/p0-load-smoke.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/load/p0-load-smoke.ts:95"}, "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-6ce583da8d9bfeef", "name": "Commented-code block (7 lines) in server/src/app.ts:326", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/app.ts:326"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed31ecb09f4c5736", "name": "Commented-code block (5 lines) in server/src/__tests__/cloudinary.test.ts:79", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/cloudinary.test.ts:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab234a4027f109b0", "name": "Commented-code block (5 lines) in server/src/__tests__/refresh-token-versioned-hash.test.ts:67", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/refresh-token-versioned-hash.test.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b0e0aceef54d987", "name": "Commented-code block (5 lines) in server/src/__tests__/email-template-payload-contract.test.ts:107", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/email-template-payload-contract.test.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a03911fbec2c77e2", "name": "Commented-code block (6 lines) in server/src/__tests__/migrations-shape.test.ts:159", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/__tests__/migrations-shape.test.ts:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-104987bbb1e7c9a0", "name": "Commented-code block (5 lines) in server/src/__tests__/email-audit-minor-resolver.test.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/email-audit-minor-resolver.test.ts:101"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af20d3a2c4801f52", "name": "Commented-code block (6 lines) in server/src/__tests__/coach-gate-matrix.test.ts:182", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/__tests__/coach-gate-matrix.test.ts:182"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9db3cedfabb8b461", "name": "Commented-code block (5 lines) in server/src/__tests__/api-events.test.ts:501", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/api-events.test.ts:501"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e019aca05baa6b3f", "name": "Commented-code block (5 lines) in server/src/__tests__/api-teams.test.ts:1009", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/api-teams.test.ts:1009"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2fb662df1ece754", "name": "Commented-code block (6 lines) in server/src/__tests__/api-group-chats.test.ts:219", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/__tests__/api-group-chats.test.ts:219"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fcfab4a676070ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/__tests__/api-group-chats.test.ts:222", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/__tests__/api-group-chats.test.ts:222"}, "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-cf80a7e22553bcf9", "name": "Legacy-named symbol `storedLegacy` in server/src/__tests__/refresh-token-device-fingerprint.test.ts:51", "shortDescription": {"text": "Legacy-named symbol `storedLegacy` in server/src/__tests__/refresh-token-device-fingerprint.test.ts:51"}, "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-9cd86e32c3e1ba4b", "name": "Commented-code block (5 lines) in server/src/__tests__/anonymized-user-purge.test.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/anonymized-user-purge.test.ts:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-412d48847d5f3b07", "name": "Commented-code block (5 lines) in server/src/__tests__/event-approval-race.test.ts:38", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/event-approval-race.test.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-b9b064e22213b1d8", "name": "Commented-code block (5 lines) in server/src/__tests__/auth-entry-routing-guards.test.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/__tests__/auth-entry-routing-guards.test.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-aa2c92dcc5bc1bdb", "name": "Commented-code block (6 lines) in server/src/__tests__/requireOnboarded-bypass.test.ts:65", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/__tests__/requireOnboarded-bypass.test.ts:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4936379eeb97feab", "name": "Commented-code block (5 lines) in server/src/middleware/auth.ts:116", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/middleware/auth.ts:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dd5eb1991a14c88", "name": "Commented-code block (5 lines) in server/src/middleware/rateLimiters.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/middleware/rateLimiters.ts:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06aab7bf6c4af161", "name": "Commented-code block (7 lines) in server/src/middleware/errorHandler.ts:39", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/middleware/errorHandler.ts:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c411c01768fe02a", "name": "Commented-code block (6 lines) in server/src/middleware/requireOnboarded.ts:31", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/middleware/requireOnboarded.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-9e25ea904e080f22", "name": "Commented-code block (5 lines) in server/src/lib/email.ts:176", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/lib/email.ts:176"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8803bf24339c5a99", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/lib/wipeProduction.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/lib/wipeProduction.ts:91"}, "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-f903ed994761a2c0", "name": "Commented-code block (5 lines) in server/src/lib/geofencing.ts:193", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/lib/geofencing.ts:193"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06cc22c4406165ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/lib/geocoding.ts:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/lib/geocoding.ts:126"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0de978be4fb09e73", "name": "Commented-code block (7 lines) in server/src/lib/cloudinary.ts:137", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/lib/cloudinary.ts:137"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9f6042973441d00", "name": "Commented-code block (7 lines) in server/src/lib/promos.ts:114", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/lib/promos.ts:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c627f54c175a663", "name": "Commented-code block (5 lines) in server/src/lib/pushNotifications.ts:58", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/lib/pushNotifications.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-b929bd8ce7096093", "name": "Commented-code block (6 lines) in server/src/lib/billingLifecycle.ts:243", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/lib/billingLifecycle.ts:243"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31837be873e08770", "name": "Commented-code block (5 lines) in server/src/lib/jwt.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/lib/jwt.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c8ed5858c425c17", "name": "Commented-code block (5 lines) in server/src/lib/adImageModeration.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/lib/adImageModeration.ts:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e104702b2b56a1c4", "name": "Commented-code block (6 lines) in server/src/lib/mentionNotifications.ts:74", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/lib/mentionNotifications.ts:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a97f5f1681faf16d", "name": "Commented-code block (5 lines) in server/src/routes/auth.ts:179", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/auth.ts:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c83a8557df3ad24a", "name": "Commented-code block (9 lines) in server/src/routes/organizations.ts:420", "shortDescription": {"text": "Commented-code block (9 lines) in server/src/routes/organizations.ts:420"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d7eafe8781b0192", "name": "Commented-code block (5 lines) in server/src/routes/uploads.ts:108", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/uploads.ts:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-106690a3b1f69e91", "name": "Commented-code block (5 lines) in server/src/routes/group-chats.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/group-chats.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f733c46615b9cf68", "name": "Commented-code block (7 lines) in server/src/routes/reports.ts:258", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/routes/reports.ts:258"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a1c1b95bc5aa018", "name": "Commented-code block (7 lines) in server/src/routes/search.ts:52", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/routes/search.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9ed6d37dd487df9", "name": "Commented-code block (5 lines) in server/src/routes/publicAppHandoff.ts:42", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/publicAppHandoff.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11102cbf52360f8d", "name": "Commented-code block (5 lines) in server/src/routes/payments.ts:2185", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/payments.ts:2185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe1ee41a062f17b8", "name": "Commented-code block (5 lines) in server/src/routes/games.ts:2373", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/games.ts:2373"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e70ac9a0ab9abbd5", "name": "Commented-code block (6 lines) in server/src/routes/ads.ts:484", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/ads.ts:484"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-942b8bdbbc6cb5a4", "name": "Commented-code block (7 lines) in server/src/routes/posts.ts:40", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/routes/posts.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfbe0fbe0aca880e", "name": "Commented-code block (5 lines) in server/src/routes/events.ts:863", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/events.ts:863"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef30aa08404c2555", "name": "Commented-code block (5 lines) in server/src/routes/admin.ts:914", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/admin.ts:914"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc5c1b0a56a8b93f", "name": "Commented-code block (8 lines) in server/src/routes/team-invites.ts:83", "shortDescription": {"text": "Commented-code block (8 lines) in server/src/routes/team-invites.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-648116a25e88ff21", "name": "Commented-code block (7 lines) in server/src/cron/overnightTasks.ts:463", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/cron/overnightTasks.ts:463"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82806743de994385", "name": "Commented-code block (5 lines) in server/src/services/email/EmailService.ts:171", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/email/EmailService.ts:171"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06ec9a38c668b8c8", "name": "Commented-code block (5 lines) in server/src/services/email/providers/SendGridProvider.ts:193", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/email/providers/SendGridProvider.ts:193"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc1494d4fbe0eecc", "name": "Commented-code block (6 lines) in context/OnboardingContext.tsx:108", "shortDescription": {"text": "Commented-code block (6 lines) in context/OnboardingContext.tsx:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8ce196810ca9e5c", "name": "Commented-code block (5 lines) in context/AuthProvider.tsx:180", "shortDescription": {"text": "Commented-code block (5 lines) in context/AuthProvider.tsx:180"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26acfc64d15bdb9d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 context/AuthProvider.tsx:391", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 context/AuthProvider.tsx:391"}, "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-0f2d921ecc4b3313", "name": "111 env vars used in code but missing from .env.example", "shortDescription": {"text": "111 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_EMAIL`, `ADMIN_NOTIFICATION_EMAILS`, `ADMIN_PASS`, `ADMIN_PASSWORD`, `AD_APPROVAL_VERIFY_REPORT_PATH`, `AD_DASHBOARD_VERIFY_HOST`, `AD_DASHBOARD_VERIFY_PORT`, `AD_DASHBOARD_VERIFY_REPORT_PATH` + 103 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0409f0001cab1081", "name": "Dangling fetch: GET https://api.sendgrid.com/v3/templates/${templateId} (scripts/exportForSendGrid.js:104)", "shortDescription": {"text": "Dangling fetch: GET https://api.sendgrid.com/v3/templates/${templateId} (scripts/exportForSendGrid.js:104)"}, "fullDescription": {"text": "`scripts/exportForSendGrid.js:104` calls `GET https://api.sendgrid.com/v3/templates/${templateId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.sendgrid.com/v3/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0946693cdfc6da6", "name": "Dangling fetch: GET https://api.sendgrid.com/v3/templates/${template.id} (scripts/verify-sendgrid-templates.ts:215)", "shortDescription": {"text": "Dangling fetch: GET https://api.sendgrid.com/v3/templates/${template.id} (scripts/verify-sendgrid-templates.ts:215)"}, "fullDescription": {"text": "`scripts/verify-sendgrid-templates.ts:215` calls `GET https://api.sendgrid.com/v3/templates/${template.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.sendgrid.com/v3/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5beac3170e99a55f", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (hooks/useGoogleAuth.ts:231)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (hooks/useGoogleAuth.ts:231)"}, "fullDescription": {"text": "`hooks/useGoogleAuth.ts:231` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e41b65d2567de71", "name": "Dangling fetch: GET https://ipapi.co/${ipAddress}/json/ (server/src/lib/geofencing.ts:223)", "shortDescription": {"text": "Dangling fetch: GET https://ipapi.co/${ipAddress}/json/ (server/src/lib/geofencing.ts:223)"}, "fullDescription": {"text": "`server/src/lib/geofencing.ts:223` calls `GET https://ipapi.co/${ipAddress}/json/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ipapi.co/<p>/json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dccd65d03f221a9b", "name": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/upload (server/src/lib/cloudinary.ts:1", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/upload (server/src/lib/cloudinary.ts:172)"}, "fullDescription": {"text": "`server/src/lib/cloudinary.ts:172` calls `POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudinary.com/v1_1/<p>/<p>/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ae0cd82fefa16e1", "name": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/destroy (server/src/lib/cloudinary.ts:", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/destroy (server/src/lib/cloudinary.ts:283)"}, "fullDescription": {"text": "`server/src/lib/cloudinary.ts:283` calls `POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/destroy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudinary.com/v1_1/<p>/<p>/destroy`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db36e2228c3b30c3", "name": "Dangling fetch: GET https://appleid.apple.com/auth/keys (server/src/lib/appleAuth.ts:29)", "shortDescription": {"text": "Dangling fetch: GET https://appleid.apple.com/auth/keys (server/src/lib/appleAuth.ts:29)"}, "fullDescription": {"text": "`server/src/lib/appleAuth.ts:29` calls `GET https://appleid.apple.com/auth/keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/appleid.apple.com/auth/keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5bfd3b9021722b5d", "name": "Dangling fetch: GET https://maps.googleapis.com/maps/api/geocode/json (server/src/routes/geocoding.ts:46)", "shortDescription": {"text": "Dangling fetch: GET https://maps.googleapis.com/maps/api/geocode/json (server/src/routes/geocoding.ts:46)"}, "fullDescription": {"text": "`server/src/routes/geocoding.ts:46` calls `GET https://maps.googleapis.com/maps/api/geocode/json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/maps.googleapis.com/maps/api/geocode/json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0c908568aca710f", "name": "Dangling fetch: GET https://maps.googleapis.com/maps/api/geocode/json (server/src/routes/geocoding.ts:108)", "shortDescription": {"text": "Dangling fetch: GET https://maps.googleapis.com/maps/api/geocode/json (server/src/routes/geocoding.ts:108)"}, "fullDescription": {"text": "`server/src/routes/geocoding.ts:108` calls `GET https://maps.googleapis.com/maps/api/geocode/json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/maps.googleapis.com/maps/api/geocode/json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bed5c934ac5efd6", "name": "Dangling fetch: GET https://maps.googleapis.com/maps/api/place/autocomplete/json (server/src/routes/geocoding.ts:132)", "shortDescription": {"text": "Dangling fetch: GET https://maps.googleapis.com/maps/api/place/autocomplete/json (server/src/routes/geocoding.ts:132)"}, "fullDescription": {"text": "`server/src/routes/geocoding.ts:132` calls `GET https://maps.googleapis.com/maps/api/place/autocomplete/json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/maps.googleapis.com/maps/api/place/autocomplete/json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8fdbacfe9430a6ed", "name": "Unused endpoint: POST /auth/login", "shortDescription": {"text": "Unused endpoint: POST /auth/login"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /auth/login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cdd0498f1a6e6340", "name": "Unused endpoint: POST /auth/google", "shortDescription": {"text": "Unused endpoint: POST /auth/google"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /auth/google` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a05bcd347c31b110", "name": "Unused endpoint: POST /auth/apple", "shortDescription": {"text": "Unused endpoint: POST /auth/apple"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /auth/apple` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4d97fab27109173", "name": "Unused endpoint: GET /games", "shortDescription": {"text": "Unused endpoint: GET /games"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /games` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1069d04500258098", "name": "Unused endpoint: GET /users/:id/posts", "shortDescription": {"text": "Unused endpoint: GET /users/:id/posts"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /users/:id/posts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cf2621fb6c66f56", "name": "Unused endpoint: GET /users/:id/interactions", "shortDescription": {"text": "Unused endpoint: GET /users/:id/interactions"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /users/:id/interactions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abcf871487a3b788", "name": "Unused endpoint: GET /posts/:id/comments", "shortDescription": {"text": "Unused endpoint: GET /posts/:id/comments"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /posts/:id/comments` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72e04955cf83a53f", "name": "Unused endpoint: GET /teams", "shortDescription": {"text": "Unused endpoint: GET /teams"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /teams` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ded460cd3143d94f", "name": "Unused endpoint: GET /teams/managed", "shortDescription": {"text": "Unused endpoint: GET /teams/managed"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /teams/managed` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43269e4e79c2e69e", "name": "Unused endpoint: GET /events", "shortDescription": {"text": "Unused endpoint: GET /events"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /events` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-841e50bf821e4158", "name": "Unused endpoint: GET /users", "shortDescription": {"text": "Unused endpoint: GET /users"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3af64e805d88ef35", "name": "Unused endpoint: GET /notifications", "shortDescription": {"text": "Unused endpoint: GET /notifications"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /notifications` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e934dba02d2877a1", "name": "Unused endpoint: GET /messages", "shortDescription": {"text": "Unused endpoint: GET /messages"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /messages` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f440e5eb48cf128b", "name": "Unused endpoint: POST /uploads", "shortDescription": {"text": "Unused endpoint: POST /uploads"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /uploads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d38eae0b19ee450e", "name": "Unused endpoint: POST /posts", "shortDescription": {"text": "Unused endpoint: POST /posts"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /posts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf45cf8f34e6620f", "name": "Unused endpoint: POST /posts/:id/comments", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/comments"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /posts/:id/comments` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b26bf989036a6a54", "name": "Unused endpoint: POST /posts/:id/upvote", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/upvote"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /posts/:id/upvote` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f233ff614fb3e57d", "name": "Unused endpoint: POST /posts/:id/bookmark", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/bookmark"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /posts/:id/bookmark` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a12d652045da70a", "name": "Unused endpoint: GET /organizations", "shortDescription": {"text": "Unused endpoint: GET /organizations"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /organizations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b82146d6b4056725", "name": "Unused endpoint: GET /organizations/:id", "shortDescription": {"text": "Unused endpoint: GET /organizations/:id"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /organizations/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea2b56cd6df7fe98", "name": "Unused endpoint: POST /organizations/:id/team-join-request", "shortDescription": {"text": "Unused endpoint: POST /organizations/:id/team-join-request"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /organizations/:id/team-join-request` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34b32da6cdc205b1", "name": "Unused endpoint: GET /organizations/:id/team-join-requests", "shortDescription": {"text": "Unused endpoint: GET /organizations/:id/team-join-requests"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /organizations/:id/team-join-requests` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2f23f52181cb76b", "name": "Unused endpoint: POST /team-join-requests/:id/approve", "shortDescription": {"text": "Unused endpoint: POST /team-join-requests/:id/approve"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /team-join-requests/:id/approve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-644cea70ac0f4fae", "name": "Unused endpoint: POST /team-join-requests/:id/reject", "shortDescription": {"text": "Unused endpoint: POST /team-join-requests/:id/reject"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /team-join-requests/:id/reject` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49279a0f12d2c901", "name": "Unused endpoint: GET /teams/:id/join-requests", "shortDescription": {"text": "Unused endpoint: GET /teams/:id/join-requests"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /teams/:id/join-requests` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c23a6be07f04a81", "name": "Unused endpoint: POST /auth/verify/request", "shortDescription": {"text": "Unused endpoint: POST /auth/verify/request"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /auth/verify/request` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13e58f5a5d22e748", "name": "Unused endpoint: POST /auth/verify/confirm", "shortDescription": {"text": "Unused endpoint: POST /auth/verify/confirm"}, "fullDescription": {"text": "`server/mock-server.js` declares `POST /auth/verify/confirm` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3538a689a566c56", "name": "Unused endpoint: GET /highlights", "shortDescription": {"text": "Unused endpoint: GET /highlights"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /highlights` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6dfb8881543293df", "name": "Unused endpoint: GET /api-docs", "shortDescription": {"text": "Unused endpoint: GET /api-docs"}, "fullDescription": {"text": "`server/mock-server.js` declares `GET /api-docs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b28d92215a503990", "name": "Unused endpoint: USE /auth", "shortDescription": {"text": "Unused endpoint: USE /auth"}, "fullDescription": {"text": "`server/src/teamGateTestApp.ts` declares `USE /auth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9c53b827c19ef9a", "name": "Unused endpoint: USE /teams", "shortDescription": {"text": "Unused endpoint: USE /teams"}, "fullDescription": {"text": "`server/src/teamGateTestApp.ts` declares `USE /teams` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a4f2645af28ecb2", "name": "Unused endpoint: USE /consent", "shortDescription": {"text": "Unused endpoint: USE /consent"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /consent` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37b5c9b20c366716", "name": "Unused endpoint: POST /me/consent/resend", "shortDescription": {"text": "Unused endpoint: POST /me/consent/resend"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `POST /me/consent/resend` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-806a0b5fa537337c", "name": "Unused endpoint: USE /me", "shortDescription": {"text": "Unused endpoint: USE /me"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3506739d0f1155aa", "name": "Unused endpoint: USE /ads", "shortDescription": {"text": "Unused endpoint: USE /ads"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /ads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2d8849fb6b1ac47", "name": "Unused endpoint: USE /admin", "shortDescription": {"text": "Unused endpoint: USE /admin"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /admin` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d50e94a36e6d6927", "name": "Unused endpoint: USE /events", "shortDescription": {"text": "Unused endpoint: USE /events"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /events` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fb679c1c970cbe4", "name": "Unused endpoint: USE /feed", "shortDescription": {"text": "Unused endpoint: USE /feed"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /feed` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2f71a450cbc9cb4", "name": "Unused endpoint: USE /follows", "shortDescription": {"text": "Unused endpoint: USE /follows"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /follows` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bde2e552ee48fa82", "name": "Unused endpoint: USE /games", "shortDescription": {"text": "Unused endpoint: USE /games"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /games` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a615eb2d59c55e3", "name": "Unused endpoint: USE /geocoding", "shortDescription": {"text": "Unused endpoint: USE /geocoding"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /geocoding` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d4372d1ac13746d", "name": "Unused endpoint: USE /highlights", "shortDescription": {"text": "Unused endpoint: USE /highlights"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /highlights` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d80629752210b855", "name": "Unused endpoint: USE /notifications", "shortDescription": {"text": "Unused endpoint: USE /notifications"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /notifications` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77f68a230eae1580", "name": "Unused endpoint: USE /organizations", "shortDescription": {"text": "Unused endpoint: USE /organizations"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /organizations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38ffe423a6b9b24c", "name": "Unused endpoint: USE /payments", "shortDescription": {"text": "Unused endpoint: USE /payments"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /payments` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9ed79ac4a4532ef", "name": "Unused endpoint: USE /posts", "shortDescription": {"text": "Unused endpoint: USE /posts"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /posts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa27368196bc2d9c", "name": "Unused endpoint: USE /messages", "shortDescription": {"text": "Unused endpoint: USE /messages"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /messages` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a29c7da4d6f19ae", "name": "Unused endpoint: USE /promos", "shortDescription": {"text": "Unused endpoint: USE /promos"}, "fullDescription": {"text": "`server/src/testApp.ts` declares `USE /promos` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23065"}, "properties": {"repository": "xsantcastx/VarsityHubMobile", "repoUrl": "https://github.com/xsantcastx/VarsityHubMobile", "branch": "main"}, "results": [{"ruleId": "scanner-61f49afbbfd18d74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 config/api.ts:14"}, "properties": {"repobilityId": "334e38343432c184", "scanner": "scanner-primary", "fingerprint": "61f49afbbfd18d74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a54646aaa5419b51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/smoke.spec.ts:84"}, "properties": {"repobilityId": "8f99a93bf78dc8b9", "scanner": "scanner-primary", "fingerprint": "a54646aaa5419b51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56cce337c518ad4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/cloudinary-upload-e2e.spec.ts:20"}, "properties": {"repobilityId": "33babd1ebf4ebf1e", "scanner": "scanner-primary", "fingerprint": "56cce337c518ad4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd081ebeecd29d7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/overnight-functionality.spec.ts:643"}, "properties": {"repobilityId": "c6423f7167ce9728", "scanner": "scanner-primary", "fingerprint": "cd081ebeecd29d7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b40741969f42540f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/codex.ts:92"}, "properties": {"repobilityId": "aed2c33c6b0c1319", "scanner": "scanner-primary", "fingerprint": "b40741969f42540f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-785de79b8faac736", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/upload.ts:244"}, "properties": {"repobilityId": "06dac97c88d098ed", "scanner": "scanner-primary", "fingerprint": "785de79b8faac736", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed621fa523553c5c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/geocoding.ts:73"}, "properties": {"repobilityId": "ffed808054b836d5", "scanner": "scanner-primary", "fingerprint": "ed621fa523553c5c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-262740871598534f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/entities.ts:443"}, "properties": {"repobilityId": "d12151d79f34a84d", "scanner": "scanner-primary", "fingerprint": "262740871598534f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25d6c8cc2889aac4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 api/http.ts:2"}, "properties": {"repobilityId": "667893aa131c928f", "scanner": "scanner-primary", "fingerprint": "25d6c8cc2889aac4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2994519052616f0e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/http.ts:258"}, "properties": {"repobilityId": "016fce2c5d71ffc1", "scanner": "scanner-primary", "fingerprint": "2994519052616f0e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c5f306bcbc47375", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repeat-command.js:15"}, "properties": {"repobilityId": "f41fbda35713b23a", "scanner": "scanner-primary", "fingerprint": "1c5f306bcbc47375", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67021fd74d85728e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/patch-lottie-ios.js:61"}, "properties": {"repobilityId": "d770c7c99fe07359", "scanner": "scanner-primary", "fingerprint": "67021fd74d85728e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a47b438085e1da61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-env-alignment.ts:148"}, "properties": {"repobilityId": "5815b3170e7264e6", "scanner": "scanner-primary", "fingerprint": "a47b438085e1da61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1456973d98f0291", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/system-architecture-audit.ts:52"}, "properties": {"repobilityId": "3243869b8ce5449e", "scanner": "scanner-primary", "fingerprint": "b1456973d98f0291", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4156d5fa68b9c94", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-env-alignment.js:130"}, "properties": {"repobilityId": "f570e2ac23e3c58e", "scanner": "scanner-primary", "fingerprint": "b4156d5fa68b9c94", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ba564598471181d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-play-service-account.js:134"}, "properties": {"repobilityId": "c5aa5ad909030f08", "scanner": "scanner-primary", "fingerprint": "5ba564598471181d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4958c49db621fe6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-coach-organization.ts:38"}, "properties": {"repobilityId": "b846f0c57c2336fa", "scanner": "scanner-primary", "fingerprint": "4958c49db621fe6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c6315a10c14cb1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-async-handler-usage.js:59"}, "properties": {"repobilityId": "e3f306237114d873", "scanner": "scanner-primary", "fingerprint": "2c6315a10c14cb1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62fe067163775e04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-with-retry.js:26"}, "properties": {"repobilityId": "ddf0b6e382357163", "scanner": "scanner-primary", "fingerprint": "62fe067163775e04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a331ad764bb9f5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/overnight-improvements.ts:26"}, "properties": {"repobilityId": "9fd6bafbc025ae2c", "scanner": "scanner-primary", "fingerprint": "0a331ad764bb9f5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f61aa03a7d52513", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-email-system.ts:31"}, "properties": {"repobilityId": "1084d4f79d556851", "scanner": "scanner-primary", "fingerprint": "9f61aa03a7d52513", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44e77644311794e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-sendgrid-templates.ts:185"}, "properties": {"repobilityId": "c0267ef86e0cf188", "scanner": "scanner-primary", "fingerprint": "44e77644311794e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-020c95c81e4b9120", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/exportForSendGrid.js:162"}, "properties": {"repobilityId": "01760339a078f283", "scanner": "scanner-primary", "fingerprint": "020c95c81e4b9120", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbf29b3f8ba6ebc9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-profile-pages.ts:25"}, "properties": {"repobilityId": "8750dcaab9e6261d", "scanner": "scanner-primary", "fingerprint": "dbf29b3f8ba6ebc9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a983ca01ceacbd7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user-cache-invalidation.js:46"}, "properties": {"repobilityId": "320eeb0ab1bb3dc2", "scanner": "scanner-primary", "fingerprint": "8a983ca01ceacbd7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fae68aac2d0950ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-secret-literals.js:68"}, "properties": {"repobilityId": "59d50c4a769f92bd", "scanner": "scanner-primary", "fingerprint": "fae68aac2d0950ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d35b82125c75712", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-error-envelope-usage.js:98"}, "properties": {"repobilityId": "09cc3e023104a68c", "scanner": "scanner-primary", "fingerprint": "4d35b82125c75712", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5af3fa299a3f5d1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-all-emails.ts:78"}, "properties": {"repobilityId": "b1b6a3175c2cb770", "scanner": "scanner-primary", "fingerprint": "5af3fa299a3f5d1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6f04c2efdab699a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-games.js:38"}, "properties": {"repobilityId": "0641fcad3a3c6f23", "scanner": "scanner-primary", "fingerprint": "b6f04c2efdab699a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9f6402a94cc2270", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/testingMonitor.web.ts:30"}, "properties": {"repobilityId": "db5a9a02e5a7daaa", "scanner": "scanner-primary", "fingerprint": "a9f6402a94cc2270", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4692fdec2b3d5543", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/ensureUploadableUri.ts:49"}, "properties": {"repobilityId": "8c257ec6f2d19100", "scanner": "scanner-primary", "fingerprint": "4692fdec2b3d5543", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7ad5979ff8d60ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/analytics.ts:120"}, "properties": {"repobilityId": "2b298d34c6c74182", "scanner": "scanner-primary", "fingerprint": "f7ad5979ff8d60ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-290ed3d071063419", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/uploadUtils.ts:35"}, "properties": {"repobilityId": "ffc5b48d1d810707", "scanner": "scanner-primary", "fingerprint": "290ed3d071063419", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86ada24c4729ff16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/darkModeFixGuide.ts:52"}, "properties": {"repobilityId": "5cf595bdbf317231", "scanner": "scanner-primary", "fingerprint": "86ada24c4729ff16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d4c27098021cf6a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/share.ts:124"}, "properties": {"repobilityId": "29757229403cdb19", "scanner": "scanner-primary", "fingerprint": "3d4c27098021cf6a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ef91588ed661ba6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/materializeICloudAsset.ts:76"}, "properties": {"repobilityId": "88ecffc9b53bc958", "scanner": "scanner-primary", "fingerprint": "6ef91588ed661ba6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9ddf8a79bf8d9fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/sentry.ts:148"}, "properties": {"repobilityId": "ecb5d437738bcc76", "scanner": "scanner-primary", "fingerprint": "f9ddf8a79bf8d9fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-23e917963ccae22c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/pushNotifications.ts:67"}, "properties": {"repobilityId": "ec0d5241dbfb26f4", "scanner": "scanner-primary", "fingerprint": "23e917963ccae22c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4ec3107e6f38416", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/NotificationTapHandler.tsx:18"}, "properties": {"repobilityId": "4860a8aa6cbc95fd", "scanner": "scanner-primary", "fingerprint": "e4ec3107e6f38416", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6919fa70803bb013", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/team-page.tsx:642"}, "properties": {"repobilityId": "7afc543634f05e98", "scanner": "scanner-primary", "fingerprint": "6919fa70803bb013", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d37ca2cd3499490", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/sign-in.tsx:175"}, "properties": {"repobilityId": "e6e6b1e17c4bb0bd", "scanner": "scanner-primary", "fingerprint": "7d37ca2cd3499490", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69cccad6ef504478", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/_layout.tsx:64"}, "properties": {"repobilityId": "316ded3c1335f07d", "scanner": "scanner-primary", "fingerprint": "69cccad6ef504478", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b184b922d5b86b5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/manage-users.tsx:84"}, "properties": {"repobilityId": "dfaa0487cb2fbe3e", "scanner": "scanner-primary", "fingerprint": "8b184b922d5b86b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-01e4d09b023a516b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/season-stats.tsx:155"}, "properties": {"repobilityId": "e25a147c8d5b5674", "scanner": "scanner-primary", "fingerprint": "01e4d09b023a516b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-520913fe5fb5454e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/settings/request-host-event.tsx:28"}, "properties": {"repobilityId": "65780835b94136e2", "scanner": "scanner-primary", "fingerprint": "520913fe5fb5454e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-77e17f05b08f8f57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/onboarding/index.tsx:89"}, "properties": {"repobilityId": "7d09f56126827fba", "scanner": "scanner-primary", "fingerprint": "77e17f05b08f8f57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f5f970b91259531", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/game-details/GameDetailsScreen.tsx:1046"}, "properties": {"repobilityId": "7dacb86d62227c07", "scanner": "scanner-primary", "fingerprint": "1f5f970b91259531", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d92f257c6e02fc5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/game-details/__tests__/GameDetailsScreen.vote.test.tsx:224"}, "properties": {"repobilityId": "238ed79220ec1902", "scanner": "scanner-primary", "fingerprint": "d92f257c6e02fc5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec5d23ef7174ccc3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useAdIAP.ts:366"}, "properties": {"repobilityId": "2cfaf91c1a7fa5d8", "scanner": "scanner-primary", "fingerprint": "ec5d23ef7174ccc3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2330c2ee619dd174", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useAppleAuth.ts:25"}, "properties": {"repobilityId": "f9d51a59675e6148", "scanner": "scanner-primary", "fingerprint": "2330c2ee619dd174", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79294975d7f440ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useUploadProgress.ts:62"}, "properties": {"repobilityId": "0215d6379281e6f3", "scanner": "scanner-primary", "fingerprint": "79294975d7f440ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d12d7950c1d540cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useIAP.ts:251"}, "properties": {"repobilityId": "da0d0aba7c0e5bf5", "scanner": "scanner-primary", "fingerprint": "d12d7950c1d540cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a074c24cd240af8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 hooks/useAnalytics.ts:10"}, "properties": {"repobilityId": "370dce2932b971f5", "scanner": "scanner-primary", "fingerprint": "a074c24cd240af8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46e9b4e2f0ac4076", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/test-cloudinary.js:26"}, "properties": {"repobilityId": "34d4c5134fdb200a", "scanner": "scanner-primary", "fingerprint": "46e9b4e2f0ac4076", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9663f2227f70c260", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/_test_emails.ts:50"}, "properties": {"repobilityId": "80629fa853659115", "scanner": "scanner-primary", "fingerprint": "9663f2227f70c260", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3628a695742aeec4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/_find_admin.ts:10"}, "properties": {"repobilityId": "4c06312158a79028", "scanner": "scanner-primary", "fingerprint": "3628a695742aeec4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba8776a00e434db1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/mock-server.js:323"}, "properties": {"repobilityId": "9173ae3f33679be4", "scanner": "scanner-primary", "fingerprint": "ba8776a00e434db1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8a7e11cfc419c78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/check-db.js:7"}, "properties": {"repobilityId": "14fc2fa9efcd01bb", "scanner": "scanner-primary", "fingerprint": "a8a7e11cfc419c78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a70923b2a2a2380", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/verify-email.js:13"}, "properties": {"repobilityId": "3362c6a2df2bcf78", "scanner": "scanner-primary", "fingerprint": "8a70923b2a2a2380", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cb54034c493e244", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/check_users.js:23"}, "properties": {"repobilityId": "77a6524b603ad40f", "scanner": "scanner-primary", "fingerprint": "7cb54034c493e244", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb36400550745abe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed-games.js:38"}, "properties": {"repobilityId": "bc8ffdb62c9047d8", "scanner": "scanner-primary", "fingerprint": "cb36400550745abe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70deaca74351812a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/fix-onboarding.js:7"}, "properties": {"repobilityId": "b5d7830fd0599062", "scanner": "scanner-primary", "fingerprint": "70deaca74351812a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-942b891216b965af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-guard-bypass.ts:28"}, "properties": {"repobilityId": "d9b8bd3479328aa8", "scanner": "scanner-primary", "fingerprint": "942b891216b965af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd21a9bfac6d9617", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/db-integrity-check.ts:26"}, "properties": {"repobilityId": "461a80168a9cbbf1", "scanner": "scanner-primary", "fingerprint": "dd21a9bfac6d9617", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a854b56e55593a52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/prepare-coach-uat-accounts.ts:585"}, "properties": {"repobilityId": "0f04539e7db31c85", "scanner": "scanner-primary", "fingerprint": "a854b56e55593a52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5917d3c90e82e453", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/concurrent-test.ts:56"}, "properties": {"repobilityId": "79c0435bf2513339", "scanner": "scanner-primary", "fingerprint": "5917d3c90e82e453", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aef5c061aa5c07a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/notification-test.ts:184"}, "properties": {"repobilityId": "fcd2030e647032e3", "scanner": "scanner-primary", "fingerprint": "aef5c061aa5c07a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-41b885eece00cdae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-rate-limit-coverage.ts:168"}, "properties": {"repobilityId": "b2ef800493f285c9", "scanner": "scanner-primary", "fingerprint": "41b885eece00cdae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5692e6e8c42044d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-demo-account.ts:45"}, "properties": {"repobilityId": "15a362c6f75b3dbb", "scanner": "scanner-primary", "fingerprint": "5692e6e8c42044d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-495731ad119f5ab6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-polling-approval.ts:37"}, "properties": {"repobilityId": "13db9d00dc1b3439", "scanner": "scanner-primary", "fingerprint": "495731ad119f5ab6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5204e96fc2f8dee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-cloudinary.ts:37"}, "properties": {"repobilityId": "e12d8fcc8399be85", "scanner": "scanner-primary", "fingerprint": "c5204e96fc2f8dee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6f25a59f0e1403e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-coach-approval-drift.ts:9"}, "properties": {"repobilityId": "d5fba278a7abb57e", "scanner": "scanner-primary", "fingerprint": "b6f25a59f0e1403e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cca20831ef1352de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-ad-dashboard-review-flow.ts:64"}, "properties": {"repobilityId": "73dbd6758197f62a", "scanner": "scanner-primary", "fingerprint": "cca20831ef1352de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbdb138bed77f3da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/check-coordinates.ts:10"}, "properties": {"repobilityId": "47852e242138c71a", "scanner": "scanner-primary", "fingerprint": "dbdb138bed77f3da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a6955afdc13f70f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-ad-approval-flow.ts:61"}, "properties": {"repobilityId": "69a47f44e8f32e5f", "scanner": "scanner-primary", "fingerprint": "7a6955afdc13f70f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-403bb7c6dd30b204", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-identity-uniqueness.ts:23"}, "properties": {"repobilityId": "a19fb3feb9031c13", "scanner": "scanner-primary", "fingerprint": "403bb7c6dd30b204", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f42ac8c9209c37de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-event-approval-flow.ts:66"}, "properties": {"repobilityId": "f6caa81bcd37be0c", "scanner": "scanner-primary", "fingerprint": "f42ac8c9209c37de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5bd178cc9d6cc6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/update-demo-images.ts:25"}, "properties": {"repobilityId": "a5d5dbd2f35dbf1c", "scanner": "scanner-primary", "fingerprint": "a5bd178cc9d6cc6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-463c6491c9444364", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-user-billing-state-drift.ts:29"}, "properties": {"repobilityId": "0e7091dc9ccab1fb", "scanner": "scanner-primary", "fingerprint": "463c6491c9444364", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9cef71eaccf6d5ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/geofencing-test.ts:50"}, "properties": {"repobilityId": "2ea23942cf35e63e", "scanner": "scanner-primary", "fingerprint": "9cef71eaccf6d5ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9df31f6fffa4cf42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-session-enforcement.ts:92"}, "properties": {"repobilityId": "2b5c63c3c211a0eb", "scanner": "scanner-primary", "fingerprint": "9df31f6fffa4cf42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2fcf3cf57b2b7448", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/test-production-email.ts:15"}, "properties": {"repobilityId": "481ff77b8610803f", "scanner": "scanner-primary", "fingerprint": "2fcf3cf57b2b7448", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21e0cb5bc10959c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/cross-role-e2e-audit.ts:53"}, "properties": {"repobilityId": "9a0a8981e1885547", "scanner": "scanner-primary", "fingerprint": "21e0cb5bc10959c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-def9f94bb3b07e39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-templates.ts:53"}, "properties": {"repobilityId": "026ece2d6d48ef44", "scanner": "scanner-primary", "fingerprint": "def9f94bb3b07e39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd37f4e09c0504cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/api-contract-tests.ts:18"}, "properties": {"repobilityId": "7bb30de14d96db39", "scanner": "scanner-primary", "fingerprint": "dd37f4e09c0504cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72b98b77a9b721e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/geocode-single-game.ts:19"}, "properties": {"repobilityId": "b12133bbab14dd3b", "scanner": "scanner-primary", "fingerprint": "72b98b77a9b721e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49c681da0ec950d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-org-manager-access.ts:83"}, "properties": {"repobilityId": "58dc7d9b72edc7c4", "scanner": "scanner-primary", "fingerprint": "49c681da0ec950d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39938aa198cc7333", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-organizations.ts:35"}, "properties": {"repobilityId": "e359151b8cd8a5e2", "scanner": "scanner-primary", "fingerprint": "39938aa198cc7333", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1db7ca9115178a05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-test-games.ts:63"}, "properties": {"repobilityId": "63d0b80d5b4a9dd3", "scanner": "scanner-primary", "fingerprint": "1db7ca9115178a05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-129ad6f6f73031c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-route-battery.ts:111"}, "properties": {"repobilityId": "4029208fd1159f0a", "scanner": "scanner-primary", "fingerprint": "129ad6f6f73031c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c12adae992cc397", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-creating-flow.ts:33"}, "properties": {"repobilityId": "841d877c6e29c037", "scanner": "scanner-primary", "fingerprint": "2c12adae992cc397", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1ed9f5167b90390", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fan-journey-test.ts:23"}, "properties": {"repobilityId": "fac11ec4169f7905", "scanner": "scanner-primary", "fingerprint": "a1ed9f5167b90390", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9831ad9242a47da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-onboarding-persistence.ts:23"}, "properties": {"repobilityId": "5ac81cd287bea494", "scanner": "scanner-primary", "fingerprint": "c9831ad9242a47da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8db71fe18ddf097", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/reconcile-post-upvotes.ts:7"}, "properties": {"repobilityId": "08f95bdf8be61736", "scanner": "scanner-primary", "fingerprint": "c8db71fe18ddf097", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc2bc68c9fdb72cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/preflight-team-org-required.ts:51"}, "properties": {"repobilityId": "cd5aa5b1fad69ee4", "scanner": "scanner-primary", "fingerprint": "fc2bc68c9fdb72cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6db43515ed3239fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-join-request-approved-system.ts:29"}, "properties": {"repobilityId": "003ea08d4ff8c084", "scanner": "scanner-primary", "fingerprint": "6db43515ed3239fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85f9df177f812d9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-config.ts:29"}, "properties": {"repobilityId": "db9ca938aa76e35d", "scanner": "scanner-primary", "fingerprint": "85f9df177f812d9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c159aaa676c1a12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ghost-user-test.ts:111"}, "properties": {"repobilityId": "a2e9454ea8530beb", "scanner": "scanner-primary", "fingerprint": "3c159aaa676c1a12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2ba1733f86668ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-beta-data.js:9"}, "properties": {"repobilityId": "019b3cee7e3a7ad7", "scanner": "scanner-primary", "fingerprint": "d2ba1733f86668ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-220c8839727d5930", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/test-api-key.ts:10"}, "properties": {"repobilityId": "3916f5da7fd1c20e", "scanner": "scanner-primary", "fingerprint": "220c8839727d5930", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff28ef1f64703d40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/security-test.ts:26"}, "properties": {"repobilityId": "7af84846601d22f4", "scanner": "scanner-primary", "fingerprint": "ff28ef1f64703d40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b65ddc06ab42c6f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/comprehensive-test-suite.ts:18"}, "properties": {"repobilityId": "ad75d07e02ef9bc4", "scanner": "scanner-primary", "fingerprint": "b65ddc06ab42c6f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e69b90da247e3da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ux-verification-final.ts:30"}, "properties": {"repobilityId": "91bccb947dc6ffaa", "scanner": "scanner-primary", "fingerprint": "6e69b90da247e3da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-274194b77e0cbd7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-production-health.ts:65"}, "properties": {"repobilityId": "d397e660a19dc40a", "scanner": "scanner-primary", "fingerprint": "274194b77e0cbd7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e41768dd747b1a56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/final-exhaustive-tests.ts:18"}, "properties": {"repobilityId": "1cf37248ddcbbe4e", "scanner": "scanner-primary", "fingerprint": "e41768dd747b1a56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50808903d0c45942", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-all-data.ts:88"}, "properties": {"repobilityId": "4e463f6f71629416", "scanner": "scanner-primary", "fingerprint": "50808903d0c45942", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c1acfa3275a914a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/admin-e2e-audit.ts:49"}, "properties": {"repobilityId": "985b763f73dd2364", "scanner": "scanner-primary", "fingerprint": "2c1acfa3275a914a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60eba95e05e267a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/diagnose-email.ts:40"}, "properties": {"repobilityId": "5247c77ab0bff105", "scanner": "scanner-primary", "fingerprint": "60eba95e05e267a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27b3ffd461f7fd0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/coach-journey-test.ts:125"}, "properties": {"repobilityId": "815e735b15273a03", "scanner": "scanner-primary", "fingerprint": "27b3ffd461f7fd0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36fb5bc862897348", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/add-test-coordinates.ts:24"}, "properties": {"repobilityId": "449b9e1a1a70591f", "scanner": "scanner-primary", "fingerprint": "36fb5bc862897348", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d5b485912e21959", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-promo.ts:28"}, "properties": {"repobilityId": "9ed1c573877b3c45", "scanner": "scanner-primary", "fingerprint": "4d5b485912e21959", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bdbb6e9ad30c033", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/start-verify-api.ts:17"}, "properties": {"repobilityId": "1e6ea357905c5afc", "scanner": "scanner-primary", "fingerprint": "7bdbb6e9ad30c033", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9b1f7dbe3361a50e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-approval.ts:27"}, "properties": {"repobilityId": "bc6d7e0da4e5f3bf", "scanner": "scanner-primary", "fingerprint": "9b1f7dbe3361a50e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2237cf3d3cd0d4d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/test-email-send.ts:89"}, "properties": {"repobilityId": "7a285e1a33afc0db", "scanner": "scanner-primary", "fingerprint": "2237cf3d3cd0d4d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-856e652e182fe3a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/geocode-all-games.ts:19"}, "properties": {"repobilityId": "611684d6278b7d03", "scanner": "scanner-primary", "fingerprint": "856e652e182fe3a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fcfdb0173fc62cff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/performance-baseline-test.ts:86"}, "properties": {"repobilityId": "eb96055c064b7039", "scanner": "scanner-primary", "fingerprint": "fcfdb0173fc62cff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47c514667af5cab6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-coach-flow.ts:44"}, "properties": {"repobilityId": "8245c076d1b2a679", "scanner": "scanner-primary", "fingerprint": "47c514667af5cab6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0f908f4c5398031", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ghost-test-production.ts:19"}, "properties": {"repobilityId": "424516275b8c56ad", "scanner": "scanner-primary", "fingerprint": "d0f908f4c5398031", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2abf1686e10a5a1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-push-token-registration.ts:26"}, "properties": {"repobilityId": "05498ce3bee560e0", "scanner": "scanner-primary", "fingerprint": "2abf1686e10a5a1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31ea555f32810308", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-demo-matchups.ts:20"}, "properties": {"repobilityId": "6853c6af2d0fa7a3", "scanner": "scanner-primary", "fingerprint": "31ea555f32810308", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01b5df7995949f8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-production.ts:20"}, "properties": {"repobilityId": "603c441cd9d005af", "scanner": "scanner-primary", "fingerprint": "01b5df7995949f8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-093e81b7ff190508", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/exercise-all-email-flows.ts:69"}, "properties": {"repobilityId": "87ea2099025e22a3", "scanner": "scanner-primary", "fingerprint": "093e81b7ff190508", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29faa1fd86a865c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-fifa-worldcup-2026.ts:40"}, "properties": {"repobilityId": "e931950ad34bfdf1", "scanner": "scanner-primary", "fingerprint": "29faa1fd86a865c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00b5a8609eea2142", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-usernames.ts:62"}, "properties": {"repobilityId": "02a004aeca6b677d", "scanner": "scanner-primary", "fingerprint": "00b5a8609eea2142", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2dd694507b2c67da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-user-auth-state-drift.ts:30"}, "properties": {"repobilityId": "51f3846b89312efc", "scanner": "scanner-primary", "fingerprint": "2dd694507b2c67da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9bdec47f38ce697", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/rate-limit-test.ts:27"}, "properties": {"repobilityId": "8e8401b21edabd19", "scanner": "scanner-primary", "fingerprint": "d9bdec47f38ce697", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8308e3ea881db616", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-full-regression.ts:23"}, "properties": {"repobilityId": "f623f2ac46bd5c12", "scanner": "scanner-primary", "fingerprint": "8308e3ea881db616", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c96b3db49f841936", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-session-isolation.ts:22"}, "properties": {"repobilityId": "7d6a017ede68b8d3", "scanner": "scanner-primary", "fingerprint": "c96b3db49f841936", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14311d1b870d19b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/preview-all-emails.ts:549"}, "properties": {"repobilityId": "daa6c9fc791b5eba", "scanner": "scanner-primary", "fingerprint": "14311d1b870d19b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85e9d1ca4efb5b6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/auth-security-test.ts:57"}, "properties": {"repobilityId": "1aa4a042129c284f", "scanner": "scanner-primary", "fingerprint": "85e9d1ca4efb5b6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eac543119f4f89a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/security-smoke-tests.ts:44"}, "properties": {"repobilityId": "33cc8c1266e59e5d", "scanner": "scanner-primary", "fingerprint": "eac543119f4f89a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-254384532b7a8010", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/create-sample-event.ts:66"}, "properties": {"repobilityId": "ec7583489ac0244e", "scanner": "scanner-primary", "fingerprint": "254384532b7a8010", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-253cffc0cac8467a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-admin-tools.ts:26"}, "properties": {"repobilityId": "41822738d0797fcd", "scanner": "scanner-primary", "fingerprint": "253cffc0cac8467a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a96cb447047bfab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-auth-canary.ts:53"}, "properties": {"repobilityId": "96caa9c49b525bdc", "scanner": "scanner-primary", "fingerprint": "1a96cb447047bfab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cbf12b3e2b15954", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/ad-hosting-test.ts:48"}, "properties": {"repobilityId": "997baa139f9b034f", "scanner": "scanner-primary", "fingerprint": "3cbf12b3e2b15954", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37b8e8bb3a1e3626", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-coach-agreements.ts:42"}, "properties": {"repobilityId": "0ea0122d4a251894", "scanner": "scanner-primary", "fingerprint": "37b8e8bb3a1e3626", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b55315870ec202d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-db.ts:7"}, "properties": {"repobilityId": "a0af9c279315d036", "scanner": "scanner-primary", "fingerprint": "7b55315870ec202d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cd179723313b9a33", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-profile-team-security.ts:22"}, "properties": {"repobilityId": "c8371e78cb20aefb", "scanner": "scanner-primary", "fingerprint": "cd179723313b9a33", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-185feac21e98a8d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-email-go-live.ts:180"}, "properties": {"repobilityId": "ac560cc4659d9f10", "scanner": "scanner-primary", "fingerprint": "185feac21e98a8d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8e59160f02bb591", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/seed-demo-matchups.ts:161"}, "properties": {"repobilityId": "470bda0cfe5cefe4", "scanner": "scanner-primary", "fingerprint": "c8e59160f02bb591", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30f2acd9ff008912", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/wipe-teams-orgs.ts:26"}, "properties": {"repobilityId": "d1dbde6977c2eb22", "scanner": "scanner-primary", "fingerprint": "30f2acd9ff008912", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8951601a8841a269", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-app-review-account.ts:66"}, "properties": {"repobilityId": "87495d51b92559e2", "scanner": "scanner-primary", "fingerprint": "8951601a8841a269", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f06d7aa73a7c05a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-fan-flow.ts:29"}, "properties": {"repobilityId": "1411951354cb2757", "scanner": "scanner-primary", "fingerprint": "5f06d7aa73a7c05a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0d6072e2fd942b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/email-delivery-test.ts:39"}, "properties": {"repobilityId": "347fa431848442cb", "scanner": "scanner-primary", "fingerprint": "e0d6072e2fd942b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbf93049d38db9a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fifa/create-fifa-events.ts:62"}, "properties": {"repobilityId": "4c823a361b972fd0", "scanner": "scanner-primary", "fingerprint": "fbf93049d38db9a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62bf23abd14f5a60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fifa/rename-cote-divoire.ts:35"}, "properties": {"repobilityId": "c43500575baaa3c0", "scanner": "scanner-primary", "fingerprint": "62bf23abd14f5a60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad5b3cd5b473d934", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/load/validate-distributed-lock.ts:103"}, "properties": {"repobilityId": "9cef15d69fb21122", "scanner": "scanner-primary", "fingerprint": "ad5b3cd5b473d934", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-730ffefa7423baee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/load/p0-load-smoke.ts:138"}, "properties": {"repobilityId": "c7f5afa65db7d728", "scanner": "scanner-primary", "fingerprint": "730ffefa7423baee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2415435632a0b18a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/one-off/create-one-off-events.ts:55"}, "properties": {"repobilityId": "f37238813e9aa90c", "scanner": "scanner-primary", "fingerprint": "2415435632a0b18a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21488ea86493e457", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/stripe/create_stripe_prices.js:12"}, "properties": {"repobilityId": "b66179642637d6da", "scanner": "scanner-primary", "fingerprint": "21488ea86493e457", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de02c5ddb232eb2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/prisma/beta-seed.ts:7"}, "properties": {"repobilityId": "2b0a71dffc91c9db", "scanner": "scanner-primary", "fingerprint": "de02c5ddb232eb2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00471dd812490e20", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/prisma/seed.ts:87"}, "properties": {"repobilityId": "8cf2b82ab7dd8171", "scanner": "scanner-primary", "fingerprint": "00471dd812490e20", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f00f87c9744e5479", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/prisma/beta-seed.js:7"}, "properties": {"repobilityId": "707045305e7cc7dc", "scanner": "scanner-primary", "fingerprint": "f00f87c9744e5479", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d5f8f5a79bfce69", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/index.ts:34"}, "properties": {"repobilityId": "966123b8e19cb728", "scanner": "scanner-primary", "fingerprint": "3d5f8f5a79bfce69", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c2bc111e8fcb6e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/__tests__/access-matrix.test.ts:850"}, "properties": {"repobilityId": "852833586110fcb1", "scanner": "scanner-primary", "fingerprint": "9c2bc111e8fcb6e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5668a852b7d9af05", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/__tests__/error-handling.test.ts:12"}, "properties": {"repobilityId": "49ba8dd1ed67449c", "scanner": "scanner-primary", "fingerprint": "5668a852b7d9af05", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0cb79b04f00b70d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/coachStateDriftProbe.ts:170"}, "properties": {"repobilityId": "72807594fc1f8f70", "scanner": "scanner-primary", "fingerprint": "0cb79b04f00b70d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c38ed5fbbed87e31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/email.ts:1482"}, "properties": {"repobilityId": "ac0efbfffcb864d6", "scanner": "scanner-primary", "fingerprint": "c38ed5fbbed87e31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a16e39456a3f5ce1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/debugLog.ts:19"}, "properties": {"repobilityId": "79fff1085dbcf8ac", "scanner": "scanner-primary", "fingerprint": "a16e39456a3f5ce1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65fa5e466b4fe93f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/paymentInternals.ts:1070"}, "properties": {"repobilityId": "2c23c659dffd5252", "scanner": "scanner-primary", "fingerprint": "65fa5e466b4fe93f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-529ad493f5c0a6f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/appleIapReconciliation.ts:236"}, "properties": {"repobilityId": "6fd68d048ac913b9", "scanner": "scanner-primary", "fingerprint": "529ad493f5c0a6f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-249fc8dd6fad9917", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/sms.ts:20"}, "properties": {"repobilityId": "325a2e65d2362117", "scanner": "scanner-primary", "fingerprint": "249fc8dd6fad9917", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b8e7c6965c0f7df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/stripeReconciliation.ts:41"}, "properties": {"repobilityId": "c864f23c86f81f8e", "scanner": "scanner-primary", "fingerprint": "8b8e7c6965c0f7df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7655e67bc4d81a83", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/approvalService.ts:1220"}, "properties": {"repobilityId": "cfec7f2570f576d8", "scanner": "scanner-primary", "fingerprint": "7655e67bc4d81a83", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12ab8b16f473112b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/lib/dbBackupSync.ts:242"}, "properties": {"repobilityId": "96c3e94d38ee3158", "scanner": "scanner-primary", "fingerprint": "12ab8b16f473112b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-032f7324486b3782", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/workers/dataExportWorker.ts:109"}, "properties": {"repobilityId": "922a29d4fafe9cd7", "scanner": "scanner-primary", "fingerprint": "032f7324486b3782", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7689b0bbd5ceb40b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/cron/overnightTasks.ts:86"}, "properties": {"repobilityId": "2bf759ef47788d03", "scanner": "scanner-primary", "fingerprint": "7689b0bbd5ceb40b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7446db8cd5ca1c83", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/email/EmailService.ts:105"}, "properties": {"repobilityId": "18250c937104ed40", "scanner": "scanner-primary", "fingerprint": "7446db8cd5ca1c83", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3afe0964279483ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/email/service.ts:54"}, "properties": {"repobilityId": "37ff5db89998a736", "scanner": "scanner-primary", "fingerprint": "3afe0964279483ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-59347c45ff334951", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/scheduler.ts:27"}, "properties": {"repobilityId": "d86230c808786516", "scanner": "scanner-primary", "fingerprint": "59347c45ff334951", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0099a0e2af845281", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/queues.ts:123"}, "properties": {"repobilityId": "da025a91c27bf450", "scanner": "scanner-primary", "fingerprint": "0099a0e2af845281", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd7d679673fd0197", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/workers/emailWorker.ts:25"}, "properties": {"repobilityId": "d1f20f2004d0ff24", "scanner": "scanner-primary", "fingerprint": "dd7d679673fd0197", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d74ea5f0dd1c0eca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/workers/notificationWorker.ts:25"}, "properties": {"repobilityId": "fea73da05fbf101a", "scanner": "scanner-primary", "fingerprint": "d74ea5f0dd1c0eca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce515def155e271a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/diagnose-buttons.js:11"}, "properties": {"repobilityId": "b2c797e180cb1a8a", "scanner": "scanner-primary", "fingerprint": "ce515def155e271a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5bdeddef2af645b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/ensure-simple-swizzle.js:13"}, "properties": {"repobilityId": "231765cbb36faf54", "scanner": "scanner-primary", "fingerprint": "5bdeddef2af645b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b22cd2ba04185aa5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/ensure-debug-index.js:12"}, "properties": {"repobilityId": "2a6b4be70432a175", "scanner": "scanner-primary", "fingerprint": "b22cd2ba04185aa5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dcf7d57ebbbf504c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/ensure-is-arrayish.js:14"}, "properties": {"repobilityId": "2c1f71bd15b71da8", "scanner": "scanner-primary", "fingerprint": "dcf7d57ebbbf504c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a7101cab868b0d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-expo-updates-bouncycastle.js:22"}, "properties": {"repobilityId": "2868f38b97d4628d", "scanner": "scanner-primary", "fingerprint": "2a7101cab868b0d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b50c89d8f983d297", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-router-sitemap.js:14"}, "properties": {"repobilityId": "5620c37720deebf7", "scanner": "scanner-primary", "fingerprint": "b50c89d8f983d297", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6bd5b467265be9e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-button.js:20"}, "properties": {"repobilityId": "188e1ae790d77434", "scanner": "scanner-primary", "fingerprint": "6bd5b467265be9e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b6ae18b2103b042", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-data.js:18"}, "properties": {"repobilityId": "b73e9a212091b001", "scanner": "scanner-primary", "fingerprint": "6b6ae18b2103b042", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb0536e5f3812735", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/patches/patch-logbox-all.js:40"}, "properties": {"repobilityId": "009963b4e39b46b1", "scanner": "scanner-primary", "fingerprint": "fb0536e5f3812735", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e22ee64d00eecf1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 context/onboardingReducer.ts:116"}, "properties": {"repobilityId": "f96661c970d74b3f", "scanner": "scanner-primary", "fingerprint": "e22ee64d00eecf1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd28f8f45b9df8cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 context/AuthProvider.tsx:278"}, "properties": {"repobilityId": "2922b134821faa34", "scanner": "scanner-primary", "fingerprint": "dd28f8f45b9df8cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f44bfd6b3074ea5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidManifestCleanup.js:67"}, "properties": {"repobilityId": "36ffe651f01f8765", "scanner": "scanner-primary", "fingerprint": "8f44bfd6b3074ea5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5dcad9642e3a35d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withStripeProguardFix.js:43"}, "properties": {"repobilityId": "6245465cb61392e0", "scanner": "scanner-primary", "fingerprint": "5dcad9642e3a35d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c1cea99bc5bf52b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withGoogleMaps.js:26"}, "properties": {"repobilityId": "02b15be74ae21882", "scanner": "scanner-primary", "fingerprint": "7c1cea99bc5bf52b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f919c0aa66e85e7f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidBuildConfig.js:78"}, "properties": {"repobilityId": "baf430c7c2e0de28", "scanner": "scanner-primary", "fingerprint": "f919c0aa66e85e7f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-342f57253e057d60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withAndroidLintExtraTranslationFix.js:31"}, "properties": {"repobilityId": "2d5444337693a627", "scanner": "scanner-primary", "fingerprint": "342f57253e057d60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f37c7bc4e88c0cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/withGoogleOAuth.js:36"}, "properties": {"repobilityId": "c39caf52e7fa6426", "scanner": "scanner-primary", "fingerprint": "6f37c7bc4e88c0cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb91bdcfb9c46243", "level": "warning", "message": {"text": "Privileged port 11 in use"}, "properties": {"repobilityId": "5b3038c67fabb4c8", "scanner": "scanner-primary", "fingerprint": "bb91bdcfb9c46243", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/beta-deploy.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6b78043210ed11a4", "level": "warning", "message": {"text": "Privileged port 12 in use"}, "properties": {"repobilityId": "65e7eefa33f2def4", "scanner": "scanner-primary", "fingerprint": "6b78043210ed11a4", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/prod-cross-system-e2e.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe245eb896bfa316", "level": "warning", "message": {"text": "Privileged port 35 in use"}, "properties": {"repobilityId": "e997ec9811d79c6d", "scanner": "scanner-primary", "fingerprint": "fe245eb896bfa316", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/moved-from-root/OVERNIGHT_SUMMARY.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91218874247567bf", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "91218874247567bf", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/moved-from-root/OVERNIGHT_SUMMARY.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f15ad5b775a5391", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "4f15ad5b775a5391", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/moved-from-root/OVERNIGHT_SUMMARY.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-64def0b1ef09c966", "level": "warning", "message": {"text": "Privileged port 4 in use"}, "properties": {"repobilityId": "1594bfeff919296e", "scanner": "scanner-primary", "fingerprint": "64def0b1ef09c966", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7da8dba9c6c53daf", "level": "warning", "message": {"text": "Privileged port 40 in use"}, "properties": {"repobilityId": "28c59d470d4929c6", "scanner": "scanner-primary", "fingerprint": "7da8dba9c6c53daf", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b69f45b2dcff8d24", "level": "warning", "message": {"text": "Dockerfile runs as root: server/Dockerfile"}, "properties": {"repobilityId": "4600ca3b571a3f30", "scanner": "scanner-primary", "fingerprint": "b69f45b2dcff8d24", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-1f008f0713d4a6cc", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "9ddd7f6389f1b091", "scanner": "scanner-primary", "fingerprint": "1f008f0713d4a6cc", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-1f008f0713d4a6cc", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "a0456600b5c6676e", "scanner": "scanner-primary", "fingerprint": "1f008f0713d4a6cc", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/Dockerfile"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-1c82517a62bfec3b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in __tests__/auth-screen-snapshot-contract.test.ts:3"}, "properties": {"repobilityId": "1efe2f7a6fed195b", "scanner": "scanner-primary", "fingerprint": "1c82517a62bfec3b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "__tests__/auth-screen-snapshot-contract.test.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-3b07ffad0f2d7240", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/repeat-command.js:3"}, "properties": {"repobilityId": "8514f789e18f8f47", "scanner": "scanner-primary", "fingerprint": "3b07ffad0f2d7240", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/repeat-command.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-9a3264ca048bb133", "level": "error", "message": {"text": "Possible secret in scripts/test-login-flow.sh"}, "properties": {"repobilityId": "6c474ab2a52957de", "scanner": "scanner-primary", "fingerprint": "9a3264ca048bb133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-login-flow.sh"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-1d20e4e1fd6ebfb5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ensure-server-prisma-client.js:3"}, "properties": {"repobilityId": "a8f2bf426e530a55", "scanner": "scanner-primary", "fingerprint": "1d20e4e1fd6ebfb5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ensure-server-prisma-client.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-b16e92beadae0595", "level": "error", "message": {"text": "Possible secret in scripts/email-verification-test.sh"}, "properties": {"repobilityId": "e915ae46b59a99e4", "scanner": "scanner-primary", "fingerprint": "b16e92beadae0595", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/email-verification-test.sh"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-8e546fea1c0c5016", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-async-handler-usage.js:3"}, "properties": {"repobilityId": "68893151ec25c2ea", "scanner": "scanner-primary", "fingerprint": "8e546fea1c0c5016", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-async-handler-usage.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-5c27b15caf62a9e4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/run-with-retry.js:3"}, "properties": {"repobilityId": "206568923e4ee615", "scanner": "scanner-primary", "fingerprint": "5c27b15caf62a9e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-with-retry.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-32f58b031eff7c4f", "level": "error", "message": {"text": "Possible secret in scripts/prod-cross-system-e2e.sh"}, "properties": {"repobilityId": "a2887f8ec93e0c25", "scanner": "scanner-primary", "fingerprint": "32f58b031eff7c4f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/prod-cross-system-e2e.sh"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-32f58b031eff7c4f", "level": "error", "message": {"text": "Possible secret in scripts/prod-cross-system-e2e.sh"}, "properties": {"repobilityId": "a2887f8ec93e0c25", "scanner": "scanner-primary", "fingerprint": "32f58b031eff7c4f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/prod-cross-system-e2e.sh"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-5f84161df8dd3790", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-user-cache-invalidation.js:3"}, "properties": {"repobilityId": "5d111d1898d617ea", "scanner": "scanner-primary", "fingerprint": "5f84161df8dd3790", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-user-cache-invalidation.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-50abf1bec99d8a9f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-secret-literals.js:3"}, "properties": {"repobilityId": "f3d459e47f330c47", "scanner": "scanner-primary", "fingerprint": "50abf1bec99d8a9f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-secret-literals.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-501374e9d4ad917f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-error-envelope-usage.js:3"}, "properties": {"repobilityId": "cb9d056bb8352eb4", "scanner": "scanner-primary", "fingerprint": "501374e9d4ad917f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-error-envelope-usage.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-4e38d28ca9e66e71", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/mock-server.js:7"}, "properties": {"repobilityId": "c8e30dca219f4a2b", "scanner": "scanner-primary", "fingerprint": "4e38d28ca9e66e71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/mock-server.js"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-2ff5276b419ebc13", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-guard-bypass.ts"}, "properties": {"repobilityId": "0123b9cc5c4d5826", "scanner": "scanner-primary", "fingerprint": "2ff5276b419ebc13", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-guard-bypass.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-0b7f609ad3ae497c", "level": "error", "message": {"text": "Possible secret in server/scripts/concurrent-test.ts"}, "properties": {"repobilityId": "d161bc54b2a318cb", "scanner": "scanner-primary", "fingerprint": "0b7f609ad3ae497c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/concurrent-test.ts"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-7fd655f907cc223a", "level": "error", "message": {"text": "Possible secret in server/scripts/notification-test.ts"}, "properties": {"repobilityId": "b781aba5a9284a27", "scanner": "scanner-primary", "fingerprint": "7fd655f907cc223a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/notification-test.ts"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-7fd655f907cc223a", "level": "error", "message": {"text": "Possible secret in server/scripts/notification-test.ts"}, "properties": {"repobilityId": "b781aba5a9284a27", "scanner": "scanner-primary", "fingerprint": "7fd655f907cc223a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/notification-test.ts"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-7fd655f907cc223a", "level": "error", "message": {"text": "Possible secret in server/scripts/notification-test.ts"}, "properties": {"repobilityId": "b781aba5a9284a27", "scanner": "scanner-primary", "fingerprint": "7fd655f907cc223a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/notification-test.ts"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-bcf4ff961591de7d", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-polling-approval.ts"}, "properties": {"repobilityId": "cfb299d9cc1e2800", "scanner": "scanner-primary", "fingerprint": "bcf4ff961591de7d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-polling-approval.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-5e9dd9a547d0b65e", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-ad-dashboard-review-flow.ts"}, "properties": {"repobilityId": "5ff32643988a4be3", "scanner": "scanner-primary", "fingerprint": "5e9dd9a547d0b65e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-ad-dashboard-review-flow.ts"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-16ecf381406ff9eb", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-ad-approval-flow.ts"}, "properties": {"repobilityId": "859ddc684154710b", "scanner": "scanner-primary", "fingerprint": "16ecf381406ff9eb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-ad-approval-flow.ts"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-9a47b80678787069", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-identity-uniqueness.ts"}, "properties": {"repobilityId": "2ded9a06bf724610", "scanner": "scanner-primary", "fingerprint": "9a47b80678787069", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-identity-uniqueness.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-f415d1aacfe014a6", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-event-approval-flow.ts"}, "properties": {"repobilityId": "f547438fda986d85", "scanner": "scanner-primary", "fingerprint": "f415d1aacfe014a6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-event-approval-flow.ts"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-f9c70550e3763650", "level": "error", "message": {"text": "Possible secret in server/scripts/geofencing-test.ts"}, "properties": {"repobilityId": "c1d5d837cd495160", "scanner": "scanner-primary", "fingerprint": "f9c70550e3763650", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/geofencing-test.ts"}, "region": {"startLine": 176}}}]}, {"ruleId": "scanner-f9c70550e3763650", "level": "error", "message": {"text": "Possible secret in server/scripts/geofencing-test.ts"}, "properties": {"repobilityId": "c1d5d837cd495160", "scanner": "scanner-primary", "fingerprint": "f9c70550e3763650", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/geofencing-test.ts"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-847afbb58d7d79f2", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-session-enforcement.ts"}, "properties": {"repobilityId": "3b990e6a28c3cdba", "scanner": "scanner-primary", "fingerprint": "847afbb58d7d79f2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-session-enforcement.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-847afbb58d7d79f2", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-session-enforcement.ts"}, "properties": {"repobilityId": "3b990e6a28c3cdba", "scanner": "scanner-primary", "fingerprint": "847afbb58d7d79f2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-session-enforcement.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-16574634013f1e7d", "level": "error", "message": {"text": "Possible secret in server/scripts/cross-role-e2e-audit.ts"}, "properties": {"repobilityId": "7ea283be87432858", "scanner": "scanner-primary", "fingerprint": "16574634013f1e7d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/cross-role-e2e-audit.ts"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-16574634013f1e7d", "level": "error", "message": {"text": "Possible secret in server/scripts/cross-role-e2e-audit.ts"}, "properties": {"repobilityId": "7ea283be87432858", "scanner": "scanner-primary", "fingerprint": "16574634013f1e7d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/cross-role-e2e-audit.ts"}, "region": {"startLine": 173}}}]}, {"ruleId": "scanner-3e4c6b3275eb0db5", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-org-manager-access.ts"}, "properties": {"repobilityId": "4cc69372e2b9be6b", "scanner": "scanner-primary", "fingerprint": "3e4c6b3275eb0db5", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-org-manager-access.ts"}, "region": {"startLine": 202}}}]}, {"ruleId": "scanner-3e4c6b3275eb0db5", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-org-manager-access.ts"}, "properties": {"repobilityId": "4cc69372e2b9be6b", "scanner": "scanner-primary", "fingerprint": "3e4c6b3275eb0db5", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-org-manager-access.ts"}, "region": {"startLine": 248}}}]}, {"ruleId": "scanner-b1932801c30a54a7", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-coach-creating-flow.ts"}, "properties": {"repobilityId": "95c102ece5601292", "scanner": "scanner-primary", "fingerprint": "b1932801c30a54a7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-coach-creating-flow.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-0b59aee7bffda769", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-onboarding-persistence.ts"}, "properties": {"repobilityId": "49b7ab16ad58fb99", "scanner": "scanner-primary", "fingerprint": "0b59aee7bffda769", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-onboarding-persistence.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-513e9f1cec90be19", "level": "error", "message": {"text": "Possible secret in server/scripts/ghost-user-test.ts"}, "properties": {"repobilityId": "83d5e456752724d1", "scanner": "scanner-primary", "fingerprint": "513e9f1cec90be19", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ghost-user-test.ts"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-513e9f1cec90be19", "level": "error", "message": {"text": "Possible secret in server/scripts/ghost-user-test.ts"}, "properties": {"repobilityId": "83d5e456752724d1", "scanner": "scanner-primary", "fingerprint": "513e9f1cec90be19", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ghost-user-test.ts"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-513e9f1cec90be19", "level": "error", "message": {"text": "Possible secret in server/scripts/ghost-user-test.ts"}, "properties": {"repobilityId": "83d5e456752724d1", "scanner": "scanner-primary", "fingerprint": "513e9f1cec90be19", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ghost-user-test.ts"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-513e9f1cec90be19", "level": "error", "message": {"text": "Possible secret in server/scripts/ghost-user-test.ts"}, "properties": {"repobilityId": "83d5e456752724d1", "scanner": "scanner-primary", "fingerprint": "513e9f1cec90be19", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ghost-user-test.ts"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-513e9f1cec90be19", "level": "error", "message": {"text": "Possible secret in server/scripts/ghost-user-test.ts"}, "properties": {"repobilityId": "83d5e456752724d1", "scanner": "scanner-primary", "fingerprint": "513e9f1cec90be19", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ghost-user-test.ts"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-f9eeaf6eb466168c", "level": "error", "message": {"text": "Possible secret in server/scripts/security-test.ts"}, "properties": {"repobilityId": "c36278f6f450c97d", "scanner": "scanner-primary", "fingerprint": "f9eeaf6eb466168c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/security-test.ts"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-86a19b568361ec25", "level": "error", "message": {"text": "Possible secret in server/scripts/comprehensive-test-suite.ts"}, "properties": {"repobilityId": "133d0bbae3e4a266", "scanner": "scanner-primary", "fingerprint": "86a19b568361ec25", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/comprehensive-test-suite.ts"}, "region": {"startLine": 251}}}]}, {"ruleId": "scanner-86a19b568361ec25", "level": "error", "message": {"text": "Possible secret in server/scripts/comprehensive-test-suite.ts"}, "properties": {"repobilityId": "133d0bbae3e4a266", "scanner": "scanner-primary", "fingerprint": "86a19b568361ec25", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/comprehensive-test-suite.ts"}, "region": {"startLine": 267}}}]}, {"ruleId": "scanner-5b7a9f8a0faf3a35", "level": "error", "message": {"text": "Possible secret in server/scripts/ux-verification-final.ts"}, "properties": {"repobilityId": "7e430ed468d71b5c", "scanner": "scanner-primary", "fingerprint": "5b7a9f8a0faf3a35", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ux-verification-final.ts"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-5b7a9f8a0faf3a35", "level": "error", "message": {"text": "Possible secret in server/scripts/ux-verification-final.ts"}, "properties": {"repobilityId": "7e430ed468d71b5c", "scanner": "scanner-primary", "fingerprint": "5b7a9f8a0faf3a35", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ux-verification-final.ts"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-5b7a9f8a0faf3a35", "level": "error", "message": {"text": "Possible secret in server/scripts/ux-verification-final.ts"}, "properties": {"repobilityId": "7e430ed468d71b5c", "scanner": "scanner-primary", "fingerprint": "5b7a9f8a0faf3a35", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ux-verification-final.ts"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-ea4be881be60c10e", "level": "error", "message": {"text": "Possible secret in server/scripts/admin-e2e-audit.ts"}, "properties": {"repobilityId": "00e06af571eba469", "scanner": "scanner-primary", "fingerprint": "ea4be881be60c10e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/admin-e2e-audit.ts"}, "region": {"startLine": 191}}}]}, {"ruleId": "scanner-ea4be881be60c10e", "level": "error", "message": {"text": "Possible secret in server/scripts/admin-e2e-audit.ts"}, "properties": {"repobilityId": "00e06af571eba469", "scanner": "scanner-primary", "fingerprint": "ea4be881be60c10e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/admin-e2e-audit.ts"}, "region": {"startLine": 387}}}]}, {"ruleId": "scanner-be7365f8300e7c95", "level": "error", "message": {"text": "Possible secret in server/scripts/coach-journey-test.ts"}, "properties": {"repobilityId": "f7058811703364fe", "scanner": "scanner-primary", "fingerprint": "be7365f8300e7c95", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/coach-journey-test.ts"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-be7365f8300e7c95", "level": "error", "message": {"text": "Possible secret in server/scripts/coach-journey-test.ts"}, "properties": {"repobilityId": "f7058811703364fe", "scanner": "scanner-primary", "fingerprint": "be7365f8300e7c95", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/coach-journey-test.ts"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-4767e93833fb6c53", "level": "error", "message": {"text": "Possible secret in server/scripts/smoke-test-approvals.sh"}, "properties": {"repobilityId": "640519f080f567a9", "scanner": "scanner-primary", "fingerprint": "4767e93833fb6c53", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/smoke-test-approvals.sh"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-79b6494c9d9af8b4", "level": "error", "message": {"text": "Possible secret in server/scripts/performance-baseline-test.ts"}, "properties": {"repobilityId": "515ce6ea24b1cc40", "scanner": "scanner-primary", "fingerprint": "79b6494c9d9af8b4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/performance-baseline-test.ts"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-ca5c292aab3e0c5c", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-coach-flow.ts"}, "properties": {"repobilityId": "805afc2d5af8a4d0", "scanner": "scanner-primary", "fingerprint": "ca5c292aab3e0c5c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-coach-flow.ts"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-5c7cdfe93e3fcce2", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-push-token-registration.ts"}, "properties": {"repobilityId": "c8919b9964cda5fe", "scanner": "scanner-primary", "fingerprint": "5c7cdfe93e3fcce2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-push-token-registration.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 166}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 241}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 245}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-2181af65d23f3738", "level": "error", "message": {"text": "Possible secret in server/scripts/rate-limit-test.ts"}, "properties": {"repobilityId": "f61e14474b0d7236", "scanner": "scanner-primary", "fingerprint": "2181af65d23f3738", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/rate-limit-test.ts"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-cd292b6d142603f7", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-full-regression.ts"}, "properties": {"repobilityId": "71c02ee1937155fd", "scanner": "scanner-primary", "fingerprint": "cd292b6d142603f7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-full-regression.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-c40113029bf99dc7", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-session-isolation.ts"}, "properties": {"repobilityId": "d63d3530aea4ddaf", "scanner": "scanner-primary", "fingerprint": "c40113029bf99dc7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-session-isolation.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-c40113029bf99dc7", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-session-isolation.ts"}, "properties": {"repobilityId": "d63d3530aea4ddaf", "scanner": "scanner-primary", "fingerprint": "c40113029bf99dc7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-session-isolation.ts"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-ab14fe470b6c42fd", "level": "error", "message": {"text": "Possible secret in server/scripts/auth-security-test.ts"}, "properties": {"repobilityId": "e64891bdfbd68bd3", "scanner": "scanner-primary", "fingerprint": "ab14fe470b6c42fd", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/auth-security-test.ts"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-d18ff590ec106724", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-admin-tools.ts"}, "properties": {"repobilityId": "142564321965031e", "scanner": "scanner-primary", "fingerprint": "d18ff590ec106724", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-admin-tools.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-f8e5e608c85c9e95", "level": "error", "message": {"text": "Possible secret in server/scripts/ad-hosting-test.ts"}, "properties": {"repobilityId": "894bdc9aa6720a79", "scanner": "scanner-primary", "fingerprint": "f8e5e608c85c9e95", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ad-hosting-test.ts"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-f8e5e608c85c9e95", "level": "error", "message": {"text": "Possible secret in server/scripts/ad-hosting-test.ts"}, "properties": {"repobilityId": "894bdc9aa6720a79", "scanner": "scanner-primary", "fingerprint": "f8e5e608c85c9e95", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/ad-hosting-test.ts"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-88b2a87b844089a2", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-profile-team-security.ts"}, "properties": {"repobilityId": "6ddff203c32bfe41", "scanner": "scanner-primary", "fingerprint": "88b2a87b844089a2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-profile-team-security.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-0a5c4248e0e6bdb2", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-app-review-account.ts"}, "properties": {"repobilityId": "fe171278bf17e15f", "scanner": "scanner-primary", "fingerprint": "0a5c4248e0e6bdb2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-app-review-account.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-c81269731d50fb1f", "level": "error", "message": {"text": "Possible secret in server/scripts/verify-fan-flow.ts"}, "properties": {"repobilityId": "da38590e7a67a3f0", "scanner": "scanner-primary", "fingerprint": "c81269731d50fb1f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/verify-fan-flow.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-20ce4b32c8cf585e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/scripts/load/validate-distributed-lock.ts:12"}, "properties": {"repobilityId": "cc7c0fdb9bf16d61", "scanner": "scanner-primary", "fingerprint": "20ce4b32c8cf585e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/load/validate-distributed-lock.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-c8c9cbc83ac3339a", "level": "error", "message": {"text": "Possible secret in server/scripts/load/p0-load-smoke.ts"}, "properties": {"repobilityId": "5c1767186aaaf772", "scanner": "scanner-primary", "fingerprint": "c8c9cbc83ac3339a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/load/p0-load-smoke.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-ef482213f26a4ddf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/scripts/lib/railwayVerificationEnv.ts:1"}, "properties": {"repobilityId": "22e2b8dc1c3d3a6c", "scanner": "scanner-primary", "fingerprint": "ef482213f26a4ddf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/lib/railwayVerificationEnv.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f8487684dfed4379", "level": "error", "message": {"text": "Possible secret in server/scripts/e2e/test-integration-crossmatrix.sh"}, "properties": {"repobilityId": "5d3962481ff700d3", "scanner": "scanner-primary", "fingerprint": "f8487684dfed4379", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/e2e/test-integration-crossmatrix.sh"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-f8487684dfed4379", "level": "error", "message": {"text": "Possible secret in server/scripts/e2e/test-integration-crossmatrix.sh"}, "properties": {"repobilityId": "5d3962481ff700d3", "scanner": "scanner-primary", "fingerprint": "f8487684dfed4379", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/e2e/test-integration-crossmatrix.sh"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-444f1822fa504387", "level": "error", "message": {"text": "Possible secret in server/scripts/e2e/test-single-session.sh"}, "properties": {"repobilityId": "cab20314aad0f67a", "scanner": "scanner-primary", "fingerprint": "444f1822fa504387", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/e2e/test-single-session.sh"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-444f1822fa504387", "level": "error", "message": {"text": "Possible secret in server/scripts/e2e/test-single-session.sh"}, "properties": {"repobilityId": "cab20314aad0f67a", "scanner": "scanner-primary", "fingerprint": "444f1822fa504387", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/e2e/test-single-session.sh"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-e97712ec1c9815eb", "level": "error", "message": {"text": "Possible secret in server/scripts/e2e/README.md"}, "properties": {"repobilityId": "681f5d043943e389", "scanner": "scanner-primary", "fingerprint": "e97712ec1c9815eb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/e2e/README.md"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-6d9be84e50a31a90", "level": "error", "message": {"text": "Possible secret in server/scripts/e2e/test-coach-application-flow.sh"}, "properties": {"repobilityId": "64215d505e942406", "scanner": "scanner-primary", "fingerprint": "6d9be84e50a31a90", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/scripts/e2e/test-coach-application-flow.sh"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-65acb237b7f85be7", "level": "error", "message": {"text": "Possible secret in server/src/__tests__/helpers/authE2eTestUtils.ts"}, "properties": {"repobilityId": "a84bbdfd8f88790f", "scanner": "scanner-primary", "fingerprint": "65acb237b7f85be7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/__tests__/helpers/authE2eTestUtils.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-17c0177327adfbfd", "level": "note", "message": {"text": "Insecure pattern 'document_write' in server/src/routes/ads.ts:1387"}, "properties": {"repobilityId": "c50410f2bdeb25b3", "scanner": "scanner-primary", "fingerprint": "17c0177327adfbfd", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/routes/ads.ts"}, "region": {"startLine": 1387}}}]}, {"ruleId": "scanner-d7138758703724ba", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .github/workflows/auto-changelog.yml:40"}, "properties": {"repobilityId": "0ea9c30b4408b244", "scanner": "scanner-primary", "fingerprint": "d7138758703724ba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-changelog.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-399a4264d01a417e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "db4a557a321dc4a9", "scanner": "scanner-primary", "fingerprint": "399a4264d01a417e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-build-health.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-399a4264d01a417e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b7b48e083d3a5a20", "scanner": "scanner-primary", "fingerprint": "399a4264d01a417e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-build-health.yml"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-4e0386baf311680b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2430eb13456053c5", "scanner": "scanner-primary", "fingerprint": "4e0386baf311680b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/production-e2e.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-4e0386baf311680b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "52cb0bb55f6e497c", "scanner": "scanner-primary", "fingerprint": "4e0386baf311680b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/production-e2e.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-4e0386baf311680b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "95aaa369df1ae287", "scanner": "scanner-primary", "fingerprint": "4e0386baf311680b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/production-e2e.yml"}, "region": {"startLine": 298}}}]}, {"ruleId": "scanner-89967f6ed179377b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6916119810f9baec", "scanner": "scanner-primary", "fingerprint": "89967f6ed179377b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/railway-health.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-89967f6ed179377b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0ea995c62f68429a", "scanner": "scanner-primary", "fingerprint": "89967f6ed179377b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/railway-health.yml"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-bd8893acf75b50f9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "43eb789102cbed07", "scanner": "scanner-primary", "fingerprint": "bd8893acf75b50f9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-auto-remediate.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-bd8893acf75b50f9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a7635eed470a6f1a", "scanner": "scanner-primary", "fingerprint": "bd8893acf75b50f9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-auto-remediate.yml"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-bd8893acf75b50f9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "100f31efefa55816", "scanner": "scanner-primary", "fingerprint": "bd8893acf75b50f9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-auto-remediate.yml"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-81a21d670c72ed61", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "927f9a3786a1e01e", "scanner": "scanner-primary", "fingerprint": "81a21d670c72ed61", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-auto-remediate.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b334f519343762d4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4d68f1945d214922", "scanner": "scanner-primary", "fingerprint": "b334f519343762d4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/npm-audit.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-b334f519343762d4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1fcc4a86648d43ce", "scanner": "scanner-primary", "fingerprint": "b334f519343762d4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/npm-audit.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-b334f519343762d4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1fb3da4570bc7431", "scanner": "scanner-primary", "fingerprint": "b334f519343762d4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/npm-audit.yml"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-6c13ba795f853b63", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd4597a50e8bbfed", "scanner": "scanner-primary", "fingerprint": "6c13ba795f853b63", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/expo-doctor.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-6c13ba795f853b63", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "451c7fb518055c64", "scanner": "scanner-primary", "fingerprint": "6c13ba795f853b63", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/expo-doctor.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 201}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 251}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 325}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 328}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 354}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 359}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 399}}}]}, {"ruleId": "scanner-12522bf27bea173c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b2b7bb3a189568fe", "scanner": "scanner-primary", "fingerprint": "12522bf27bea173c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/secret-scan.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-12522bf27bea173c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "53514350cbb0b1ce", "scanner": "scanner-primary", "fingerprint": "12522bf27bea173c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/secret-scan.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-aa26942120bbaad6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "57eb7754d7c56e67", "scanner": "scanner-primary", "fingerprint": "aa26942120bbaad6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/production-drift-check.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-c17d89558969814b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "27f22a1013b15be0", "scanner": "scanner-primary", "fingerprint": "c17d89558969814b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/environment-audit-consolidated.yml"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-c17d89558969814b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "29a7b3a0270981ff", "scanner": "scanner-primary", "fingerprint": "c17d89558969814b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/environment-audit-consolidated.yml"}, "region": {"startLine": 229}}}]}, {"ruleId": "scanner-04e08f82c9274098", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b70982e40fe9cc65", "scanner": "scanner-primary", "fingerprint": "04e08f82c9274098", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/verify-production-ready.yml"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-04e08f82c9274098", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2e34b109bafa6184", "scanner": "scanner-primary", "fingerprint": "04e08f82c9274098", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/verify-production-ready.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-04e08f82c9274098", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "55a2525e1fba0df2", "scanner": "scanner-primary", "fingerprint": "04e08f82c9274098", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/verify-production-ready.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-e87c163515399669", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "41124b48231ebb2c", "scanner": "scanner-primary", "fingerprint": "e87c163515399669", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-guard.yml"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-b9da62c7eb0e365f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8bb5c81e28ffb229", "scanner": "scanner-primary", "fingerprint": "b9da62c7eb0e365f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-changelog.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-b9da62c7eb0e365f", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "50d2cbc5e18a0d7c", "scanner": "scanner-primary", "fingerprint": "b9da62c7eb0e365f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-changelog.yml"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-8d69cb1ac2fbd86b", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ce88a4213b28b487", "scanner": "scanner-primary", "fingerprint": "8d69cb1ac2fbd86b", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-changelog.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d9ef14c492341d2c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5559f47fb2d0a135", "scanner": "scanner-primary", "fingerprint": "d9ef14c492341d2c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-db-migrate.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-d9ef14c492341d2c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a8e6e79d2f04e4bd", "scanner": "scanner-primary", "fingerprint": "d9ef14c492341d2c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-db-migrate.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-30f5eb26fa7e355f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6d5a436b2b97714d", "scanner": "scanner-primary", "fingerprint": "30f5eb26fa7e355f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-security.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-30f5eb26fa7e355f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e240c740fa42c7c7", "scanner": "scanner-primary", "fingerprint": "30f5eb26fa7e355f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-security.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-3d5430ba799ede0f", "level": "error", "message": {"text": "GitHub Action tracks a moving branch"}, "properties": {"repobilityId": "9ad6e2a325ed75d6", "scanner": "scanner-primary", "fingerprint": "3d5430ba799ede0f", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-security.yml"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-30f5eb26fa7e355f", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02011c312205a851", "scanner": "scanner-primary", "fingerprint": "30f5eb26fa7e355f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-security.yml"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-30f5eb26fa7e355f", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02011c312205a851", "scanner": "scanner-primary", "fingerprint": "30f5eb26fa7e355f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-security.yml"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-30f5eb26fa7e355f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6d5a436b2b97714d", "scanner": "scanner-primary", "fingerprint": "30f5eb26fa7e355f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-security.yml"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-3d5430ba799ede0f", "level": "error", "message": {"text": "GitHub Action tracks a moving branch"}, "properties": {"repobilityId": "9ad6e2a325ed75d6", "scanner": "scanner-primary", "fingerprint": "3d5430ba799ede0f", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snyk-security.yml"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6b15be8f4d15c427", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "582b3e8534908182", "scanner": "scanner-primary", "fingerprint": "6b15be8f4d15c427", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8b2216765f37902", "level": "note", "message": {"text": "Very large file: components/QuickAddGameModal.tsx (2090 lines)"}, "properties": {"repobilityId": "9d467cfaf19892c9", "scanner": "scanner-primary", "fingerprint": "e8b2216765f37902", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8884cf06bd1f8273", "level": "note", "message": {"text": "Very large file: app/team-page.tsx (1748 lines)"}, "properties": {"repobilityId": "b63a52010756aedb", "scanner": "scanner-primary", "fingerprint": "8884cf06bd1f8273", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ebe7de132636ef3f", "level": "note", "message": {"text": "Very large file: app/manage-season.tsx (2768 lines)"}, "properties": {"repobilityId": "9b615d955eb45585", "scanner": "scanner-primary", "fingerprint": "ebe7de132636ef3f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dd0bea3bb1252779", "level": "note", "message": {"text": "Very large file: app/profile.tsx (2539 lines)"}, "properties": {"repobilityId": "bf6b3c57e55e149a", "scanner": "scanner-primary", "fingerprint": "dd0bea3bb1252779", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ffee1b833cc1f650", "level": "note", "message": {"text": "Very large file: app/admin-dashboard.tsx (1218 lines)"}, "properties": {"repobilityId": "3eb0b4176c144ade", "scanner": "scanner-primary", "fingerprint": "ffee1b833cc1f650", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-42ff1ededdfcba40", "level": "note", "message": {"text": "Very large file: app/create-fan-event.tsx (1618 lines)"}, "properties": {"repobilityId": "a67a91764c1353c8", "scanner": "scanner-primary", "fingerprint": "42ff1ededdfcba40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-21870aaa993fffd1", "level": "note", "message": {"text": "Very large file: app/ad-calendar.tsx (1575 lines)"}, "properties": {"repobilityId": "00fa9f3cf8b50409", "scanner": "scanner-primary", "fingerprint": "21870aaa993fffd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8ab6828c6ec4d124", "level": "note", "message": {"text": "Very large file: app/highlights.tsx (1711 lines)"}, "properties": {"repobilityId": "f4df8fa9bf4c102d", "scanner": "scanner-primary", "fingerprint": "8ab6828c6ec4d124", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-98367a260b0a3c87", "level": "note", "message": {"text": "Very large file: app/post-detail.tsx (2607 lines)"}, "properties": {"repobilityId": "098c4175b1424597", "scanner": "scanner-primary", "fingerprint": "98367a260b0a3c87", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-15158dbe7be0d6ce", "level": "note", "message": {"text": "Very large file: app/settings/index.tsx (1554 lines)"}, "properties": {"repobilityId": "dc3c072cd012c365", "scanner": "scanner-primary", "fingerprint": "15158dbe7be0d6ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6ebb888b29c8e4f8", "level": "note", "message": {"text": "Very large file: app/onboarding/step-3-league.tsx (2491 lines)"}, "properties": {"repobilityId": "d7862cc3102d3f39", "scanner": "scanner-primary", "fingerprint": "6ebb888b29c8e4f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bc538b14cd967206", "level": "note", "message": {"text": "Very large file: app/game-details/GameDetailsScreen.tsx (5026 lines)"}, "properties": {"repobilityId": "46e097dbccb8733c", "scanner": "scanner-primary", "fingerprint": "bc538b14cd967206", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5119394e10212ab0", "level": "note", "message": {"text": "Very large file: app/game-details/GameVerticalFeedScreen.tsx (1995 lines)"}, "properties": {"repobilityId": "1f9e7a6d9f510cf2", "scanner": "scanner-primary", "fingerprint": "5119394e10212ab0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bc9ec2037c5d5510", "level": "note", "message": {"text": "Very large file: app/features/navigation/screens/FeedScreen.tsx (2909 lines)"}, "properties": {"repobilityId": "426b4c9f6d543048", "scanner": "scanner-primary", "fingerprint": "bc9ec2037c5d5510", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8ada6565b54d7a21", "level": "note", "message": {"text": "Very large file: app/features/navigation/screens/ProfileScreen.tsx (2631 lines)"}, "properties": {"repobilityId": "053e568a31ada3b3", "scanner": "scanner-primary", "fingerprint": "8ada6565b54d7a21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6e78c7fbd5f0b30b", "level": "note", "message": {"text": "Very large file: app/(tabs)/create-team.tsx (1816 lines)"}, "properties": {"repobilityId": "76da1f299f32e771", "scanner": "scanner-primary", "fingerprint": "6e78c7fbd5f0b30b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b09fedf71d7128a2", "level": "note", "message": {"text": "Very large file: app/(tabs)/create-post.tsx (2689 lines)"}, "properties": {"repobilityId": "72769f3f513f2c12", "scanner": "scanner-primary", "fingerprint": "b09fedf71d7128a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-abb8f1f9660c41b2", "level": "note", "message": {"text": "Very large file: app/(tabs)/team-contacts.tsx (3048 lines)"}, "properties": {"repobilityId": "55f4093078d82767", "scanner": "scanner-primary", "fingerprint": "abb8f1f9660c41b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f97bae7fc2a7555e", "level": "note", "message": {"text": "Very large file: app/(tabs)/edit-profile.tsx (1709 lines)"}, "properties": {"repobilityId": "3a0c3287a1f744ce", "scanner": "scanner-primary", "fingerprint": "f97bae7fc2a7555e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-66897cdd92fd5076", "level": "note", "message": {"text": "Very large file: app/(tabs)/discover/mobile-community.tsx (2940 lines)"}, "properties": {"repobilityId": "849e6c14972b0eac", "scanner": "scanner-primary", "fingerprint": "66897cdd92fd5076", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1ec57c30595dbc1a", "level": "note", "message": {"text": "Very large file: server/src/__tests__/coach-approval.test.ts (1388 lines)"}, "properties": {"repobilityId": "3e87d00e18e0cdcd", "scanner": "scanner-primary", "fingerprint": "1ec57c30595dbc1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-77a582366ad4dc56", "level": "note", "message": {"text": "Very large file: server/src/lib/email.ts (2603 lines)"}, "properties": {"repobilityId": "89ab2ced0f975beb", "scanner": "scanner-primary", "fingerprint": "77a582366ad4dc56", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1ec912cd75c6d5bb", "level": "note", "message": {"text": "Very large file: server/src/routes/auth.ts (4023 lines)"}, "properties": {"repobilityId": "4344b8dc579a6b61", "scanner": "scanner-primary", "fingerprint": "1ec912cd75c6d5bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-83edce41fc092265", "level": "note", "message": {"text": "Very large file: server/src/routes/organizations.ts (3887 lines)"}, "properties": {"repobilityId": "0463134c68d415c0", "scanner": "scanner-primary", "fingerprint": "83edce41fc092265", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-58c659ebc662ed91", "level": "note", "message": {"text": "Very large file: server/src/routes/users.ts (1436 lines)"}, "properties": {"repobilityId": "b377203b6a214c8b", "scanner": "scanner-primary", "fingerprint": "58c659ebc662ed91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f7293f727c25cb6f", "level": "note", "message": {"text": "Very large file: server/src/routes/payments.ts (4022 lines)"}, "properties": {"repobilityId": "12ae7ccd4a766abf", "scanner": "scanner-primary", "fingerprint": "f7293f727c25cb6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7739b936950fd341", "level": "note", "message": {"text": "Very large file: server/src/routes/games.ts (2761 lines)"}, "properties": {"repobilityId": "1ae58b39654d4d88", "scanner": "scanner-primary", "fingerprint": "7739b936950fd341", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aa47e144f76dd739", "level": "note", "message": {"text": "Very large file: server/src/routes/ads.ts (1859 lines)"}, "properties": {"repobilityId": "6290963c53c9549f", "scanner": "scanner-primary", "fingerprint": "aa47e144f76dd739", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-15bad539df917f2d", "level": "note", "message": {"text": "Very large file: server/src/routes/posts.ts (2198 lines)"}, "properties": {"repobilityId": "92cc32a18d44e086", "scanner": "scanner-primary", "fingerprint": "15bad539df917f2d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-01b0502ca5494ff1", "level": "note", "message": {"text": "Very large file: server/src/routes/teams.ts (2628 lines)"}, "properties": {"repobilityId": "d0b0eaca8688c0c2", "scanner": "scanner-primary", "fingerprint": "01b0502ca5494ff1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c89aa75df1c4f1b1", "level": "note", "message": {"text": "Very large file: server/src/routes/events.ts (1816 lines)"}, "properties": {"repobilityId": "238d58dc3d873eed", "scanner": "scanner-primary", "fingerprint": "c89aa75df1c4f1b1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-357de3e379aead4b", "level": "note", "message": {"text": "Very large file: context/AuthProvider.tsx (1328 lines)"}, "properties": {"repobilityId": "5547dd6b8026cb90", "scanner": "scanner-primary", "fingerprint": "357de3e379aead4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "e23b31f8d047d84d", "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": "31831d1bdd4919e1", "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": "cb7dd213c3ce33ed", "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": "b39908129d613da2", "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": "796be626903e7298", "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": "1c2473f8aa98719f", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "537b75ce08125a70", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "1f6b7434748abb66", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-303734d19207d504", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/summary.md"}, "properties": {"repobilityId": "e7a17486687fe150", "scanner": "scanner-primary", "fingerprint": "303734d19207d504", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/summary.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-39902a3bf011a65f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .cursor/settings.json"}, "properties": {"repobilityId": "8b3be9bf81a0a67f", "scanner": "scanner-primary", "fingerprint": "39902a3bf011a65f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "cursor_rule"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/settings.json"}, "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-0f9e4fc2065f5975", "level": "none", "message": {"text": "Commented-code block (9 lines) in app.config.js:5"}, "properties": {"repobilityId": "e786fb7195d446c0", "scanner": "scanner-primary", "fingerprint": "0f9e4fc2065f5975", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54862a9a74879c84", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 start_metro.py:9"}, "properties": {"repobilityId": "3da94f5e3f572d71", "scanner": "scanner-primary", "fingerprint": "54862a9a74879c84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77507d2f38eeadbe", "level": "none", "message": {"text": "Commented-code block (12 lines) in __tests__/http.test.ts:237"}, "properties": {"repobilityId": "e0ac0371d98eb619", "scanner": "scanner-primary", "fingerprint": "77507d2f38eeadbe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e97fed39d757dfd8", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/coach-event-approval.integration.test.tsx:31"}, "properties": {"repobilityId": "30cc84c38038bac8", "scanner": "scanner-primary", "fingerprint": "e97fed39d757dfd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d45a3bc166371df", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/session-flow-invariants.test.ts:78"}, "properties": {"repobilityId": "daf2a480de406a91", "scanner": "scanner-primary", "fingerprint": "8d45a3bc166371df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-295db33dbca8a564", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/api/teams-api.spec.ts:212"}, "properties": {"repobilityId": "ecf2c6d0dceb91ca", "scanner": "scanner-primary", "fingerprint": "295db33dbca8a564", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe1d73ce21b4af23", "level": "none", "message": {"text": "Commented-code block (12 lines) in api/auth.ts:268"}, "properties": {"repobilityId": "b2f7aee2962d1f87", "scanner": "scanner-primary", "fingerprint": "fe1d73ce21b4af23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-791a480b72b3dd7d", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/upload.ts:402"}, "properties": {"repobilityId": "287e46f08dd61108", "scanner": "scanner-primary", "fingerprint": "791a480b72b3dd7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2523c6e75e67727", "level": "none", "message": {"text": "Commented-code block (10 lines) in api/http.ts:418"}, "properties": {"repobilityId": "a15c0c1033c9bdfc", "scanner": "scanner-primary", "fingerprint": "f2523c6e75e67727", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-719918c5c15c5111", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/exportForSendGrid.js:104"}, "properties": {"repobilityId": "935f69f939c61415", "scanner": "scanner-primary", "fingerprint": "719918c5c15c5111", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6cc10baee74f6a0", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/sign-in.tsx:125"}, "properties": {"repobilityId": "4ba30dd7218e904f", "scanner": "scanner-primary", "fingerprint": "b6cc10baee74f6a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a08f9d9e4b24650f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/payment-cancel.tsx:23"}, "properties": {"repobilityId": "3647643ba6aa3c95", "scanner": "scanner-primary", "fingerprint": "a08f9d9e4b24650f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a92299d6c2ae58ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/organization-join-requests.tsx:89"}, "properties": {"repobilityId": "60ab3021cc432376", "scanner": "scanner-primary", "fingerprint": "a92299d6c2ae58ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99753d44008b0155", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin-dashboard.tsx:93"}, "properties": {"repobilityId": "60f00cc89a873121", "scanner": "scanner-primary", "fingerprint": "99753d44008b0155", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f39017a059a8e731", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/index.tsx:25"}, "properties": {"repobilityId": "81bad1fde0ad4002", "scanner": "scanner-primary", "fingerprint": "f39017a059a8e731", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67306edaf1f4bf08", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/highlights.tsx:547"}, "properties": {"repobilityId": "b8a2b703ca3a26aa", "scanner": "scanner-primary", "fingerprint": "67306edaf1f4bf08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a8430d16f7aedfb", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/forgot-password.tsx:77"}, "properties": {"repobilityId": "07c1ff97bfb7ce4a", "scanner": "scanner-primary", "fingerprint": "9a8430d16f7aedfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dead46799b4f8e56", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/onboarding/step-1-role.tsx:306"}, "properties": {"repobilityId": "b010af4852fd1414", "scanner": "scanner-primary", "fingerprint": "dead46799b4f8e56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-803e5e5e673d0f48", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/onboarding/step-2-basic.tsx:388"}, "properties": {"repobilityId": "bba75f987c293792", "scanner": "scanner-primary", "fingerprint": "803e5e5e673d0f48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d20e59b2eebbcf7", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/onboarding/index.tsx:62"}, "properties": {"repobilityId": "e46e03d1b049cb5c", "scanner": "scanner-primary", "fingerprint": "9d20e59b2eebbcf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e46a55240ed39e3b", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/onboarding/step-3-league.tsx:571"}, "properties": {"repobilityId": "cba3e4dfe80f2881", "scanner": "scanner-primary", "fingerprint": "e46a55240ed39e3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b222256eb4ed7bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/onboarding/_layout.tsx:47"}, "properties": {"repobilityId": "dcae309e17c5bd8d", "scanner": "scanner-primary", "fingerprint": "0b222256eb4ed7bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecfc3e0a3ec153f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/features/navigation/screens/FeedScreen.tsx:302"}, "properties": {"repobilityId": "efdf040a75745b1f", "scanner": "scanner-primary", "fingerprint": "ecfc3e0a3ec153f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f58cfbd0dc319c8", "level": "none", "message": {"text": "Commented-code block (6 lines) in hooks/useRequireCoach.ts:27"}, "properties": {"repobilityId": "0e146d147f06b3c3", "scanner": "scanner-primary", "fingerprint": "0f58cfbd0dc319c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b3e7f5912db8973", "level": "note", "message": {"text": "Legacy-named symbol `vh_pending_ad_iap_receipt_verifications_v1` in hooks/useAdIAP.ts:53"}, "properties": {"repobilityId": "1db4707ecc2c6283", "scanner": "scanner-primary", "fingerprint": "5b3e7f5912db8973", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-476920b01bc71e66", "level": "none", "message": {"text": "Commented-code block (8 lines) in hooks/useAppleAuth.ts:52"}, "properties": {"repobilityId": "887a0ecf7e6dff51", "scanner": "scanner-primary", "fingerprint": "476920b01bc71e66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f21b96d1b42ec915", "level": "none", "message": {"text": "Commented-code block (5 lines) in hooks/useGoogleAuth.ts:1"}, "properties": {"repobilityId": "f128143456d1cda7", "scanner": "scanner-primary", "fingerprint": "f21b96d1b42ec915", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df76686579861ae3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useGoogleAuth.ts:231"}, "properties": {"repobilityId": "5d47c3ae217f5a48", "scanner": "scanner-primary", "fingerprint": "df76686579861ae3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d44ad9d5ead3c4e9", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/jest.config.js:19"}, "properties": {"repobilityId": "6eedcd7f5671d1f7", "scanner": "scanner-primary", "fingerprint": "d44ad9d5ead3c4e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-718cd4dd20a43323", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/verify-cloudinary.ts:27"}, "properties": {"repobilityId": "ea93ae3bac967aed", "scanner": "scanner-primary", "fingerprint": "718cd4dd20a43323", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4429d5dbd6c2425c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/verify-production-health.ts:34"}, "properties": {"repobilityId": "ed8c85a4349bdd48", "scanner": "scanner-primary", "fingerprint": "4429d5dbd6c2425c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c8b8844385dbc39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/wipe-all-data.ts:80"}, "properties": {"repobilityId": "a482dedc69ae3632", "scanner": "scanner-primary", "fingerprint": "9c8b8844385dbc39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ece08c8622c28df", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/scripts/ad-hosting-test.ts:546"}, "properties": {"repobilityId": "766c844682ba62ea", "scanner": "scanner-primary", "fingerprint": "5ece08c8622c28df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29de7b9b54e3fd7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/scripts/load/p0-load-smoke.ts:95"}, "properties": {"repobilityId": "7c2e29f5dc581b3c", "scanner": "scanner-primary", "fingerprint": "29de7b9b54e3fd7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ce583da8d9bfeef", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/app.ts:326"}, "properties": {"repobilityId": "48a0e09143fcd567", "scanner": "scanner-primary", "fingerprint": "6ce583da8d9bfeef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed31ecb09f4c5736", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/cloudinary.test.ts:79"}, "properties": {"repobilityId": "099d629667625060", "scanner": "scanner-primary", "fingerprint": "ed31ecb09f4c5736", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab234a4027f109b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/refresh-token-versioned-hash.test.ts:67"}, "properties": {"repobilityId": "ddba883b4c919742", "scanner": "scanner-primary", "fingerprint": "ab234a4027f109b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b0e0aceef54d987", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/email-template-payload-contract.test.ts:107"}, "properties": {"repobilityId": "88d3c5f117a1f42c", "scanner": "scanner-primary", "fingerprint": "6b0e0aceef54d987", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a03911fbec2c77e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/__tests__/migrations-shape.test.ts:159"}, "properties": {"repobilityId": "284a07ec7edf6f70", "scanner": "scanner-primary", "fingerprint": "a03911fbec2c77e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-104987bbb1e7c9a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/email-audit-minor-resolver.test.ts:101"}, "properties": {"repobilityId": "1ec74cd54e56d675", "scanner": "scanner-primary", "fingerprint": "104987bbb1e7c9a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af20d3a2c4801f52", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/__tests__/coach-gate-matrix.test.ts:182"}, "properties": {"repobilityId": "92cd8e7afae4fa5e", "scanner": "scanner-primary", "fingerprint": "af20d3a2c4801f52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9db3cedfabb8b461", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/api-events.test.ts:501"}, "properties": {"repobilityId": "babad5a710e31312", "scanner": "scanner-primary", "fingerprint": "9db3cedfabb8b461", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e019aca05baa6b3f", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/api-teams.test.ts:1009"}, "properties": {"repobilityId": "89237dc8f2822a98", "scanner": "scanner-primary", "fingerprint": "e019aca05baa6b3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2fb662df1ece754", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/__tests__/api-group-chats.test.ts:219"}, "properties": {"repobilityId": "7a8aa5578344c3c8", "scanner": "scanner-primary", "fingerprint": "b2fb662df1ece754", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fcfab4a676070ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/__tests__/api-group-chats.test.ts:222"}, "properties": {"repobilityId": "0c3706bf906ee439", "scanner": "scanner-primary", "fingerprint": "7fcfab4a676070ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf80a7e22553bcf9", "level": "note", "message": {"text": "Legacy-named symbol `storedLegacy` in server/src/__tests__/refresh-token-device-fingerprint.test.ts:51"}, "properties": {"repobilityId": "1c55064efe4b1414", "scanner": "scanner-primary", "fingerprint": "cf80a7e22553bcf9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9cd86e32c3e1ba4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/anonymized-user-purge.test.ts:81"}, "properties": {"repobilityId": "99b3def8522aa035", "scanner": "scanner-primary", "fingerprint": "9cd86e32c3e1ba4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-412d48847d5f3b07", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/event-approval-race.test.ts:38"}, "properties": {"repobilityId": "c93746ed51244ece", "scanner": "scanner-primary", "fingerprint": "412d48847d5f3b07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9b064e22213b1d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/__tests__/auth-entry-routing-guards.test.ts:12"}, "properties": {"repobilityId": "0b2a91e9a0a85e31", "scanner": "scanner-primary", "fingerprint": "b9b064e22213b1d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa2c92dcc5bc1bdb", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/__tests__/requireOnboarded-bypass.test.ts:65"}, "properties": {"repobilityId": "276e6df1b0ea27fe", "scanner": "scanner-primary", "fingerprint": "aa2c92dcc5bc1bdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4936379eeb97feab", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/middleware/auth.ts:116"}, "properties": {"repobilityId": "2d504d48f51f00a3", "scanner": "scanner-primary", "fingerprint": "4936379eeb97feab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dd5eb1991a14c88", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/middleware/rateLimiters.ts:27"}, "properties": {"repobilityId": "f40ebc61805a7962", "scanner": "scanner-primary", "fingerprint": "2dd5eb1991a14c88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06aab7bf6c4af161", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/middleware/errorHandler.ts:39"}, "properties": {"repobilityId": "f69e620ab0d310b3", "scanner": "scanner-primary", "fingerprint": "06aab7bf6c4af161", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c411c01768fe02a", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/middleware/requireOnboarded.ts:31"}, "properties": {"repobilityId": "957ea9a20d42d1bd", "scanner": "scanner-primary", "fingerprint": "8c411c01768fe02a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e25ea904e080f22", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/lib/email.ts:176"}, "properties": {"repobilityId": "ae797d6422a24f51", "scanner": "scanner-primary", "fingerprint": "9e25ea904e080f22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8803bf24339c5a99", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/lib/wipeProduction.ts:91"}, "properties": {"repobilityId": "9ee748e1e51e912f", "scanner": "scanner-primary", "fingerprint": "8803bf24339c5a99", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f903ed994761a2c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/lib/geofencing.ts:193"}, "properties": {"repobilityId": "9ac2989bc7e52b4e", "scanner": "scanner-primary", "fingerprint": "f903ed994761a2c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06cc22c4406165ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/lib/geocoding.ts:126"}, "properties": {"repobilityId": "25ab73c11e1e755c", "scanner": "scanner-primary", "fingerprint": "06cc22c4406165ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0de978be4fb09e73", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/lib/cloudinary.ts:137"}, "properties": {"repobilityId": "8410a6f1a4d34568", "scanner": "scanner-primary", "fingerprint": "0de978be4fb09e73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9f6042973441d00", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/lib/promos.ts:114"}, "properties": {"repobilityId": "b9f1b7572f9d2253", "scanner": "scanner-primary", "fingerprint": "c9f6042973441d00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c627f54c175a663", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/lib/pushNotifications.ts:58"}, "properties": {"repobilityId": "1471a184009537a4", "scanner": "scanner-primary", "fingerprint": "2c627f54c175a663", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b929bd8ce7096093", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/lib/billingLifecycle.ts:243"}, "properties": {"repobilityId": "3ce228b32db0c0a5", "scanner": "scanner-primary", "fingerprint": "b929bd8ce7096093", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31837be873e08770", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/lib/jwt.ts:64"}, "properties": {"repobilityId": "6c65b2716fc16596", "scanner": "scanner-primary", "fingerprint": "31837be873e08770", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c8ed5858c425c17", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/lib/adImageModeration.ts:109"}, "properties": {"repobilityId": "19cd87a41f8cfa42", "scanner": "scanner-primary", "fingerprint": "2c8ed5858c425c17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e104702b2b56a1c4", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/lib/mentionNotifications.ts:74"}, "properties": {"repobilityId": "06ae4f7e51956adf", "scanner": "scanner-primary", "fingerprint": "e104702b2b56a1c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a97f5f1681faf16d", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/auth.ts:179"}, "properties": {"repobilityId": "ff30803adb24da9b", "scanner": "scanner-primary", "fingerprint": "a97f5f1681faf16d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c83a8557df3ad24a", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/src/routes/organizations.ts:420"}, "properties": {"repobilityId": "dde3e0112f4d898d", "scanner": "scanner-primary", "fingerprint": "c83a8557df3ad24a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d7eafe8781b0192", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/uploads.ts:108"}, "properties": {"repobilityId": "dc61183afe721f71", "scanner": "scanner-primary", "fingerprint": "0d7eafe8781b0192", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-106690a3b1f69e91", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/group-chats.ts:60"}, "properties": {"repobilityId": "f395d023a581213c", "scanner": "scanner-primary", "fingerprint": "106690a3b1f69e91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f733c46615b9cf68", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/routes/reports.ts:258"}, "properties": {"repobilityId": "f9f86401f555ed68", "scanner": "scanner-primary", "fingerprint": "f733c46615b9cf68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a1c1b95bc5aa018", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/routes/search.ts:52"}, "properties": {"repobilityId": "e6115ed7feb147ee", "scanner": "scanner-primary", "fingerprint": "0a1c1b95bc5aa018", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9ed6d37dd487df9", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/publicAppHandoff.ts:42"}, "properties": {"repobilityId": "d192b4fb55af72fc", "scanner": "scanner-primary", "fingerprint": "a9ed6d37dd487df9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11102cbf52360f8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/payments.ts:2185"}, "properties": {"repobilityId": "65510bfbd8cc80f5", "scanner": "scanner-primary", "fingerprint": "11102cbf52360f8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe1ee41a062f17b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/games.ts:2373"}, "properties": {"repobilityId": "9e06338f9ce38ff5", "scanner": "scanner-primary", "fingerprint": "fe1ee41a062f17b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e70ac9a0ab9abbd5", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/ads.ts:484"}, "properties": {"repobilityId": "d7ed206aa2d1a4fc", "scanner": "scanner-primary", "fingerprint": "e70ac9a0ab9abbd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-942b8bdbbc6cb5a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/routes/posts.ts:40"}, "properties": {"repobilityId": "cf919e379a058bd8", "scanner": "scanner-primary", "fingerprint": "942b8bdbbc6cb5a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfbe0fbe0aca880e", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/events.ts:863"}, "properties": {"repobilityId": "1606ac5fd11f53d9", "scanner": "scanner-primary", "fingerprint": "bfbe0fbe0aca880e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef30aa08404c2555", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/admin.ts:914"}, "properties": {"repobilityId": "b098154da9c51f40", "scanner": "scanner-primary", "fingerprint": "ef30aa08404c2555", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc5c1b0a56a8b93f", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/src/routes/team-invites.ts:83"}, "properties": {"repobilityId": "6f2481a8b59c23be", "scanner": "scanner-primary", "fingerprint": "dc5c1b0a56a8b93f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-648116a25e88ff21", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/cron/overnightTasks.ts:463"}, "properties": {"repobilityId": "87ef6ce269c49052", "scanner": "scanner-primary", "fingerprint": "648116a25e88ff21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82806743de994385", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/email/EmailService.ts:171"}, "properties": {"repobilityId": "d3e8e3caaaf3749f", "scanner": "scanner-primary", "fingerprint": "82806743de994385", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06ec9a38c668b8c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/email/providers/SendGridProvider.ts:193"}, "properties": {"repobilityId": "b9cd002bcf97292f", "scanner": "scanner-primary", "fingerprint": "06ec9a38c668b8c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc1494d4fbe0eecc", "level": "none", "message": {"text": "Commented-code block (6 lines) in context/OnboardingContext.tsx:108"}, "properties": {"repobilityId": "8a71745c1970852f", "scanner": "scanner-primary", "fingerprint": "bc1494d4fbe0eecc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8ce196810ca9e5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in context/AuthProvider.tsx:180"}, "properties": {"repobilityId": "d41a0e3568aa76d5", "scanner": "scanner-primary", "fingerprint": "b8ce196810ca9e5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26acfc64d15bdb9d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 context/AuthProvider.tsx:391"}, "properties": {"repobilityId": "65ba327d8be2afa5", "scanner": "scanner-primary", "fingerprint": "26acfc64d15bdb9d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f2d921ecc4b3313", "level": "note", "message": {"text": "111 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "86d178202ea6a64d", "scanner": "scanner-primary", "fingerprint": "0f2d921ecc4b3313", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-0409f0001cab1081", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sendgrid.com/v3/templates/${templateId} (scripts/exportForSendGrid.js:104)"}, "properties": {"repobilityId": "a9247b152880c4bb", "scanner": "scanner-primary", "fingerprint": "0409f0001cab1081", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0946693cdfc6da6", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sendgrid.com/v3/templates/${template.id} (scripts/verify-sendgrid-templates.ts:215)"}, "properties": {"repobilityId": "02040354a69cba91", "scanner": "scanner-primary", "fingerprint": "a0946693cdfc6da6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5beac3170e99a55f", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (hooks/useGoogleAuth.ts:231)"}, "properties": {"repobilityId": "cbc862b2daa1d814", "scanner": "scanner-primary", "fingerprint": "5beac3170e99a55f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e41b65d2567de71", "level": "error", "message": {"text": "Dangling fetch: GET https://ipapi.co/${ipAddress}/json/ (server/src/lib/geofencing.ts:223)"}, "properties": {"repobilityId": "8037464fed64e8e8", "scanner": "scanner-primary", "fingerprint": "5e41b65d2567de71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dccd65d03f221a9b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/upload (server/src/lib/cloudinary.ts:172)"}, "properties": {"repobilityId": "d5f6a679d49d7792", "scanner": "scanner-primary", "fingerprint": "dccd65d03f221a9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ae0cd82fefa16e1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/${resourceType}/destroy (server/src/lib/cloudinary.ts:283)"}, "properties": {"repobilityId": "b1305e6f3c541332", "scanner": "scanner-primary", "fingerprint": "8ae0cd82fefa16e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db36e2228c3b30c3", "level": "error", "message": {"text": "Dangling fetch: GET https://appleid.apple.com/auth/keys (server/src/lib/appleAuth.ts:29)"}, "properties": {"repobilityId": "1658ded2ba174406", "scanner": "scanner-primary", "fingerprint": "db36e2228c3b30c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bfd3b9021722b5d", "level": "error", "message": {"text": "Dangling fetch: GET https://maps.googleapis.com/maps/api/geocode/json (server/src/routes/geocoding.ts:46)"}, "properties": {"repobilityId": "7d0b1a89ad4b795b", "scanner": "scanner-primary", "fingerprint": "5bfd3b9021722b5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a0c908568aca710f", "level": "error", "message": {"text": "Dangling fetch: GET https://maps.googleapis.com/maps/api/geocode/json (server/src/routes/geocoding.ts:108)"}, "properties": {"repobilityId": "d4ebe8e050014a73", "scanner": "scanner-primary", "fingerprint": "a0c908568aca710f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-9bed5c934ac5efd6", "level": "error", "message": {"text": "Dangling fetch: GET https://maps.googleapis.com/maps/api/place/autocomplete/json (server/src/routes/geocoding.ts:132)"}, "properties": {"repobilityId": "ec34d839132e17dd", "scanner": "scanner-primary", "fingerprint": "9bed5c934ac5efd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "353db04aaaf749ee", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8fdbacfe9430a6ed", "level": "note", "message": {"text": "Unused endpoint: POST /auth/login"}, "properties": {"repobilityId": "754fdbdbcebfe337", "scanner": "scanner-primary", "fingerprint": "8fdbacfe9430a6ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdd0498f1a6e6340", "level": "note", "message": {"text": "Unused endpoint: POST /auth/google"}, "properties": {"repobilityId": "c1758e6e1fb195fd", "scanner": "scanner-primary", "fingerprint": "cdd0498f1a6e6340", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a05bcd347c31b110", "level": "note", "message": {"text": "Unused endpoint: POST /auth/apple"}, "properties": {"repobilityId": "c397147e50f75e28", "scanner": "scanner-primary", "fingerprint": "a05bcd347c31b110", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4d97fab27109173", "level": "note", "message": {"text": "Unused endpoint: GET /games"}, "properties": {"repobilityId": "0813093dfdaa603d", "scanner": "scanner-primary", "fingerprint": "e4d97fab27109173", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "bcb88af65d7b395d", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1069d04500258098", "level": "note", "message": {"text": "Unused endpoint: GET /users/:id/posts"}, "properties": {"repobilityId": "a84b68124c2f8f68", "scanner": "scanner-primary", "fingerprint": "1069d04500258098", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3cf2621fb6c66f56", "level": "note", "message": {"text": "Unused endpoint: GET /users/:id/interactions"}, "properties": {"repobilityId": "eca9d4f7cd1bf506", "scanner": "scanner-primary", "fingerprint": "3cf2621fb6c66f56", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abcf871487a3b788", "level": "note", "message": {"text": "Unused endpoint: GET /posts/:id/comments"}, "properties": {"repobilityId": "96e0a245ab6989e0", "scanner": "scanner-primary", "fingerprint": "abcf871487a3b788", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72e04955cf83a53f", "level": "note", "message": {"text": "Unused endpoint: GET /teams"}, "properties": {"repobilityId": "98d82561739c667f", "scanner": "scanner-primary", "fingerprint": "72e04955cf83a53f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ded460cd3143d94f", "level": "note", "message": {"text": "Unused endpoint: GET /teams/managed"}, "properties": {"repobilityId": "c0c893e9dde72a61", "scanner": "scanner-primary", "fingerprint": "ded460cd3143d94f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43269e4e79c2e69e", "level": "note", "message": {"text": "Unused endpoint: GET /events"}, "properties": {"repobilityId": "9fbe70006ec5cc6f", "scanner": "scanner-primary", "fingerprint": "43269e4e79c2e69e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-841e50bf821e4158", "level": "note", "message": {"text": "Unused endpoint: GET /users"}, "properties": {"repobilityId": "c87f521a2a072993", "scanner": "scanner-primary", "fingerprint": "841e50bf821e4158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3af64e805d88ef35", "level": "note", "message": {"text": "Unused endpoint: GET /notifications"}, "properties": {"repobilityId": "7f5c03b6db6632ec", "scanner": "scanner-primary", "fingerprint": "3af64e805d88ef35", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e934dba02d2877a1", "level": "note", "message": {"text": "Unused endpoint: GET /messages"}, "properties": {"repobilityId": "c4c995007e443b39", "scanner": "scanner-primary", "fingerprint": "e934dba02d2877a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f440e5eb48cf128b", "level": "note", "message": {"text": "Unused endpoint: POST /uploads"}, "properties": {"repobilityId": "3051129e3b6d229e", "scanner": "scanner-primary", "fingerprint": "f440e5eb48cf128b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d38eae0b19ee450e", "level": "note", "message": {"text": "Unused endpoint: POST /posts"}, "properties": {"repobilityId": "571e61a85048334a", "scanner": "scanner-primary", "fingerprint": "d38eae0b19ee450e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf45cf8f34e6620f", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/comments"}, "properties": {"repobilityId": "927fb6c2bdf868ae", "scanner": "scanner-primary", "fingerprint": "cf45cf8f34e6620f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b26bf989036a6a54", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/upvote"}, "properties": {"repobilityId": "1e97d08311df89b8", "scanner": "scanner-primary", "fingerprint": "b26bf989036a6a54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f233ff614fb3e57d", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/bookmark"}, "properties": {"repobilityId": "a61765fcbc10f113", "scanner": "scanner-primary", "fingerprint": "f233ff614fb3e57d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a12d652045da70a", "level": "note", "message": {"text": "Unused endpoint: GET /organizations"}, "properties": {"repobilityId": "15c6b84df392d205", "scanner": "scanner-primary", "fingerprint": "7a12d652045da70a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b82146d6b4056725", "level": "note", "message": {"text": "Unused endpoint: GET /organizations/:id"}, "properties": {"repobilityId": "5b3bd23a34ce1e55", "scanner": "scanner-primary", "fingerprint": "b82146d6b4056725", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea2b56cd6df7fe98", "level": "note", "message": {"text": "Unused endpoint: POST /organizations/:id/team-join-request"}, "properties": {"repobilityId": "706f26869a6c3766", "scanner": "scanner-primary", "fingerprint": "ea2b56cd6df7fe98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34b32da6cdc205b1", "level": "note", "message": {"text": "Unused endpoint: GET /organizations/:id/team-join-requests"}, "properties": {"repobilityId": "4b2e701bc224a734", "scanner": "scanner-primary", "fingerprint": "34b32da6cdc205b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2f23f52181cb76b", "level": "note", "message": {"text": "Unused endpoint: POST /team-join-requests/:id/approve"}, "properties": {"repobilityId": "3f0415f01622acae", "scanner": "scanner-primary", "fingerprint": "a2f23f52181cb76b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-644cea70ac0f4fae", "level": "note", "message": {"text": "Unused endpoint: POST /team-join-requests/:id/reject"}, "properties": {"repobilityId": "1ad033b7bc6cff13", "scanner": "scanner-primary", "fingerprint": "644cea70ac0f4fae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-49279a0f12d2c901", "level": "note", "message": {"text": "Unused endpoint: GET /teams/:id/join-requests"}, "properties": {"repobilityId": "f8af18ea9fe5f0c9", "scanner": "scanner-primary", "fingerprint": "49279a0f12d2c901", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c23a6be07f04a81", "level": "note", "message": {"text": "Unused endpoint: POST /auth/verify/request"}, "properties": {"repobilityId": "e2782355ae427e7b", "scanner": "scanner-primary", "fingerprint": "5c23a6be07f04a81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13e58f5a5d22e748", "level": "note", "message": {"text": "Unused endpoint: POST /auth/verify/confirm"}, "properties": {"repobilityId": "ae8196a80b495971", "scanner": "scanner-primary", "fingerprint": "13e58f5a5d22e748", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3538a689a566c56", "level": "note", "message": {"text": "Unused endpoint: GET /highlights"}, "properties": {"repobilityId": "2095fffaf78fda6c", "scanner": "scanner-primary", "fingerprint": "b3538a689a566c56", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6dfb8881543293df", "level": "note", "message": {"text": "Unused endpoint: GET /api-docs"}, "properties": {"repobilityId": "ae36aaec92bf7363", "scanner": "scanner-primary", "fingerprint": "6dfb8881543293df", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b28d92215a503990", "level": "note", "message": {"text": "Unused endpoint: USE /auth"}, "properties": {"repobilityId": "f5749f76dfc67cd2", "scanner": "scanner-primary", "fingerprint": "b28d92215a503990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9c53b827c19ef9a", "level": "note", "message": {"text": "Unused endpoint: USE /teams"}, "properties": {"repobilityId": "430ae9ca19db782c", "scanner": "scanner-primary", "fingerprint": "e9c53b827c19ef9a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a4f2645af28ecb2", "level": "note", "message": {"text": "Unused endpoint: USE /consent"}, "properties": {"repobilityId": "42e9e3d320484841", "scanner": "scanner-primary", "fingerprint": "5a4f2645af28ecb2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-37b5c9b20c366716", "level": "note", "message": {"text": "Unused endpoint: POST /me/consent/resend"}, "properties": {"repobilityId": "9450ab77d773b7ba", "scanner": "scanner-primary", "fingerprint": "37b5c9b20c366716", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-806a0b5fa537337c", "level": "note", "message": {"text": "Unused endpoint: USE /me"}, "properties": {"repobilityId": "55127ab34cbeb695", "scanner": "scanner-primary", "fingerprint": "806a0b5fa537337c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3506739d0f1155aa", "level": "note", "message": {"text": "Unused endpoint: USE /ads"}, "properties": {"repobilityId": "cc1ba988d7e1d198", "scanner": "scanner-primary", "fingerprint": "3506739d0f1155aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2d8849fb6b1ac47", "level": "note", "message": {"text": "Unused endpoint: USE /admin"}, "properties": {"repobilityId": "aa9a540422941ea6", "scanner": "scanner-primary", "fingerprint": "b2d8849fb6b1ac47", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d50e94a36e6d6927", "level": "note", "message": {"text": "Unused endpoint: USE /events"}, "properties": {"repobilityId": "f1297e0e547e6c6f", "scanner": "scanner-primary", "fingerprint": "d50e94a36e6d6927", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fb679c1c970cbe4", "level": "note", "message": {"text": "Unused endpoint: USE /feed"}, "properties": {"repobilityId": "23da478cb8e5f3e3", "scanner": "scanner-primary", "fingerprint": "3fb679c1c970cbe4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c2f71a450cbc9cb4", "level": "note", "message": {"text": "Unused endpoint: USE /follows"}, "properties": {"repobilityId": "786d7fa5353cdb1a", "scanner": "scanner-primary", "fingerprint": "c2f71a450cbc9cb4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bde2e552ee48fa82", "level": "note", "message": {"text": "Unused endpoint: USE /games"}, "properties": {"repobilityId": "18b2468f749de51f", "scanner": "scanner-primary", "fingerprint": "bde2e552ee48fa82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0a615eb2d59c55e3", "level": "note", "message": {"text": "Unused endpoint: USE /geocoding"}, "properties": {"repobilityId": "ab2a94523dc2a2e1", "scanner": "scanner-primary", "fingerprint": "0a615eb2d59c55e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d4372d1ac13746d", "level": "note", "message": {"text": "Unused endpoint: USE /highlights"}, "properties": {"repobilityId": "360152e568f7fb08", "scanner": "scanner-primary", "fingerprint": "0d4372d1ac13746d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d80629752210b855", "level": "note", "message": {"text": "Unused endpoint: USE /notifications"}, "properties": {"repobilityId": "4175b8d47d986c93", "scanner": "scanner-primary", "fingerprint": "d80629752210b855", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77f68a230eae1580", "level": "note", "message": {"text": "Unused endpoint: USE /organizations"}, "properties": {"repobilityId": "ca2409e555ac3cfb", "scanner": "scanner-primary", "fingerprint": "77f68a230eae1580", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38ffe423a6b9b24c", "level": "note", "message": {"text": "Unused endpoint: USE /payments"}, "properties": {"repobilityId": "6f06729d2ca40ab3", "scanner": "scanner-primary", "fingerprint": "38ffe423a6b9b24c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9ed79ac4a4532ef", "level": "note", "message": {"text": "Unused endpoint: USE /posts"}, "properties": {"repobilityId": "a038c5a4d9f99cb4", "scanner": "scanner-primary", "fingerprint": "b9ed79ac4a4532ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aa27368196bc2d9c", "level": "note", "message": {"text": "Unused endpoint: USE /messages"}, "properties": {"repobilityId": "3755d21f81f5b211", "scanner": "scanner-primary", "fingerprint": "aa27368196bc2d9c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a29c7da4d6f19ae", "level": "note", "message": {"text": "Unused endpoint: USE /promos"}, "properties": {"repobilityId": "6183b49600ca7750", "scanner": "scanner-primary", "fingerprint": "7a29c7da4d6f19ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}