{"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-f2d767d5e24618b9", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/scripts/scoreAllFinished.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/scripts/scoreAllFinished.js: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-586d5364ff838585", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/server.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/server.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-978a065c04614123", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/config/db.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/config/db.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e7fe38546159912", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/telegramTest.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/telegramTest.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54f10f6a426f6664", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/telegramChatId.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/telegramChatId.js:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b64125260c276bf", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/seed.js:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/seed.js: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-34cca3cc460fe148", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/brevoBackfill.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/brevoBackfill.js:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b64bc1355e5bed40", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/syncFootball.js:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/syncFootball.js:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-324a30779e586945", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/quinielaController.js:347", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/quinielaController.js:347"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91565986647ef1fd", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/footballController.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/footballController.js:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bf46651e4c7d0ba", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/paymentsController.js:174", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/paymentsController.js:174"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f745805e76ffda06", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/adminPayoutsController.js:193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/adminPayoutsController.js:193"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ee03ec8abbb121f", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/predictionController.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/predictionController.js:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbef765f2615724f", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/authController.js:283", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/authController.js:283"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f433744be934d6b9", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/dailyPickService.js:150", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/dailyPickService.js:150"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d506a9a0e8a518c", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/poolSettlementService.js:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/poolSettlementService.js:113"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53b2c74ff4d61e95", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/poolPaymentService.js:163", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/poolPaymentService.js:163"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-953b869b64981f9a", "name": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/apiFootball.js:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/apiFootball.js:155"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f880a23d27718802", "name": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/scripts/seedAdmin.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/scripts/seedAdmin.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4bd2cb312ead1b5a", "name": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/src/server.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/src/server.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a729295cc288e9d2", "name": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/src/config/db.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/src/config/db.js:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6253d32590d217a", "name": "Stray `console.log` in TS/JS \u2014 futpools_web/scripts/build-sitemap.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_web/scripts/build-sitemap.js: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-307a8ec2d0a0431b", "name": "Stray `console.log` in TS/JS \u2014 futpools_web/scripts/build-i18n-shells.js:336", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 futpools_web/scripts/build-i18n-shells.js:336"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a9143dbd9ca4c55", "name": "Icon-only button without accessible name \u2014 futpools_web/src/arena/screens1.jsx:352", "shortDescription": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/arena/screens1.jsx:352"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8eac465ccc54e945", "name": "Icon-only button without accessible name \u2014 futpools_web/src/arena/screens2.jsx:23", "shortDescription": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/arena/screens2.jsx:23"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-639e931213b4e328", "name": "Icon-only button without accessible name \u2014 futpools_web/src/lib/safeBack.js:9", "shortDescription": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/lib/safeBack.js:9"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f6bb00333b6d571", "name": "Icon-only button without accessible name \u2014 futpools_web/src/pages/PoolDetail.jsx:1398", "shortDescription": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/pages/PoolDetail.jsx:1398"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e305c226ad45ba86", "name": "Runtime dotenv file present in repo: futpools_dashboard/web/.env", "shortDescription": {"text": "Runtime dotenv file present in repo: futpools_dashboard/web/.env"}, "fullDescription": {"text": "`futpools_dashboard/web/.env` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa84ad7229cd226d", "name": "Runtime dotenv file present in repo: futpools_dashboard/server/.env", "shortDescription": {"text": "Runtime dotenv file present in repo: futpools_dashboard/server/.env"}, "fullDescription": {"text": "`futpools_dashboard/server/.env` looks like a runtime dotenv file. It contains secret-looking assignments for JWT_SECRET, API_FOOTBALL_KEY, ADMIN_PASSWORD, SETTINGS_API_KEY. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-507e7e00b74256c9", "name": "Insecure pattern 'cors_wildcard' in futpools_backend/src/app.js:33", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in futpools_backend/src/app.js:33"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-955e72668b95c489", "name": "Possible secret in futpools_backend/src/scripts/seed.js", "shortDescription": {"text": "Possible secret in futpools_backend/src/scripts/seed.js"}, "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-e773ce5c1bb7819c", "name": "Insecure pattern 'local_storage_auth_token' in futpools_dashboard/web/src/App.jsx:62", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in futpools_dashboard/web/src/App.jsx:62"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-594916cc05ea0ba7", "name": "Insecure pattern 'cors_wildcard' in futpools_dashboard/server/src/server.js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in futpools_dashboard/server/src/server.js:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89e9b7a872b1f969", "name": "Very large file: futpools_web/src/i18n/translations.js (1471 lines)", "shortDescription": {"text": "Very large file: futpools_web/src/i18n/translations.js (1471 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-338f05becadef55c", "name": "Very large file: futpools_web/src/pages/LandingPage.jsx (1248 lines)", "shortDescription": {"text": "Very large file: futpools_web/src/pages/LandingPage.jsx (1248 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-ad1f72b5ace3dc5c", "name": "Very large file: futpools_web/src/pages/WorldCup2026Calendar.jsx (1536 lines)", "shortDescription": {"text": "Very large file: futpools_web/src/pages/WorldCup2026Calendar.jsx (1536 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-2b1f2ba5cbe44fda", "name": "Very large file: futpools_web/src/pages/PoolDetail.jsx (1697 lines)", "shortDescription": {"text": "Very large file: futpools_web/src/pages/PoolDetail.jsx (1697 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-c60a323fff8a3e46", "name": "Very large file: futpools_web/src/pages/desktop/PoolDetailDesktop.jsx (1440 lines)", "shortDescription": {"text": "Very large file: futpools_web/src/pages/desktop/PoolDetailDesktop.jsx (1440 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-0b651e62ab541577", "name": "Very large file: futpools_web/src/pages/desktop/LiveScoresDesktop.jsx (1244 lines)", "shortDescription": {"text": "Very large file: futpools_web/src/pages/desktop/LiveScoresDesktop.jsx (1244 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "2 test file(s) for 174 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 82 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 78 placeholder/mock markers across 15 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-7403015f40f032a9", "name": "Commented-code block (7 lines) in futpools_backend/src/models/Challenge.js:53", "shortDescription": {"text": "Commented-code block (7 lines) in futpools_backend/src/models/Challenge.js:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eaad388f7a7ff2d8", "name": "Commented-code block (5 lines) in futpools_backend/src/models/QuinielaEntry.js:24", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/models/QuinielaEntry.js:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a45aad5b850d787f", "name": "Commented-code block (8 lines) in futpools_backend/src/models/Quiniela.js:85", "shortDescription": {"text": "Commented-code block (8 lines) in futpools_backend/src/models/Quiniela.js:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d053774e194bcbbb", "name": "Commented-code block (6 lines) in futpools_backend/src/models/User.js:33", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_backend/src/models/User.js:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cc8e40504dc3d27", "name": "Commented-code block (5 lines) in futpools_backend/src/config/stripePacks.js:19", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/config/stripePacks.js:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fb1528193c216b9", "name": "Commented-code block (5 lines) in futpools_backend/src/middleware/auth.js:90", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/middleware/auth.js:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6fc219c98ffbada2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/scripts/syncFootball.js:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/scripts/syncFootball.js:50"}, "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-ff5bdd830cc30a36", "name": "Commented-code block (6 lines) in futpools_backend/src/routes/og.js:220", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_backend/src/routes/og.js:220"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c922e53bd9266bda", "name": "Commented-code block (5 lines) in futpools_backend/src/routes/quinielas.js:42", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/routes/quinielas.js:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dae70341aab314b", "name": "Commented-code block (6 lines) in futpools_backend/src/controllers/quinielaController.js:256", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_backend/src/controllers/quinielaController.js:256"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8aaabf22d2000664", "name": "Commented-code block (5 lines) in futpools_backend/src/controllers/footballController.js:168", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/footballController.js:168"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93d52e4652915ec0", "name": "Commented-code block (5 lines) in futpools_backend/src/controllers/paymentsController.js:127", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/paymentsController.js:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4aaf736b40e8d31", "name": "Commented-code block (5 lines) in futpools_backend/src/controllers/worldCupCalendarController.js:96", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/worldCupCalendarController.js:96"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2c9d2545591b993", "name": "Commented-code block (5 lines) in futpools_backend/src/controllers/settingsController.js:23", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/settingsController.js:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db0d6d6b1bd459fc", "name": "Commented-code block (6 lines) in futpools_backend/src/controllers/authController.js:57", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_backend/src/controllers/authController.js:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cef8673125e6a4a4", "name": "Commented-code block (5 lines) in futpools_backend/src/services/dailyPickService.js:22", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/services/dailyPickService.js:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdd85e1c336e12e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/services/brevoService.js:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/services/brevoService.js:22"}, "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-a50037fc4a16dfd9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/services/admobSSV.js:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/services/admobSSV.js:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb51efc703c2901c", "name": "Commented-code block (5 lines) in futpools_backend/src/services/poolPaymentService.js:133", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_backend/src/services/poolPaymentService.js:133"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5401f25e700a2442", "name": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_dashboard/server/src/services/apiFootball.js:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_dashboard/server/src/services/apiFootball.js:10"}, "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-51ef6c72db79cc8b", "name": "Commented-code block (5 lines) in futpools_web/scripts/build-i18n-shells.js:140", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/scripts/build-i18n-shells.js:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a9993f435c7b353", "name": "Commented-code block (5 lines) in futpools_web/src/api/client.js:19", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/api/client.js:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c021d3268117bbfb", "name": "Commented-code block (5 lines) in futpools_web/src/components/CountryPicker.jsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/components/CountryPicker.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21568df13a419442", "name": "Commented-code block (6 lines) in futpools_web/src/lib/poolStatus.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_web/src/lib/poolStatus.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42cdf3a869c85622", "name": "Commented-code block (6 lines) in futpools_web/src/lib/ladderNotify.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_web/src/lib/ladderNotify.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f623b2b233ca0f33", "name": "Commented-code block (5 lines) in futpools_web/src/pages/LandingPage.jsx:448", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/LandingPage.jsx:448"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c06fb3b4a2dc77cd", "name": "Commented-code block (5 lines) in futpools_web/src/pages/LiveMatch.jsx:118", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/LiveMatch.jsx:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-726790d5835e5382", "name": "Commented-code block (5 lines) in futpools_web/src/pages/PronosticosFutbolHoy.jsx:241", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/PronosticosFutbolHoy.jsx:241"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d1b35352baf915c", "name": "Commented-code block (7 lines) in futpools_web/src/pages/WorldCup2026Calendar.jsx:209", "shortDescription": {"text": "Commented-code block (7 lines) in futpools_web/src/pages/WorldCup2026Calendar.jsx:209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8174535cb6c45a6e", "name": "Commented-code block (8 lines) in futpools_web/src/pages/Home.jsx:105", "shortDescription": {"text": "Commented-code block (8 lines) in futpools_web/src/pages/Home.jsx:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c28eb6408d6206d5", "name": "Commented-code block (6 lines) in futpools_web/src/pages/PoolDetail.jsx:120", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/PoolDetail.jsx:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed61756fb8a42a62", "name": "Commented-code block (6 lines) in futpools_web/src/pages/CreatePool.jsx:36", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/CreatePool.jsx:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edec5c5678a573da", "name": "Commented-code block (6 lines) in futpools_web/src/pages/LiveScores.jsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/LiveScores.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-615a96eb2d6a40c1", "name": "Commented-code block (6 lines) in futpools_web/src/pages/desktop/HomeDesktop.jsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/desktop/HomeDesktop.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85497256e9f72946", "name": "Commented-code block (5 lines) in futpools_web/src/pages/desktop/PoolDetailDesktop.jsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/desktop/PoolDetailDesktop.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e67a7b22e657928a", "name": "Commented-code block (5 lines) in futpools_web/src/pages/desktop/QuinielaPickDesktop.jsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/desktop/QuinielaPickDesktop.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff5ce93214479b4f", "name": "Commented-code block (8 lines) in futpools_web/src/pages/desktop/LiveScoresDesktop.jsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in futpools_web/src/pages/desktop/LiveScoresDesktop.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3152b9aef3948af4", "name": "Commented-code block (5 lines) in futpools_web/src/pages/onboarding/WebOnboarding.jsx:582", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/onboarding/WebOnboarding.jsx:582"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a4cebf7caccb6db", "name": "Commented-code block (5 lines) in futpools_web/src/context/AuthContext.jsx:108", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/context/AuthContext.jsx:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-884ea7be7ea4ed09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_web/src/context/LocaleContext.jsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_web/src/context/LocaleContext.jsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b9e82e77d24bb21", "name": "Commented-code block (5 lines) in futpools_web/src/arena-ui/TabBar.jsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in futpools_web/src/arena-ui/TabBar.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-030da566069872e9", "name": "15 env vars used in code but missing from .env.example", "shortDescription": {"text": "15 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_FOOTBALL_DEBUG`, `MONGO_URI`, `PAYPAL_ENTRY_USD`, `PAYPAL_ME_URL`, `SIGNUP_BONUS_COINS`, `SITEMAP_API_URL`, `STRIPE_PRICE_100`, `STRIPE_PRICE_200` + 7 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-c9d319896a99ef18", "name": "Frontend route `/arena` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/arena` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-895eb61b3196e536", "name": "Frontend route `/calendario-mundial-2026/agregar` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/calendario-mundial-2026/agregar` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41d15eda9186900b", "name": "Frontend route `/world-cup-2026-calendar/add` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/world-cup-2026-calendar/add` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7032cbef96ab6b9d", "name": "Frontend route `/calendariomundial2026` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/calendariomundial2026` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c60d7fe48c68baf", "name": "Frontend route `/worldcup2026calendar` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/worldcup2026calendar` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7d265246726133f", "name": "Frontend route `scores` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `scores` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cea2009f39c58bc7", "name": "Frontend route `account` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `account` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-86ff7682ed1653fd", "name": "Frontend route `entries` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `entries` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-255a0de360e7c643", "name": "Frontend route `/pool/:id` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/pool/:id` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6695b143fb7adb8", "name": "Frontend route `/pool/:id/pick` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/pool/:id/pick` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7cbcbafac3430900", "name": "Frontend route `/fixture/:fixtureId` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/fixture/:fixtureId` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-755341aff6eb61aa", "name": "Frontend route `/p/:code` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/p/:code` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6672e41b8b40df07", "name": "Frontend route `/create` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/create` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fcd54c0ef57fc8ff", "name": "Frontend route `/entries` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/entries` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-550b11e797cc72da", "name": "Frontend route `/shop` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/shop` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dbb130075a4d8b3f", "name": "Frontend route `/recharge` has no Link/navigate to it \u2014 futpools_web/src/App.jsx", "shortDescription": {"text": "Frontend route `/recharge` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29e6769ddc93cb75", "name": "Dangling fetch: GET https://api.telegram.org/bot${token}/getUpdates (futpools_backend/src/scripts/telegramChatId.js:15)", "shortDescription": {"text": "Dangling fetch: GET https://api.telegram.org/bot${token}/getUpdates (futpools_backend/src/scripts/telegramChatId.js:15)"}, "fullDescription": {"text": "`futpools_backend/src/scripts/telegramChatId.js:15` calls `GET https://api.telegram.org/bot${token}/getUpdates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/getupdates`\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-83a04a696ccc8905", "name": "Dangling fetch: POST https://api.brevo.com/v3/contacts/import (futpools_backend/src/scripts/brevoBackfill.js:22)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/contacts/import (futpools_backend/src/scripts/brevoBackfill.js:22)"}, "fullDescription": {"text": "`futpools_backend/src/scripts/brevoBackfill.js:22` calls `POST https://api.brevo.com/v3/contacts/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/contacts/import`\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-9872f920462d588c", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (futpools_backend/src/services/telegramService.js:", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (futpools_backend/src/services/telegramService.js:42)"}, "fullDescription": {"text": "`futpools_backend/src/services/telegramService.js:42` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\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-a9556f8a0df40e30", "name": "Dangling fetch: GET https://ipapi.co/country/ (futpools_web/src/context/LocaleContext.jsx:30)", "shortDescription": {"text": "Dangling fetch: GET https://ipapi.co/country/ (futpools_web/src/context/LocaleContext.jsx:30)"}, "fullDescription": {"text": "`futpools_web/src/context/LocaleContext.jsx:30` calls `GET https://ipapi.co/country/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ipapi.co/country`\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-45f5ee016d178666", "name": "Unused endpoint: POST /payments/webhook", "shortDescription": {"text": "Unused endpoint: POST /payments/webhook"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `POST /payments/webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b28d92215a503990", "name": "Unused endpoint: USE /auth", "shortDescription": {"text": "Unused endpoint: USE /auth"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /auth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e480cf1bc736555", "name": "Unused endpoint: USE /users", "shortDescription": {"text": "Unused endpoint: USE /users"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e42c77b8e018b4b8", "name": "Unused endpoint: USE /leagues", "shortDescription": {"text": "Unused endpoint: USE /leagues"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /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-c49286f913fd8d8b", "name": "Unused endpoint: USE /matchdays", "shortDescription": {"text": "Unused endpoint: USE /matchdays"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /matchdays` 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-bb881e412781ece8", "name": "Unused endpoint: USE /matches", "shortDescription": {"text": "Unused endpoint: USE /matches"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /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-6594238a1fd7fbb4", "name": "Unused endpoint: USE /predictions", "shortDescription": {"text": "Unused endpoint: USE /predictions"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /predictions` 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-6e1aa04372a1acc9", "name": "Unused endpoint: USE /football", "shortDescription": {"text": "Unused endpoint: USE /football"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /football` 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-c1c18e44cd422207", "name": "Unused endpoint: USE /quinielas", "shortDescription": {"text": "Unused endpoint: USE /quinielas"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /quinielas` 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-2d1c70ac0e5ff085", "name": "Unused endpoint: USE /settings", "shortDescription": {"text": "Unused endpoint: USE /settings"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /settings` 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-29996a5bb9e9870e", "name": "Unused endpoint: USE /leaderboard", "shortDescription": {"text": "Unused endpoint: USE /leaderboard"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /leaderboard` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2d8849fb6b1ac47", "name": "Unused endpoint: USE /admin", "shortDescription": {"text": "Unused endpoint: USE /admin"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /admin` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3506739d0f1155aa", "name": "Unused endpoint: USE /ads", "shortDescription": {"text": "Unused endpoint: USE /ads"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /ads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38ffe423a6b9b24c", "name": "Unused endpoint: USE /payments", "shortDescription": {"text": "Unused endpoint: USE /payments"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /payments` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4183c9e56147d2e4", "name": "Unused endpoint: USE /challenges", "shortDescription": {"text": "Unused endpoint: USE /challenges"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /challenges` 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-858cb8cb10d83bfe", "name": "Unused endpoint: USE /tickets", "shortDescription": {"text": "Unused endpoint: USE /tickets"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /tickets` 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-53650109a9993749", "name": "Unused endpoint: USE /daily-pick", "shortDescription": {"text": "Unused endpoint: USE /daily-pick"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /daily-pick` 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-e122e97e55a96087", "name": "Unused endpoint: USE /sweepstakes", "shortDescription": {"text": "Unused endpoint: USE /sweepstakes"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /sweepstakes` 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-82ef435f705bb469", "name": "Unused endpoint: USE /pools", "shortDescription": {"text": "Unused endpoint: USE /pools"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /pools` 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-7dcf108ac689d9b4", "name": "Unused endpoint: USE /public", "shortDescription": {"text": "Unused endpoint: USE /public"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /public` 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-328f8a462bf28306", "name": "Unused endpoint: USE /world-cup-2026", "shortDescription": {"text": "Unused endpoint: USE /world-cup-2026"}, "fullDescription": {"text": "`futpools_backend/src/app.js` declares `USE /world-cup-2026` 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-8d5b2b188d08ca82", "name": "Unused endpoint: PUT /:id", "shortDescription": {"text": "Unused endpoint: PUT /:id"}, "fullDescription": {"text": "`futpools_backend/src/middleware/auth.js` declares `PUT /: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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`futpools_backend/src/routes/settings.js` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67d28fa8cd6bb12f", "name": "Unused endpoint: PUT /", "shortDescription": {"text": "Unused endpoint: PUT /"}, "fullDescription": {"text": "`futpools_backend/src/routes/settings.js` declares `PUT /` 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-c082b44135611d54", "name": "Unused endpoint: POST /rewarded-watched", "shortDescription": {"text": "Unused endpoint: POST /rewarded-watched"}, "fullDescription": {"text": "`futpools_backend/src/routes/ads.js` declares `POST /rewarded-watched` 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-0881aa0a86763d29", "name": "Unused endpoint: GET /rewarded-status", "shortDescription": {"text": "Unused endpoint: GET /rewarded-status"}, "fullDescription": {"text": "`futpools_backend/src/routes/ads.js` declares `GET /rewarded-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-c6a9988d9fe0dadf", "name": "Unused endpoint: GET /admob/ssv-callback", "shortDescription": {"text": "Unused endpoint: GET /admob/ssv-callback"}, "fullDescription": {"text": "`futpools_backend/src/routes/ads.js` declares `GET /admob/ssv-callback` 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-de1c60ab43b6a5ad", "name": "Unused endpoint: POST /ticket-rewarded/dev-credit", "shortDescription": {"text": "Unused endpoint: POST /ticket-rewarded/dev-credit"}, "fullDescription": {"text": "`futpools_backend/src/routes/ads.js` declares `POST /ticket-rewarded/dev-credit` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`futpools_backend/src/routes/predictions.js` declares `POST /` 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-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`futpools_backend/src/routes/matchdays.js` declares `GET /: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-31f6fd24d31bf455", "name": "Unused endpoint: POST /pools/platform-event", "shortDescription": {"text": "Unused endpoint: POST /pools/platform-event"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `POST /pools/platform-event` 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-22a8dfbb1ba0d4d1", "name": "Unused endpoint: POST /users/:id/mint", "shortDescription": {"text": "Unused endpoint: POST /users/:id/mint"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `POST /users/:id/mint` 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-286f3c19b5ba0f8e", "name": "Unused endpoint: GET /ledger", "shortDescription": {"text": "Unused endpoint: GET /ledger"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `GET /ledger` 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-ce5884bc5e5762d3", "name": "Unused endpoint: GET /payouts", "shortDescription": {"text": "Unused endpoint: GET /payouts"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `GET /payouts` 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-c4081dac23813f05", "name": "Unused endpoint: POST /pools/:id/mark-paid", "shortDescription": {"text": "Unused endpoint: POST /pools/:id/mark-paid"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `POST /pools/:id/mark-paid` 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-a45fd3b03b655cca", "name": "Unused endpoint: POST /pools/:id/cancel", "shortDescription": {"text": "Unused endpoint: POST /pools/:id/cancel"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `POST /pools/:id/cancel` 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-f66219278d18178d", "name": "Unused endpoint: GET /spei-payments", "shortDescription": {"text": "Unused endpoint: GET /spei-payments"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `GET /spei-payments` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68cba34ac4354f23", "name": "Unused endpoint: POST /spei-payments/:id/confirm", "shortDescription": {"text": "Unused endpoint: POST /spei-payments/:id/confirm"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `POST /spei-payments/:id/confirm` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-718dfa679364d19b", "name": "Unused endpoint: POST /spei-payments/:id/reject", "shortDescription": {"text": "Unused endpoint: POST /spei-payments/:id/reject"}, "fullDescription": {"text": "`futpools_backend/src/routes/admin.js` declares `POST /spei-payments/:id/reject` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-404115895f590a1d", "name": "Unused endpoint: GET /fixtures/upcoming", "shortDescription": {"text": "Unused endpoint: GET /fixtures/upcoming"}, "fullDescription": {"text": "`futpools_backend/src/routes/public.js` declares `GET /fixtures/upcoming` 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-b275d5cf76c4a243", "name": "Unused endpoint: GET /fixtures/today", "shortDescription": {"text": "Unused endpoint: GET /fixtures/today"}, "fullDescription": {"text": "`futpools_backend/src/routes/public.js` declares `GET /fixtures/today` 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-71f1a6eae8617702", "name": "Unused endpoint: GET /pools/next-open", "shortDescription": {"text": "Unused endpoint: GET /pools/next-open"}, "fullDescription": {"text": "`futpools_backend/src/routes/public.js` declares `GET /pools/next-open` 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-18dc7beb08ad49ee", "name": "Unused endpoint: GET /payment-config", "shortDescription": {"text": "Unused endpoint: GET /payment-config"}, "fullDescription": {"text": "`futpools_backend/src/routes/public.js` declares `GET /payment-config` 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-28f61b13836da65a", "name": "Unused endpoint: POST /:id/checkout-session", "shortDescription": {"text": "Unused endpoint: POST /:id/checkout-session"}, "fullDescription": {"text": "`futpools_backend/src/routes/poolPayments.js` declares `POST /:id/checkout-session` 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-d61fec9a0913604d", "name": "Unused endpoint: POST /:id/spei-intent", "shortDescription": {"text": "Unused endpoint: POST /:id/spei-intent"}, "fullDescription": {"text": "`futpools_backend/src/routes/poolPayments.js` declares `POST /:id/spei-intent` 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-19afb849e556d9fc", "name": "Unused endpoint: POST /spei/:paymentId/mark-paid", "shortDescription": {"text": "Unused endpoint: POST /spei/:paymentId/mark-paid"}, "fullDescription": {"text": "`futpools_backend/src/routes/poolPayments.js` declares `POST /spei/:paymentId/mark-paid` 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-b9c041dc087ff77f", "name": "Unused endpoint: GET /today", "shortDescription": {"text": "Unused endpoint: GET /today"}, "fullDescription": {"text": "`futpools_backend/src/routes/dailyPick.js` declares `GET /today` 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-e9ff46c96d1c3e2e", "name": "Unused endpoint: POST /today/predict", "shortDescription": {"text": "Unused endpoint: POST /today/predict"}, "fullDescription": {"text": "`futpools_backend/src/routes/dailyPick.js` declares `POST /today/predict` 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-3220edd1bac8db7d", "name": "Unused endpoint: GET /p/:code/image.png", "shortDescription": {"text": "Unused endpoint: GET /p/:code/image.png"}, "fullDescription": {"text": "`futpools_backend/src/routes/og.js` declares `GET /p/:code/image.png` 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-13f40fc3e647b396", "name": "Unused endpoint: GET /p/:code", "shortDescription": {"text": "Unused endpoint: GET /p/:code"}, "fullDescription": {"text": "`futpools_backend/src/routes/og.js` declares `GET /p/:code` 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/18378"}, "properties": {"repository": "RodrigoIbarraSanchez/futpools_proj", "repoUrl": "https://github.com/RodrigoIbarraSanchez/futpools_proj", "branch": "main"}, "results": [{"ruleId": "scanner-f2d767d5e24618b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/scripts/scoreAllFinished.js:21"}, "properties": {"repobilityId": "81c3ec52272f5a59", "scanner": "scanner-primary", "fingerprint": "f2d767d5e24618b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-586d5364ff838585", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/server.js:15"}, "properties": {"repobilityId": "7c2929508fbf0453", "scanner": "scanner-primary", "fingerprint": "586d5364ff838585", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-978a065c04614123", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/config/db.js:6"}, "properties": {"repobilityId": "b7035491a72169d7", "scanner": "scanner-primary", "fingerprint": "978a065c04614123", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e7fe38546159912", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/telegramTest.js:12"}, "properties": {"repobilityId": "084f8be0987110cc", "scanner": "scanner-primary", "fingerprint": "3e7fe38546159912", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54f10f6a426f6664", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/telegramChatId.js:27"}, "properties": {"repobilityId": "0b532964b05a0aae", "scanner": "scanner-primary", "fingerprint": "54f10f6a426f6664", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b64125260c276bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/seed.js:63"}, "properties": {"repobilityId": "b24ffbc00be1e8ff", "scanner": "scanner-primary", "fingerprint": "1b64125260c276bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34cca3cc460fe148", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/brevoBackfill.js:60"}, "properties": {"repobilityId": "cb1de2d5f018b2dd", "scanner": "scanner-primary", "fingerprint": "34cca3cc460fe148", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b64bc1355e5bed40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/scripts/syncFootball.js:121"}, "properties": {"repobilityId": "fd42d355bba7c391", "scanner": "scanner-primary", "fingerprint": "b64bc1355e5bed40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-324a30779e586945", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/quinielaController.js:347"}, "properties": {"repobilityId": "996e4f5df282c55d", "scanner": "scanner-primary", "fingerprint": "324a30779e586945", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-91565986647ef1fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/footballController.js:54"}, "properties": {"repobilityId": "d57f2e479f7c4410", "scanner": "scanner-primary", "fingerprint": "91565986647ef1fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3bf46651e4c7d0ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/paymentsController.js:174"}, "properties": {"repobilityId": "da176e3a74ec272e", "scanner": "scanner-primary", "fingerprint": "3bf46651e4c7d0ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f745805e76ffda06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/adminPayoutsController.js:193"}, "properties": {"repobilityId": "d4bf01aafafce651", "scanner": "scanner-primary", "fingerprint": "f745805e76ffda06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ee03ec8abbb121f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/predictionController.js:37"}, "properties": {"repobilityId": "0f93d99877e59b6b", "scanner": "scanner-primary", "fingerprint": "3ee03ec8abbb121f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbef765f2615724f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/controllers/authController.js:283"}, "properties": {"repobilityId": "ab1cecda20f059b7", "scanner": "scanner-primary", "fingerprint": "bbef765f2615724f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f433744be934d6b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/dailyPickService.js:150"}, "properties": {"repobilityId": "29087441181aded2", "scanner": "scanner-primary", "fingerprint": "f433744be934d6b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d506a9a0e8a518c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/poolSettlementService.js:113"}, "properties": {"repobilityId": "5909d076038f53ec", "scanner": "scanner-primary", "fingerprint": "2d506a9a0e8a518c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53b2c74ff4d61e95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/poolPaymentService.js:163"}, "properties": {"repobilityId": "8eebc09045f7248e", "scanner": "scanner-primary", "fingerprint": "53b2c74ff4d61e95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-953b869b64981f9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_backend/src/services/apiFootball.js:155"}, "properties": {"repobilityId": "ace16b0ffbdfc922", "scanner": "scanner-primary", "fingerprint": "953b869b64981f9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f880a23d27718802", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/scripts/seedAdmin.js:12"}, "properties": {"repobilityId": "790b83a2f798eb6f", "scanner": "scanner-primary", "fingerprint": "f880a23d27718802", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4bd2cb312ead1b5a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/src/server.js:24"}, "properties": {"repobilityId": "15b7b2a4d060120a", "scanner": "scanner-primary", "fingerprint": "4bd2cb312ead1b5a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a729295cc288e9d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_dashboard/server/src/config/db.js:6"}, "properties": {"repobilityId": "b74cd2ab6334bcc3", "scanner": "scanner-primary", "fingerprint": "a729295cc288e9d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6253d32590d217a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_web/scripts/build-sitemap.js:25"}, "properties": {"repobilityId": "5acda59f3de4f300", "scanner": "scanner-primary", "fingerprint": "d6253d32590d217a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-307a8ec2d0a0431b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 futpools_web/scripts/build-i18n-shells.js:336"}, "properties": {"repobilityId": "d65468a91ca6679f", "scanner": "scanner-primary", "fingerprint": "307a8ec2d0a0431b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a9143dbd9ca4c55", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/arena/screens1.jsx:352"}, "properties": {"repobilityId": "4982e7470486dd3b", "scanner": "scanner-primary", "fingerprint": "3a9143dbd9ca4c55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8eac465ccc54e945", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/arena/screens2.jsx:23"}, "properties": {"repobilityId": "5e9d102003c368dc", "scanner": "scanner-primary", "fingerprint": "8eac465ccc54e945", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-639e931213b4e328", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/lib/safeBack.js:9"}, "properties": {"repobilityId": "d2811d44011ce3f3", "scanner": "scanner-primary", "fingerprint": "639e931213b4e328", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-4f6bb00333b6d571", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 futpools_web/src/pages/PoolDetail.jsx:1398"}, "properties": {"repobilityId": "0b491dd98416e9bd", "scanner": "scanner-primary", "fingerprint": "4f6bb00333b6d571", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e305c226ad45ba86", "level": "error", "message": {"text": "Runtime dotenv file present in repo: futpools_dashboard/web/.env"}, "properties": {"repobilityId": "6d3de84656db87fd", "scanner": "scanner-primary", "fingerprint": "e305c226ad45ba86", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "futpools_dashboard/web/.env"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa84ad7229cd226d", "level": "error", "message": {"text": "Runtime dotenv file present in repo: futpools_dashboard/server/.env"}, "properties": {"repobilityId": "e739acc74a201e64", "scanner": "scanner-primary", "fingerprint": "aa84ad7229cd226d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "futpools_dashboard/server/.env"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-507e7e00b74256c9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in futpools_backend/src/app.js:33"}, "properties": {"repobilityId": "9bd40e80ef76b837", "scanner": "scanner-primary", "fingerprint": "507e7e00b74256c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "futpools_backend/src/app.js"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-955e72668b95c489", "level": "error", "message": {"text": "Possible secret in futpools_backend/src/scripts/seed.js"}, "properties": {"repobilityId": "ca099db5865e5e21", "scanner": "scanner-primary", "fingerprint": "955e72668b95c489", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "futpools_backend/src/scripts/seed.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-e773ce5c1bb7819c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in futpools_dashboard/web/src/App.jsx:62"}, "properties": {"repobilityId": "a47f55636f6ad178", "scanner": "scanner-primary", "fingerprint": "e773ce5c1bb7819c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "futpools_dashboard/web/src/App.jsx"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-594916cc05ea0ba7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in futpools_dashboard/server/src/server.js:13"}, "properties": {"repobilityId": "10ccf86cd7b48b68", "scanner": "scanner-primary", "fingerprint": "594916cc05ea0ba7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "futpools_dashboard/server/src/server.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-89e9b7a872b1f969", "level": "note", "message": {"text": "Very large file: futpools_web/src/i18n/translations.js (1471 lines)"}, "properties": {"repobilityId": "090a285055e34aed", "scanner": "scanner-primary", "fingerprint": "89e9b7a872b1f969", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-338f05becadef55c", "level": "note", "message": {"text": "Very large file: futpools_web/src/pages/LandingPage.jsx (1248 lines)"}, "properties": {"repobilityId": "d1ed48f64d112c27", "scanner": "scanner-primary", "fingerprint": "338f05becadef55c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ad1f72b5ace3dc5c", "level": "note", "message": {"text": "Very large file: futpools_web/src/pages/WorldCup2026Calendar.jsx (1536 lines)"}, "properties": {"repobilityId": "fb8ac07bd19dddcb", "scanner": "scanner-primary", "fingerprint": "ad1f72b5ace3dc5c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2b1f2ba5cbe44fda", "level": "note", "message": {"text": "Very large file: futpools_web/src/pages/PoolDetail.jsx (1697 lines)"}, "properties": {"repobilityId": "1d6fdb9cb4d80ac3", "scanner": "scanner-primary", "fingerprint": "2b1f2ba5cbe44fda", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c60a323fff8a3e46", "level": "note", "message": {"text": "Very large file: futpools_web/src/pages/desktop/PoolDetailDesktop.jsx (1440 lines)"}, "properties": {"repobilityId": "5928cd86a49da1e9", "scanner": "scanner-primary", "fingerprint": "c60a323fff8a3e46", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0b651e62ab541577", "level": "note", "message": {"text": "Very large file: futpools_web/src/pages/desktop/LiveScoresDesktop.jsx (1244 lines)"}, "properties": {"repobilityId": "9edf59908f06f84c", "scanner": "scanner-primary", "fingerprint": "0b651e62ab541577", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "570c5d9fa2e171c0", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b721d763f529c5f6", "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": "fde253aa9e45a28f", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "1e3b115f879261ef", "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": "0a250fa2343c6b0b", "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": "4e1ce213e77fa9dc", "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": "c9c909ac4e331f31", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-7403015f40f032a9", "level": "none", "message": {"text": "Commented-code block (7 lines) in futpools_backend/src/models/Challenge.js:53"}, "properties": {"repobilityId": "c881601e0c4e043b", "scanner": "scanner-primary", "fingerprint": "7403015f40f032a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eaad388f7a7ff2d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/models/QuinielaEntry.js:24"}, "properties": {"repobilityId": "7d870c1bb38f9d09", "scanner": "scanner-primary", "fingerprint": "eaad388f7a7ff2d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a45aad5b850d787f", "level": "none", "message": {"text": "Commented-code block (8 lines) in futpools_backend/src/models/Quiniela.js:85"}, "properties": {"repobilityId": "376350ebd28106e7", "scanner": "scanner-primary", "fingerprint": "a45aad5b850d787f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d053774e194bcbbb", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_backend/src/models/User.js:33"}, "properties": {"repobilityId": "6cca5f46247eed22", "scanner": "scanner-primary", "fingerprint": "d053774e194bcbbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cc8e40504dc3d27", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/config/stripePacks.js:19"}, "properties": {"repobilityId": "cdf299ed09d9bb17", "scanner": "scanner-primary", "fingerprint": "5cc8e40504dc3d27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fb1528193c216b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/middleware/auth.js:90"}, "properties": {"repobilityId": "e2b9ed68b76e0fca", "scanner": "scanner-primary", "fingerprint": "3fb1528193c216b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fc219c98ffbada2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/scripts/syncFootball.js:50"}, "properties": {"repobilityId": "03a82d3eb0ed8999", "scanner": "scanner-primary", "fingerprint": "6fc219c98ffbada2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff5bdd830cc30a36", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_backend/src/routes/og.js:220"}, "properties": {"repobilityId": "4481f50c9fbaa994", "scanner": "scanner-primary", "fingerprint": "ff5bdd830cc30a36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c922e53bd9266bda", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/routes/quinielas.js:42"}, "properties": {"repobilityId": "116a39c8d90a4586", "scanner": "scanner-primary", "fingerprint": "c922e53bd9266bda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dae70341aab314b", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_backend/src/controllers/quinielaController.js:256"}, "properties": {"repobilityId": "594599c87b2ee295", "scanner": "scanner-primary", "fingerprint": "2dae70341aab314b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aaabf22d2000664", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/footballController.js:168"}, "properties": {"repobilityId": "28f478946a5921a6", "scanner": "scanner-primary", "fingerprint": "8aaabf22d2000664", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93d52e4652915ec0", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/paymentsController.js:127"}, "properties": {"repobilityId": "7938a77a25340354", "scanner": "scanner-primary", "fingerprint": "93d52e4652915ec0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4aaf736b40e8d31", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/worldCupCalendarController.js:96"}, "properties": {"repobilityId": "1214fcc7464f1dab", "scanner": "scanner-primary", "fingerprint": "f4aaf736b40e8d31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2c9d2545591b993", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/controllers/settingsController.js:23"}, "properties": {"repobilityId": "250f38350b5ae275", "scanner": "scanner-primary", "fingerprint": "b2c9d2545591b993", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db0d6d6b1bd459fc", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_backend/src/controllers/authController.js:57"}, "properties": {"repobilityId": "ad7d9b379533bf46", "scanner": "scanner-primary", "fingerprint": "db0d6d6b1bd459fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cef8673125e6a4a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/services/dailyPickService.js:22"}, "properties": {"repobilityId": "2e55855ea128b402", "scanner": "scanner-primary", "fingerprint": "cef8673125e6a4a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdd85e1c336e12e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/services/brevoService.js:22"}, "properties": {"repobilityId": "3d84fef72ae9e9cf", "scanner": "scanner-primary", "fingerprint": "bdd85e1c336e12e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a50037fc4a16dfd9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_backend/src/services/admobSSV.js:32"}, "properties": {"repobilityId": "e52c6ca07246a870", "scanner": "scanner-primary", "fingerprint": "a50037fc4a16dfd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb51efc703c2901c", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_backend/src/services/poolPaymentService.js:133"}, "properties": {"repobilityId": "59344dae926954d6", "scanner": "scanner-primary", "fingerprint": "cb51efc703c2901c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5401f25e700a2442", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_dashboard/server/src/services/apiFootball.js:10"}, "properties": {"repobilityId": "4e690c378228bda0", "scanner": "scanner-primary", "fingerprint": "5401f25e700a2442", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51ef6c72db79cc8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/scripts/build-i18n-shells.js:140"}, "properties": {"repobilityId": "83721b66f71ed942", "scanner": "scanner-primary", "fingerprint": "51ef6c72db79cc8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a9993f435c7b353", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/api/client.js:19"}, "properties": {"repobilityId": "03fbaa4193ac5477", "scanner": "scanner-primary", "fingerprint": "2a9993f435c7b353", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c021d3268117bbfb", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/components/CountryPicker.jsx:3"}, "properties": {"repobilityId": "40ce491f9e3580bf", "scanner": "scanner-primary", "fingerprint": "c021d3268117bbfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21568df13a419442", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_web/src/lib/poolStatus.js:3"}, "properties": {"repobilityId": "a98fcfad1f37d09a", "scanner": "scanner-primary", "fingerprint": "21568df13a419442", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42cdf3a869c85622", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_web/src/lib/ladderNotify.js:1"}, "properties": {"repobilityId": "6550cd5d166d2d09", "scanner": "scanner-primary", "fingerprint": "42cdf3a869c85622", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f623b2b233ca0f33", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/LandingPage.jsx:448"}, "properties": {"repobilityId": "c43e30c942bc565a", "scanner": "scanner-primary", "fingerprint": "f623b2b233ca0f33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c06fb3b4a2dc77cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/LiveMatch.jsx:118"}, "properties": {"repobilityId": "bd84994aef49732b", "scanner": "scanner-primary", "fingerprint": "c06fb3b4a2dc77cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-726790d5835e5382", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/PronosticosFutbolHoy.jsx:241"}, "properties": {"repobilityId": "6f227ce4be9ca182", "scanner": "scanner-primary", "fingerprint": "726790d5835e5382", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d1b35352baf915c", "level": "none", "message": {"text": "Commented-code block (7 lines) in futpools_web/src/pages/WorldCup2026Calendar.jsx:209"}, "properties": {"repobilityId": "80859d10c88be646", "scanner": "scanner-primary", "fingerprint": "8d1b35352baf915c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8174535cb6c45a6e", "level": "none", "message": {"text": "Commented-code block (8 lines) in futpools_web/src/pages/Home.jsx:105"}, "properties": {"repobilityId": "7830f6396bbc438e", "scanner": "scanner-primary", "fingerprint": "8174535cb6c45a6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c28eb6408d6206d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/PoolDetail.jsx:120"}, "properties": {"repobilityId": "8a1a6e857afc73e9", "scanner": "scanner-primary", "fingerprint": "c28eb6408d6206d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed61756fb8a42a62", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/CreatePool.jsx:36"}, "properties": {"repobilityId": "2ca73e826e2be72e", "scanner": "scanner-primary", "fingerprint": "ed61756fb8a42a62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edec5c5678a573da", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/LiveScores.jsx:3"}, "properties": {"repobilityId": "22c7cb6615777a0d", "scanner": "scanner-primary", "fingerprint": "edec5c5678a573da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-615a96eb2d6a40c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in futpools_web/src/pages/desktop/HomeDesktop.jsx:3"}, "properties": {"repobilityId": "97ea473c143ff2c5", "scanner": "scanner-primary", "fingerprint": "615a96eb2d6a40c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85497256e9f72946", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/desktop/PoolDetailDesktop.jsx:3"}, "properties": {"repobilityId": "25bd8e26fdb33e07", "scanner": "scanner-primary", "fingerprint": "85497256e9f72946", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e67a7b22e657928a", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/desktop/QuinielaPickDesktop.jsx:3"}, "properties": {"repobilityId": "3006dd233e7cb6f8", "scanner": "scanner-primary", "fingerprint": "e67a7b22e657928a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff5ce93214479b4f", "level": "none", "message": {"text": "Commented-code block (8 lines) in futpools_web/src/pages/desktop/LiveScoresDesktop.jsx:3"}, "properties": {"repobilityId": "0bddaef64bbdf0bd", "scanner": "scanner-primary", "fingerprint": "ff5ce93214479b4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3152b9aef3948af4", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/pages/onboarding/WebOnboarding.jsx:582"}, "properties": {"repobilityId": "9e9e2f627d39fd53", "scanner": "scanner-primary", "fingerprint": "3152b9aef3948af4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a4cebf7caccb6db", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/context/AuthContext.jsx:108"}, "properties": {"repobilityId": "5c5145c81ad259dd", "scanner": "scanner-primary", "fingerprint": "3a4cebf7caccb6db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-884ea7be7ea4ed09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 futpools_web/src/context/LocaleContext.jsx:30"}, "properties": {"repobilityId": "32312d826112872d", "scanner": "scanner-primary", "fingerprint": "884ea7be7ea4ed09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b9e82e77d24bb21", "level": "none", "message": {"text": "Commented-code block (5 lines) in futpools_web/src/arena-ui/TabBar.jsx:3"}, "properties": {"repobilityId": "be7733e9abdcd4cd", "scanner": "scanner-primary", "fingerprint": "5b9e82e77d24bb21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-030da566069872e9", "level": "note", "message": {"text": "15 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "0519c1c0e8c1f8e4", "scanner": "scanner-primary", "fingerprint": "030da566069872e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-c9d319896a99ef18", "level": "warning", "message": {"text": "Frontend route `/arena` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "e721cd17762f0c11", "scanner": "scanner-primary", "fingerprint": "c9d319896a99ef18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-895eb61b3196e536", "level": "warning", "message": {"text": "Frontend route `/calendario-mundial-2026/agregar` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "fdbcdd4f020e2808", "scanner": "scanner-primary", "fingerprint": "895eb61b3196e536", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-41d15eda9186900b", "level": "warning", "message": {"text": "Frontend route `/world-cup-2026-calendar/add` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "f7642a053d59a6b9", "scanner": "scanner-primary", "fingerprint": "41d15eda9186900b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7032cbef96ab6b9d", "level": "warning", "message": {"text": "Frontend route `/calendariomundial2026` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "3000e973237894f3", "scanner": "scanner-primary", "fingerprint": "7032cbef96ab6b9d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2c60d7fe48c68baf", "level": "warning", "message": {"text": "Frontend route `/worldcup2026calendar` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "df9be6364d611163", "scanner": "scanner-primary", "fingerprint": "2c60d7fe48c68baf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f7d265246726133f", "level": "warning", "message": {"text": "Frontend route `scores` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "e59272169c7ecf77", "scanner": "scanner-primary", "fingerprint": "f7d265246726133f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cea2009f39c58bc7", "level": "warning", "message": {"text": "Frontend route `account` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "a9119b35242070b7", "scanner": "scanner-primary", "fingerprint": "cea2009f39c58bc7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-86ff7682ed1653fd", "level": "warning", "message": {"text": "Frontend route `entries` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "dc0cbc99efbd261f", "scanner": "scanner-primary", "fingerprint": "86ff7682ed1653fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-255a0de360e7c643", "level": "warning", "message": {"text": "Frontend route `/pool/:id` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "a776d7bd931d7268", "scanner": "scanner-primary", "fingerprint": "255a0de360e7c643", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b6695b143fb7adb8", "level": "warning", "message": {"text": "Frontend route `/pool/:id/pick` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "891912b750db890d", "scanner": "scanner-primary", "fingerprint": "b6695b143fb7adb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7cbcbafac3430900", "level": "warning", "message": {"text": "Frontend route `/fixture/:fixtureId` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "e9c5feb0408a127e", "scanner": "scanner-primary", "fingerprint": "7cbcbafac3430900", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-755341aff6eb61aa", "level": "warning", "message": {"text": "Frontend route `/p/:code` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "2b71399d338b0fe8", "scanner": "scanner-primary", "fingerprint": "755341aff6eb61aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6672e41b8b40df07", "level": "warning", "message": {"text": "Frontend route `/create` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "0d363657b9e0d354", "scanner": "scanner-primary", "fingerprint": "6672e41b8b40df07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fcd54c0ef57fc8ff", "level": "warning", "message": {"text": "Frontend route `/entries` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "ce5bcccd066675fb", "scanner": "scanner-primary", "fingerprint": "fcd54c0ef57fc8ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-550b11e797cc72da", "level": "warning", "message": {"text": "Frontend route `/shop` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "5c13b0e57d5c68aa", "scanner": "scanner-primary", "fingerprint": "550b11e797cc72da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-dbb130075a4d8b3f", "level": "warning", "message": {"text": "Frontend route `/recharge` has no Link/navigate to it \u2014 futpools_web/src/App.jsx"}, "properties": {"repobilityId": "ecb3ab4344c7a23f", "scanner": "scanner-primary", "fingerprint": "dbb130075a4d8b3f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-29e6769ddc93cb75", "level": "error", "message": {"text": "Dangling fetch: GET https://api.telegram.org/bot${token}/getUpdates (futpools_backend/src/scripts/telegramChatId.js:15)"}, "properties": {"repobilityId": "dec8ce6c68a7fe5b", "scanner": "scanner-primary", "fingerprint": "29e6769ddc93cb75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83a04a696ccc8905", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/contacts/import (futpools_backend/src/scripts/brevoBackfill.js:22)"}, "properties": {"repobilityId": "92de356cf89fd48e", "scanner": "scanner-primary", "fingerprint": "83a04a696ccc8905", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9872f920462d588c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (futpools_backend/src/services/telegramService.js:42)"}, "properties": {"repobilityId": "66a35c29bbe06ab0", "scanner": "scanner-primary", "fingerprint": "9872f920462d588c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9556f8a0df40e30", "level": "error", "message": {"text": "Dangling fetch: GET https://ipapi.co/country/ (futpools_web/src/context/LocaleContext.jsx:30)"}, "properties": {"repobilityId": "dbc8ddf77d9a6d26", "scanner": "scanner-primary", "fingerprint": "a9556f8a0df40e30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45f5ee016d178666", "level": "note", "message": {"text": "Unused endpoint: POST /payments/webhook"}, "properties": {"repobilityId": "b7672ccb5d99754f", "scanner": "scanner-primary", "fingerprint": "45f5ee016d178666", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b28d92215a503990", "level": "note", "message": {"text": "Unused endpoint: USE /auth"}, "properties": {"repobilityId": "109faaad7225d334", "scanner": "scanner-primary", "fingerprint": "b28d92215a503990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4e480cf1bc736555", "level": "note", "message": {"text": "Unused endpoint: USE /users"}, "properties": {"repobilityId": "0a579c7860b729f4", "scanner": "scanner-primary", "fingerprint": "4e480cf1bc736555", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e42c77b8e018b4b8", "level": "note", "message": {"text": "Unused endpoint: USE /leagues"}, "properties": {"repobilityId": "ffd2d3cb7730f96e", "scanner": "scanner-primary", "fingerprint": "e42c77b8e018b4b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c49286f913fd8d8b", "level": "note", "message": {"text": "Unused endpoint: USE /matchdays"}, "properties": {"repobilityId": "09481bdb6c1e49eb", "scanner": "scanner-primary", "fingerprint": "c49286f913fd8d8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb881e412781ece8", "level": "note", "message": {"text": "Unused endpoint: USE /matches"}, "properties": {"repobilityId": "b4f3b6994bfaca4b", "scanner": "scanner-primary", "fingerprint": "bb881e412781ece8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6594238a1fd7fbb4", "level": "note", "message": {"text": "Unused endpoint: USE /predictions"}, "properties": {"repobilityId": "b2a9620c07493ec6", "scanner": "scanner-primary", "fingerprint": "6594238a1fd7fbb4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e1aa04372a1acc9", "level": "note", "message": {"text": "Unused endpoint: USE /football"}, "properties": {"repobilityId": "e492728a5740f175", "scanner": "scanner-primary", "fingerprint": "6e1aa04372a1acc9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1c18e44cd422207", "level": "note", "message": {"text": "Unused endpoint: USE /quinielas"}, "properties": {"repobilityId": "ac0a2833a094ed13", "scanner": "scanner-primary", "fingerprint": "c1c18e44cd422207", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d1c70ac0e5ff085", "level": "note", "message": {"text": "Unused endpoint: USE /settings"}, "properties": {"repobilityId": "922d8bdf5d0deaf0", "scanner": "scanner-primary", "fingerprint": "2d1c70ac0e5ff085", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-29996a5bb9e9870e", "level": "note", "message": {"text": "Unused endpoint: USE /leaderboard"}, "properties": {"repobilityId": "80900b87c616e95f", "scanner": "scanner-primary", "fingerprint": "29996a5bb9e9870e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2d8849fb6b1ac47", "level": "note", "message": {"text": "Unused endpoint: USE /admin"}, "properties": {"repobilityId": "52b0c83e1dc84c01", "scanner": "scanner-primary", "fingerprint": "b2d8849fb6b1ac47", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3506739d0f1155aa", "level": "note", "message": {"text": "Unused endpoint: USE /ads"}, "properties": {"repobilityId": "3356581cf22c8c56", "scanner": "scanner-primary", "fingerprint": "3506739d0f1155aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38ffe423a6b9b24c", "level": "note", "message": {"text": "Unused endpoint: USE /payments"}, "properties": {"repobilityId": "3c42de8334b770d4", "scanner": "scanner-primary", "fingerprint": "38ffe423a6b9b24c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4183c9e56147d2e4", "level": "note", "message": {"text": "Unused endpoint: USE /challenges"}, "properties": {"repobilityId": "4aa2c2bdea54610f", "scanner": "scanner-primary", "fingerprint": "4183c9e56147d2e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-858cb8cb10d83bfe", "level": "note", "message": {"text": "Unused endpoint: USE /tickets"}, "properties": {"repobilityId": "53853f0aff2e986d", "scanner": "scanner-primary", "fingerprint": "858cb8cb10d83bfe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53650109a9993749", "level": "note", "message": {"text": "Unused endpoint: USE /daily-pick"}, "properties": {"repobilityId": "2aa0cc2d3848633c", "scanner": "scanner-primary", "fingerprint": "53650109a9993749", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e122e97e55a96087", "level": "note", "message": {"text": "Unused endpoint: USE /sweepstakes"}, "properties": {"repobilityId": "da7d71ebe9581fbc", "scanner": "scanner-primary", "fingerprint": "e122e97e55a96087", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-82ef435f705bb469", "level": "note", "message": {"text": "Unused endpoint: USE /pools"}, "properties": {"repobilityId": "9f77eed8d79b797b", "scanner": "scanner-primary", "fingerprint": "82ef435f705bb469", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7dcf108ac689d9b4", "level": "note", "message": {"text": "Unused endpoint: USE /public"}, "properties": {"repobilityId": "37d50db0a6d5f275", "scanner": "scanner-primary", "fingerprint": "7dcf108ac689d9b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-328f8a462bf28306", "level": "note", "message": {"text": "Unused endpoint: USE /world-cup-2026"}, "properties": {"repobilityId": "c5f99cd727323cf2", "scanner": "scanner-primary", "fingerprint": "328f8a462bf28306", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d5b2b188d08ca82", "level": "note", "message": {"text": "Unused endpoint: PUT /:id"}, "properties": {"repobilityId": "6164b745df5e67e6", "scanner": "scanner-primary", "fingerprint": "8d5b2b188d08ca82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "987886d32fe51e17", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67d28fa8cd6bb12f", "level": "note", "message": {"text": "Unused endpoint: PUT /"}, "properties": {"repobilityId": "0cf257c24484c511", "scanner": "scanner-primary", "fingerprint": "67d28fa8cd6bb12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c082b44135611d54", "level": "note", "message": {"text": "Unused endpoint: POST /rewarded-watched"}, "properties": {"repobilityId": "1e382182ffe9791a", "scanner": "scanner-primary", "fingerprint": "c082b44135611d54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0881aa0a86763d29", "level": "note", "message": {"text": "Unused endpoint: GET /rewarded-status"}, "properties": {"repobilityId": "d84a821595505ccc", "scanner": "scanner-primary", "fingerprint": "0881aa0a86763d29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6a9988d9fe0dadf", "level": "note", "message": {"text": "Unused endpoint: GET /admob/ssv-callback"}, "properties": {"repobilityId": "903484d369ab5d97", "scanner": "scanner-primary", "fingerprint": "c6a9988d9fe0dadf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de1c60ab43b6a5ad", "level": "note", "message": {"text": "Unused endpoint: POST /ticket-rewarded/dev-credit"}, "properties": {"repobilityId": "5cdc266a0c274cbd", "scanner": "scanner-primary", "fingerprint": "de1c60ab43b6a5ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "d597ca0da3010e0e", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "e33e354b51b90a36", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-31f6fd24d31bf455", "level": "note", "message": {"text": "Unused endpoint: POST /pools/platform-event"}, "properties": {"repobilityId": "53bf5c4d0ac2bfac", "scanner": "scanner-primary", "fingerprint": "31f6fd24d31bf455", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-22a8dfbb1ba0d4d1", "level": "note", "message": {"text": "Unused endpoint: POST /users/:id/mint"}, "properties": {"repobilityId": "d6f5997be0c17594", "scanner": "scanner-primary", "fingerprint": "22a8dfbb1ba0d4d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-286f3c19b5ba0f8e", "level": "note", "message": {"text": "Unused endpoint: GET /ledger"}, "properties": {"repobilityId": "faec2a3a309cef77", "scanner": "scanner-primary", "fingerprint": "286f3c19b5ba0f8e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce5884bc5e5762d3", "level": "note", "message": {"text": "Unused endpoint: GET /payouts"}, "properties": {"repobilityId": "4a22e43cd8145682", "scanner": "scanner-primary", "fingerprint": "ce5884bc5e5762d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4081dac23813f05", "level": "note", "message": {"text": "Unused endpoint: POST /pools/:id/mark-paid"}, "properties": {"repobilityId": "6965a8f45b91a449", "scanner": "scanner-primary", "fingerprint": "c4081dac23813f05", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a45fd3b03b655cca", "level": "note", "message": {"text": "Unused endpoint: POST /pools/:id/cancel"}, "properties": {"repobilityId": "a6db9bfd2bfe9d99", "scanner": "scanner-primary", "fingerprint": "a45fd3b03b655cca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f66219278d18178d", "level": "note", "message": {"text": "Unused endpoint: GET /spei-payments"}, "properties": {"repobilityId": "5efe0913f2ea1fc7", "scanner": "scanner-primary", "fingerprint": "f66219278d18178d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68cba34ac4354f23", "level": "note", "message": {"text": "Unused endpoint: POST /spei-payments/:id/confirm"}, "properties": {"repobilityId": "ad2b71b8d0f122ca", "scanner": "scanner-primary", "fingerprint": "68cba34ac4354f23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-718dfa679364d19b", "level": "note", "message": {"text": "Unused endpoint: POST /spei-payments/:id/reject"}, "properties": {"repobilityId": "3ffde29e81d2ff3b", "scanner": "scanner-primary", "fingerprint": "718dfa679364d19b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-404115895f590a1d", "level": "note", "message": {"text": "Unused endpoint: GET /fixtures/upcoming"}, "properties": {"repobilityId": "e22808adca18aefe", "scanner": "scanner-primary", "fingerprint": "404115895f590a1d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b275d5cf76c4a243", "level": "note", "message": {"text": "Unused endpoint: GET /fixtures/today"}, "properties": {"repobilityId": "46b8d9062946dd44", "scanner": "scanner-primary", "fingerprint": "b275d5cf76c4a243", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71f1a6eae8617702", "level": "note", "message": {"text": "Unused endpoint: GET /pools/next-open"}, "properties": {"repobilityId": "fbe0ae081abfd394", "scanner": "scanner-primary", "fingerprint": "71f1a6eae8617702", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18dc7beb08ad49ee", "level": "note", "message": {"text": "Unused endpoint: GET /payment-config"}, "properties": {"repobilityId": "fababa42823c7360", "scanner": "scanner-primary", "fingerprint": "18dc7beb08ad49ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28f61b13836da65a", "level": "note", "message": {"text": "Unused endpoint: POST /:id/checkout-session"}, "properties": {"repobilityId": "712f3ac566f92bcf", "scanner": "scanner-primary", "fingerprint": "28f61b13836da65a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d61fec9a0913604d", "level": "note", "message": {"text": "Unused endpoint: POST /:id/spei-intent"}, "properties": {"repobilityId": "0532c5811213ea55", "scanner": "scanner-primary", "fingerprint": "d61fec9a0913604d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-19afb849e556d9fc", "level": "note", "message": {"text": "Unused endpoint: POST /spei/:paymentId/mark-paid"}, "properties": {"repobilityId": "958e4224bb86dea7", "scanner": "scanner-primary", "fingerprint": "19afb849e556d9fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9c041dc087ff77f", "level": "note", "message": {"text": "Unused endpoint: GET /today"}, "properties": {"repobilityId": "74d37825b1c6794e", "scanner": "scanner-primary", "fingerprint": "b9c041dc087ff77f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9ff46c96d1c3e2e", "level": "note", "message": {"text": "Unused endpoint: POST /today/predict"}, "properties": {"repobilityId": "f1882251e644e2ac", "scanner": "scanner-primary", "fingerprint": "e9ff46c96d1c3e2e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3220edd1bac8db7d", "level": "note", "message": {"text": "Unused endpoint: GET /p/:code/image.png"}, "properties": {"repobilityId": "d0bdc102c6b3ec0b", "scanner": "scanner-primary", "fingerprint": "3220edd1bac8db7d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13f40fc3e647b396", "level": "note", "message": {"text": "Unused endpoint: GET /p/:code"}, "properties": {"repobilityId": "0726d8245ba50a72", "scanner": "scanner-primary", "fingerprint": "13f40fc3e647b396", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}