{"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-fa5ec61805ea0959", "name": "Stray `console.log` in TS/JS \u2014 backfill-giornata-5.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backfill-giornata-5.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-5479336edcb9147f", "name": "Stray `console.log` in TS/JS \u2014 seed-test-fixtures.js:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 seed-test-fixtures.js:72"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a5a2d315c1827364", "name": "Stray `console.log` in TS/JS \u2014 fix-fixtures-from-giornata-23.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-fixtures-from-giornata-23.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-29e43cccd06bddee", "name": "Stray `console.log` in TS/JS \u2014 populate-fixtures.js:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 populate-fixtures.js: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-01a22cdb9b02858d", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/create-icons.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/create-icons.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-9680d6ed47587eda", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/next.config.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/next.config.ts:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e7a61b105b5d6871", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/contexts/RegistrationContext.tsx:205", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/contexts/RegistrationContext.tsx:205"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4362160c7b489eb6", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/page.tsx:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/page.tsx: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-84d54d2a8c25c29c", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/utils/weekCalculator.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/utils/weekCalculator.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-0e4950d9e1c26f87", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/GameHeader/GameHeader.tsx:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/GameHeader/GameHeader.tsx:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b220bc07892c2e01", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/GameHeader/TestGameHeader.tsx:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/GameHeader/TestGameHeader.tsx: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-2982cc24d5e6adbf", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/MatchCard/LastFiveResults.tsx:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/MatchCard/LastFiveResults.tsx:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd70c53ad71f2588", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/TestGameSummaryScreen/TestGameSummary", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/TestGameSummaryScreen/TestGameSummaryScreen.tsx: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-465fcd9172f38a3e", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/testGioca/page.tsx:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/testGioca/page.tsx: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-a5c783680c1b7dd8", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useLiveWeek.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useLiveWeek.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-60835e8c37c57661", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/usePredictions.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/usePredictions.ts:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8bb9757a97d08a5e", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useCountdown.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useCountdown.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f040582c29c115f2", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useGameState.ts:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useGameState.ts:127"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-86c8eb4d8ebc7600", "name": "TODO/FIXME marker in shipping code \u2014 apps/frontend/frontend-service/app/gioca/hooks/useFixtures.ts:128", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/frontend/frontend-service/app/gioca/hooks/useFixtures.ts:128"}, "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-20c1ec4800cf10b6", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useFixtures.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useFixtures.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-ff33ddc547eb8745", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/login/page.tsx:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/login/page.tsx: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-da464acd66837a56", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/risultati/page.tsx:961", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/risultati/page.tsx:961"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5decaa86d77e3520", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/risultati/page.tsx:311", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/risultati/page.tsx:311"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-355439b55e5af790", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/risultati/test-risultati/page.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx:1250"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68b63d66a6e6c3d4", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx:198", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx:198"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-511dfc131b94f2bb", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/registro/page.tsx:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/registro/page.tsx: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-5981b64a1f96a6cd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/profilo/page.tsx:283", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/profilo/page.tsx:283"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-582211bb8d7ac63d", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/profilo/page.tsx:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/profilo/page.tsx: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-9bb8d628025242ee", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/profilo/testProfilo/page.tsx:364", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/profilo/testProfilo/page.tsx:364"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30dbdd4983d4ffe2", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/profilo/testProfilo/page.tsx:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/profilo/testProfilo/page.tsx: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-8b327de2de94ed7d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/impostazioni/page.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/impostazioni/page.tsx:211"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e466b30d4b7ad709", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/lib/api-client.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/lib/api-client.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37a77a1fd26d6cc5", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/services/googleAuth.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/services/googleAuth.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-313d4bce867b9417", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/components/auth/LoginForm.tsx:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/components/auth/LoginForm.tsx: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-6b8435f7449cc652", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/components/auth/EmailVerificationPrompt.tsx:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/components/auth/EmailVerificationPrompt.tsx: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-84e12749bfbb50e3", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/contexts/AuthContext.tsx:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/contexts/AuthContext.tsx:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60f5c5283004c99a", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/contexts/LoginContext.tsx:140", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/contexts/LoginContext.tsx:140"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d07cf04b1dd33ac4", "name": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/hooks/useLogin.tsx:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/hooks/useLogin.tsx: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-b5474847bd461a45", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures.ts:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures.ts:139"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9824a55508aad50b", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures-simple.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures-simple.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-472e00f2849f42c4", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/repopulate-from-week-13.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/repopulate-from-week-13.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-8545204e683607ab", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures-2025.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures-2025.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c19f9abfad0b217", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/test-database.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/test-database.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-62351664a406bc9e", "name": "TODO/FIXME marker in shipping code \u2014 apps/backend/gaming-services/test/app.e2e-spec.ts:10", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/backend/gaming-services/test/app.e2e-spec.ts:10"}, "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-a2ab7e2bafbd946e", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/test-phase2-api.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/test-phase2-api.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-b6c3b96ed6fd66be", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/app.module.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/app.module.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-2c7ef0501133b02d", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/test-database.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/test-database.ts:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f0de0d8b5e8a3d8b", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/import-season-fixtures.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/import-season-fixtures.ts:85"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8097607cef0ae8e", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/refresh-week-6-fixtures.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/refresh-week-6-fixtures.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-0853eae863423df0", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/check-fixtures-integrity.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/check-fixtures-integrity.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9315ac39523d7124", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/resync-season-fixtures.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/resync-season-fixtures.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6126329221530d37", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/refresh-week-7-fixtures.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/refresh-week-7-fixtures.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-263b453b21bc26f9", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/database/migrations/1723456790000-CreateTestModeTablesFi", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/database/migrations/1723456790000-CreateTestModeTablesFixturesAndSpecs.ts:167"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cc451851e57842c", "name": "TODO/FIXME marker in shipping code \u2014 apps/backend/gaming-services/src/modules/specs/specs.controller.ts:148", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/backend/gaming-services/src/modules/specs/specs.controller.ts:148"}, "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-ea54a2c7af93cabd", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/bff/src/run-migrations.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/bff/src/run-migrations.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0d29ff3f5af9bcf", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-week6-specs.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-week6-specs.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-0d9b4ff9b392fa08", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-spec-week-fix.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-spec-week-fix.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-b4ea2341cd56d99d", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-user-specs.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user-specs.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-b54e1a9fe28845f3", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs-user3.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs-user3.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-54bed15bcb3257de", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs-user2.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs-user2.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-31de4f2c2328fba0", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs.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-44808b94c9d324a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-specs-weeks.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-specs-weeks.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-6784cc5f2da7bda7", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-user-predictions.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-user-predictions.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-c2fab01d82c7bfff", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-week6-results.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-week6-results.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-78bccf38af2fa612", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-spec-weeks.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-spec-weeks.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-4b2e7878f205fd05", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-week7-users.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-week7-users.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-6e7d77a3a68dd50b", "name": "Privileged port 1001 in use", "shortDescription": {"text": "Privileged port 1001 in use"}, "fullDescription": {"text": "Port 1001 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-95b1aeb99a392181", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "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-b8507d3c224d5125", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "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-dbc2bff0da47ce15", "name": "Possible secret in backfill-giornata-5.ts", "shortDescription": {"text": "Possible secret in backfill-giornata-5.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-676f3d5daa39018d", "name": "Possible secret in fix-fixtures-from-giornata-23.ts", "shortDescription": {"text": "Possible secret in fix-fixtures-from-giornata-23.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-33367aac238a0f6e", "name": "Possible secret in apps/frontend/frontend-service/types/auth.ts", "shortDescription": {"text": "Possible secret in apps/frontend/frontend-service/types/auth.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-4e067b48b8b8968c", "name": "Possible secret in apps/frontend/frontend-service/contexts/RegistrationContext.tsx", "shortDescription": {"text": "Possible secret in apps/frontend/frontend-service/contexts/RegistrationContext.tsx"}, "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-99086271712404e7", "name": "Insecure pattern 'cors_wildcard' in apps/backend/gaming-services/src/modules/live-updates/live-updates.gateway.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/backend/gaming-services/src/modules/live-updates/live-updates.gateway.ts:16"}, "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-e6670f32b5bd9075", "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-a359886445c3fc98", "name": "GitHub Action tracks a moving branch", "shortDescription": {"text": "GitHub Action tracks a moving branch"}, "fullDescription": {"text": "snyk/actions/node@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-4adb6823ac3cf458", "name": "Very large file: apps/frontend/frontend-service/app/risultati/page.tsx (1195 lines)", "shortDescription": {"text": "Very large file: apps/frontend/frontend-service/app/risultati/page.tsx (1195 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-672c89158bf7821d", "name": "Very large file: apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx (1403 lines)", "shortDescription": {"text": "Very large file: apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx (1403 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "34 tests / 229 src (ratio 0.15)."}, "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-89ee4a005958786b", "name": "Node manifest has dependencies but no lockfile: apps/frontend/frontend-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/frontend/frontend-service/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-131dec29acd1856a", "name": "Node manifest has dependencies but no lockfile: apps/backend/gaming-services/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/backend/gaming-services/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7417b1e1be328753", "name": "Node manifest has dependencies but no lockfile: apps/backend/bff/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/backend/bff/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5cf4a5ff8562974f", "name": "Node manifest has dependencies but no lockfile: packages/common/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/common/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 805 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 41 placeholder/mock markers across 16 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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-478c2d535146c3c1", "name": "Legacy-named symbol `page_original_backup` in apps/frontend/frontend-service/eslint.config.mjs:16", "shortDescription": {"text": "Legacy-named symbol `page_original_backup` in apps/frontend/frontend-service/eslint.config.mjs:16"}, "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-2871e0de7520e0b2", "name": "Commented-code block (5 lines) in apps/frontend/frontend-service/app/risultati/page.tsx:315", "shortDescription": {"text": "Commented-code block (5 lines) in apps/frontend/frontend-service/app/risultati/page.tsx:315"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-650971a45d432565", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/lib/api-client.ts:292", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/lib/api-client.ts:292"}, "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-f1c4eb3ba4829551", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/public/workbox-9dfdb848.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/public/workbox-9dfdb848.js:1"}, "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-c6fea3daab404b9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/public/swe-worker-5c72df51bb1f6ee0.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/public/swe-worker-5c72df51bb1f6ee0.js:1"}, "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-09c0665f61ed0d16", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-user-predictions.js:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-user-predictions.js:18"}, "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-9a82cf7d16234d20", "name": "21 env vars used in code but missing from .env.example", "shortDescription": {"text": "21 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CORS_ALLOWED_ORIGINS`, `CURRENT_SEASON`, `DISABLE_LIVE_UPDATES`, `FRONTEND_URL`, `MIGRATIONS_TS`, `NEON_DB_PORT`, `NEXT_PUBLIC_APP_URL`, `NEXT_PUBLIC_BFF_API_URL` + 13 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-0b1140525d7a0dd4", "name": "Dangling fetch: GET https://swipick-backend-production-2650.up.railway.app/api/test-mode/fixtures/week/${week} (apps/fro", "shortDescription": {"text": "Dangling fetch: GET https://swipick-backend-production-2650.up.railway.app/api/test-mode/fixtures/week/${week} (apps/frontend/frontend-service/app/gioca/utils/weekCalculator.ts:120)"}, "fullDescription": {"text": "`apps/frontend/frontend-service/app/gioca/utils/weekCalculator.ts:120` calls `GET https://swipick-backend-production-2650.up.railway.app/api/test-mode/fixtures/week/${week}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/swipick-backend-production-2650.up.railway.app/api/test-mode/fixtures/week/<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-db413c935cf40646", "name": "Dangling fetch: GET /fixtures/week/${weekNumber}${qs} (apps/frontend/frontend-service/lib/api-client.ts:135)", "shortDescription": {"text": "Dangling fetch: GET /fixtures/week/${weekNumber}${qs} (apps/frontend/frontend-service/lib/api-client.ts:135)"}, "fullDescription": {"text": "`apps/frontend/frontend-service/lib/api-client.ts:135` calls `GET /fixtures/week/${weekNumber}${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fixtures/week/<p>/<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-3e42c51ad358dba0", "name": "Dangling fetch: GET /fixtures/week/${weekNumber}/daterange${qs} (apps/frontend/frontend-service/lib/api-client.ts:141)", "shortDescription": {"text": "Dangling fetch: GET /fixtures/week/${weekNumber}/daterange${qs} (apps/frontend/frontend-service/lib/api-client.ts:141)"}, "fullDescription": {"text": "`apps/frontend/frontend-service/lib/api-client.ts:141` calls `GET /fixtures/week/${weekNumber}/daterange${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fixtures/week/<p>/daterange/<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-ca3ae2cb803520cc", "name": "Dangling fetch: GET /predictions/weekly/${userId}?mode=${mode} (apps/frontend/frontend-service/lib/api-client.ts:324)", "shortDescription": {"text": "Dangling fetch: GET /predictions/weekly/${userId}?mode=${mode} (apps/frontend/frontend-service/lib/api-client.ts:324)"}, "fullDescription": {"text": "`apps/frontend/frontend-service/lib/api-client.ts:324` calls `GET /predictions/weekly/${userId}?mode=${mode}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/predictions/weekly/<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-8a1c4ffa54ac960f", "name": "Dangling fetch: GET /test-mode/match-cards/week/${week}${qs} (apps/frontend/frontend-service/lib/api-client.ts:451)", "shortDescription": {"text": "Dangling fetch: GET /test-mode/match-cards/week/${week}${qs} (apps/frontend/frontend-service/lib/api-client.ts:451)"}, "fullDescription": {"text": "`apps/frontend/frontend-service/lib/api-client.ts:451` calls `GET /test-mode/match-cards/week/${week}${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/test-mode/match-cards/week/<p>/<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-04c2c5f8eb8d7f20", "name": "Dangling fetch: GET https://v3.football.api-sports.io/fixtures (apps/backend/gaming-services/src/scripts/import-season-f", "shortDescription": {"text": "Dangling fetch: GET https://v3.football.api-sports.io/fixtures (apps/backend/gaming-services/src/scripts/import-season-fixtures.ts:112)"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/scripts/import-season-fixtures.ts:112` calls `GET https://v3.football.api-sports.io/fixtures` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/v3.football.api-sports.io/fixtures`\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-d3ad9ed9f422b550", "name": "Dangling fetch: GET https://v3.football.api-sports.io/fixtures (apps/backend/gaming-services/src/scripts/resync-season-f", "shortDescription": {"text": "Dangling fetch: GET https://v3.football.api-sports.io/fixtures (apps/backend/gaming-services/src/scripts/resync-season-fixtures.ts:117)"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/scripts/resync-season-fixtures.ts:117` calls `GET https://v3.football.api-sports.io/fixtures` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/v3.football.api-sports.io/fixtures`\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-1e9d39ee12d8ca00", "name": "Unused endpoint: DELETE /final-week-scores/:userId/week/:week", "shortDescription": {"text": "Unused endpoint: DELETE /final-week-scores/:userId/week/:week"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/final-week-scores/final-week-scores.controller.ts` declares `DELETE /final-week-scores/:userId/week/:week` 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-7551b5b2e42cdb73", "name": "Unused endpoint: GET /final-week-scores/:userId/week/:week/percentile", "shortDescription": {"text": "Unused endpoint: GET /final-week-scores/:userId/week/:week/percentile"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/final-week-scores/final-week-scores.controller.ts` declares `GET /final-week-scores/:userId/week/:week/percentile` 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-7a109243dc35da6b", "name": "Unused endpoint: GET /final-week-scores/:userId/statistics", "shortDescription": {"text": "Unused endpoint: GET /final-week-scores/:userId/statistics"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/final-week-scores/final-week-scores.controller.ts` declares `GET /final-week-scores/:userId/statistics` 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-0413cf5b276154ad", "name": "Unused endpoint: GET /fixtures/next", "shortDescription": {"text": "Unused endpoint: GET /fixtures/next"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/fixtures/fixtures.controller.ts` declares `GET /fixtures/next` 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-bec1ccd4e964477e", "name": "Unused endpoint: GET /fixtures/week/:weekNumber", "shortDescription": {"text": "Unused endpoint: GET /fixtures/week/:weekNumber"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/fixtures/fixtures.controller.ts` declares `GET /fixtures/week/:weekNumber` 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-065b113dfd461f23", "name": "Unused endpoint: GET /fixtures/week/:weekNumber/daterange", "shortDescription": {"text": "Unused endpoint: GET /fixtures/week/:weekNumber/daterange"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/fixtures/fixtures.controller.ts` declares `GET /fixtures/week/:weekNumber/daterange` 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-e8fe214143d180b0", "name": "Unused endpoint: POST /fixtures/sync/season", "shortDescription": {"text": "Unused endpoint: POST /fixtures/sync/season"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/fixtures/fixtures.controller.ts` declares `POST /fixtures/sync/season` 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-82106168290620b5", "name": "Unused endpoint: GET /fixtures/quota/status", "shortDescription": {"text": "Unused endpoint: GET /fixtures/quota/status"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/fixtures/fixtures.controller.ts` declares `GET /fixtures/quota/status` 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-a6a1684d1380d7df", "name": "Unused endpoint: POST /fixtures/quota/clear-cache", "shortDescription": {"text": "Unused endpoint: POST /fixtures/quota/clear-cache"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/fixtures/fixtures.controller.ts` declares `POST /fixtures/quota/clear-cache` 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-d31d22a19ae27927", "name": "Unused endpoint: GET /test-mode/predictions/user/:userId/week/:week", "shortDescription": {"text": "Unused endpoint: GET /test-mode/predictions/user/:userId/week/:week"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/test-mode/test-mode.controller.ts` declares `GET /test-mode/predictions/user/:userId/week/:week` 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-0b7be991426cde80", "name": "Unused endpoint: GET /test-mode/predictions/user/:userId/summary", "shortDescription": {"text": "Unused endpoint: GET /test-mode/predictions/user/:userId/summary"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/test-mode/test-mode.controller.ts` declares `GET /test-mode/predictions/user/:userId/summary` 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-cb343e2620afb446", "name": "Unused endpoint: GET /test-mode/match-cards/week/:week", "shortDescription": {"text": "Unused endpoint: GET /test-mode/match-cards/week/:week"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/test-mode/test-mode.controller.ts` declares `GET /test-mode/match-cards/week/:week` 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-700fc24ca73b6381", "name": "Unused endpoint: POST /test-mode/seed-full-season", "shortDescription": {"text": "Unused endpoint: POST /test-mode/seed-full-season"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/test-mode/test-mode.controller.ts` declares `POST /test-mode/seed-full-season` 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-1d57b2b2fe5042b7", "name": "Unused endpoint: GET /test-mode/debug-api-call", "shortDescription": {"text": "Unused endpoint: GET /test-mode/debug-api-call"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/test-mode/test-mode.controller.ts` declares `GET /test-mode/debug-api-call` 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-8b74543990f13f96", "name": "Unused endpoint: GET /test-mode/health", "shortDescription": {"text": "Unused endpoint: GET /test-mode/health"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/test-mode/test-mode.controller.ts` declares `GET /test-mode/health` 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-fa2726082ef94a43", "name": "Unused endpoint: GET /match-cards/week/:weekNumber", "shortDescription": {"text": "Unused endpoint: GET /match-cards/week/:weekNumber"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/match-cards/match-cards.controller.ts` declares `GET /match-cards/week/:weekNumber` 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-46b1df7b1e7710ee", "name": "Unused endpoint: GET /live-updates/polling-stats", "shortDescription": {"text": "Unused endpoint: GET /live-updates/polling-stats"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/polling-stats` 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-dd71aacc0c359fc2", "name": "Unused endpoint: POST /live-updates/manual-check/:fixtureId", "shortDescription": {"text": "Unused endpoint: POST /live-updates/manual-check/:fixtureId"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `POST /live-updates/manual-check/:fixtureId` 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-f837beda761a44c5", "name": "Unused endpoint: POST /live-updates/manual-check-all", "shortDescription": {"text": "Unused endpoint: POST /live-updates/manual-check-all"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `POST /live-updates/manual-check-all` 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-b882ce1c0ed5265f", "name": "Unused endpoint: GET /live-updates/debug/live-matches", "shortDescription": {"text": "Unused endpoint: GET /live-updates/debug/live-matches"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/debug/live-matches` 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-e1e235c2ed21e29c", "name": "Unused endpoint: GET /live-updates/debug/daily-fixtures", "shortDescription": {"text": "Unused endpoint: GET /live-updates/debug/daily-fixtures"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/debug/daily-fixtures` 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-988ebde650b77bc6", "name": "Unused endpoint: GET /live-updates/debug/test-connection", "shortDescription": {"text": "Unused endpoint: GET /live-updates/debug/test-connection"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/debug/test-connection` 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-519782cf15947c85", "name": "Unused endpoint: GET /live-updates/debug/test-raw-api", "shortDescription": {"text": "Unused endpoint: GET /live-updates/debug/test-raw-api"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/debug/test-raw-api` 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-cca460f6d7084615", "name": "Unused endpoint: GET /live-updates/debug/leagues", "shortDescription": {"text": "Unused endpoint: GET /live-updates/debug/leagues"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/debug/leagues` 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-a39706e9e3440746", "name": "Unused endpoint: GET /live-updates/debug/find-serie-a-season", "shortDescription": {"text": "Unused endpoint: GET /live-updates/debug/find-serie-a-season"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/debug/find-serie-a-season` 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-cea082eedeb7dbe6", "name": "Unused endpoint: GET /live-updates/debug/api-status", "shortDescription": {"text": "Unused endpoint: GET /live-updates/debug/api-status"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `GET /live-updates/debug/api-status` 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-8c634e3a3c427485", "name": "Unused endpoint: POST /live-updates/backfill-results/:date", "shortDescription": {"text": "Unused endpoint: POST /live-updates/backfill-results/:date"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/live-updates.controller.ts` declares `POST /live-updates/backfill-results/:date` 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-6e24395178900d8c", "name": "Unused endpoint: GET /admin/polling/health", "shortDescription": {"text": "Unused endpoint: GET /admin/polling/health"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/polling-stats.controller.ts` declares `GET /admin/polling/health` 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-8feea4229d6e2cad", "name": "Unused endpoint: GET /admin/polling/stats", "shortDescription": {"text": "Unused endpoint: GET /admin/polling/stats"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/polling-stats.controller.ts` declares `GET /admin/polling/stats` 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-6226edb3cb1208c2", "name": "Unused endpoint: POST /admin/polling/check/:fixtureId", "shortDescription": {"text": "Unused endpoint: POST /admin/polling/check/:fixtureId"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/polling-stats.controller.ts` declares `POST /admin/polling/check/:fixtureId` 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-0585bdc826bc81ad", "name": "Unused endpoint: GET /admin/polling/efficiency", "shortDescription": {"text": "Unused endpoint: GET /admin/polling/efficiency"}, "fullDescription": {"text": "`apps/backend/gaming-services/src/modules/live-updates/polling-stats.controller.ts` declares `GET /admin/polling/efficiency` 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-ed554ce14cc79885", "name": "Unused endpoint: GET /api/fixtures/live", "shortDescription": {"text": "Unused endpoint: GET /api/fixtures/live"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/fixtures/live` 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-7a9439d774018e84", "name": "Unused endpoint: GET /api/fixtures/upcoming/serie-a", "shortDescription": {"text": "Unused endpoint: GET /api/fixtures/upcoming/serie-a"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/fixtures/upcoming/serie-a` 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-4c02b9e2d8d73ffc", "name": "Unused endpoint: GET /api/fixtures/next", "shortDescription": {"text": "Unused endpoint: GET /api/fixtures/next"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/fixtures/next` 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-faed2b2564c9050b", "name": "Unused endpoint: GET /api/fixtures/last-played", "shortDescription": {"text": "Unused endpoint: GET /api/fixtures/last-played"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/fixtures/last-played` 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-43b738d14d863a0e", "name": "Unused endpoint: GET /api/fixtures/week/:weekNumber", "shortDescription": {"text": "Unused endpoint: GET /api/fixtures/week/:weekNumber"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/fixtures/week/:weekNumber` 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-ab38cfdf2738c81a", "name": "Unused endpoint: GET /api/fixtures/week/:weekNumber/daterange", "shortDescription": {"text": "Unused endpoint: GET /api/fixtures/week/:weekNumber/daterange"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/fixtures/week/:weekNumber/daterange` 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-3d96663090b282c6", "name": "Unused endpoint: GET /api/fixtures/:id", "shortDescription": {"text": "Unused endpoint: GET /api/fixtures/:id"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/fixtures/: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-b77c504074ec83e9", "name": "Unused endpoint: POST /api/fixtures/sync", "shortDescription": {"text": "Unused endpoint: POST /api/fixtures/sync"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `POST /api/fixtures/sync` 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-502524c362d96e18", "name": "Unused endpoint: POST /api/fixtures/sync/season", "shortDescription": {"text": "Unused endpoint: POST /api/fixtures/sync/season"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `POST /api/fixtures/sync/season` 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-d8e04a58712b022e", "name": "Unused endpoint: GET /api/teams/:id", "shortDescription": {"text": "Unused endpoint: GET /api/teams/:id"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/teams/: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-12205efbd545a982", "name": "Unused endpoint: GET /api/teams/:id/statistics", "shortDescription": {"text": "Unused endpoint: GET /api/teams/:id/statistics"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/teams/:id/statistics` 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-e60d33b2417fe381", "name": "Unused endpoint: GET /api/teams/:id1/vs/:id2", "shortDescription": {"text": "Unused endpoint: GET /api/teams/:id1/vs/:id2"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/teams/:id1/vs/:id2` 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-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/health` 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-43e62a2785308fc6", "name": "Unused endpoint: DELETE /api/predictions/user/:userId", "shortDescription": {"text": "Unused endpoint: DELETE /api/predictions/user/:userId"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `DELETE /api/predictions/user/:userId` 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-1196f85678486102", "name": "Unused endpoint: DELETE /api/test-mode/reset/:userId", "shortDescription": {"text": "Unused endpoint: DELETE /api/test-mode/reset/:userId"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `DELETE /api/test-mode/reset/:userId` 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-ea0a2c255e8d6192", "name": "Unused endpoint: GET /api/test-mode/progression/:userId", "shortDescription": {"text": "Unused endpoint: GET /api/test-mode/progression/:userId"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/test-mode/progression/:userId` 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-ee00de4102d6d138", "name": "Unused endpoint: POST /api/test-mode/progression/:userId/next", "shortDescription": {"text": "Unused endpoint: POST /api/test-mode/progression/:userId/next"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `POST /api/test-mode/progression/:userId/next` 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-bab6af17a93cce0b", "name": "Unused endpoint: GET /api/match-cards/week/:weekNumber", "shortDescription": {"text": "Unused endpoint: GET /api/match-cards/week/:weekNumber"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/match-cards/week/:weekNumber` 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-41e2b9a42b7c974b", "name": "Unused endpoint: GET /api/test-mode/fixtures/week/:week", "shortDescription": {"text": "Unused endpoint: GET /api/test-mode/fixtures/week/:week"}, "fullDescription": {"text": "`apps/backend/bff/src/app.controller.ts` declares `GET /api/test-mode/fixtures/week/:week` 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/20620"}, "properties": {"repository": "Swipick/swipick-backend", "repoUrl": "https://github.com/Swipick/swipick-backend", "branch": "main"}, "results": [{"ruleId": "scanner-fa5ec61805ea0959", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backfill-giornata-5.ts:39"}, "properties": {"repobilityId": "732ccefae95afd47", "scanner": "scanner-primary", "fingerprint": "fa5ec61805ea0959", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5479336edcb9147f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 seed-test-fixtures.js:72"}, "properties": {"repobilityId": "a51ebe315fd1cc8d", "scanner": "scanner-primary", "fingerprint": "5479336edcb9147f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5a2d315c1827364", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-fixtures-from-giornata-23.ts:54"}, "properties": {"repobilityId": "b60544ae49c0258c", "scanner": "scanner-primary", "fingerprint": "a5a2d315c1827364", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29e43cccd06bddee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 populate-fixtures.js:161"}, "properties": {"repobilityId": "aaed06d62c804ec7", "scanner": "scanner-primary", "fingerprint": "29e43cccd06bddee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01a22cdb9b02858d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/create-icons.js:13"}, "properties": {"repobilityId": "1a3a279f12528b9a", "scanner": "scanner-primary", "fingerprint": "01a22cdb9b02858d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9680d6ed47587eda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/next.config.ts:4"}, "properties": {"repobilityId": "b9df47194f575c4c", "scanner": "scanner-primary", "fingerprint": "9680d6ed47587eda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e7a61b105b5d6871", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/contexts/RegistrationContext.tsx:205"}, "properties": {"repobilityId": "87fce335f1413763", "scanner": "scanner-primary", "fingerprint": "e7a61b105b5d6871", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4362160c7b489eb6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/page.tsx:48"}, "properties": {"repobilityId": "ef198a47426173e1", "scanner": "scanner-primary", "fingerprint": "4362160c7b489eb6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84d54d2a8c25c29c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/utils/weekCalculator.ts:33"}, "properties": {"repobilityId": "73b67b8e236035d1", "scanner": "scanner-primary", "fingerprint": "84d54d2a8c25c29c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e4950d9e1c26f87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/GameHeader/GameHeader.tsx:79"}, "properties": {"repobilityId": "e9f03bb027c83b24", "scanner": "scanner-primary", "fingerprint": "0e4950d9e1c26f87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b220bc07892c2e01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/GameHeader/TestGameHeader.tsx:148"}, "properties": {"repobilityId": "53f14463bca6f95e", "scanner": "scanner-primary", "fingerprint": "b220bc07892c2e01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2982cc24d5e6adbf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/MatchCard/LastFiveResults.tsx:21"}, "properties": {"repobilityId": "68ce39cf11388013", "scanner": "scanner-primary", "fingerprint": "2982cc24d5e6adbf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd70c53ad71f2588", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/components/TestGameSummaryScreen/TestGameSummaryScreen.tsx:105"}, "properties": {"repobilityId": "b2197568d087a4d2", "scanner": "scanner-primary", "fingerprint": "fd70c53ad71f2588", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-465fcd9172f38a3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/testGioca/page.tsx:42"}, "properties": {"repobilityId": "be8ed0e9ea79b599", "scanner": "scanner-primary", "fingerprint": "465fcd9172f38a3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5c783680c1b7dd8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useLiveWeek.ts:63"}, "properties": {"repobilityId": "ab3114593bcb6876", "scanner": "scanner-primary", "fingerprint": "a5c783680c1b7dd8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60835e8c37c57661", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/usePredictions.ts:114"}, "properties": {"repobilityId": "9f26e2c679af6208", "scanner": "scanner-primary", "fingerprint": "60835e8c37c57661", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bb9757a97d08a5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useCountdown.ts:32"}, "properties": {"repobilityId": "2df06c121fd0b9f7", "scanner": "scanner-primary", "fingerprint": "8bb9757a97d08a5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f040582c29c115f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useGameState.ts:127"}, "properties": {"repobilityId": "cec9bccb72fefff7", "scanner": "scanner-primary", "fingerprint": "f040582c29c115f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86c8eb4d8ebc7600", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/frontend/frontend-service/app/gioca/hooks/useFixtures.ts:128"}, "properties": {"repobilityId": "a1fceb74b02b69c5", "scanner": "scanner-primary", "fingerprint": "86c8eb4d8ebc7600", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-20c1ec4800cf10b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/gioca/hooks/useFixtures.ts:57"}, "properties": {"repobilityId": "534b509fb9af7103", "scanner": "scanner-primary", "fingerprint": "20c1ec4800cf10b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff33ddc547eb8745", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/login/page.tsx:22"}, "properties": {"repobilityId": "14ad0ed129a19ba1", "scanner": "scanner-primary", "fingerprint": "ff33ddc547eb8745", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da464acd66837a56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/risultati/page.tsx:961"}, "properties": {"repobilityId": "5aa5158ccc2649e8", "scanner": "scanner-primary", "fingerprint": "da464acd66837a56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5decaa86d77e3520", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/risultati/page.tsx:311"}, "properties": {"repobilityId": "8fb388f737b5155a", "scanner": "scanner-primary", "fingerprint": "5decaa86d77e3520", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-355439b55e5af790", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx:1250"}, "properties": {"repobilityId": "6b9b91c13f03921f", "scanner": "scanner-primary", "fingerprint": "355439b55e5af790", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68b63d66a6e6c3d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx:198"}, "properties": {"repobilityId": "cac218536db25c27", "scanner": "scanner-primary", "fingerprint": "68b63d66a6e6c3d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-511dfc131b94f2bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/registro/page.tsx:57"}, "properties": {"repobilityId": "c27aa1091a9c78b6", "scanner": "scanner-primary", "fingerprint": "511dfc131b94f2bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5981b64a1f96a6cd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/profilo/page.tsx:283"}, "properties": {"repobilityId": "b34f14765cd72260", "scanner": "scanner-primary", "fingerprint": "5981b64a1f96a6cd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-582211bb8d7ac63d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/profilo/page.tsx:170"}, "properties": {"repobilityId": "ac90be639ef3254a", "scanner": "scanner-primary", "fingerprint": "582211bb8d7ac63d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9bb8d628025242ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/profilo/testProfilo/page.tsx:364"}, "properties": {"repobilityId": "ed972d3e6f6a993a", "scanner": "scanner-primary", "fingerprint": "9bb8d628025242ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30dbdd4983d4ffe2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/app/profilo/testProfilo/page.tsx:33"}, "properties": {"repobilityId": "d4e3c1dc4cc06a28", "scanner": "scanner-primary", "fingerprint": "30dbdd4983d4ffe2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b327de2de94ed7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/frontend/frontend-service/app/impostazioni/page.tsx:211"}, "properties": {"repobilityId": "a67f7a4636aac5d2", "scanner": "scanner-primary", "fingerprint": "8b327de2de94ed7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e466b30d4b7ad709", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/lib/api-client.ts:16"}, "properties": {"repobilityId": "734a0701f6a2f3ee", "scanner": "scanner-primary", "fingerprint": "e466b30d4b7ad709", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37a77a1fd26d6cc5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/services/googleAuth.ts:13"}, "properties": {"repobilityId": "7c1a830b4d334eeb", "scanner": "scanner-primary", "fingerprint": "37a77a1fd26d6cc5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-313d4bce867b9417", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/components/auth/LoginForm.tsx:38"}, "properties": {"repobilityId": "80959d1a7ee5319f", "scanner": "scanner-primary", "fingerprint": "313d4bce867b9417", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b8435f7449cc652", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/components/auth/EmailVerificationPrompt.tsx:31"}, "properties": {"repobilityId": "a3e9c169ddb6b315", "scanner": "scanner-primary", "fingerprint": "6b8435f7449cc652", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84e12749bfbb50e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/contexts/AuthContext.tsx:117"}, "properties": {"repobilityId": "484a982aab3f4c7e", "scanner": "scanner-primary", "fingerprint": "84e12749bfbb50e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60f5c5283004c99a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/contexts/LoginContext.tsx:140"}, "properties": {"repobilityId": "61d2c1011d5fa5d3", "scanner": "scanner-primary", "fingerprint": "60f5c5283004c99a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d07cf04b1dd33ac4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/frontend/frontend-service/src/hooks/useLogin.tsx:25"}, "properties": {"repobilityId": "3504d384e5f5d163", "scanner": "scanner-primary", "fingerprint": "d07cf04b1dd33ac4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5474847bd461a45", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures.ts:139"}, "properties": {"repobilityId": "1e755e77ed26f14c", "scanner": "scanner-primary", "fingerprint": "b5474847bd461a45", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9824a55508aad50b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures-simple.ts:7"}, "properties": {"repobilityId": "d8f21d55550b4366", "scanner": "scanner-primary", "fingerprint": "9824a55508aad50b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-472e00f2849f42c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/repopulate-from-week-13.ts:9"}, "properties": {"repobilityId": "7d4dac10c528f6bc", "scanner": "scanner-primary", "fingerprint": "472e00f2849f42c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8545204e683607ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/populate-fixtures-2025.ts:8"}, "properties": {"repobilityId": "9ddbfe81479eec32", "scanner": "scanner-primary", "fingerprint": "8545204e683607ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c19f9abfad0b217", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/test-database.ts:8"}, "properties": {"repobilityId": "0f69d24778fa391f", "scanner": "scanner-primary", "fingerprint": "2c19f9abfad0b217", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62351664a406bc9e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/backend/gaming-services/test/app.e2e-spec.ts:10"}, "properties": {"repobilityId": "b895cfe7d98ef65d", "scanner": "scanner-primary", "fingerprint": "62351664a406bc9e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a2ab7e2bafbd946e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/test-phase2-api.ts:10"}, "properties": {"repobilityId": "599b939075b4215e", "scanner": "scanner-primary", "fingerprint": "a2ab7e2bafbd946e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6c3b96ed6fd66be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/app.module.ts:66"}, "properties": {"repobilityId": "2e98cd64524388bb", "scanner": "scanner-primary", "fingerprint": "b6c3b96ed6fd66be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c7ef0501133b02d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/test-database.ts:8"}, "properties": {"repobilityId": "acd112179d60e85a", "scanner": "scanner-primary", "fingerprint": "2c7ef0501133b02d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f0de0d8b5e8a3d8b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/import-season-fixtures.ts:85"}, "properties": {"repobilityId": "23d7effe1f9e5d7c", "scanner": "scanner-primary", "fingerprint": "f0de0d8b5e8a3d8b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8097607cef0ae8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/refresh-week-6-fixtures.ts:61"}, "properties": {"repobilityId": "317a22b8b1f438cd", "scanner": "scanner-primary", "fingerprint": "c8097607cef0ae8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0853eae863423df0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/check-fixtures-integrity.ts:46"}, "properties": {"repobilityId": "5d7b216fa78b67d5", "scanner": "scanner-primary", "fingerprint": "0853eae863423df0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9315ac39523d7124", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/resync-season-fixtures.ts:99"}, "properties": {"repobilityId": "908e9bbd52617a75", "scanner": "scanner-primary", "fingerprint": "9315ac39523d7124", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6126329221530d37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/scripts/refresh-week-7-fixtures.ts:61"}, "properties": {"repobilityId": "30480bd96a502d1f", "scanner": "scanner-primary", "fingerprint": "6126329221530d37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-263b453b21bc26f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/gaming-services/src/database/migrations/1723456790000-CreateTestModeTablesFixturesAndSpecs.ts:167"}, "properties": {"repobilityId": "aba6d70e4fa585b7", "scanner": "scanner-primary", "fingerprint": "263b453b21bc26f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cc451851e57842c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/backend/gaming-services/src/modules/specs/specs.controller.ts:148"}, "properties": {"repobilityId": "59a0ec568ec179f4", "scanner": "scanner-primary", "fingerprint": "8cc451851e57842c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ea54a2c7af93cabd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/bff/src/run-migrations.ts:43"}, "properties": {"repobilityId": "acfbd4e7c1096ae9", "scanner": "scanner-primary", "fingerprint": "ea54a2c7af93cabd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0d29ff3f5af9bcf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-week6-specs.js:13"}, "properties": {"repobilityId": "7dd2a1cc47b25a6a", "scanner": "scanner-primary", "fingerprint": "c0d29ff3f5af9bcf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d9b4ff9b392fa08", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-spec-week-fix.js:11"}, "properties": {"repobilityId": "74f7167c343e5459", "scanner": "scanner-primary", "fingerprint": "0d9b4ff9b392fa08", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4ea2341cd56d99d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-user-specs.js:11"}, "properties": {"repobilityId": "fe20610738dc1171", "scanner": "scanner-primary", "fingerprint": "b4ea2341cd56d99d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b54e1a9fe28845f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs-user3.js:14"}, "properties": {"repobilityId": "c640898f27183d70", "scanner": "scanner-primary", "fingerprint": "b54e1a9fe28845f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54bed15bcb3257de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs-user2.js:14"}, "properties": {"repobilityId": "cb056c41101e0a2e", "scanner": "scanner-primary", "fingerprint": "54bed15bcb3257de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31de4f2c2328fba0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-week6-specs.js:14"}, "properties": {"repobilityId": "0f5d99f28d3f678c", "scanner": "scanner-primary", "fingerprint": "31de4f2c2328fba0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44808b94c9d324a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-specs-weeks.js:11"}, "properties": {"repobilityId": "02839834661a7a51", "scanner": "scanner-primary", "fingerprint": "44808b94c9d324a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6784cc5f2da7bda7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-user-predictions.js:7"}, "properties": {"repobilityId": "56185d924cb42a03", "scanner": "scanner-primary", "fingerprint": "6784cc5f2da7bda7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2fab01d82c7bfff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-week6-results.js:13"}, "properties": {"repobilityId": "4aebc1737cdc1384", "scanner": "scanner-primary", "fingerprint": "c2fab01d82c7bfff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78bccf38af2fa612", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-spec-weeks.js:11"}, "properties": {"repobilityId": "ad0ab12e49b770fe", "scanner": "scanner-primary", "fingerprint": "78bccf38af2fa612", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b2e7878f205fd05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-week7-users.js:11"}, "properties": {"repobilityId": "c8615169dd17a713", "scanner": "scanner-primary", "fingerprint": "4b2e7878f205fd05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e7d77a3a68dd50b", "level": "warning", "message": {"text": "Privileged port 1001 in use"}, "properties": {"repobilityId": "eb126d41479634e4", "scanner": "scanner-primary", "fingerprint": "6e7d77a3a68dd50b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/bff/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-95b1aeb99a392181", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "e40d46d0cf7a128c", "scanner": "scanner-primary", "fingerprint": "95b1aeb99a392181", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/gaming-services/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b8507d3c224d5125", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "833dfe97d84089a2", "scanner": "scanner-primary", "fingerprint": "b8507d3c224d5125", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/bff/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b8507d3c224d5125", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "b0205b934f4e4a52", "scanner": "scanner-primary", "fingerprint": "b8507d3c224d5125", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/bff/Dockerfile"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-dbc2bff0da47ce15", "level": "error", "message": {"text": "Possible secret in backfill-giornata-5.ts"}, "properties": {"repobilityId": "76bfe90211052df2", "scanner": "scanner-primary", "fingerprint": "dbc2bff0da47ce15", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backfill-giornata-5.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-676f3d5daa39018d", "level": "error", "message": {"text": "Possible secret in fix-fixtures-from-giornata-23.ts"}, "properties": {"repobilityId": "d89e531f4af4d4b7", "scanner": "scanner-primary", "fingerprint": "676f3d5daa39018d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fix-fixtures-from-giornata-23.ts"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-33367aac238a0f6e", "level": "error", "message": {"text": "Possible secret in apps/frontend/frontend-service/types/auth.ts"}, "properties": {"repobilityId": "8ef9c1b969243b9a", "scanner": "scanner-primary", "fingerprint": "33367aac238a0f6e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/types/auth.ts"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-33367aac238a0f6e", "level": "error", "message": {"text": "Possible secret in apps/frontend/frontend-service/types/auth.ts"}, "properties": {"repobilityId": "8ef9c1b969243b9a", "scanner": "scanner-primary", "fingerprint": "33367aac238a0f6e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/types/auth.ts"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-33367aac238a0f6e", "level": "error", "message": {"text": "Possible secret in apps/frontend/frontend-service/types/auth.ts"}, "properties": {"repobilityId": "8ef9c1b969243b9a", "scanner": "scanner-primary", "fingerprint": "33367aac238a0f6e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/types/auth.ts"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-33367aac238a0f6e", "level": "error", "message": {"text": "Possible secret in apps/frontend/frontend-service/types/auth.ts"}, "properties": {"repobilityId": "8ef9c1b969243b9a", "scanner": "scanner-primary", "fingerprint": "33367aac238a0f6e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/types/auth.ts"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-33367aac238a0f6e", "level": "error", "message": {"text": "Possible secret in apps/frontend/frontend-service/types/auth.ts"}, "properties": {"repobilityId": "8ef9c1b969243b9a", "scanner": "scanner-primary", "fingerprint": "33367aac238a0f6e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/types/auth.ts"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-33367aac238a0f6e", "level": "error", "message": {"text": "Possible secret in apps/frontend/frontend-service/types/auth.ts"}, "properties": {"repobilityId": "8ef9c1b969243b9a", "scanner": "scanner-primary", "fingerprint": "33367aac238a0f6e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/types/auth.ts"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-4e067b48b8b8968c", "level": "error", "message": {"text": "Possible secret in apps/frontend/frontend-service/contexts/RegistrationContext.tsx"}, "properties": {"repobilityId": "fcce28242e9287b9", "scanner": "scanner-primary", "fingerprint": "4e067b48b8b8968c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/contexts/RegistrationContext.tsx"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-99086271712404e7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/backend/gaming-services/src/modules/live-updates/live-updates.gateway.ts:16"}, "properties": {"repobilityId": "2224e96d13ddc081", "scanner": "scanner-primary", "fingerprint": "99086271712404e7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/gaming-services/src/modules/live-updates/live-updates.gateway.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2da2b5dc0d69cebc", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "169f0c27158aeeb7", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2da2b5dc0d69cebc", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c412dcef98f85b1f", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2da2b5dc0d69cebc", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-a359886445c3fc98", "level": "error", "message": {"text": "GitHub Action tracks a moving branch"}, "properties": {"repobilityId": "647490fea0f6bfe2", "scanner": "scanner-primary", "fingerprint": "a359886445c3fc98", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 172}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7d1d982b55583494", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 175}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae01bba8822eab8c", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 243}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7d1d982b55583494", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 246}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae01bba8822eab8c", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 308}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d5e8974e4eaae17d", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 317}}}]}, {"ruleId": "scanner-4adb6823ac3cf458", "level": "note", "message": {"text": "Very large file: apps/frontend/frontend-service/app/risultati/page.tsx (1195 lines)"}, "properties": {"repobilityId": "dccb2170c61c942c", "scanner": "scanner-primary", "fingerprint": "4adb6823ac3cf458", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-672c89158bf7821d", "level": "note", "message": {"text": "Very large file: apps/frontend/frontend-service/app/risultati/test-risultati/page.tsx (1403 lines)"}, "properties": {"repobilityId": "b6e1a869a0593597", "scanner": "scanner-primary", "fingerprint": "672c89158bf7821d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "eb41091948c5644b", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-89ee4a005958786b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/frontend/frontend-service/package.json"}, "properties": {"repobilityId": "4bac19728ded2bac", "scanner": "scanner-primary", "fingerprint": "89ee4a005958786b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/frontend/frontend-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-131dec29acd1856a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/backend/gaming-services/package.json"}, "properties": {"repobilityId": "0986258676998a72", "scanner": "scanner-primary", "fingerprint": "131dec29acd1856a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/gaming-services/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7417b1e1be328753", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/backend/bff/package.json"}, "properties": {"repobilityId": "16c0218dfbc3b029", "scanner": "scanner-primary", "fingerprint": "7417b1e1be328753", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/bff/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5cf4a5ff8562974f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/common/package.json"}, "properties": {"repobilityId": "025c6402077aab6f", "scanner": "scanner-primary", "fingerprint": "5cf4a5ff8562974f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/common/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c5dd82df54a11481", "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": "73775966b5b2c123", "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": "81d290c9541bae05", "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": "9e90407bfee6a1ec", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "8a7dd35b00bdda9a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "4a9a284dcfe19cd0", "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": "b1656c377a96a3e3", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-478c2d535146c3c1", "level": "note", "message": {"text": "Legacy-named symbol `page_original_backup` in apps/frontend/frontend-service/eslint.config.mjs:16"}, "properties": {"repobilityId": "9c2055efb7a74c47", "scanner": "scanner-primary", "fingerprint": "478c2d535146c3c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2871e0de7520e0b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/frontend/frontend-service/app/risultati/page.tsx:315"}, "properties": {"repobilityId": "f01ccb702153e78f", "scanner": "scanner-primary", "fingerprint": "2871e0de7520e0b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-650971a45d432565", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/lib/api-client.ts:292"}, "properties": {"repobilityId": "489635c799dace90", "scanner": "scanner-primary", "fingerprint": "650971a45d432565", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1c4eb3ba4829551", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/public/workbox-9dfdb848.js:1"}, "properties": {"repobilityId": "94ff9a73133c3c00", "scanner": "scanner-primary", "fingerprint": "f1c4eb3ba4829551", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6fea3daab404b9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/frontend/frontend-service/public/swe-worker-5c72df51bb1f6ee0.js:1"}, "properties": {"repobilityId": "ea6a7d7c7487a66c", "scanner": "scanner-primary", "fingerprint": "c6fea3daab404b9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09c0665f61ed0d16", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-user-predictions.js:18"}, "properties": {"repobilityId": "49fe49154b26a14f", "scanner": "scanner-primary", "fingerprint": "09c0665f61ed0d16", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a82cf7d16234d20", "level": "note", "message": {"text": "21 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "2fad2cbef136ee78", "scanner": "scanner-primary", "fingerprint": "9a82cf7d16234d20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-0b1140525d7a0dd4", "level": "error", "message": {"text": "Dangling fetch: GET https://swipick-backend-production-2650.up.railway.app/api/test-mode/fixtures/week/${week} (apps/frontend/frontend-service/app/gioca/utils/weekCalculator.ts:120)"}, "properties": {"repobilityId": "fa7b406186502a6c", "scanner": "scanner-primary", "fingerprint": "0b1140525d7a0dd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db413c935cf40646", "level": "error", "message": {"text": "Dangling fetch: GET /fixtures/week/${weekNumber}${qs} (apps/frontend/frontend-service/lib/api-client.ts:135)"}, "properties": {"repobilityId": "98917cae55ef85da", "scanner": "scanner-primary", "fingerprint": "db413c935cf40646", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3e42c51ad358dba0", "level": "error", "message": {"text": "Dangling fetch: GET /fixtures/week/${weekNumber}/daterange${qs} (apps/frontend/frontend-service/lib/api-client.ts:141)"}, "properties": {"repobilityId": "b66ec1255b554e24", "scanner": "scanner-primary", "fingerprint": "3e42c51ad358dba0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ca3ae2cb803520cc", "level": "error", "message": {"text": "Dangling fetch: GET /predictions/weekly/${userId}?mode=${mode} (apps/frontend/frontend-service/lib/api-client.ts:324)"}, "properties": {"repobilityId": "99f400ad2a517d37", "scanner": "scanner-primary", "fingerprint": "ca3ae2cb803520cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8a1c4ffa54ac960f", "level": "error", "message": {"text": "Dangling fetch: GET /test-mode/match-cards/week/${week}${qs} (apps/frontend/frontend-service/lib/api-client.ts:451)"}, "properties": {"repobilityId": "83a1866bcfaaf6f7", "scanner": "scanner-primary", "fingerprint": "8a1c4ffa54ac960f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-04c2c5f8eb8d7f20", "level": "error", "message": {"text": "Dangling fetch: GET https://v3.football.api-sports.io/fixtures (apps/backend/gaming-services/src/scripts/import-season-fixtures.ts:112)"}, "properties": {"repobilityId": "9061dcf730019e63", "scanner": "scanner-primary", "fingerprint": "04c2c5f8eb8d7f20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d3ad9ed9f422b550", "level": "error", "message": {"text": "Dangling fetch: GET https://v3.football.api-sports.io/fixtures (apps/backend/gaming-services/src/scripts/resync-season-fixtures.ts:117)"}, "properties": {"repobilityId": "f2fba8b5e1ca79aa", "scanner": "scanner-primary", "fingerprint": "d3ad9ed9f422b550", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1e9d39ee12d8ca00", "level": "note", "message": {"text": "Unused endpoint: DELETE /final-week-scores/:userId/week/:week"}, "properties": {"repobilityId": "cf99eface22f9279", "scanner": "scanner-primary", "fingerprint": "1e9d39ee12d8ca00", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7551b5b2e42cdb73", "level": "note", "message": {"text": "Unused endpoint: GET /final-week-scores/:userId/week/:week/percentile"}, "properties": {"repobilityId": "c0d27c66acc08c30", "scanner": "scanner-primary", "fingerprint": "7551b5b2e42cdb73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a109243dc35da6b", "level": "note", "message": {"text": "Unused endpoint: GET /final-week-scores/:userId/statistics"}, "properties": {"repobilityId": "5df9b969be9e65bd", "scanner": "scanner-primary", "fingerprint": "7a109243dc35da6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0413cf5b276154ad", "level": "note", "message": {"text": "Unused endpoint: GET /fixtures/next"}, "properties": {"repobilityId": "5843556ba8349f9c", "scanner": "scanner-primary", "fingerprint": "0413cf5b276154ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bec1ccd4e964477e", "level": "note", "message": {"text": "Unused endpoint: GET /fixtures/week/:weekNumber"}, "properties": {"repobilityId": "0b825e4fdc70d80d", "scanner": "scanner-primary", "fingerprint": "bec1ccd4e964477e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-065b113dfd461f23", "level": "note", "message": {"text": "Unused endpoint: GET /fixtures/week/:weekNumber/daterange"}, "properties": {"repobilityId": "b49ea943a02878ec", "scanner": "scanner-primary", "fingerprint": "065b113dfd461f23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8fe214143d180b0", "level": "note", "message": {"text": "Unused endpoint: POST /fixtures/sync/season"}, "properties": {"repobilityId": "d683268238ec16d6", "scanner": "scanner-primary", "fingerprint": "e8fe214143d180b0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-82106168290620b5", "level": "note", "message": {"text": "Unused endpoint: GET /fixtures/quota/status"}, "properties": {"repobilityId": "d246e6b648a9333a", "scanner": "scanner-primary", "fingerprint": "82106168290620b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6a1684d1380d7df", "level": "note", "message": {"text": "Unused endpoint: POST /fixtures/quota/clear-cache"}, "properties": {"repobilityId": "1079b20a5e51ba56", "scanner": "scanner-primary", "fingerprint": "a6a1684d1380d7df", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d31d22a19ae27927", "level": "note", "message": {"text": "Unused endpoint: GET /test-mode/predictions/user/:userId/week/:week"}, "properties": {"repobilityId": "13abd3dfd7c4f294", "scanner": "scanner-primary", "fingerprint": "d31d22a19ae27927", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0b7be991426cde80", "level": "note", "message": {"text": "Unused endpoint: GET /test-mode/predictions/user/:userId/summary"}, "properties": {"repobilityId": "224e31615e4bf581", "scanner": "scanner-primary", "fingerprint": "0b7be991426cde80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb343e2620afb446", "level": "note", "message": {"text": "Unused endpoint: GET /test-mode/match-cards/week/:week"}, "properties": {"repobilityId": "e8e69e08c4716b74", "scanner": "scanner-primary", "fingerprint": "cb343e2620afb446", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-700fc24ca73b6381", "level": "note", "message": {"text": "Unused endpoint: POST /test-mode/seed-full-season"}, "properties": {"repobilityId": "b543fa15dcc64e1f", "scanner": "scanner-primary", "fingerprint": "700fc24ca73b6381", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d57b2b2fe5042b7", "level": "note", "message": {"text": "Unused endpoint: GET /test-mode/debug-api-call"}, "properties": {"repobilityId": "24f88d9295a7ac1f", "scanner": "scanner-primary", "fingerprint": "1d57b2b2fe5042b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b74543990f13f96", "level": "note", "message": {"text": "Unused endpoint: GET /test-mode/health"}, "properties": {"repobilityId": "0f5f8af068ea1e1c", "scanner": "scanner-primary", "fingerprint": "8b74543990f13f96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa2726082ef94a43", "level": "note", "message": {"text": "Unused endpoint: GET /match-cards/week/:weekNumber"}, "properties": {"repobilityId": "2b95f52d0118db43", "scanner": "scanner-primary", "fingerprint": "fa2726082ef94a43", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-46b1df7b1e7710ee", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/polling-stats"}, "properties": {"repobilityId": "d9d64ae5add9722e", "scanner": "scanner-primary", "fingerprint": "46b1df7b1e7710ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd71aacc0c359fc2", "level": "note", "message": {"text": "Unused endpoint: POST /live-updates/manual-check/:fixtureId"}, "properties": {"repobilityId": "5e8e7ac0f75d0e32", "scanner": "scanner-primary", "fingerprint": "dd71aacc0c359fc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f837beda761a44c5", "level": "note", "message": {"text": "Unused endpoint: POST /live-updates/manual-check-all"}, "properties": {"repobilityId": "4c34cdf3dfda4a97", "scanner": "scanner-primary", "fingerprint": "f837beda761a44c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b882ce1c0ed5265f", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/debug/live-matches"}, "properties": {"repobilityId": "8d2e2565f322b364", "scanner": "scanner-primary", "fingerprint": "b882ce1c0ed5265f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1e235c2ed21e29c", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/debug/daily-fixtures"}, "properties": {"repobilityId": "a35783db338b787d", "scanner": "scanner-primary", "fingerprint": "e1e235c2ed21e29c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-988ebde650b77bc6", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/debug/test-connection"}, "properties": {"repobilityId": "d899df319b6cea7b", "scanner": "scanner-primary", "fingerprint": "988ebde650b77bc6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-519782cf15947c85", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/debug/test-raw-api"}, "properties": {"repobilityId": "237693c0c77091b7", "scanner": "scanner-primary", "fingerprint": "519782cf15947c85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cca460f6d7084615", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/debug/leagues"}, "properties": {"repobilityId": "420c0efbf8b9f256", "scanner": "scanner-primary", "fingerprint": "cca460f6d7084615", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a39706e9e3440746", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/debug/find-serie-a-season"}, "properties": {"repobilityId": "17bf46e4a04a4542", "scanner": "scanner-primary", "fingerprint": "a39706e9e3440746", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cea082eedeb7dbe6", "level": "note", "message": {"text": "Unused endpoint: GET /live-updates/debug/api-status"}, "properties": {"repobilityId": "9d649669b9eae8a3", "scanner": "scanner-primary", "fingerprint": "cea082eedeb7dbe6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8c634e3a3c427485", "level": "note", "message": {"text": "Unused endpoint: POST /live-updates/backfill-results/:date"}, "properties": {"repobilityId": "0dc2cab7163bc075", "scanner": "scanner-primary", "fingerprint": "8c634e3a3c427485", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e24395178900d8c", "level": "note", "message": {"text": "Unused endpoint: GET /admin/polling/health"}, "properties": {"repobilityId": "d0e2ac7eeddfe864", "scanner": "scanner-primary", "fingerprint": "6e24395178900d8c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8feea4229d6e2cad", "level": "note", "message": {"text": "Unused endpoint: GET /admin/polling/stats"}, "properties": {"repobilityId": "8253cf0eb4baf124", "scanner": "scanner-primary", "fingerprint": "8feea4229d6e2cad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6226edb3cb1208c2", "level": "note", "message": {"text": "Unused endpoint: POST /admin/polling/check/:fixtureId"}, "properties": {"repobilityId": "d3e06d7b77122d34", "scanner": "scanner-primary", "fingerprint": "6226edb3cb1208c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0585bdc826bc81ad", "level": "note", "message": {"text": "Unused endpoint: GET /admin/polling/efficiency"}, "properties": {"repobilityId": "7f82216e741b05e2", "scanner": "scanner-primary", "fingerprint": "0585bdc826bc81ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed554ce14cc79885", "level": "note", "message": {"text": "Unused endpoint: GET /api/fixtures/live"}, "properties": {"repobilityId": "aa4186f26800556c", "scanner": "scanner-primary", "fingerprint": "ed554ce14cc79885", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a9439d774018e84", "level": "note", "message": {"text": "Unused endpoint: GET /api/fixtures/upcoming/serie-a"}, "properties": {"repobilityId": "63493452922f125d", "scanner": "scanner-primary", "fingerprint": "7a9439d774018e84", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c02b9e2d8d73ffc", "level": "note", "message": {"text": "Unused endpoint: GET /api/fixtures/next"}, "properties": {"repobilityId": "b76c486efb396984", "scanner": "scanner-primary", "fingerprint": "4c02b9e2d8d73ffc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-faed2b2564c9050b", "level": "note", "message": {"text": "Unused endpoint: GET /api/fixtures/last-played"}, "properties": {"repobilityId": "9d9f8fd725ddc0e6", "scanner": "scanner-primary", "fingerprint": "faed2b2564c9050b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43b738d14d863a0e", "level": "note", "message": {"text": "Unused endpoint: GET /api/fixtures/week/:weekNumber"}, "properties": {"repobilityId": "32d8ade0f83e5757", "scanner": "scanner-primary", "fingerprint": "43b738d14d863a0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ab38cfdf2738c81a", "level": "note", "message": {"text": "Unused endpoint: GET /api/fixtures/week/:weekNumber/daterange"}, "properties": {"repobilityId": "7301746951ce01ab", "scanner": "scanner-primary", "fingerprint": "ab38cfdf2738c81a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d96663090b282c6", "level": "note", "message": {"text": "Unused endpoint: GET /api/fixtures/:id"}, "properties": {"repobilityId": "60b82262cb22aac2", "scanner": "scanner-primary", "fingerprint": "3d96663090b282c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b77c504074ec83e9", "level": "note", "message": {"text": "Unused endpoint: POST /api/fixtures/sync"}, "properties": {"repobilityId": "9459e3ee7c4bfcb7", "scanner": "scanner-primary", "fingerprint": "b77c504074ec83e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-502524c362d96e18", "level": "note", "message": {"text": "Unused endpoint: POST /api/fixtures/sync/season"}, "properties": {"repobilityId": "7c75a1606d7470b9", "scanner": "scanner-primary", "fingerprint": "502524c362d96e18", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8e04a58712b022e", "level": "note", "message": {"text": "Unused endpoint: GET /api/teams/:id"}, "properties": {"repobilityId": "8d1214b3081cf061", "scanner": "scanner-primary", "fingerprint": "d8e04a58712b022e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12205efbd545a982", "level": "note", "message": {"text": "Unused endpoint: GET /api/teams/:id/statistics"}, "properties": {"repobilityId": "f705ef413cc361ac", "scanner": "scanner-primary", "fingerprint": "12205efbd545a982", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e60d33b2417fe381", "level": "note", "message": {"text": "Unused endpoint: GET /api/teams/:id1/vs/:id2"}, "properties": {"repobilityId": "7b016f05688f6857", "scanner": "scanner-primary", "fingerprint": "e60d33b2417fe381", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "71eef038576ab694", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43e62a2785308fc6", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/predictions/user/:userId"}, "properties": {"repobilityId": "b24173a65156741a", "scanner": "scanner-primary", "fingerprint": "43e62a2785308fc6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1196f85678486102", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/test-mode/reset/:userId"}, "properties": {"repobilityId": "8c2c1504c765f913", "scanner": "scanner-primary", "fingerprint": "1196f85678486102", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea0a2c255e8d6192", "level": "note", "message": {"text": "Unused endpoint: GET /api/test-mode/progression/:userId"}, "properties": {"repobilityId": "f89c8343df6a49d8", "scanner": "scanner-primary", "fingerprint": "ea0a2c255e8d6192", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee00de4102d6d138", "level": "note", "message": {"text": "Unused endpoint: POST /api/test-mode/progression/:userId/next"}, "properties": {"repobilityId": "cb05f3d6d94546fa", "scanner": "scanner-primary", "fingerprint": "ee00de4102d6d138", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bab6af17a93cce0b", "level": "note", "message": {"text": "Unused endpoint: GET /api/match-cards/week/:weekNumber"}, "properties": {"repobilityId": "3ba4828787ac7d88", "scanner": "scanner-primary", "fingerprint": "bab6af17a93cce0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41e2b9a42b7c974b", "level": "note", "message": {"text": "Unused endpoint: GET /api/test-mode/fixtures/week/:week"}, "properties": {"repobilityId": "cc1b99e24a190fa6", "scanner": "scanner-primary", "fingerprint": "41e2b9a42b7c974b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}