{"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-a331d41482a4fabe", "name": "Possibly dead Python function: require_admin", "shortDescription": {"text": "Possibly dead Python function: require_admin"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9b2b7c7e1921ecc", "name": "Possibly dead Python function: require_team_manager", "shortDescription": {"text": "Possibly dead Python function: require_team_manager"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-102f24f58b2e3e99", "name": "Possibly dead Python function: generate_single_elimination", "shortDescription": {"text": "Possibly dead Python function: generate_single_elimination"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-972ed52c0708f83f", "name": "Possibly dead Python function: generate_double_elimination", "shortDescription": {"text": "Possibly dead Python function: generate_double_elimination"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9ac667d008825b8", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Teams.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Teams.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc019271e4da2ad9", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Schedule.tsx:243", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Schedule.tsx:243"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d0124775a0dd222", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CompanyTeams.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CompanyTeams.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28aaa7aa75d9b0cc", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Leaderboard.tsx:25", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Leaderboard.tsx:25"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82d601c384af6136", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Brackets.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Brackets.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5817ffa4341720f2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/SportConfigPage.tsx:557", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/SportConfigPage.tsx:557"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8717531bd2456f2d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/TeamsPage.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/TeamsPage.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74ac59cb8c8fe693", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/ManageCompanyTeams.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/ManageCompanyTeams.tsx:109"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8689aaee9a0098e1", "name": "Insecure pattern 'cors_wildcard' in backend/app/main.py:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in backend/app/main.py:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 72 source file(s) (ratio 0.00). 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-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "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 14 placeholder/mock markers across 7 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, tests, operator-readme. 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": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0b9c39ef94c83b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:11"}, "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-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/routers/matches.py:post_result, backend/app/routers/matches.py:post_forfeit\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93a88db26ea88162", "name": "Frontend route `leaderboard` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `leaderboard` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-4ec62197590b5bca", "name": "Frontend route `schedule` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `schedule` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-ad97719950c4cc1e", "name": "Frontend route `brackets` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `brackets` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-511208944508f103", "name": "Frontend route `brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-605c7978199038f0", "name": "Frontend route `teams` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `teams` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-920e61888d0d5db4", "name": "Frontend route `teams/:companyId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `teams/:companyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-d1fa83788a881055", "name": "Frontend route `account` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `account` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-3c0c4071248dd998", "name": "Frontend route `manage` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-b522832d4c480962", "name": "Frontend route `manage/teams` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/teams` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-ea90bda1eb6f8acc", "name": "Frontend route `manage/teams/:companyId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/teams/:companyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-0863df48912c3d09", "name": "Frontend route `manage/brackets` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/brackets` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-cac39100ea5e9d4f", "name": "Frontend route `manage/brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-5678aebe40891890", "name": "Frontend route `manage/results` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/results` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-d1e850b85b158261", "name": "Frontend route `manage/results/brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/results/brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-d09a490b0375b66f", "name": "Frontend route `manage/results/heats/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/results/heats/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-b85b76c08fcdb9bf", "name": "Frontend route `manage/results/pools/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/results/pools/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-c8153701f0d987ba", "name": "Frontend route `manage/scoring` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `manage/scoring` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fecbfd3ee338065d", "name": "Unused endpoint: GET /teams/", "shortDescription": {"text": "Unused endpoint: GET /teams/"}, "fullDescription": {"text": "`backend/app/routers/teams.py` declares `GET /teams/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e6e45699f6fef78", "name": "Unused endpoint: GET /teams/{team_id}", "shortDescription": {"text": "Unused endpoint: GET /teams/{team_id}"}, "fullDescription": {"text": "`backend/app/routers/teams.py` declares `GET /teams/{team_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-72690365864706d9", "name": "Unused endpoint: POST /teams/", "shortDescription": {"text": "Unused endpoint: POST /teams/"}, "fullDescription": {"text": "`backend/app/routers/teams.py` declares `POST /teams/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b3bfc889e1599ab", "name": "Unused endpoint: PATCH /teams/{team_id}", "shortDescription": {"text": "Unused endpoint: PATCH /teams/{team_id}"}, "fullDescription": {"text": "`backend/app/routers/teams.py` declares `PATCH /teams/{team_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-d11a051c24765206", "name": "Unused endpoint: DELETE /teams/{team_id}", "shortDescription": {"text": "Unused endpoint: DELETE /teams/{team_id}"}, "fullDescription": {"text": "`backend/app/routers/teams.py` declares `DELETE /teams/{team_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-8c15af96e2d2b618", "name": "Unused endpoint: GET /sports/", "shortDescription": {"text": "Unused endpoint: GET /sports/"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `GET /sports/` 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-1d38a2ea1ce74761", "name": "Unused endpoint: GET /sports/{sport_id}", "shortDescription": {"text": "Unused endpoint: GET /sports/{sport_id}"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `GET /sports/{sport_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-19ecd1e5e6d1c6dc", "name": "Unused endpoint: POST /sports/", "shortDescription": {"text": "Unused endpoint: POST /sports/"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `POST /sports/` 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-81ae8a7f19f76b79", "name": "Unused endpoint: PATCH /sports/{sport_id}", "shortDescription": {"text": "Unused endpoint: PATCH /sports/{sport_id}"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `PATCH /sports/{sport_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-48cebaf524caee83", "name": "Unused endpoint: DELETE /sports/{sport_id}", "shortDescription": {"text": "Unused endpoint: DELETE /sports/{sport_id}"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `DELETE /sports/{sport_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-40d5c644214696ba", "name": "Unused endpoint: DELETE /sports/{sport_id}/brackets", "shortDescription": {"text": "Unused endpoint: DELETE /sports/{sport_id}/brackets"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `DELETE /sports/{sport_id}/brackets` 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-9f231a5fd8881c46", "name": "Unused endpoint: POST /sports/{sport_id}/generate-bracket", "shortDescription": {"text": "Unused endpoint: POST /sports/{sport_id}/generate-bracket"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `POST /sports/{sport_id}/generate-bracket` 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-c7675f907cda0992", "name": "Unused endpoint: GET /sports/{sport_id}/standings", "shortDescription": {"text": "Unused endpoint: GET /sports/{sport_id}/standings"}, "fullDescription": {"text": "`backend/app/routers/sports.py` declares `GET /sports/{sport_id}/standings` 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": "`backend/app/routers/event_points.py` 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-dadedd268c5d745c", "name": "Unused endpoint: POST /award-placement", "shortDescription": {"text": "Unused endpoint: POST /award-placement"}, "fullDescription": {"text": "`backend/app/routers/event_points.py` declares `POST /award-placement` 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-94a4c1224947340c", "name": "Unused endpoint: GET /leaderboard/", "shortDescription": {"text": "Unused endpoint: GET /leaderboard/"}, "fullDescription": {"text": "`backend/app/routers/leaderboard.py` declares `GET /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-60436f029d329eaf", "name": "Unused endpoint: GET /roster-entries/", "shortDescription": {"text": "Unused endpoint: GET /roster-entries/"}, "fullDescription": {"text": "`backend/app/routers/roster_entries.py` declares `GET /roster-entries/` 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-030b819d138a25eb", "name": "Unused endpoint: POST /roster-entries/", "shortDescription": {"text": "Unused endpoint: POST /roster-entries/"}, "fullDescription": {"text": "`backend/app/routers/roster_entries.py` declares `POST /roster-entries/` 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-06c48d480690d773", "name": "Unused endpoint: DELETE /roster-entries/{entry_id}", "shortDescription": {"text": "Unused endpoint: DELETE /roster-entries/{entry_id}"}, "fullDescription": {"text": "`backend/app/routers/roster_entries.py` declares `DELETE /roster-entries/{entry_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-cb965ee377fb1b8e", "name": "Unused endpoint: GET /locations/", "shortDescription": {"text": "Unused endpoint: GET /locations/"}, "fullDescription": {"text": "`backend/app/routers/locations.py` declares `GET /locations/` 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-a0d449d283f8f160", "name": "Unused endpoint: POST /locations/", "shortDescription": {"text": "Unused endpoint: POST /locations/"}, "fullDescription": {"text": "`backend/app/routers/locations.py` declares `POST /locations/` 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-f37a1a38f5d587e9", "name": "Unused endpoint: DELETE /locations/{location_id}", "shortDescription": {"text": "Unused endpoint: DELETE /locations/{location_id}"}, "fullDescription": {"text": "`backend/app/routers/locations.py` declares `DELETE /locations/{location_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-f1433d04a24f95ab", "name": "Unused endpoint: GET /companies/", "shortDescription": {"text": "Unused endpoint: GET /companies/"}, "fullDescription": {"text": "`backend/app/routers/companies.py` declares `GET /companies/` 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-0a5f0f911d476173", "name": "Unused endpoint: GET /companies/{company_id}", "shortDescription": {"text": "Unused endpoint: GET /companies/{company_id}"}, "fullDescription": {"text": "`backend/app/routers/companies.py` declares `GET /companies/{company_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-8a985829b3f122b8", "name": "Unused endpoint: POST /companies/", "shortDescription": {"text": "Unused endpoint: POST /companies/"}, "fullDescription": {"text": "`backend/app/routers/companies.py` declares `POST /companies/` 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-9654464a0e81d943", "name": "Unused endpoint: PATCH /companies/{company_id}", "shortDescription": {"text": "Unused endpoint: PATCH /companies/{company_id}"}, "fullDescription": {"text": "`backend/app/routers/companies.py` declares `PATCH /companies/{company_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-af37230049442c56", "name": "Unused endpoint: DELETE /companies/{company_id}", "shortDescription": {"text": "Unused endpoint: DELETE /companies/{company_id}"}, "fullDescription": {"text": "`backend/app/routers/companies.py` declares `DELETE /companies/{company_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-7d5be8c89ca50bdd", "name": "Unused endpoint: GET /brackets/", "shortDescription": {"text": "Unused endpoint: GET /brackets/"}, "fullDescription": {"text": "`backend/app/routers/brackets.py` declares `GET /brackets/` 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-c7c8967c6ef313c5", "name": "Unused endpoint: GET /brackets/{bracket_id}", "shortDescription": {"text": "Unused endpoint: GET /brackets/{bracket_id}"}, "fullDescription": {"text": "`backend/app/routers/brackets.py` declares `GET /brackets/{bracket_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-c97b4cd2ab40d368", "name": "Unused endpoint: POST /brackets/", "shortDescription": {"text": "Unused endpoint: POST /brackets/"}, "fullDescription": {"text": "`backend/app/routers/brackets.py` declares `POST /brackets/` 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-971f779015b78161", "name": "Unused endpoint: PATCH /brackets/{bracket_id}", "shortDescription": {"text": "Unused endpoint: PATCH /brackets/{bracket_id}"}, "fullDescription": {"text": "`backend/app/routers/brackets.py` declares `PATCH /brackets/{bracket_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-c4f3ae1de5d0b521", "name": "Unused endpoint: DELETE /brackets/{bracket_id}", "shortDescription": {"text": "Unused endpoint: DELETE /brackets/{bracket_id}"}, "fullDescription": {"text": "`backend/app/routers/brackets.py` declares `DELETE /brackets/{bracket_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-2135fb9bc1ec0068", "name": "Unused endpoint: GET /matches/", "shortDescription": {"text": "Unused endpoint: GET /matches/"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `GET /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-41e39baf9b33f99a", "name": "Unused endpoint: GET /matches/{match_id}", "shortDescription": {"text": "Unused endpoint: GET /matches/{match_id}"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `GET /matches/{match_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-909e9a63b2e6011e", "name": "Unused endpoint: POST /matches/", "shortDescription": {"text": "Unused endpoint: POST /matches/"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `POST /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-025e8f4dc6810400", "name": "Unused endpoint: POST /matches/{match_id}/start", "shortDescription": {"text": "Unused endpoint: POST /matches/{match_id}/start"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `POST /matches/{match_id}/start` 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-0c5af6899da918f4", "name": "Unused endpoint: POST /matches/{match_id}/result", "shortDescription": {"text": "Unused endpoint: POST /matches/{match_id}/result"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `POST /matches/{match_id}/result` 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-265b2dff9ab337e1", "name": "Unused endpoint: POST /matches/{match_id}/forfeit", "shortDescription": {"text": "Unused endpoint: POST /matches/{match_id}/forfeit"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `POST /matches/{match_id}/forfeit` 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-56ae78bb5c5de229", "name": "Unused endpoint: POST /matches/{match_id}/double-forfeit", "shortDescription": {"text": "Unused endpoint: POST /matches/{match_id}/double-forfeit"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `POST /matches/{match_id}/double-forfeit` 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-1b634f8d3805c854", "name": "Unused endpoint: POST /matches/{match_id}/heat-result", "shortDescription": {"text": "Unused endpoint: POST /matches/{match_id}/heat-result"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `POST /matches/{match_id}/heat-result` 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-ba41d54e1793943f", "name": "Unused endpoint: PATCH /matches/{match_id}", "shortDescription": {"text": "Unused endpoint: PATCH /matches/{match_id}"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `PATCH /matches/{match_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-f0e7a2226f54802d", "name": "Unused endpoint: DELETE /matches/{match_id}", "shortDescription": {"text": "Unused endpoint: DELETE /matches/{match_id}"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `DELETE /matches/{match_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}}]}}, "automationDetails": {"id": "repobility/19956"}, "properties": {"repository": "sodapopmatt/ASG_App", "repoUrl": "https://github.com/sodapopmatt/ASG_App", "branch": "main"}, "results": [{"ruleId": "scanner-a331d41482a4fabe", "level": "note", "message": {"text": "Possibly dead Python function: require_admin"}, "properties": {"repobilityId": "3c06db2e25566bf7", "scanner": "scanner-primary", "fingerprint": "a331d41482a4fabe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/auth.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b9b2b7c7e1921ecc", "level": "note", "message": {"text": "Possibly dead Python function: require_team_manager"}, "properties": {"repobilityId": "7b3d4bbce89d91e9", "scanner": "scanner-primary", "fingerprint": "b9b2b7c7e1921ecc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/auth.py:38"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-102f24f58b2e3e99", "level": "note", "message": {"text": "Possibly dead Python function: generate_single_elimination"}, "properties": {"repobilityId": "cb9ac2985d95bc72", "scanner": "scanner-primary", "fingerprint": "102f24f58b2e3e99", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/bracket_engine/single_elim.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-972ed52c0708f83f", "level": "note", "message": {"text": "Possibly dead Python function: generate_double_elimination"}, "properties": {"repobilityId": "ac1186de4e38c909", "scanner": "scanner-primary", "fingerprint": "972ed52c0708f83f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/bracket_engine/double_elim.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b9ac667d008825b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Teams.tsx:74"}, "properties": {"repobilityId": "3c77d6894d743172", "scanner": "scanner-primary", "fingerprint": "b9ac667d008825b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc019271e4da2ad9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Schedule.tsx:243"}, "properties": {"repobilityId": "21bd266d97a28067", "scanner": "scanner-primary", "fingerprint": "fc019271e4da2ad9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8d0124775a0dd222", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CompanyTeams.tsx:38"}, "properties": {"repobilityId": "0e3be4c49407afac", "scanner": "scanner-primary", "fingerprint": "8d0124775a0dd222", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28aaa7aa75d9b0cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Leaderboard.tsx:25"}, "properties": {"repobilityId": "c7e63d091d2a4c44", "scanner": "scanner-primary", "fingerprint": "28aaa7aa75d9b0cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82d601c384af6136", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Brackets.tsx:79"}, "properties": {"repobilityId": "848ff2213c7af4b0", "scanner": "scanner-primary", "fingerprint": "82d601c384af6136", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5817ffa4341720f2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/SportConfigPage.tsx:557"}, "properties": {"repobilityId": "2880fbfe1fa2d34c", "scanner": "scanner-primary", "fingerprint": "5817ffa4341720f2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8717531bd2456f2d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/TeamsPage.tsx:75"}, "properties": {"repobilityId": "92eda0968913b075", "scanner": "scanner-primary", "fingerprint": "8717531bd2456f2d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74ac59cb8c8fe693", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/manage/ManageCompanyTeams.tsx:109"}, "properties": {"repobilityId": "1695ad2e2e890f49", "scanner": "scanner-primary", "fingerprint": "74ac59cb8c8fe693", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8689aaee9a0098e1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in backend/app/main.py:20"}, "properties": {"repobilityId": "1a4affa5fa498eb7", "scanner": "scanner-primary", "fingerprint": "8689aaee9a0098e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/main.py"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"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-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": "5fbd050f0a6b35bc", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "c906df0ac04e924e", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "6f8012e858ad0af4", "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": "7dce241c824b8d78", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "a6abc3d08fa1c19f", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "4aac18195462b327", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "843a072a92ba365f", "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": "1767d8bacc99d127", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-b0b9c39ef94c83b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:11"}, "properties": {"repobilityId": "edfe3e9d5261182f", "scanner": "scanner-primary", "fingerprint": "b0b9c39ef94c83b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0a52af51b6368f76", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-93a88db26ea88162", "level": "warning", "message": {"text": "Frontend route `leaderboard` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "06f921700ef4bad8", "scanner": "scanner-primary", "fingerprint": "93a88db26ea88162", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4ec62197590b5bca", "level": "warning", "message": {"text": "Frontend route `schedule` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9d8b588fa41513d5", "scanner": "scanner-primary", "fingerprint": "4ec62197590b5bca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ad97719950c4cc1e", "level": "warning", "message": {"text": "Frontend route `brackets` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9b68eb2c35c56d21", "scanner": "scanner-primary", "fingerprint": "ad97719950c4cc1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-511208944508f103", "level": "warning", "message": {"text": "Frontend route `brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "0d30c77354013cde", "scanner": "scanner-primary", "fingerprint": "511208944508f103", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-605c7978199038f0", "level": "warning", "message": {"text": "Frontend route `teams` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "753c3277c35e780d", "scanner": "scanner-primary", "fingerprint": "605c7978199038f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-920e61888d0d5db4", "level": "warning", "message": {"text": "Frontend route `teams/:companyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "3b85da0869ceb382", "scanner": "scanner-primary", "fingerprint": "920e61888d0d5db4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d1fa83788a881055", "level": "warning", "message": {"text": "Frontend route `account` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7d6d652bf62c6878", "scanner": "scanner-primary", "fingerprint": "d1fa83788a881055", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3c0c4071248dd998", "level": "warning", "message": {"text": "Frontend route `manage` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "46663683b9d277cb", "scanner": "scanner-primary", "fingerprint": "3c0c4071248dd998", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b522832d4c480962", "level": "warning", "message": {"text": "Frontend route `manage/teams` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "aa0af6e6ad23614d", "scanner": "scanner-primary", "fingerprint": "b522832d4c480962", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ea90bda1eb6f8acc", "level": "warning", "message": {"text": "Frontend route `manage/teams/:companyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "3b1a107b06e11bdd", "scanner": "scanner-primary", "fingerprint": "ea90bda1eb6f8acc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0863df48912c3d09", "level": "warning", "message": {"text": "Frontend route `manage/brackets` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "397bd8219f52ce10", "scanner": "scanner-primary", "fingerprint": "0863df48912c3d09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cac39100ea5e9d4f", "level": "warning", "message": {"text": "Frontend route `manage/brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "77a39dc089db0eb9", "scanner": "scanner-primary", "fingerprint": "cac39100ea5e9d4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5678aebe40891890", "level": "warning", "message": {"text": "Frontend route `manage/results` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "575aeb68de7fab52", "scanner": "scanner-primary", "fingerprint": "5678aebe40891890", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d1e850b85b158261", "level": "warning", "message": {"text": "Frontend route `manage/results/brackets/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "45fb6d652249cab6", "scanner": "scanner-primary", "fingerprint": "d1e850b85b158261", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d09a490b0375b66f", "level": "warning", "message": {"text": "Frontend route `manage/results/heats/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "bddc8d9fc592f3c7", "scanner": "scanner-primary", "fingerprint": "d09a490b0375b66f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b85b76c08fcdb9bf", "level": "warning", "message": {"text": "Frontend route `manage/results/pools/:sportId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1ad135bd20d5cfd6", "scanner": "scanner-primary", "fingerprint": "b85b76c08fcdb9bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c8153701f0d987ba", "level": "warning", "message": {"text": "Frontend route `manage/scoring` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "83e93ae8e465aad0", "scanner": "scanner-primary", "fingerprint": "c8153701f0d987ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "7902f35cefe65b05", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fecbfd3ee338065d", "level": "note", "message": {"text": "Unused endpoint: GET /teams/"}, "properties": {"repobilityId": "cc0ad56a2d1ad0e8", "scanner": "scanner-primary", "fingerprint": "fecbfd3ee338065d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e6e45699f6fef78", "level": "note", "message": {"text": "Unused endpoint: GET /teams/{team_id}"}, "properties": {"repobilityId": "6a0c6b3a46990baa", "scanner": "scanner-primary", "fingerprint": "3e6e45699f6fef78", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72690365864706d9", "level": "note", "message": {"text": "Unused endpoint: POST /teams/"}, "properties": {"repobilityId": "c5e8926c69659f42", "scanner": "scanner-primary", "fingerprint": "72690365864706d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b3bfc889e1599ab", "level": "note", "message": {"text": "Unused endpoint: PATCH /teams/{team_id}"}, "properties": {"repobilityId": "c6f7bb3b4ab01505", "scanner": "scanner-primary", "fingerprint": "3b3bfc889e1599ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d11a051c24765206", "level": "note", "message": {"text": "Unused endpoint: DELETE /teams/{team_id}"}, "properties": {"repobilityId": "d667377afaa6f006", "scanner": "scanner-primary", "fingerprint": "d11a051c24765206", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8c15af96e2d2b618", "level": "note", "message": {"text": "Unused endpoint: GET /sports/"}, "properties": {"repobilityId": "6b42a3c551d5c234", "scanner": "scanner-primary", "fingerprint": "8c15af96e2d2b618", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d38a2ea1ce74761", "level": "note", "message": {"text": "Unused endpoint: GET /sports/{sport_id}"}, "properties": {"repobilityId": "a77347ff09d91fe7", "scanner": "scanner-primary", "fingerprint": "1d38a2ea1ce74761", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-19ecd1e5e6d1c6dc", "level": "note", "message": {"text": "Unused endpoint: POST /sports/"}, "properties": {"repobilityId": "2d56eb349040e841", "scanner": "scanner-primary", "fingerprint": "19ecd1e5e6d1c6dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81ae8a7f19f76b79", "level": "note", "message": {"text": "Unused endpoint: PATCH /sports/{sport_id}"}, "properties": {"repobilityId": "042cb78749b88657", "scanner": "scanner-primary", "fingerprint": "81ae8a7f19f76b79", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48cebaf524caee83", "level": "note", "message": {"text": "Unused endpoint: DELETE /sports/{sport_id}"}, "properties": {"repobilityId": "e06e3ed4f4517019", "scanner": "scanner-primary", "fingerprint": "48cebaf524caee83", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-40d5c644214696ba", "level": "note", "message": {"text": "Unused endpoint: DELETE /sports/{sport_id}/brackets"}, "properties": {"repobilityId": "db9db32bdc3d4c74", "scanner": "scanner-primary", "fingerprint": "40d5c644214696ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9f231a5fd8881c46", "level": "note", "message": {"text": "Unused endpoint: POST /sports/{sport_id}/generate-bracket"}, "properties": {"repobilityId": "d2fef23339d9755b", "scanner": "scanner-primary", "fingerprint": "9f231a5fd8881c46", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7675f907cda0992", "level": "note", "message": {"text": "Unused endpoint: GET /sports/{sport_id}/standings"}, "properties": {"repobilityId": "b0f4c7ec9c3b1f24", "scanner": "scanner-primary", "fingerprint": "c7675f907cda0992", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "3fbb8fd7a0ce2a64", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dadedd268c5d745c", "level": "note", "message": {"text": "Unused endpoint: POST /award-placement"}, "properties": {"repobilityId": "387472b3998c65b6", "scanner": "scanner-primary", "fingerprint": "dadedd268c5d745c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94a4c1224947340c", "level": "note", "message": {"text": "Unused endpoint: GET /leaderboard/"}, "properties": {"repobilityId": "47c48c2f51663fb0", "scanner": "scanner-primary", "fingerprint": "94a4c1224947340c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60436f029d329eaf", "level": "note", "message": {"text": "Unused endpoint: GET /roster-entries/"}, "properties": {"repobilityId": "5d8fb65ad9660bfa", "scanner": "scanner-primary", "fingerprint": "60436f029d329eaf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-030b819d138a25eb", "level": "note", "message": {"text": "Unused endpoint: POST /roster-entries/"}, "properties": {"repobilityId": "55099ab5e4e9317d", "scanner": "scanner-primary", "fingerprint": "030b819d138a25eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-06c48d480690d773", "level": "note", "message": {"text": "Unused endpoint: DELETE /roster-entries/{entry_id}"}, "properties": {"repobilityId": "46d7ce287eb590fd", "scanner": "scanner-primary", "fingerprint": "06c48d480690d773", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb965ee377fb1b8e", "level": "note", "message": {"text": "Unused endpoint: GET /locations/"}, "properties": {"repobilityId": "7b8e60aae07850a3", "scanner": "scanner-primary", "fingerprint": "cb965ee377fb1b8e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a0d449d283f8f160", "level": "note", "message": {"text": "Unused endpoint: POST /locations/"}, "properties": {"repobilityId": "d34e23db1afcfcf1", "scanner": "scanner-primary", "fingerprint": "a0d449d283f8f160", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f37a1a38f5d587e9", "level": "note", "message": {"text": "Unused endpoint: DELETE /locations/{location_id}"}, "properties": {"repobilityId": "a7f55c24eb7b4f45", "scanner": "scanner-primary", "fingerprint": "f37a1a38f5d587e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f1433d04a24f95ab", "level": "note", "message": {"text": "Unused endpoint: GET /companies/"}, "properties": {"repobilityId": "38762e68f412844c", "scanner": "scanner-primary", "fingerprint": "f1433d04a24f95ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0a5f0f911d476173", "level": "note", "message": {"text": "Unused endpoint: GET /companies/{company_id}"}, "properties": {"repobilityId": "c68cf3cc4c0aa1c9", "scanner": "scanner-primary", "fingerprint": "0a5f0f911d476173", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a985829b3f122b8", "level": "note", "message": {"text": "Unused endpoint: POST /companies/"}, "properties": {"repobilityId": "d5d7284f143f44ec", "scanner": "scanner-primary", "fingerprint": "8a985829b3f122b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9654464a0e81d943", "level": "note", "message": {"text": "Unused endpoint: PATCH /companies/{company_id}"}, "properties": {"repobilityId": "3fed5af0aeac49d9", "scanner": "scanner-primary", "fingerprint": "9654464a0e81d943", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-af37230049442c56", "level": "note", "message": {"text": "Unused endpoint: DELETE /companies/{company_id}"}, "properties": {"repobilityId": "c6eaa8e111d5a10b", "scanner": "scanner-primary", "fingerprint": "af37230049442c56", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d5be8c89ca50bdd", "level": "note", "message": {"text": "Unused endpoint: GET /brackets/"}, "properties": {"repobilityId": "cc406a626fe57134", "scanner": "scanner-primary", "fingerprint": "7d5be8c89ca50bdd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7c8967c6ef313c5", "level": "note", "message": {"text": "Unused endpoint: GET /brackets/{bracket_id}"}, "properties": {"repobilityId": "beb39e5efe41692a", "scanner": "scanner-primary", "fingerprint": "c7c8967c6ef313c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c97b4cd2ab40d368", "level": "note", "message": {"text": "Unused endpoint: POST /brackets/"}, "properties": {"repobilityId": "ccb5668276c2cf05", "scanner": "scanner-primary", "fingerprint": "c97b4cd2ab40d368", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-971f779015b78161", "level": "note", "message": {"text": "Unused endpoint: PATCH /brackets/{bracket_id}"}, "properties": {"repobilityId": "3eb3b63ffacbe80a", "scanner": "scanner-primary", "fingerprint": "971f779015b78161", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4f3ae1de5d0b521", "level": "note", "message": {"text": "Unused endpoint: DELETE /brackets/{bracket_id}"}, "properties": {"repobilityId": "5fa502e97c3b7c95", "scanner": "scanner-primary", "fingerprint": "c4f3ae1de5d0b521", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2135fb9bc1ec0068", "level": "note", "message": {"text": "Unused endpoint: GET /matches/"}, "properties": {"repobilityId": "cbd3bfdc6ff7c445", "scanner": "scanner-primary", "fingerprint": "2135fb9bc1ec0068", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41e39baf9b33f99a", "level": "note", "message": {"text": "Unused endpoint: GET /matches/{match_id}"}, "properties": {"repobilityId": "fab87dc8b407d2ed", "scanner": "scanner-primary", "fingerprint": "41e39baf9b33f99a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-909e9a63b2e6011e", "level": "note", "message": {"text": "Unused endpoint: POST /matches/"}, "properties": {"repobilityId": "bd9f25e84366f0b5", "scanner": "scanner-primary", "fingerprint": "909e9a63b2e6011e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-025e8f4dc6810400", "level": "note", "message": {"text": "Unused endpoint: POST /matches/{match_id}/start"}, "properties": {"repobilityId": "0a128686b4fac029", "scanner": "scanner-primary", "fingerprint": "025e8f4dc6810400", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c5af6899da918f4", "level": "note", "message": {"text": "Unused endpoint: POST /matches/{match_id}/result"}, "properties": {"repobilityId": "674c4f33b0190034", "scanner": "scanner-primary", "fingerprint": "0c5af6899da918f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-265b2dff9ab337e1", "level": "note", "message": {"text": "Unused endpoint: POST /matches/{match_id}/forfeit"}, "properties": {"repobilityId": "996c348cf8ec075b", "scanner": "scanner-primary", "fingerprint": "265b2dff9ab337e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56ae78bb5c5de229", "level": "note", "message": {"text": "Unused endpoint: POST /matches/{match_id}/double-forfeit"}, "properties": {"repobilityId": "1c40d794b720c690", "scanner": "scanner-primary", "fingerprint": "56ae78bb5c5de229", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b634f8d3805c854", "level": "note", "message": {"text": "Unused endpoint: POST /matches/{match_id}/heat-result"}, "properties": {"repobilityId": "9b259b2be63064c1", "scanner": "scanner-primary", "fingerprint": "1b634f8d3805c854", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ba41d54e1793943f", "level": "note", "message": {"text": "Unused endpoint: PATCH /matches/{match_id}"}, "properties": {"repobilityId": "9c0be6a01c8bed8c", "scanner": "scanner-primary", "fingerprint": "ba41d54e1793943f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0e7a2226f54802d", "level": "note", "message": {"text": "Unused endpoint: DELETE /matches/{match_id}"}, "properties": {"repobilityId": "b20a9f4592eca192", "scanner": "scanner-primary", "fingerprint": "f0e7a2226f54802d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}