{"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-a5afb46e25b4b9c5", "name": "Possibly dead Python function: format_event_row", "shortDescription": {"text": "Possibly dead Python function: format_event_row"}, "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-9636dc5462522dba", "name": "Possibly dead Python function: format_event_details", "shortDescription": {"text": "Possibly dead Python function: format_event_details"}, "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-f5a19a73e0cde2d5", "name": "Possibly dead Python function: format_analysis_report", "shortDescription": {"text": "Possibly dead Python function: format_analysis_report"}, "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-8d5b9a1a0f511741", "name": "Possibly dead Python function: is_eligible_for_catch", "shortDescription": {"text": "Possibly dead Python function: is_eligible_for_catch"}, "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-da0df536520f312e", "name": "Possibly dead Python function: is_in_queue", "shortDescription": {"text": "Possibly dead Python function: is_in_queue"}, "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-d1fd7974e53bd96a", "name": "Possibly dead Python function: apply_ruleset", "shortDescription": {"text": "Possibly dead Python function: apply_ruleset"}, "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-6c69abfc281523ae", "name": "Possibly dead Python function: enforced_sections", "shortDescription": {"text": "Possibly dead Python function: enforced_sections"}, "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-cf96ec0bab1bc9c2", "name": "Possibly dead Python function: announced_or_absent_sections", "shortDescription": {"text": "Possibly dead Python function: announced_or_absent_sections"}, "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-b1bdb1e5d4a6303c", "name": "Possibly dead Python function: matchup_preview", "shortDescription": {"text": "Possibly dead Python function: matchup_preview"}, "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-d2e0c655a4d7e096", "name": "Icon-only button without accessible name \u2014 frontend/src/components/PlayerDetailModal.tsx:70", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/PlayerDetailModal.tsx:70"}, "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-ce504daf1c2870d6", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/naive_playtest_runner.spec.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/naive_playtest_runner.spec.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac2c762747da96b4", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/v12_ai_program_managers.spec.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/v12_ai_program_managers.spec.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51e639dba9d3ed33", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/prototypes/claude-design/ui_kits/dodger-web-app/test-ui.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/prototypes/claude-design/ui_kits/dodger-web-app/test-ui.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-057bd6f32e2cadd6", "name": "Very large file: frontend/src/components/match-week/command-center/PreSimDashboard.tsx (1404 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/match-week/command-center/PreSimDashboard.tsx (1404 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-0671e642e40e7171", "name": "Very large file: tests/test_dispersed_helpers.py (1922 lines)", "shortDescription": {"text": "Very large file: tests/test_dispersed_helpers.py (1922 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-73e3f96c6f31e29d", "name": "Very large file: src/dodgeball_sim/offseason_ceremony.py (1630 lines)", "shortDescription": {"text": "Very large file: src/dodgeball_sim/offseason_ceremony.py (1630 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-6ff3a0c8211422ae", "name": "Very large file: src/dodgeball_sim/dynasty_cli.py (1986 lines)", "shortDescription": {"text": "Very large file: src/dodgeball_sim/dynasty_cli.py (1986 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-baea48cf6f8f50c9", "name": "Very large file: src/dodgeball_sim/persistence.py (3902 lines)", "shortDescription": {"text": "Very large file: src/dodgeball_sim/persistence.py (3902 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-7a844216aff12c91", "name": "Very large file: src/dodgeball_sim/official_engine.py (1425 lines)", "shortDescription": {"text": "Very large file: src/dodgeball_sim/official_engine.py (1425 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-ec61978078f921de", "name": "Very large file: src/dodgeball_sim/use_cases.py (1791 lines)", "shortDescription": {"text": "Very large file: src/dodgeball_sim/use_cases.py (1791 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-afa4d33480281133", "name": "Very large file: src/dodgeball_sim/server.py (1590 lines)", "shortDescription": {"text": "Very large file: src/dodgeball_sim/server.py (1590 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 234 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 16 placeholder/mock markers across 11 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-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. 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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-363b977ed36c8ddb", "name": "Commented-code block (5 lines) in frontend/src/App.tsx:286", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/App.tsx:286"}, "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-47d72de8dca97904", "name": "Commented-code block (6 lines) in frontend/src/types.ts:978", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/types.ts:978"}, "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-8163526b341b39f8", "name": "Commented-code block (7 lines) in frontend/src/api/client.ts:26", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/api/client.ts:26"}, "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-da5ecae4030c1bf6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:133", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:133"}, "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-a3edd7bdd92d481b", "name": "Commented-code block (5 lines) in frontend/src/components/LeagueContext.tsx:36", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/LeagueContext.tsx: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-2fec17ea8d8dc76b", "name": "Commented-code block (6 lines) in frontend/src/components/DynastyOffice.tsx:230", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/DynastyOffice.tsx:230"}, "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-6c7506fdbe0c3086", "name": "Commented-code block (6 lines) in frontend/src/components/Roster.tsx:365", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/Roster.tsx:365"}, "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-9671b41167898603", "name": "Commented-code block (6 lines) in frontend/src/components/MatchReplay.tsx:294", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/MatchReplay.tsx:294"}, "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-454060f0b27fe6b9", "name": "Commented-code block (13 lines) in frontend/src/components/SaveMenu.tsx:62", "shortDescription": {"text": "Commented-code block (13 lines) in frontend/src/components/SaveMenu.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a93f68f48752c77e", "name": "Commented-code block (5 lines) in frontend/src/components/ui.tsx:435", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ui.tsx:435"}, "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-b1da2c5cf87ffb2f", "name": "Commented-code block (5 lines) in frontend/src/components/match-week/matchResult.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/matchResult.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d17131f6c123329c", "name": "Commented-code block (6 lines) in frontend/src/components/match-week/aftermath/ComebackCard.tsx:13", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/match-week/aftermath/ComebackCard.tsx:13"}, "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-b155a7bb5f72e821", "name": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/PolicyEditor.tsx:32", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/PolicyEditor.tsx:32"}, "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-8f0edf0d97584645", "name": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/PreSimDashboard.tsx:249", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/PreSimDashboard.tsx:249"}, "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-d3c5fdd041c11b3c", "name": "Commented-code block (6 lines) in frontend/src/components/match-week/command-center/presimNarrative.ts:112", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/match-week/command-center/presimNarrative.ts:112"}, "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-81e089be51786d36", "name": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/SeasonPreview.tsx:57", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/SeasonPreview.tsx: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-43aa312380a4475c", "name": "Commented-code block (9 lines) in frontend/src/components/ceremonies/Ceremonies.tsx:663", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/components/ceremonies/Ceremonies.tsx:663"}, "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-33723cf1b20f6b8d", "name": "Commented-code block (9 lines) in frontend/src/components/ceremonies/CeremonyShell.tsx:4", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/components/ceremonies/CeremonyShell.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31d2c9590a31eea4", "name": "Commented-code block (5 lines) in frontend/src/components/new-game/StaffHiringStep.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/new-game/StaffHiringStep.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1a3f86373f97f82", "name": "Commented-code block (6 lines) in frontend/src/legibility/archetypeMap.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/legibility/archetypeMap.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1a34a27292d6c27", "name": "Commented-code block (8 lines) in frontend/src/legibility/rulesetNames.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/legibility/rulesetNames.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1914885be56f0fb5", "name": "Commented-code block (10 lines) in frontend/src/legibility/terms.ts:120", "shortDescription": {"text": "Commented-code block (10 lines) in frontend/src/legibility/terms.ts: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-135952a6f1cf8eb3", "name": "Commented-code block (9 lines) in frontend/src/legibility/CeilingGrade.tsx:3", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/legibility/CeilingGrade.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-559619dbc3add543", "name": "Legacy-named symbol `test_inconclusive_draw_no_lever_is_honest_no_lever_not_loss_copy` in tests/test_manager_lesson.py:1", "shortDescription": {"text": "Legacy-named symbol `test_inconclusive_draw_no_lever_is_honest_no_lever_not_loss_copy` in tests/test_manager_lesson.py:102"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18764488e78b0238", "name": "Commented-code block (5 lines) in tests/test_history_server.py:142", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_history_server.py:142"}, "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-b3e927d9e3ecc66d", "name": "Commented-code block (9 lines) in tests/test_contested_offseason.py:40", "shortDescription": {"text": "Commented-code block (9 lines) in tests/test_contested_offseason.py:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19560fc0e9a89ddf", "name": "Commented-code block (7 lines) in tests/test_v6_player_identity.py:41", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_v6_player_identity.py:41"}, "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-218aed8b7015573a", "name": "Legacy-named symbol `test_headline_without_moments_falls_back_to_margin_copy` in tests/test_voice_verdict_priority.py:44", "shortDescription": {"text": "Legacy-named symbol `test_headline_without_moments_falls_back_to_margin_copy` in tests/test_voice_verdict_priority.py:44"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1eb595dd456dcfba", "name": "Commented-code block (6 lines) in tests/test_archetype_champion_parity.py:137", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_archetype_champion_parity.py:137"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25483ba135624af1", "name": "Commented-code block (5 lines) in tests/test_highlights_api.py:16", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_highlights_api.py:16"}, "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-c1f878e3f3dad9df", "name": "Legacy-named symbol `allow_legacy` in tests/test_server_save_boundary.py:210", "shortDescription": {"text": "Legacy-named symbol `allow_legacy` in tests/test_server_save_boundary.py:210"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c8d54b06e61c784", "name": "Commented-code block (6 lines) in tests/test_ai_intent.py:44", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_ai_intent.py:44"}, "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-ed78ccc5fd91aca7", "name": "Legacy-named symbol `dev_legacy` in tests/test_development.py:134", "shortDescription": {"text": "Legacy-named symbol `dev_legacy` in tests/test_development.py:134"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca59c99a115d09f1", "name": "Commented-code block (5 lines) in tests/test_official_conformance_matrix.py:161", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_official_conformance_matrix.py:161"}, "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-74a4f05d5a2a1343", "name": "Commented-code block (7 lines) in tests/test_recruiting_actions.py:73", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_recruiting_actions.py:73"}, "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-9fb6ae42a4a21841", "name": "Legacy-named symbol `visible_copy` in tests/test_command_center.py:152", "shortDescription": {"text": "Legacy-named symbol `visible_copy` in tests/test_command_center.py:152"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f241e98f3b6a030", "name": "Commented-code block (5 lines) in tests/test_official_engine_balance.py:66", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_official_engine_balance.py:66"}, "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-27fcfaf2647192c5", "name": "Legacy-named symbol `p_legacy` in tests/test_dynasty_progression_health.py:118", "shortDescription": {"text": "Legacy-named symbol `p_legacy` in tests/test_dynasty_progression_health.py:118"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a36b439eb50552c", "name": "Commented-code block (5 lines) in tests/test_dynasty_progression_health.py:451", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_dynasty_progression_health.py:451"}, "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-d373902fd14a6899", "name": "Legacy-named symbol `_migrate_v1` in tests/test_persistence.py:13", "shortDescription": {"text": "Legacy-named symbol `_migrate_v1` in tests/test_persistence.py:13"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c9a396d063ba52c", "name": "Commented-code block (5 lines) in tests/test_editor_lineup_reaches_sim.py:53", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_editor_lineup_reaches_sim.py: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-da6ea2f81c7dd8e5", "name": "Legacy-named symbol `visible_copy` in tests/test_server.py:321", "shortDescription": {"text": "Legacy-named symbol `visible_copy` in tests/test_server.py:321"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a87c091a1645fff", "name": "Commented-code block (5 lines) in tests/test_server.py:173", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_server.py:173"}, "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-3935a768077b7d71", "name": "Legacy-named symbol `test_policy_line_uses_default_centroid_copy` in tests/test_voice_pregame.py:7", "shortDescription": {"text": "Legacy-named symbol `test_policy_line_uses_default_centroid_copy` in tests/test_voice_pregame.py:7"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e7398d965f14ff1", "name": "Legacy-named symbol `dashboard_copy` in tests/test_aftermath_payload.py:35", "shortDescription": {"text": "Legacy-named symbol `dashboard_copy` in tests/test_aftermath_payload.py:35"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-478edb913ea0a285", "name": "Legacy-named symbol `_migrate_v1` in tests/test_save_meta_nonmutating.py:26", "shortDescription": {"text": "Legacy-named symbol `_migrate_v1` in tests/test_save_meta_nonmutating.py:26"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2bdcd43b58d5726", "name": "Commented-code block (6 lines) in tests/test_tier_1_integration.py:97", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_tier_1_integration.py:97"}, "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-1e1c2a9b40d11c55", "name": "Legacy-named symbol `test_voice_register_endpoint_returns_tier1_copy` in tests/test_policy_api.py:107", "shortDescription": {"text": "Legacy-named symbol `test_voice_register_endpoint_returns_tier1_copy` in tests/test_policy_api.py:107"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d3e41d68a117a1a", "name": "Legacy-named symbol `_migrate_v1` in tests/test_official_backward_compat.py:15", "shortDescription": {"text": "Legacy-named symbol `_migrate_v1` in tests/test_official_backward_compat.py:15"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3242e6aa2ca0c13f", "name": "Commented-code block (5 lines) in tests/test_scout_reveal.py:396", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_scout_reveal.py:396"}, "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-eaca58e595c37b79", "name": "Legacy-named symbol `p_legacy` in tests/test_first_hour_growth_truth.py:139", "shortDescription": {"text": "Legacy-named symbol `p_legacy` in tests/test_first_hour_growth_truth.py:139"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0d9e8ba80bd1429", "name": "Commented-code block (10 lines) in tests/test_week_briefing.py:276", "shortDescription": {"text": "Commented-code block (10 lines) in tests/test_week_briefing.py:276"}, "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-46ad89454355c2d5", "name": "Legacy-named symbol `test_has_unresolved_token_allows_normal_sports_copy` in tests/test_copy_quality.py:12", "shortDescription": {"text": "Legacy-named symbol `test_has_unresolved_token_allows_normal_sports_copy` in tests/test_copy_quality.py:12"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5b1befd1501f7ac", "name": "Commented-code block (5 lines) in tests/test_founding_roster_continuity.py:35", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_founding_roster_continuity.py:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dafd608de36f7ed", "name": "Commented-code block (5 lines) in tests/e2e/playoff-record-label.spec.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/playoff-record-label.spec.ts:21"}, "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-fe0d71349b836816", "name": "Commented-code block (5 lines) in tests/e2e/v15-lineup-editor.spec.ts:96", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/v15-lineup-editor.spec.ts: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-4bbe8bb763cffbff", "name": "Commented-code block (6 lines) in tests/e2e/v13_broadcast_layer.spec.ts:85", "shortDescription": {"text": "Commented-code block (6 lines) in tests/e2e/v13_broadcast_layer.spec.ts: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-71688d624badaa81", "name": "Commented-code block (5 lines) in src/dodgeball_sim/official_adapter.py:71", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/official_adapter.py:71"}, "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-43b2a76fd8f870a3", "name": "Commented-code block (5 lines) in src/dodgeball_sim/replay_proof.py:683", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/replay_proof.py:683"}, "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-ae54a7c6a3e18838", "name": "Commented-code block (6 lines) in src/dodgeball_sim/franchise.py:191", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/franchise.py:191"}, "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-f06d47124038e531", "name": "Commented-code block (13 lines) in src/dodgeball_sim/development.py:12", "shortDescription": {"text": "Commented-code block (13 lines) in src/dodgeball_sim/development.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92d464ab7ba61ccb", "name": "Commented-code block (7 lines) in src/dodgeball_sim/voice_aftermath.py:155", "shortDescription": {"text": "Commented-code block (7 lines) in src/dodgeball_sim/voice_aftermath.py:155"}, "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-a14219d69b2ca93d", "name": "Commented-code block (6 lines) in src/dodgeball_sim/match_explanation.py:37", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/match_explanation.py:37"}, "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-2b4874c198673072", "name": "Commented-code block (19 lines) in src/dodgeball_sim/official_tactics.py:49", "shortDescription": {"text": "Commented-code block (19 lines) in src/dodgeball_sim/official_tactics.py:49"}, "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-8391e2bbb3fca9ed", "name": "Commented-code block (5 lines) in src/dodgeball_sim/match_orchestration.py:294", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/match_orchestration.py:294"}, "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-54dcf50dd25759e5", "name": "Commented-code block (12 lines) in src/dodgeball_sim/career_setup.py:185", "shortDescription": {"text": "Commented-code block (12 lines) in src/dodgeball_sim/career_setup.py:185"}, "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-dc16f5e842c8f701", "name": "Commented-code block (6 lines) in src/dodgeball_sim/offseason_beats.py:208", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/offseason_beats.py:208"}, "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-3dd4621cd5c4cb35", "name": "Commented-code block (7 lines) in src/dodgeball_sim/official_translator.py:56", "shortDescription": {"text": "Commented-code block (7 lines) in src/dodgeball_sim/official_translator.py:56"}, "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-912873d6d25fd2d3", "name": "Commented-code block (5 lines) in src/dodgeball_sim/lineup.py:48", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/lineup.py:48"}, "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-c814bb3f058e7550", "name": "Commented-code block (9 lines) in src/dodgeball_sim/config.py:97", "shortDescription": {"text": "Commented-code block (9 lines) in src/dodgeball_sim/config.py:97"}, "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-7b0a3eb3b9256653", "name": "Commented-code block (5 lines) in src/dodgeball_sim/offseason_ceremony.py:647", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/offseason_ceremony.py:647"}, "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-7110399118d71805", "name": "Commented-code block (8 lines) in src/dodgeball_sim/web_status_service.py:134", "shortDescription": {"text": "Commented-code block (8 lines) in src/dodgeball_sim/web_status_service.py:134"}, "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-a6723159f93f860d", "name": "Network/subprocess call without timeout or try/except \u2014 src/dodgeball_sim/web_cli.py:164", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/dodgeball_sim/web_cli.py:164"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2fb1a3a23f766153", "name": "Commented-code block (5 lines) in src/dodgeball_sim/records.py:67", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/records.py:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7c3878be21908f5", "name": "Commented-code block (6 lines) in src/dodgeball_sim/rec_adapter.py:241", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/rec_adapter.py: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-729d505b5623d400", "name": "Commented-code block (16 lines) in src/dodgeball_sim/dynasty_office.py:249", "shortDescription": {"text": "Commented-code block (16 lines) in src/dodgeball_sim/dynasty_office.py:249"}, "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-4fc1b18f706e61f6", "name": "Commented-code block (5 lines) in src/dodgeball_sim/season.py:99", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/season.py:99"}, "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-74a3d3cff724da37", "name": "Commented-code block (5 lines) in src/dodgeball_sim/offseason_presentation.py:38", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/offseason_presentation.py:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-007cfd7d194f0302", "name": "Commented-code block (13 lines) in src/dodgeball_sim/official_resolution.py:41", "shortDescription": {"text": "Commented-code block (13 lines) in src/dodgeball_sim/official_resolution.py:41"}, "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-acd87b9ca2933d0c", "name": "Legacy-named symbol `_migrate_v1` in src/dodgeball_sim/persistence.py:236", "shortDescription": {"text": "Legacy-named symbol `_migrate_v1` in src/dodgeball_sim/persistence.py:236"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aee719b5fdb972d3", "name": "Commented-code block (5 lines) in src/dodgeball_sim/persistence.py:1864", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/persistence.py:1864"}, "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-1abc1e17734ee5a9", "name": "Commented-code block (5 lines) in src/dodgeball_sim/aftermath_context.py:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/aftermath_context.py:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9249d404e91eeb78", "name": "Commented-code block (5 lines) in src/dodgeball_sim/manager_lesson.py:57", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/manager_lesson.py: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-9d83234cb6b8aba1", "name": "Commented-code block (5 lines) in src/dodgeball_sim/official_engine.py:441", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/official_engine.py:441"}, "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-5439fb69da7577bd", "name": "Commented-code block (6 lines) in src/dodgeball_sim/official_conformance_ledger.py:110", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/official_conformance_ledger.py:110"}, "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-3df450dcf5724cc9", "name": "Commented-code block (7 lines) in src/dodgeball_sim/offseason_service.py:134", "shortDescription": {"text": "Commented-code block (7 lines) in src/dodgeball_sim/offseason_service.py:134"}, "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-35728da1bacaa76d", "name": "Commented-code block (5 lines) in src/dodgeball_sim/use_cases.py:536", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/use_cases.py:536"}, "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-c7f986bad8f55bb2", "name": "Commented-code block (5 lines) in src/dodgeball_sim/models.py:281", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/models.py:281"}, "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-d6faf1363cd3005b", "name": "Commented-code block (5 lines) in src/dodgeball_sim/ai_orders.py:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/ai_orders.py:51"}, "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-973510ac3dabafdf", "name": "Commented-code block (5 lines) in src/dodgeball_sim/matchup_details.py:107", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/matchup_details.py:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bb39a7972f9dbf8", "name": "Commented-code block (10 lines) in src/dodgeball_sim/playoffs.py:100", "shortDescription": {"text": "Commented-code block (10 lines) in src/dodgeball_sim/playoffs.py:100"}, "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-7166122540f4ce2b", "name": "Commented-code block (8 lines) in src/dodgeball_sim/economy.py:37", "shortDescription": {"text": "Commented-code block (8 lines) in src/dodgeball_sim/economy.py:37"}, "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-b25a34d27a47ee55", "name": "Commented-code block (6 lines) in src/dodgeball_sim/recruitment.py:194", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/recruitment.py:194"}, "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-6259c1357b9c1bf8", "name": "Legacy-named symbol `allow_legacy` in src/dodgeball_sim/server.py:239", "shortDescription": {"text": "Legacy-named symbol `allow_legacy` in src/dodgeball_sim/server.py:239"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed7c9680020d025e", "name": "Commented-code block (9 lines) in src/dodgeball_sim/server.py:161", "shortDescription": {"text": "Commented-code block (9 lines) in src/dodgeball_sim/server.py:161"}, "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-059da752387df9ea", "name": "Commented-code block (5 lines) in src/dodgeball_sim/recruiting_office.py:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/recruiting_office.py: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-6ad1c0316c6587fe", "name": "Commented-code block (5 lines) in src/dodgeball_sim/no_blocking.py:98", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/no_blocking.py:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6945b54910e75275", "name": "Commented-code block (6 lines) in src/dodgeball_sim/world.py:46", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/world.py:46"}, "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-88cf81b2573e0e46", "name": "Legacy-named symbol `sanitize_dashboard_copy` in src/dodgeball_sim/command_week_service.py:395", "shortDescription": {"text": "Legacy-named symbol `sanitize_dashboard_copy` in src/dodgeball_sim/command_week_service.py:395"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7378d9c4aedbcc8", "name": "Commented-code block (5 lines) in src/dodgeball_sim/command_week_service.py:140", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/command_week_service.py: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-63785106aeb35cc1", "name": "Commented-code block (5 lines) in src/dodgeball_sim/stats.py:117", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/stats.py:117"}, "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-17d73209b9087ba3", "name": "Commented-code block (10 lines) in src/dodgeball_sim/game_loop.py:33", "shortDescription": {"text": "Commented-code block (10 lines) in src/dodgeball_sim/game_loop.py: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-a91e5881aa44b5df", "name": "Commented-code block (6 lines) in src/dodgeball_sim/voice_verdict.py:109", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/voice_verdict.py:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ca0745fa023d4eb", "name": "Commented-code block (6 lines) in src/dodgeball_sim/week_briefing.py:54", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/week_briefing.py:54"}, "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-10456ad30686413e", "name": "Commented-code block (10 lines) in src/dodgeball_sim/command_center.py:28", "shortDescription": {"text": "Commented-code block (10 lines) in src/dodgeball_sim/command_center.py:28"}, "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-c93f9121eaff4a65", "name": "Commented-code block (5 lines) in src/dodgeball_sim/playoff_resolution.py:92", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/playoff_resolution.py:92"}, "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-40cff2abbf57dd23", "name": "Commented-code block (6 lines) in src/dodgeball_sim/rec_engine.py:526", "shortDescription": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/rec_engine.py:526"}, "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-fcf9e298f7f32148", "name": "Legacy-named symbol `allow_legacy` in src/dodgeball_sim/save_service.py:20", "shortDescription": {"text": "Legacy-named symbol `allow_legacy` in src/dodgeball_sim/save_service.py:20"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-525ffb984467c2b5", "name": "Commented-code block (5 lines) in src/dodgeball_sim/save_service.py:226", "shortDescription": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/save_service.py:226"}, "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-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:\ntools/v23_pyramid_smoke.py:walk_offseason, tools/climb_resistance_probe.py:walk_offseason\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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/dodgeball_sim/official_adapter.py:run_generic, src/dodgeball_sim/rec_adapter.py:run, src/dodgeball_sim/rec_adapter.py:run_generic\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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/dodgeball_sim/official_engine.py:run_scripted_game, src/dodgeball_sim/official_engine.py:run_autonomous_game, src/dodgeball_sim/official_engine.py:run_autonomous_match, src/dodgeball_sim/official_engine.py:run\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-a2eb29af939b4745", "name": "FastAPI POST `post_roster_release` without auth dependency \u2014 src/dodgeball_sim/server.py:652", "shortDescription": {"text": "FastAPI POST `post_roster_release` without auth dependency \u2014 src/dodgeball_sim/server.py:652"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b323abaf2524fc29", "name": "FastAPI POST `save_command_center_plan` without auth dependency \u2014 src/dodgeball_sim/server.py:719", "shortDescription": {"text": "FastAPI POST `save_command_center_plan` without auth dependency \u2014 src/dodgeball_sim/server.py:719"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f703fd2cfcd3942c", "name": "FastAPI POST `scout_opponent` without auth dependency \u2014 src/dodgeball_sim/server.py:727", "shortDescription": {"text": "FastAPI POST `scout_opponent` without auth dependency \u2014 src/dodgeball_sim/server.py:727"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ae3a419e2bcf6ee", "name": "FastAPI POST `confirm_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:736", "shortDescription": {"text": "FastAPI POST `confirm_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:736"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5cdc1f77da13c567", "name": "FastAPI POST `skip_season_preview` without auth dependency \u2014 src/dodgeball_sim/server.py:745", "shortDescription": {"text": "FastAPI POST `skip_season_preview` without auth dependency \u2014 src/dodgeball_sim/server.py:745"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25dd02e7bc5d7523", "name": "FastAPI POST `create_recruiting_promise` without auth dependency \u2014 src/dodgeball_sim/server.py:771", "shortDescription": {"text": "FastAPI POST `create_recruiting_promise` without auth dependency \u2014 src/dodgeball_sim/server.py:771"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff350aebdb5c3046", "name": "FastAPI POST `hire_dynasty_staff` without auth dependency \u2014 src/dodgeball_sim/server.py:781", "shortDescription": {"text": "FastAPI POST `hire_dynasty_staff` without auth dependency \u2014 src/dodgeball_sim/server.py:781"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-781059bd02579f4b", "name": "FastAPI POST `update_tactics` without auth dependency \u2014 src/dodgeball_sim/server.py:791", "shortDescription": {"text": "FastAPI POST `update_tactics` without auth dependency \u2014 src/dodgeball_sim/server.py:791"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a577121ccb0ef8a", "name": "FastAPI POST `update_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:801", "shortDescription": {"text": "FastAPI POST `update_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:801"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-370b2dd4c7788414", "name": "FastAPI POST `set_lineup_auto_reorder` without auth dependency \u2014 src/dodgeball_sim/server.py:824", "shortDescription": {"text": "FastAPI POST `set_lineup_auto_reorder` without auth dependency \u2014 src/dodgeball_sim/server.py:824"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f7f6b4019410bb7", "name": "FastAPI POST `auto_assign_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:841", "shortDescription": {"text": "FastAPI POST `auto_assign_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:841"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-756a5fe5e9da8d65", "name": "FastAPI POST `simulate_command_center_week` without auth dependency \u2014 src/dodgeball_sim/server.py:855", "shortDescription": {"text": "FastAPI POST `simulate_command_center_week` without auth dependency \u2014 src/dodgeball_sim/server.py:855"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e09867d8aaac33a0", "name": "FastAPI POST `fast_forward_command_center` without auth dependency \u2014 src/dodgeball_sim/server.py:873", "shortDescription": {"text": "FastAPI POST `fast_forward_command_center` without auth dependency \u2014 src/dodgeball_sim/server.py:873"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f17bb75dbb4a27e", "name": "FastAPI POST `simulate_command` without auth dependency \u2014 src/dodgeball_sim/server.py:900", "shortDescription": {"text": "FastAPI POST `simulate_command` without auth dependency \u2014 src/dodgeball_sim/server.py:900"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86b7f2041f9b52aa", "name": "FastAPI POST `simulate_week` without auth dependency \u2014 src/dodgeball_sim/server.py:908", "shortDescription": {"text": "FastAPI POST `simulate_week` without auth dependency \u2014 src/dodgeball_sim/server.py:908"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6cb6a9f6a1b2bee", "name": "FastAPI POST `recruiting_scout` without auth dependency \u2014 src/dodgeball_sim/server.py:959", "shortDescription": {"text": "FastAPI POST `recruiting_scout` without auth dependency \u2014 src/dodgeball_sim/server.py:959"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05753f283ac514a9", "name": "FastAPI POST `recruiting_contact` without auth dependency \u2014 src/dodgeball_sim/server.py:964", "shortDescription": {"text": "FastAPI POST `recruiting_contact` without auth dependency \u2014 src/dodgeball_sim/server.py:964"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0ec40488c1d74ec", "name": "FastAPI POST `recruiting_visit` without auth dependency \u2014 src/dodgeball_sim/server.py:969", "shortDescription": {"text": "FastAPI POST `recruiting_visit` without auth dependency \u2014 src/dodgeball_sim/server.py:969"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c451c42004e3ca3d", "name": "FastAPI POST `recruiting_pitch_angle` without auth dependency \u2014 src/dodgeball_sim/server.py:974", "shortDescription": {"text": "FastAPI POST `recruiting_pitch_angle` without auth dependency \u2014 src/dodgeball_sim/server.py:974"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e10ae6ebcba9a38", "name": "FastAPI POST `recruiting_sign` without auth dependency \u2014 src/dodgeball_sim/server.py:985", "shortDescription": {"text": "FastAPI POST `recruiting_sign` without auth dependency \u2014 src/dodgeball_sim/server.py:985"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-523507c2f82e7332", "name": "FastAPI POST `acknowledge_match_report` without auth dependency \u2014 src/dodgeball_sim/server.py:1019", "shortDescription": {"text": "FastAPI POST `acknowledge_match_report` without auth dependency \u2014 src/dodgeball_sim/server.py:1019"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03f302e5cd68f5fe", "name": "FastAPI POST `api_new_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1052", "shortDescription": {"text": "FastAPI POST `api_new_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1052"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ca3244c697ee858", "name": "FastAPI POST `api_build_from_scratch` without auth dependency \u2014 src/dodgeball_sim/server.py:1083", "shortDescription": {"text": "FastAPI POST `api_build_from_scratch` without auth dependency \u2014 src/dodgeball_sim/server.py:1083"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-baff9a58de55ab0b", "name": "FastAPI POST `api_load_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1098", "shortDescription": {"text": "FastAPI POST `api_load_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1098"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-195ac1fe68b3dcb9", "name": "FastAPI POST `api_delete_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1121", "shortDescription": {"text": "FastAPI POST `api_delete_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1121"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4cf6e6854d89393e", "name": "FastAPI POST `api_unload_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1133", "shortDescription": {"text": "FastAPI POST `api_unload_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1133"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d826c987dfc4f668", "name": "FastAPI POST `advance_offseason_beat` without auth dependency \u2014 src/dodgeball_sim/server.py:1163", "shortDescription": {"text": "FastAPI POST `advance_offseason_beat` without auth dependency \u2014 src/dodgeball_sim/server.py:1163"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efb1908a193ad892", "name": "FastAPI POST `offseason_recruit` without auth dependency \u2014 src/dodgeball_sim/server.py:1171", "shortDescription": {"text": "FastAPI POST `offseason_recruit` without auth dependency \u2014 src/dodgeball_sim/server.py:1171"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0240e80618767190", "name": "FastAPI POST `offseason_begin_season` without auth dependency \u2014 src/dodgeball_sim/server.py:1183", "shortDescription": {"text": "FastAPI POST `offseason_begin_season` without auth dependency \u2014 src/dodgeball_sim/server.py:1183"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-963710f42a2c8219", "name": "Unused endpoint: GET /api/status", "shortDescription": {"text": "Unused endpoint: GET /api/status"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98dcf0d198406d57", "name": "Unused endpoint: GET /api/roster", "shortDescription": {"text": "Unused endpoint: GET /api/roster"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/roster` 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-f74aa59fb8f37964", "name": "Unused endpoint: POST /api/roster/release", "shortDescription": {"text": "Unused endpoint: POST /api/roster/release"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/roster/release` 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-09aacbc9c190f7b7", "name": "Unused endpoint: GET /api/tactics", "shortDescription": {"text": "Unused endpoint: GET /api/tactics"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/tactics` 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-71fe2b6c2f43107b", "name": "Unused endpoint: GET /api/standings", "shortDescription": {"text": "Unused endpoint: GET /api/standings"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/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-90e88e24f9c69554", "name": "Unused endpoint: GET /api/schedule", "shortDescription": {"text": "Unused endpoint: GET /api/schedule"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/schedule` 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-325fcf0863bc5a97", "name": "Unused endpoint: GET /api/playoffs/bracket", "shortDescription": {"text": "Unused endpoint: GET /api/playoffs/bracket"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/playoffs/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-778f45a124dbd2e7", "name": "Unused endpoint: GET /api/news", "shortDescription": {"text": "Unused endpoint: GET /api/news"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/news` 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-731e88288d73a347", "name": "Unused endpoint: GET /api/command-center", "shortDescription": {"text": "Unused endpoint: GET /api/command-center"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/command-center` 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-10023866faab9cbb", "name": "Unused endpoint: POST /api/command-center/plan", "shortDescription": {"text": "Unused endpoint: POST /api/command-center/plan"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/command-center/plan` 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-bbf216f7f652063a", "name": "Unused endpoint: POST /api/command-center/scout", "shortDescription": {"text": "Unused endpoint: POST /api/command-center/scout"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/command-center/scout` 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-21c17cf102d392b0", "name": "Unused endpoint: POST /api/command-center/confirm-lineup", "shortDescription": {"text": "Unused endpoint: POST /api/command-center/confirm-lineup"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/command-center/confirm-lineup` 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-adb233339293cf4c", "name": "Unused endpoint: POST /api/command-center/season-preview/skip", "shortDescription": {"text": "Unused endpoint: POST /api/command-center/season-preview/skip"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/command-center/season-preview/skip` 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-24da1a74212642cf", "name": "Unused endpoint: GET /api/command-center/history", "shortDescription": {"text": "Unused endpoint: GET /api/command-center/history"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/command-center/history` 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-571250b6ff03ef3b", "name": "Unused endpoint: GET /api/dynasty-office", "shortDescription": {"text": "Unused endpoint: GET /api/dynasty-office"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/dynasty-office` 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-b56eff2f7b035f54", "name": "Unused endpoint: POST /api/dynasty-office/promises", "shortDescription": {"text": "Unused endpoint: POST /api/dynasty-office/promises"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/dynasty-office/promises` 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-c844bfadf25b10c3", "name": "Unused endpoint: POST /api/dynasty-office/staff/hire", "shortDescription": {"text": "Unused endpoint: POST /api/dynasty-office/staff/hire"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/dynasty-office/staff/hire` 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-584127d9e0b174f6", "name": "Unused endpoint: POST /api/tactics", "shortDescription": {"text": "Unused endpoint: POST /api/tactics"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/tactics` 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-d358dcdc35471c8b", "name": "Unused endpoint: POST /api/lineup", "shortDescription": {"text": "Unused endpoint: POST /api/lineup"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/lineup` 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-9256a68751c06387", "name": "Unused endpoint: POST /api/lineup/auto-reorder", "shortDescription": {"text": "Unused endpoint: POST /api/lineup/auto-reorder"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/lineup/auto-reorder` 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-ca7c572d8811b70a", "name": "Unused endpoint: POST /api/lineup/auto-assign", "shortDescription": {"text": "Unused endpoint: POST /api/lineup/auto-assign"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/lineup/auto-assign` 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-fb5a935d1312fbc1", "name": "Unused endpoint: POST /api/command-center/simulate", "shortDescription": {"text": "Unused endpoint: POST /api/command-center/simulate"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/command-center/simulate` 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-b8dd86425e1658af", "name": "Unused endpoint: POST /api/command-center/fast-forward", "shortDescription": {"text": "Unused endpoint: POST /api/command-center/fast-forward"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/command-center/fast-forward` 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-98538e881212cd19", "name": "Unused endpoint: POST /api/sim", "shortDescription": {"text": "Unused endpoint: POST /api/sim"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/sim` 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-a10e3b89904c26f0", "name": "Unused endpoint: POST /api/sim/week", "shortDescription": {"text": "Unused endpoint: POST /api/sim/week"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/sim/week` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2177c8ffa288c55", "name": "Unused endpoint: POST /api/recruiting/scout/{prospect_id}", "shortDescription": {"text": "Unused endpoint: POST /api/recruiting/scout/{prospect_id}"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/recruiting/scout/{prospect_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-dd98427e789babe0", "name": "Unused endpoint: POST /api/recruiting/contact/{prospect_id}", "shortDescription": {"text": "Unused endpoint: POST /api/recruiting/contact/{prospect_id}"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/recruiting/contact/{prospect_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-bf8179f3ad7ff107", "name": "Unused endpoint: POST /api/recruiting/visit/{prospect_id}", "shortDescription": {"text": "Unused endpoint: POST /api/recruiting/visit/{prospect_id}"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/recruiting/visit/{prospect_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-233c2176c37379cd", "name": "Unused endpoint: POST /api/recruiting/pitch-angle", "shortDescription": {"text": "Unused endpoint: POST /api/recruiting/pitch-angle"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/recruiting/pitch-angle` 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-910cb8c3f3f418b4", "name": "Unused endpoint: POST /api/recruiting/sign/{prospect_id}", "shortDescription": {"text": "Unused endpoint: POST /api/recruiting/sign/{prospect_id}"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/recruiting/sign/{prospect_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-ca68a0a928ff5a63", "name": "Unused endpoint: GET /api/matches/{match_id}/replay", "shortDescription": {"text": "Unused endpoint: GET /api/matches/{match_id}/replay"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/matches/{match_id}/replay` 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-ca8ccf992216ac20", "name": "Unused endpoint: GET /api/matches/{match_id}/highlights", "shortDescription": {"text": "Unused endpoint: GET /api/matches/{match_id}/highlights"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/matches/{match_id}/highlights` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45539e8cdad4e35c", "name": "Unused endpoint: POST /api/matches/{match_id}/acknowledge", "shortDescription": {"text": "Unused endpoint: POST /api/matches/{match_id}/acknowledge"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/matches/{match_id}/acknowledge` 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-e950e072ce5b1679", "name": "Unused endpoint: GET /api/voice-register/{tier}", "shortDescription": {"text": "Unused endpoint: GET /api/voice-register/{tier}"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/voice-register/{tier}` 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-0805a644bf9bc0e3", "name": "Unused endpoint: GET /api/save-state", "shortDescription": {"text": "Unused endpoint: GET /api/save-state"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/save-state` 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-620fe4ec1373153c", "name": "Unused endpoint: GET /api/saves", "shortDescription": {"text": "Unused endpoint: GET /api/saves"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/saves` 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-729cb3029ac770f3", "name": "Unused endpoint: POST /api/saves/new", "shortDescription": {"text": "Unused endpoint: POST /api/saves/new"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/saves/new` 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-144aa5766f3eb955", "name": "Unused endpoint: POST /api/saves/build-from-scratch", "shortDescription": {"text": "Unused endpoint: POST /api/saves/build-from-scratch"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/saves/build-from-scratch` 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-2a72bea878843577", "name": "Unused endpoint: POST /api/saves/load", "shortDescription": {"text": "Unused endpoint: POST /api/saves/load"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/saves/load` 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-7956889327bbd75d", "name": "Unused endpoint: POST /api/saves/delete", "shortDescription": {"text": "Unused endpoint: POST /api/saves/delete"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/saves/delete` 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-6a50f488756b2e99", "name": "Unused endpoint: POST /api/saves/unload", "shortDescription": {"text": "Unused endpoint: POST /api/saves/unload"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/saves/unload` 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-936a389dce953445", "name": "Unused endpoint: GET /api/saves/clubs", "shortDescription": {"text": "Unused endpoint: GET /api/saves/clubs"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/saves/clubs` 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-a2c6d59c1a57303f", "name": "Unused endpoint: GET /api/offseason/beat", "shortDescription": {"text": "Unused endpoint: GET /api/offseason/beat"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/offseason/beat` 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-fdd52f2665ca1c6c", "name": "Unused endpoint: POST /api/offseason/advance", "shortDescription": {"text": "Unused endpoint: POST /api/offseason/advance"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/offseason/advance` 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-c0c481f6b0247188", "name": "Unused endpoint: POST /api/offseason/recruit", "shortDescription": {"text": "Unused endpoint: POST /api/offseason/recruit"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/offseason/recruit` 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-10d972072ab4acd2", "name": "Unused endpoint: POST /api/offseason/begin-season", "shortDescription": {"text": "Unused endpoint: POST /api/offseason/begin-season"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `POST /api/offseason/begin-season` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e48a7834b4cbc0f", "name": "Unused endpoint: GET /api/history/my-program", "shortDescription": {"text": "Unused endpoint: GET /api/history/my-program"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/history/my-program` 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-855c0d44e3bf55bd", "name": "Unused endpoint: GET /api/history/league", "shortDescription": {"text": "Unused endpoint: GET /api/history/league"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /api/history/league` 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-f6467740958df261", "name": "Unused endpoint: ANY /api/{full_path:path}", "shortDescription": {"text": "Unused endpoint: ANY /api/{full_path:path}"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `ANY /api/{full_path:path}` 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-1b1d5926fda286fa", "name": "Unused endpoint: GET /{full_path:path}", "shortDescription": {"text": "Unused endpoint: GET /{full_path:path}"}, "fullDescription": {"text": "`src/dodgeball_sim/server.py` declares `GET /{full_path:path}` 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/22666"}, "properties": {"repository": "WestsideSage/Dodger", "repoUrl": "https://github.com/WestsideSage/Dodger", "branch": "main"}, "results": [{"ruleId": "scanner-a5afb46e25b4b9c5", "level": "note", "message": {"text": "Possibly dead Python function: format_event_row"}, "properties": {"repobilityId": "a7778d688b6bbcdf", "scanner": "scanner-primary", "fingerprint": "a5afb46e25b4b9c5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/replay_service.py:690"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9636dc5462522dba", "level": "note", "message": {"text": "Possibly dead Python function: format_event_details"}, "properties": {"repobilityId": "727b4da3c3163645", "scanner": "scanner-primary", "fingerprint": "9636dc5462522dba", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/replay_service.py:696"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f5a19a73e0cde2d5", "level": "note", "message": {"text": "Possibly dead Python function: format_analysis_report"}, "properties": {"repobilityId": "09a55d9d23c4a58d", "scanner": "scanner-primary", "fingerprint": "f5a19a73e0cde2d5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/replay_service.py:729"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d5b9a1a0f511741", "level": "note", "message": {"text": "Possibly dead Python function: is_eligible_for_catch"}, "properties": {"repobilityId": "113724af48652d23", "scanner": "scanner-primary", "fingerprint": "8d5b9a1a0f511741", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/player_state.py:58"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-da0df536520f312e", "level": "note", "message": {"text": "Possibly dead Python function: is_in_queue"}, "properties": {"repobilityId": "d5f02f97ad40c822", "scanner": "scanner-primary", "fingerprint": "da0df536520f312e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/player_state.py:63"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d1fd7974e53bd96a", "level": "note", "message": {"text": "Possibly dead Python function: apply_ruleset"}, "properties": {"repobilityId": "d806ff9427f05069", "scanner": "scanner-primary", "fingerprint": "d1fd7974e53bd96a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/meta.py:86"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c69abfc281523ae", "level": "note", "message": {"text": "Possibly dead Python function: enforced_sections"}, "properties": {"repobilityId": "46e915ee3afa94f0", "scanner": "scanner-primary", "fingerprint": "6c69abfc281523ae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/official_conformance_ledger.py:470"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cf96ec0bab1bc9c2", "level": "note", "message": {"text": "Possibly dead Python function: announced_or_absent_sections"}, "properties": {"repobilityId": "83f2953eeea71221", "scanner": "scanner-primary", "fingerprint": "cf96ec0bab1bc9c2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/official_conformance_ledger.py:476"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b1bdb1e5d4a6303c", "level": "note", "message": {"text": "Possibly dead Python function: matchup_preview"}, "properties": {"repobilityId": "d3c695da0840a30d", "scanner": "scanner-primary", "fingerprint": "b1bdb1e5d4a6303c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/matchup_details.py:184"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d2e0c655a4d7e096", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/PlayerDetailModal.tsx:70"}, "properties": {"repobilityId": "c76b4a23143cedf4", "scanner": "scanner-primary", "fingerprint": "d2e0c655a4d7e096", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ce504daf1c2870d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/naive_playtest_runner.spec.ts:25"}, "properties": {"repobilityId": "aa2c1a8cf9d031cd", "scanner": "scanner-primary", "fingerprint": "ce504daf1c2870d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac2c762747da96b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/v12_ai_program_managers.spec.ts:17"}, "properties": {"repobilityId": "a960706f46e774a7", "scanner": "scanner-primary", "fingerprint": "ac2c762747da96b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51e639dba9d3ed33", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/prototypes/claude-design/ui_kits/dodger-web-app/test-ui.js:9"}, "properties": {"repobilityId": "ffc7fecc7a789ddb", "scanner": "scanner-primary", "fingerprint": "51e639dba9d3ed33", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"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-057bd6f32e2cadd6", "level": "note", "message": {"text": "Very large file: frontend/src/components/match-week/command-center/PreSimDashboard.tsx (1404 lines)"}, "properties": {"repobilityId": "a627baf509811631", "scanner": "scanner-primary", "fingerprint": "057bd6f32e2cadd6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0671e642e40e7171", "level": "note", "message": {"text": "Very large file: tests/test_dispersed_helpers.py (1922 lines)"}, "properties": {"repobilityId": "bb06b7b7168a170e", "scanner": "scanner-primary", "fingerprint": "0671e642e40e7171", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-73e3f96c6f31e29d", "level": "note", "message": {"text": "Very large file: src/dodgeball_sim/offseason_ceremony.py (1630 lines)"}, "properties": {"repobilityId": "fd67a4ed75373371", "scanner": "scanner-primary", "fingerprint": "73e3f96c6f31e29d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6ff3a0c8211422ae", "level": "note", "message": {"text": "Very large file: src/dodgeball_sim/dynasty_cli.py (1986 lines)"}, "properties": {"repobilityId": "1e3d069fa87c915f", "scanner": "scanner-primary", "fingerprint": "6ff3a0c8211422ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-baea48cf6f8f50c9", "level": "note", "message": {"text": "Very large file: src/dodgeball_sim/persistence.py (3902 lines)"}, "properties": {"repobilityId": "948c58f2cab87930", "scanner": "scanner-primary", "fingerprint": "baea48cf6f8f50c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7a844216aff12c91", "level": "note", "message": {"text": "Very large file: src/dodgeball_sim/official_engine.py (1425 lines)"}, "properties": {"repobilityId": "3e72e75c1038a768", "scanner": "scanner-primary", "fingerprint": "7a844216aff12c91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ec61978078f921de", "level": "note", "message": {"text": "Very large file: src/dodgeball_sim/use_cases.py (1791 lines)"}, "properties": {"repobilityId": "707c74e09df76ba0", "scanner": "scanner-primary", "fingerprint": "ec61978078f921de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-afa4d33480281133", "level": "note", "message": {"text": "Very large file: src/dodgeball_sim/server.py (1590 lines)"}, "properties": {"repobilityId": "d3b3fa415d8ab31c", "scanner": "scanner-primary", "fingerprint": "afa4d33480281133", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "bcc7147ad32f0895", "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": "8805382e465b32ea", "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": "b893886a9d8922e5", "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": "d06e45af9d82d2e6", "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": "f019f9a40e74a759", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "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": "2a5ebf1a8f76309c", "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": "20ce59cb9962574a", "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": "10e7c9d18bbccd62", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-363b977ed36c8ddb", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/App.tsx:286"}, "properties": {"repobilityId": "6bd49e6fb161e03e", "scanner": "scanner-primary", "fingerprint": "363b977ed36c8ddb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47d72de8dca97904", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/types.ts:978"}, "properties": {"repobilityId": "edb1c9bb6f14ce15", "scanner": "scanner-primary", "fingerprint": "47d72de8dca97904", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8163526b341b39f8", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/api/client.ts:26"}, "properties": {"repobilityId": "3f662e73c89de9a8", "scanner": "scanner-primary", "fingerprint": "8163526b341b39f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da5ecae4030c1bf6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api/client.ts:133"}, "properties": {"repobilityId": "c1c2d2b16bece15c", "scanner": "scanner-primary", "fingerprint": "da5ecae4030c1bf6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3edd7bdd92d481b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/LeagueContext.tsx:36"}, "properties": {"repobilityId": "6839eb310e1e5293", "scanner": "scanner-primary", "fingerprint": "a3edd7bdd92d481b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fec17ea8d8dc76b", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/DynastyOffice.tsx:230"}, "properties": {"repobilityId": "31d28f961ab410f1", "scanner": "scanner-primary", "fingerprint": "2fec17ea8d8dc76b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c7506fdbe0c3086", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/Roster.tsx:365"}, "properties": {"repobilityId": "d27390635608d3bb", "scanner": "scanner-primary", "fingerprint": "6c7506fdbe0c3086", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9671b41167898603", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/MatchReplay.tsx:294"}, "properties": {"repobilityId": "708518f47c89d318", "scanner": "scanner-primary", "fingerprint": "9671b41167898603", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-454060f0b27fe6b9", "level": "none", "message": {"text": "Commented-code block (13 lines) in frontend/src/components/SaveMenu.tsx:62"}, "properties": {"repobilityId": "07f64c7b1ae48b89", "scanner": "scanner-primary", "fingerprint": "454060f0b27fe6b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a93f68f48752c77e", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ui.tsx:435"}, "properties": {"repobilityId": "71bf1a5699e3ef10", "scanner": "scanner-primary", "fingerprint": "a93f68f48752c77e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1da2c5cf87ffb2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/matchResult.ts:3"}, "properties": {"repobilityId": "f20a917dd3a7941c", "scanner": "scanner-primary", "fingerprint": "b1da2c5cf87ffb2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d17131f6c123329c", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/match-week/aftermath/ComebackCard.tsx:13"}, "properties": {"repobilityId": "9377f419536f3742", "scanner": "scanner-primary", "fingerprint": "d17131f6c123329c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b155a7bb5f72e821", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/PolicyEditor.tsx:32"}, "properties": {"repobilityId": "3273b23d3abc5f7a", "scanner": "scanner-primary", "fingerprint": "b155a7bb5f72e821", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f0edf0d97584645", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/PreSimDashboard.tsx:249"}, "properties": {"repobilityId": "686bd4024f957492", "scanner": "scanner-primary", "fingerprint": "8f0edf0d97584645", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3c5fdd041c11b3c", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/match-week/command-center/presimNarrative.ts:112"}, "properties": {"repobilityId": "50cd22b4b88492e7", "scanner": "scanner-primary", "fingerprint": "d3c5fdd041c11b3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81e089be51786d36", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/match-week/command-center/SeasonPreview.tsx:57"}, "properties": {"repobilityId": "471e1222a611c0d7", "scanner": "scanner-primary", "fingerprint": "81e089be51786d36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43aa312380a4475c", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/components/ceremonies/Ceremonies.tsx:663"}, "properties": {"repobilityId": "f9fc897dd8e734f9", "scanner": "scanner-primary", "fingerprint": "43aa312380a4475c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33723cf1b20f6b8d", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/components/ceremonies/CeremonyShell.tsx:4"}, "properties": {"repobilityId": "1868260d600d91e5", "scanner": "scanner-primary", "fingerprint": "33723cf1b20f6b8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31d2c9590a31eea4", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/new-game/StaffHiringStep.tsx:5"}, "properties": {"repobilityId": "25ec5f2be26abbe0", "scanner": "scanner-primary", "fingerprint": "31d2c9590a31eea4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1a3f86373f97f82", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/legibility/archetypeMap.ts:3"}, "properties": {"repobilityId": "98b42389ffcc8e4f", "scanner": "scanner-primary", "fingerprint": "c1a3f86373f97f82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1a34a27292d6c27", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/legibility/rulesetNames.ts:9"}, "properties": {"repobilityId": "b09ef5782ff5b5e3", "scanner": "scanner-primary", "fingerprint": "d1a34a27292d6c27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1914885be56f0fb5", "level": "none", "message": {"text": "Commented-code block (10 lines) in frontend/src/legibility/terms.ts:120"}, "properties": {"repobilityId": "930fce51b829b6b1", "scanner": "scanner-primary", "fingerprint": "1914885be56f0fb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-135952a6f1cf8eb3", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/legibility/CeilingGrade.tsx:3"}, "properties": {"repobilityId": "99459daaf9a92199", "scanner": "scanner-primary", "fingerprint": "135952a6f1cf8eb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-559619dbc3add543", "level": "note", "message": {"text": "Legacy-named symbol `test_inconclusive_draw_no_lever_is_honest_no_lever_not_loss_copy` in tests/test_manager_lesson.py:102"}, "properties": {"repobilityId": "52a2723cc7172d9b", "scanner": "scanner-primary", "fingerprint": "559619dbc3add543", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-18764488e78b0238", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_history_server.py:142"}, "properties": {"repobilityId": "cc1e7a2ef1d39c29", "scanner": "scanner-primary", "fingerprint": "18764488e78b0238", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3e927d9e3ecc66d", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/test_contested_offseason.py:40"}, "properties": {"repobilityId": "7cc41669d765d3c5", "scanner": "scanner-primary", "fingerprint": "b3e927d9e3ecc66d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19560fc0e9a89ddf", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_v6_player_identity.py:41"}, "properties": {"repobilityId": "55b22fb23bb7bf9e", "scanner": "scanner-primary", "fingerprint": "19560fc0e9a89ddf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-218aed8b7015573a", "level": "note", "message": {"text": "Legacy-named symbol `test_headline_without_moments_falls_back_to_margin_copy` in tests/test_voice_verdict_priority.py:44"}, "properties": {"repobilityId": "e5131c38e9e6c7a3", "scanner": "scanner-primary", "fingerprint": "218aed8b7015573a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1eb595dd456dcfba", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_archetype_champion_parity.py:137"}, "properties": {"repobilityId": "ccea8a36bebeed1a", "scanner": "scanner-primary", "fingerprint": "1eb595dd456dcfba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25483ba135624af1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_highlights_api.py:16"}, "properties": {"repobilityId": "5164752d4ac3ef6e", "scanner": "scanner-primary", "fingerprint": "25483ba135624af1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1f878e3f3dad9df", "level": "note", "message": {"text": "Legacy-named symbol `allow_legacy` in tests/test_server_save_boundary.py:210"}, "properties": {"repobilityId": "d5c2b897e8b8b951", "scanner": "scanner-primary", "fingerprint": "c1f878e3f3dad9df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3c8d54b06e61c784", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_ai_intent.py:44"}, "properties": {"repobilityId": "d75763a455e80688", "scanner": "scanner-primary", "fingerprint": "3c8d54b06e61c784", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed78ccc5fd91aca7", "level": "note", "message": {"text": "Legacy-named symbol `dev_legacy` in tests/test_development.py:134"}, "properties": {"repobilityId": "0d96760f365c334d", "scanner": "scanner-primary", "fingerprint": "ed78ccc5fd91aca7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ca59c99a115d09f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_official_conformance_matrix.py:161"}, "properties": {"repobilityId": "ad45bc061ccca329", "scanner": "scanner-primary", "fingerprint": "ca59c99a115d09f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74a4f05d5a2a1343", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_recruiting_actions.py:73"}, "properties": {"repobilityId": "41e4f0bb12098c47", "scanner": "scanner-primary", "fingerprint": "74a4f05d5a2a1343", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fb6ae42a4a21841", "level": "note", "message": {"text": "Legacy-named symbol `visible_copy` in tests/test_command_center.py:152"}, "properties": {"repobilityId": "96e9052b9d02253c", "scanner": "scanner-primary", "fingerprint": "9fb6ae42a4a21841", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5f241e98f3b6a030", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_official_engine_balance.py:66"}, "properties": {"repobilityId": "3e7b74177383bff2", "scanner": "scanner-primary", "fingerprint": "5f241e98f3b6a030", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27fcfaf2647192c5", "level": "note", "message": {"text": "Legacy-named symbol `p_legacy` in tests/test_dynasty_progression_health.py:118"}, "properties": {"repobilityId": "b307a301084bc02c", "scanner": "scanner-primary", "fingerprint": "27fcfaf2647192c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5a36b439eb50552c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_dynasty_progression_health.py:451"}, "properties": {"repobilityId": "759e46b4156f27b8", "scanner": "scanner-primary", "fingerprint": "5a36b439eb50552c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d373902fd14a6899", "level": "note", "message": {"text": "Legacy-named symbol `_migrate_v1` in tests/test_persistence.py:13"}, "properties": {"repobilityId": "6140380443001373", "scanner": "scanner-primary", "fingerprint": "d373902fd14a6899", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4c9a396d063ba52c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_editor_lineup_reaches_sim.py:53"}, "properties": {"repobilityId": "2557e603ec50e5f4", "scanner": "scanner-primary", "fingerprint": "4c9a396d063ba52c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da6ea2f81c7dd8e5", "level": "note", "message": {"text": "Legacy-named symbol `visible_copy` in tests/test_server.py:321"}, "properties": {"repobilityId": "da69607a207615f5", "scanner": "scanner-primary", "fingerprint": "da6ea2f81c7dd8e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5a87c091a1645fff", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_server.py:173"}, "properties": {"repobilityId": "820d3ad1d1486173", "scanner": "scanner-primary", "fingerprint": "5a87c091a1645fff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3935a768077b7d71", "level": "note", "message": {"text": "Legacy-named symbol `test_policy_line_uses_default_centroid_copy` in tests/test_voice_pregame.py:7"}, "properties": {"repobilityId": "b465c31a4372503e", "scanner": "scanner-primary", "fingerprint": "3935a768077b7d71", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6e7398d965f14ff1", "level": "note", "message": {"text": "Legacy-named symbol `dashboard_copy` in tests/test_aftermath_payload.py:35"}, "properties": {"repobilityId": "1e017cc34e33e30b", "scanner": "scanner-primary", "fingerprint": "6e7398d965f14ff1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-478edb913ea0a285", "level": "note", "message": {"text": "Legacy-named symbol `_migrate_v1` in tests/test_save_meta_nonmutating.py:26"}, "properties": {"repobilityId": "a1de5689b3636542", "scanner": "scanner-primary", "fingerprint": "478edb913ea0a285", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a2bdcd43b58d5726", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_tier_1_integration.py:97"}, "properties": {"repobilityId": "0d300db3a75bb588", "scanner": "scanner-primary", "fingerprint": "a2bdcd43b58d5726", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e1c2a9b40d11c55", "level": "note", "message": {"text": "Legacy-named symbol `test_voice_register_endpoint_returns_tier1_copy` in tests/test_policy_api.py:107"}, "properties": {"repobilityId": "9ac9737041b140ae", "scanner": "scanner-primary", "fingerprint": "1e1c2a9b40d11c55", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6d3e41d68a117a1a", "level": "note", "message": {"text": "Legacy-named symbol `_migrate_v1` in tests/test_official_backward_compat.py:15"}, "properties": {"repobilityId": "ef94b11fa013ea0a", "scanner": "scanner-primary", "fingerprint": "6d3e41d68a117a1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3242e6aa2ca0c13f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_scout_reveal.py:396"}, "properties": {"repobilityId": "6dd9fa12b7f34d55", "scanner": "scanner-primary", "fingerprint": "3242e6aa2ca0c13f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eaca58e595c37b79", "level": "note", "message": {"text": "Legacy-named symbol `p_legacy` in tests/test_first_hour_growth_truth.py:139"}, "properties": {"repobilityId": "68a4683b1a90dcf8", "scanner": "scanner-primary", "fingerprint": "eaca58e595c37b79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b0d9e8ba80bd1429", "level": "none", "message": {"text": "Commented-code block (10 lines) in tests/test_week_briefing.py:276"}, "properties": {"repobilityId": "350bda63953ee2bb", "scanner": "scanner-primary", "fingerprint": "b0d9e8ba80bd1429", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46ad89454355c2d5", "level": "note", "message": {"text": "Legacy-named symbol `test_has_unresolved_token_allows_normal_sports_copy` in tests/test_copy_quality.py:12"}, "properties": {"repobilityId": "0f519eec08fbc178", "scanner": "scanner-primary", "fingerprint": "46ad89454355c2d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e5b1befd1501f7ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_founding_roster_continuity.py:35"}, "properties": {"repobilityId": "38e4599890c86489", "scanner": "scanner-primary", "fingerprint": "e5b1befd1501f7ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dafd608de36f7ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/playoff-record-label.spec.ts:21"}, "properties": {"repobilityId": "ff77487e662ec24f", "scanner": "scanner-primary", "fingerprint": "2dafd608de36f7ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe0d71349b836816", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/v15-lineup-editor.spec.ts:96"}, "properties": {"repobilityId": "bb87d5d950aee560", "scanner": "scanner-primary", "fingerprint": "fe0d71349b836816", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bbe8bb763cffbff", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/e2e/v13_broadcast_layer.spec.ts:85"}, "properties": {"repobilityId": "f5543b1f0fb3a9b6", "scanner": "scanner-primary", "fingerprint": "4bbe8bb763cffbff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71688d624badaa81", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/official_adapter.py:71"}, "properties": {"repobilityId": "bfc8d19833680f90", "scanner": "scanner-primary", "fingerprint": "71688d624badaa81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43b2a76fd8f870a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/replay_proof.py:683"}, "properties": {"repobilityId": "115425ddaf53ab92", "scanner": "scanner-primary", "fingerprint": "43b2a76fd8f870a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae54a7c6a3e18838", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/franchise.py:191"}, "properties": {"repobilityId": "42d6ebd8164710ce", "scanner": "scanner-primary", "fingerprint": "ae54a7c6a3e18838", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f06d47124038e531", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/dodgeball_sim/development.py:12"}, "properties": {"repobilityId": "d53937f882c55fc8", "scanner": "scanner-primary", "fingerprint": "f06d47124038e531", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92d464ab7ba61ccb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/dodgeball_sim/voice_aftermath.py:155"}, "properties": {"repobilityId": "64f75cc89e67a721", "scanner": "scanner-primary", "fingerprint": "92d464ab7ba61ccb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a14219d69b2ca93d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/match_explanation.py:37"}, "properties": {"repobilityId": "3cd6d9848bd7f553", "scanner": "scanner-primary", "fingerprint": "a14219d69b2ca93d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b4874c198673072", "level": "none", "message": {"text": "Commented-code block (19 lines) in src/dodgeball_sim/official_tactics.py:49"}, "properties": {"repobilityId": "6f4d949111d930d4", "scanner": "scanner-primary", "fingerprint": "2b4874c198673072", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8391e2bbb3fca9ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/match_orchestration.py:294"}, "properties": {"repobilityId": "bea21e8bc53c7146", "scanner": "scanner-primary", "fingerprint": "8391e2bbb3fca9ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54dcf50dd25759e5", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/dodgeball_sim/career_setup.py:185"}, "properties": {"repobilityId": "4b2ee20fab9edded", "scanner": "scanner-primary", "fingerprint": "54dcf50dd25759e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc16f5e842c8f701", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/offseason_beats.py:208"}, "properties": {"repobilityId": "060349bf552f8dd0", "scanner": "scanner-primary", "fingerprint": "dc16f5e842c8f701", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dd4621cd5c4cb35", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/dodgeball_sim/official_translator.py:56"}, "properties": {"repobilityId": "90c2468e63ca148d", "scanner": "scanner-primary", "fingerprint": "3dd4621cd5c4cb35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-912873d6d25fd2d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/lineup.py:48"}, "properties": {"repobilityId": "b9d10389423bd3ae", "scanner": "scanner-primary", "fingerprint": "912873d6d25fd2d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c814bb3f058e7550", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/dodgeball_sim/config.py:97"}, "properties": {"repobilityId": "886d0b3594610c50", "scanner": "scanner-primary", "fingerprint": "c814bb3f058e7550", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b0a3eb3b9256653", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/offseason_ceremony.py:647"}, "properties": {"repobilityId": "0e819f77d2936a85", "scanner": "scanner-primary", "fingerprint": "7b0a3eb3b9256653", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7110399118d71805", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/dodgeball_sim/web_status_service.py:134"}, "properties": {"repobilityId": "e4c243770021cf89", "scanner": "scanner-primary", "fingerprint": "7110399118d71805", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6723159f93f860d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/dodgeball_sim/web_cli.py:164"}, "properties": {"repobilityId": "466f811398e5d608", "scanner": "scanner-primary", "fingerprint": "a6723159f93f860d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fb1a3a23f766153", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/records.py:67"}, "properties": {"repobilityId": "3e2500ccfa474668", "scanner": "scanner-primary", "fingerprint": "2fb1a3a23f766153", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7c3878be21908f5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/rec_adapter.py:241"}, "properties": {"repobilityId": "b52ce292fdfef481", "scanner": "scanner-primary", "fingerprint": "f7c3878be21908f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-729d505b5623d400", "level": "none", "message": {"text": "Commented-code block (16 lines) in src/dodgeball_sim/dynasty_office.py:249"}, "properties": {"repobilityId": "4d06c9a02838e419", "scanner": "scanner-primary", "fingerprint": "729d505b5623d400", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fc1b18f706e61f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/season.py:99"}, "properties": {"repobilityId": "ede8edff860d35dc", "scanner": "scanner-primary", "fingerprint": "4fc1b18f706e61f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74a3d3cff724da37", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/offseason_presentation.py:38"}, "properties": {"repobilityId": "13a9996bd1cacfa7", "scanner": "scanner-primary", "fingerprint": "74a3d3cff724da37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-007cfd7d194f0302", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/dodgeball_sim/official_resolution.py:41"}, "properties": {"repobilityId": "a080dccbca6ba802", "scanner": "scanner-primary", "fingerprint": "007cfd7d194f0302", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acd87b9ca2933d0c", "level": "note", "message": {"text": "Legacy-named symbol `_migrate_v1` in src/dodgeball_sim/persistence.py:236"}, "properties": {"repobilityId": "a710901f98ededf0", "scanner": "scanner-primary", "fingerprint": "acd87b9ca2933d0c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aee719b5fdb972d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/persistence.py:1864"}, "properties": {"repobilityId": "724362c6df6106c6", "scanner": "scanner-primary", "fingerprint": "aee719b5fdb972d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1abc1e17734ee5a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/aftermath_context.py:27"}, "properties": {"repobilityId": "b89eb2325dafdbe1", "scanner": "scanner-primary", "fingerprint": "1abc1e17734ee5a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9249d404e91eeb78", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/manager_lesson.py:57"}, "properties": {"repobilityId": "a9ce9a92a2a1dc4d", "scanner": "scanner-primary", "fingerprint": "9249d404e91eeb78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d83234cb6b8aba1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/official_engine.py:441"}, "properties": {"repobilityId": "1da8baaa3c668183", "scanner": "scanner-primary", "fingerprint": "9d83234cb6b8aba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5439fb69da7577bd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/official_conformance_ledger.py:110"}, "properties": {"repobilityId": "00c80e2200b1e94f", "scanner": "scanner-primary", "fingerprint": "5439fb69da7577bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3df450dcf5724cc9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/dodgeball_sim/offseason_service.py:134"}, "properties": {"repobilityId": "d6666ca590762069", "scanner": "scanner-primary", "fingerprint": "3df450dcf5724cc9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35728da1bacaa76d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/use_cases.py:536"}, "properties": {"repobilityId": "f375305481495d00", "scanner": "scanner-primary", "fingerprint": "35728da1bacaa76d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7f986bad8f55bb2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/models.py:281"}, "properties": {"repobilityId": "ce35cb60d354359f", "scanner": "scanner-primary", "fingerprint": "c7f986bad8f55bb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6faf1363cd3005b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/ai_orders.py:51"}, "properties": {"repobilityId": "6a072d004786bc83", "scanner": "scanner-primary", "fingerprint": "d6faf1363cd3005b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-973510ac3dabafdf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/matchup_details.py:107"}, "properties": {"repobilityId": "b00d639326e73ed9", "scanner": "scanner-primary", "fingerprint": "973510ac3dabafdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bb39a7972f9dbf8", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/dodgeball_sim/playoffs.py:100"}, "properties": {"repobilityId": "d50104ec1b068425", "scanner": "scanner-primary", "fingerprint": "1bb39a7972f9dbf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7166122540f4ce2b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/dodgeball_sim/economy.py:37"}, "properties": {"repobilityId": "349881ea68842097", "scanner": "scanner-primary", "fingerprint": "7166122540f4ce2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b25a34d27a47ee55", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/recruitment.py:194"}, "properties": {"repobilityId": "3939ba02363ac9b7", "scanner": "scanner-primary", "fingerprint": "b25a34d27a47ee55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6259c1357b9c1bf8", "level": "note", "message": {"text": "Legacy-named symbol `allow_legacy` in src/dodgeball_sim/server.py:239"}, "properties": {"repobilityId": "9bade9c7fefbae4e", "scanner": "scanner-primary", "fingerprint": "6259c1357b9c1bf8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ed7c9680020d025e", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/dodgeball_sim/server.py:161"}, "properties": {"repobilityId": "c2387799333ce2d8", "scanner": "scanner-primary", "fingerprint": "ed7c9680020d025e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-059da752387df9ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/recruiting_office.py:118"}, "properties": {"repobilityId": "d35bd4291c83608d", "scanner": "scanner-primary", "fingerprint": "059da752387df9ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ad1c0316c6587fe", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/no_blocking.py:98"}, "properties": {"repobilityId": "d7688ca94bf82ab9", "scanner": "scanner-primary", "fingerprint": "6ad1c0316c6587fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6945b54910e75275", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/world.py:46"}, "properties": {"repobilityId": "63a40cf9134f8670", "scanner": "scanner-primary", "fingerprint": "6945b54910e75275", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88cf81b2573e0e46", "level": "note", "message": {"text": "Legacy-named symbol `sanitize_dashboard_copy` in src/dodgeball_sim/command_week_service.py:395"}, "properties": {"repobilityId": "36bbbcf1acc889f0", "scanner": "scanner-primary", "fingerprint": "88cf81b2573e0e46", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a7378d9c4aedbcc8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/command_week_service.py:140"}, "properties": {"repobilityId": "d06cf23496c9ffde", "scanner": "scanner-primary", "fingerprint": "a7378d9c4aedbcc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63785106aeb35cc1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/stats.py:117"}, "properties": {"repobilityId": "5232458bd9cda58d", "scanner": "scanner-primary", "fingerprint": "63785106aeb35cc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17d73209b9087ba3", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/dodgeball_sim/game_loop.py:33"}, "properties": {"repobilityId": "c0e927345be5596a", "scanner": "scanner-primary", "fingerprint": "17d73209b9087ba3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a91e5881aa44b5df", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/voice_verdict.py:109"}, "properties": {"repobilityId": "2627e2876fb710bd", "scanner": "scanner-primary", "fingerprint": "a91e5881aa44b5df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ca0745fa023d4eb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/week_briefing.py:54"}, "properties": {"repobilityId": "0fa299071bfedf30", "scanner": "scanner-primary", "fingerprint": "1ca0745fa023d4eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10456ad30686413e", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/dodgeball_sim/command_center.py:28"}, "properties": {"repobilityId": "853b744754649488", "scanner": "scanner-primary", "fingerprint": "10456ad30686413e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c93f9121eaff4a65", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/playoff_resolution.py:92"}, "properties": {"repobilityId": "31d106f02dcf6954", "scanner": "scanner-primary", "fingerprint": "c93f9121eaff4a65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40cff2abbf57dd23", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dodgeball_sim/rec_engine.py:526"}, "properties": {"repobilityId": "f0714779c45b2b2f", "scanner": "scanner-primary", "fingerprint": "40cff2abbf57dd23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcf9e298f7f32148", "level": "note", "message": {"text": "Legacy-named symbol `allow_legacy` in src/dodgeball_sim/save_service.py:20"}, "properties": {"repobilityId": "6289eae59268564c", "scanner": "scanner-primary", "fingerprint": "fcf9e298f7f32148", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-525ffb984467c2b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dodgeball_sim/save_service.py:226"}, "properties": {"repobilityId": "705041d315c1b6a2", "scanner": "scanner-primary", "fingerprint": "525ffb984467c2b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "658527d1c14ca8b5", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "724c8c2266a832c8", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "cad1df6d46a3401f", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1fae06511d5cd9d0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "0538d4921224154e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c4ccd4727b63ba49", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e44831160dd9c4a1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "a71ff29b0b9fae41", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "02885611991189fc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8b8dca68b3e74510", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "580befd92ff2a5dd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "bec1583539a4674e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6c6662f73dff2ea0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-a2eb29af939b4745", "level": "error", "message": {"text": "FastAPI POST `post_roster_release` without auth dependency \u2014 src/dodgeball_sim/server.py:652"}, "properties": {"repobilityId": "4d3729c31bdd275b", "scanner": "scanner-primary", "fingerprint": "a2eb29af939b4745", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 652}}}]}, {"ruleId": "scanner-b323abaf2524fc29", "level": "error", "message": {"text": "FastAPI POST `save_command_center_plan` without auth dependency \u2014 src/dodgeball_sim/server.py:719"}, "properties": {"repobilityId": "53c359b855c79c0f", "scanner": "scanner-primary", "fingerprint": "b323abaf2524fc29", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 719}}}]}, {"ruleId": "scanner-f703fd2cfcd3942c", "level": "error", "message": {"text": "FastAPI POST `scout_opponent` without auth dependency \u2014 src/dodgeball_sim/server.py:727"}, "properties": {"repobilityId": "aa17265f023fd615", "scanner": "scanner-primary", "fingerprint": "f703fd2cfcd3942c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 727}}}]}, {"ruleId": "scanner-2ae3a419e2bcf6ee", "level": "error", "message": {"text": "FastAPI POST `confirm_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:736"}, "properties": {"repobilityId": "94dd4107a35619d7", "scanner": "scanner-primary", "fingerprint": "2ae3a419e2bcf6ee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 736}}}]}, {"ruleId": "scanner-5cdc1f77da13c567", "level": "error", "message": {"text": "FastAPI POST `skip_season_preview` without auth dependency \u2014 src/dodgeball_sim/server.py:745"}, "properties": {"repobilityId": "cca10e77272e5919", "scanner": "scanner-primary", "fingerprint": "5cdc1f77da13c567", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 745}}}]}, {"ruleId": "scanner-25dd02e7bc5d7523", "level": "error", "message": {"text": "FastAPI POST `create_recruiting_promise` without auth dependency \u2014 src/dodgeball_sim/server.py:771"}, "properties": {"repobilityId": "f018aa8bc3fdfabe", "scanner": "scanner-primary", "fingerprint": "25dd02e7bc5d7523", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 771}}}]}, {"ruleId": "scanner-ff350aebdb5c3046", "level": "error", "message": {"text": "FastAPI POST `hire_dynasty_staff` without auth dependency \u2014 src/dodgeball_sim/server.py:781"}, "properties": {"repobilityId": "4e082a38b364f3af", "scanner": "scanner-primary", "fingerprint": "ff350aebdb5c3046", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 781}}}]}, {"ruleId": "scanner-781059bd02579f4b", "level": "error", "message": {"text": "FastAPI POST `update_tactics` without auth dependency \u2014 src/dodgeball_sim/server.py:791"}, "properties": {"repobilityId": "307a66abfeba45bf", "scanner": "scanner-primary", "fingerprint": "781059bd02579f4b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 791}}}]}, {"ruleId": "scanner-7a577121ccb0ef8a", "level": "error", "message": {"text": "FastAPI POST `update_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:801"}, "properties": {"repobilityId": "0ec5b0374ddb945d", "scanner": "scanner-primary", "fingerprint": "7a577121ccb0ef8a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 801}}}]}, {"ruleId": "scanner-370b2dd4c7788414", "level": "error", "message": {"text": "FastAPI POST `set_lineup_auto_reorder` without auth dependency \u2014 src/dodgeball_sim/server.py:824"}, "properties": {"repobilityId": "4163376cb93d3379", "scanner": "scanner-primary", "fingerprint": "370b2dd4c7788414", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 824}}}]}, {"ruleId": "scanner-4f7f6b4019410bb7", "level": "error", "message": {"text": "FastAPI POST `auto_assign_lineup` without auth dependency \u2014 src/dodgeball_sim/server.py:841"}, "properties": {"repobilityId": "c25e2cef401e904c", "scanner": "scanner-primary", "fingerprint": "4f7f6b4019410bb7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 841}}}]}, {"ruleId": "scanner-756a5fe5e9da8d65", "level": "error", "message": {"text": "FastAPI POST `simulate_command_center_week` without auth dependency \u2014 src/dodgeball_sim/server.py:855"}, "properties": {"repobilityId": "ffd79e2857bb1b14", "scanner": "scanner-primary", "fingerprint": "756a5fe5e9da8d65", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 855}}}]}, {"ruleId": "scanner-e09867d8aaac33a0", "level": "error", "message": {"text": "FastAPI POST `fast_forward_command_center` without auth dependency \u2014 src/dodgeball_sim/server.py:873"}, "properties": {"repobilityId": "097eaae7eeb2229c", "scanner": "scanner-primary", "fingerprint": "e09867d8aaac33a0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 873}}}]}, {"ruleId": "scanner-0f17bb75dbb4a27e", "level": "error", "message": {"text": "FastAPI POST `simulate_command` without auth dependency \u2014 src/dodgeball_sim/server.py:900"}, "properties": {"repobilityId": "b59bd9028e3fe0b8", "scanner": "scanner-primary", "fingerprint": "0f17bb75dbb4a27e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 900}}}]}, {"ruleId": "scanner-86b7f2041f9b52aa", "level": "error", "message": {"text": "FastAPI POST `simulate_week` without auth dependency \u2014 src/dodgeball_sim/server.py:908"}, "properties": {"repobilityId": "3e665df2a436a456", "scanner": "scanner-primary", "fingerprint": "86b7f2041f9b52aa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 908}}}]}, {"ruleId": "scanner-a6cb6a9f6a1b2bee", "level": "error", "message": {"text": "FastAPI POST `recruiting_scout` without auth dependency \u2014 src/dodgeball_sim/server.py:959"}, "properties": {"repobilityId": "8c6c3d6cf2983b2e", "scanner": "scanner-primary", "fingerprint": "a6cb6a9f6a1b2bee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 959}}}]}, {"ruleId": "scanner-05753f283ac514a9", "level": "error", "message": {"text": "FastAPI POST `recruiting_contact` without auth dependency \u2014 src/dodgeball_sim/server.py:964"}, "properties": {"repobilityId": "fdc86a679699d745", "scanner": "scanner-primary", "fingerprint": "05753f283ac514a9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 964}}}]}, {"ruleId": "scanner-a0ec40488c1d74ec", "level": "error", "message": {"text": "FastAPI POST `recruiting_visit` without auth dependency \u2014 src/dodgeball_sim/server.py:969"}, "properties": {"repobilityId": "14d8125a528cd763", "scanner": "scanner-primary", "fingerprint": "a0ec40488c1d74ec", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 969}}}]}, {"ruleId": "scanner-c451c42004e3ca3d", "level": "error", "message": {"text": "FastAPI POST `recruiting_pitch_angle` without auth dependency \u2014 src/dodgeball_sim/server.py:974"}, "properties": {"repobilityId": "b6fd2f13a906058f", "scanner": "scanner-primary", "fingerprint": "c451c42004e3ca3d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 974}}}]}, {"ruleId": "scanner-9e10ae6ebcba9a38", "level": "error", "message": {"text": "FastAPI POST `recruiting_sign` without auth dependency \u2014 src/dodgeball_sim/server.py:985"}, "properties": {"repobilityId": "603fc604864ea7c4", "scanner": "scanner-primary", "fingerprint": "9e10ae6ebcba9a38", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 985}}}]}, {"ruleId": "scanner-523507c2f82e7332", "level": "error", "message": {"text": "FastAPI POST `acknowledge_match_report` without auth dependency \u2014 src/dodgeball_sim/server.py:1019"}, "properties": {"repobilityId": "43d9173460c85296", "scanner": "scanner-primary", "fingerprint": "523507c2f82e7332", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1019}}}]}, {"ruleId": "scanner-03f302e5cd68f5fe", "level": "error", "message": {"text": "FastAPI POST `api_new_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1052"}, "properties": {"repobilityId": "1756c31d711170d8", "scanner": "scanner-primary", "fingerprint": "03f302e5cd68f5fe", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1052}}}]}, {"ruleId": "scanner-1ca3244c697ee858", "level": "error", "message": {"text": "FastAPI POST `api_build_from_scratch` without auth dependency \u2014 src/dodgeball_sim/server.py:1083"}, "properties": {"repobilityId": "b1ae7c270250292b", "scanner": "scanner-primary", "fingerprint": "1ca3244c697ee858", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1083}}}]}, {"ruleId": "scanner-baff9a58de55ab0b", "level": "error", "message": {"text": "FastAPI POST `api_load_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1098"}, "properties": {"repobilityId": "9327eb238fec3334", "scanner": "scanner-primary", "fingerprint": "baff9a58de55ab0b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1098}}}]}, {"ruleId": "scanner-195ac1fe68b3dcb9", "level": "error", "message": {"text": "FastAPI POST `api_delete_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1121"}, "properties": {"repobilityId": "361dca4d6d4aea89", "scanner": "scanner-primary", "fingerprint": "195ac1fe68b3dcb9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1121}}}]}, {"ruleId": "scanner-4cf6e6854d89393e", "level": "error", "message": {"text": "FastAPI POST `api_unload_save` without auth dependency \u2014 src/dodgeball_sim/server.py:1133"}, "properties": {"repobilityId": "fcdc6b612d02d2f8", "scanner": "scanner-primary", "fingerprint": "4cf6e6854d89393e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1133}}}]}, {"ruleId": "scanner-d826c987dfc4f668", "level": "error", "message": {"text": "FastAPI POST `advance_offseason_beat` without auth dependency \u2014 src/dodgeball_sim/server.py:1163"}, "properties": {"repobilityId": "74cdbb1409da04ce", "scanner": "scanner-primary", "fingerprint": "d826c987dfc4f668", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1163}}}]}, {"ruleId": "scanner-efb1908a193ad892", "level": "error", "message": {"text": "FastAPI POST `offseason_recruit` without auth dependency \u2014 src/dodgeball_sim/server.py:1171"}, "properties": {"repobilityId": "2812d5d363ebfc1f", "scanner": "scanner-primary", "fingerprint": "efb1908a193ad892", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1171}}}]}, {"ruleId": "scanner-0240e80618767190", "level": "error", "message": {"text": "FastAPI POST `offseason_begin_season` without auth dependency \u2014 src/dodgeball_sim/server.py:1183"}, "properties": {"repobilityId": "d2454cad08c7eec2", "scanner": "scanner-primary", "fingerprint": "0240e80618767190", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/dodgeball_sim/server.py"}, "region": {"startLine": 1183}}}]}, {"ruleId": "scanner-963710f42a2c8219", "level": "note", "message": {"text": "Unused endpoint: GET /api/status"}, "properties": {"repobilityId": "a557f4dc6813d04a", "scanner": "scanner-primary", "fingerprint": "963710f42a2c8219", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98dcf0d198406d57", "level": "note", "message": {"text": "Unused endpoint: GET /api/roster"}, "properties": {"repobilityId": "111e4321712d0b1e", "scanner": "scanner-primary", "fingerprint": "98dcf0d198406d57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f74aa59fb8f37964", "level": "note", "message": {"text": "Unused endpoint: POST /api/roster/release"}, "properties": {"repobilityId": "163748bd7fc5457a", "scanner": "scanner-primary", "fingerprint": "f74aa59fb8f37964", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09aacbc9c190f7b7", "level": "note", "message": {"text": "Unused endpoint: GET /api/tactics"}, "properties": {"repobilityId": "6d2abcff1b7d80a0", "scanner": "scanner-primary", "fingerprint": "09aacbc9c190f7b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71fe2b6c2f43107b", "level": "note", "message": {"text": "Unused endpoint: GET /api/standings"}, "properties": {"repobilityId": "b862b258e15f68a5", "scanner": "scanner-primary", "fingerprint": "71fe2b6c2f43107b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90e88e24f9c69554", "level": "note", "message": {"text": "Unused endpoint: GET /api/schedule"}, "properties": {"repobilityId": "0dacb7de04c25409", "scanner": "scanner-primary", "fingerprint": "90e88e24f9c69554", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-325fcf0863bc5a97", "level": "note", "message": {"text": "Unused endpoint: GET /api/playoffs/bracket"}, "properties": {"repobilityId": "19fd6830ccfd19ea", "scanner": "scanner-primary", "fingerprint": "325fcf0863bc5a97", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-778f45a124dbd2e7", "level": "note", "message": {"text": "Unused endpoint: GET /api/news"}, "properties": {"repobilityId": "d5f9aeb152ccb548", "scanner": "scanner-primary", "fingerprint": "778f45a124dbd2e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-731e88288d73a347", "level": "note", "message": {"text": "Unused endpoint: GET /api/command-center"}, "properties": {"repobilityId": "46cb16f99ccc7f7c", "scanner": "scanner-primary", "fingerprint": "731e88288d73a347", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10023866faab9cbb", "level": "note", "message": {"text": "Unused endpoint: POST /api/command-center/plan"}, "properties": {"repobilityId": "b0d23c18e7c0d2b2", "scanner": "scanner-primary", "fingerprint": "10023866faab9cbb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bbf216f7f652063a", "level": "note", "message": {"text": "Unused endpoint: POST /api/command-center/scout"}, "properties": {"repobilityId": "6d03a3589d93baef", "scanner": "scanner-primary", "fingerprint": "bbf216f7f652063a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-21c17cf102d392b0", "level": "note", "message": {"text": "Unused endpoint: POST /api/command-center/confirm-lineup"}, "properties": {"repobilityId": "6a8b1803f3058fd9", "scanner": "scanner-primary", "fingerprint": "21c17cf102d392b0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-adb233339293cf4c", "level": "note", "message": {"text": "Unused endpoint: POST /api/command-center/season-preview/skip"}, "properties": {"repobilityId": "37e277b115a8e0c2", "scanner": "scanner-primary", "fingerprint": "adb233339293cf4c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24da1a74212642cf", "level": "note", "message": {"text": "Unused endpoint: GET /api/command-center/history"}, "properties": {"repobilityId": "0832e84099282273", "scanner": "scanner-primary", "fingerprint": "24da1a74212642cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-571250b6ff03ef3b", "level": "note", "message": {"text": "Unused endpoint: GET /api/dynasty-office"}, "properties": {"repobilityId": "c567a7c0d1b403d0", "scanner": "scanner-primary", "fingerprint": "571250b6ff03ef3b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b56eff2f7b035f54", "level": "note", "message": {"text": "Unused endpoint: POST /api/dynasty-office/promises"}, "properties": {"repobilityId": "8b78bdf5533e9491", "scanner": "scanner-primary", "fingerprint": "b56eff2f7b035f54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c844bfadf25b10c3", "level": "note", "message": {"text": "Unused endpoint: POST /api/dynasty-office/staff/hire"}, "properties": {"repobilityId": "9d7fc7e527c9849a", "scanner": "scanner-primary", "fingerprint": "c844bfadf25b10c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-584127d9e0b174f6", "level": "note", "message": {"text": "Unused endpoint: POST /api/tactics"}, "properties": {"repobilityId": "b06d2413a846b13c", "scanner": "scanner-primary", "fingerprint": "584127d9e0b174f6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d358dcdc35471c8b", "level": "note", "message": {"text": "Unused endpoint: POST /api/lineup"}, "properties": {"repobilityId": "a98238d8fc0ef1a8", "scanner": "scanner-primary", "fingerprint": "d358dcdc35471c8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9256a68751c06387", "level": "note", "message": {"text": "Unused endpoint: POST /api/lineup/auto-reorder"}, "properties": {"repobilityId": "4f9a8bb39dd88348", "scanner": "scanner-primary", "fingerprint": "9256a68751c06387", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca7c572d8811b70a", "level": "note", "message": {"text": "Unused endpoint: POST /api/lineup/auto-assign"}, "properties": {"repobilityId": "f8a1d36f00a23f53", "scanner": "scanner-primary", "fingerprint": "ca7c572d8811b70a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb5a935d1312fbc1", "level": "note", "message": {"text": "Unused endpoint: POST /api/command-center/simulate"}, "properties": {"repobilityId": "9d17243af4561709", "scanner": "scanner-primary", "fingerprint": "fb5a935d1312fbc1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8dd86425e1658af", "level": "note", "message": {"text": "Unused endpoint: POST /api/command-center/fast-forward"}, "properties": {"repobilityId": "d8d0cec2f7ac0e54", "scanner": "scanner-primary", "fingerprint": "b8dd86425e1658af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98538e881212cd19", "level": "note", "message": {"text": "Unused endpoint: POST /api/sim"}, "properties": {"repobilityId": "b29354c3d23b4315", "scanner": "scanner-primary", "fingerprint": "98538e881212cd19", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a10e3b89904c26f0", "level": "note", "message": {"text": "Unused endpoint: POST /api/sim/week"}, "properties": {"repobilityId": "9f418ceb9e5c8881", "scanner": "scanner-primary", "fingerprint": "a10e3b89904c26f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2177c8ffa288c55", "level": "note", "message": {"text": "Unused endpoint: POST /api/recruiting/scout/{prospect_id}"}, "properties": {"repobilityId": "a3bb9dd7358e3245", "scanner": "scanner-primary", "fingerprint": "d2177c8ffa288c55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd98427e789babe0", "level": "note", "message": {"text": "Unused endpoint: POST /api/recruiting/contact/{prospect_id}"}, "properties": {"repobilityId": "15cd9095339427ff", "scanner": "scanner-primary", "fingerprint": "dd98427e789babe0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf8179f3ad7ff107", "level": "note", "message": {"text": "Unused endpoint: POST /api/recruiting/visit/{prospect_id}"}, "properties": {"repobilityId": "3cc3c068034bcd21", "scanner": "scanner-primary", "fingerprint": "bf8179f3ad7ff107", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-233c2176c37379cd", "level": "note", "message": {"text": "Unused endpoint: POST /api/recruiting/pitch-angle"}, "properties": {"repobilityId": "470599d413d4119c", "scanner": "scanner-primary", "fingerprint": "233c2176c37379cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-910cb8c3f3f418b4", "level": "note", "message": {"text": "Unused endpoint: POST /api/recruiting/sign/{prospect_id}"}, "properties": {"repobilityId": "09ba75dca70bad16", "scanner": "scanner-primary", "fingerprint": "910cb8c3f3f418b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca68a0a928ff5a63", "level": "note", "message": {"text": "Unused endpoint: GET /api/matches/{match_id}/replay"}, "properties": {"repobilityId": "021feb3f2bea5d2a", "scanner": "scanner-primary", "fingerprint": "ca68a0a928ff5a63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca8ccf992216ac20", "level": "note", "message": {"text": "Unused endpoint: GET /api/matches/{match_id}/highlights"}, "properties": {"repobilityId": "b096f90eb0a74c69", "scanner": "scanner-primary", "fingerprint": "ca8ccf992216ac20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-45539e8cdad4e35c", "level": "note", "message": {"text": "Unused endpoint: POST /api/matches/{match_id}/acknowledge"}, "properties": {"repobilityId": "fb6f16dfdd168666", "scanner": "scanner-primary", "fingerprint": "45539e8cdad4e35c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e950e072ce5b1679", "level": "note", "message": {"text": "Unused endpoint: GET /api/voice-register/{tier}"}, "properties": {"repobilityId": "d0133856d4a0acda", "scanner": "scanner-primary", "fingerprint": "e950e072ce5b1679", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0805a644bf9bc0e3", "level": "note", "message": {"text": "Unused endpoint: GET /api/save-state"}, "properties": {"repobilityId": "4498ce1221f28c19", "scanner": "scanner-primary", "fingerprint": "0805a644bf9bc0e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-620fe4ec1373153c", "level": "note", "message": {"text": "Unused endpoint: GET /api/saves"}, "properties": {"repobilityId": "cf8d5eba844808ea", "scanner": "scanner-primary", "fingerprint": "620fe4ec1373153c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-729cb3029ac770f3", "level": "note", "message": {"text": "Unused endpoint: POST /api/saves/new"}, "properties": {"repobilityId": "902855b7a5a92edc", "scanner": "scanner-primary", "fingerprint": "729cb3029ac770f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-144aa5766f3eb955", "level": "note", "message": {"text": "Unused endpoint: POST /api/saves/build-from-scratch"}, "properties": {"repobilityId": "8607cf6d57a6398a", "scanner": "scanner-primary", "fingerprint": "144aa5766f3eb955", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a72bea878843577", "level": "note", "message": {"text": "Unused endpoint: POST /api/saves/load"}, "properties": {"repobilityId": "ae14c98df95fb504", "scanner": "scanner-primary", "fingerprint": "2a72bea878843577", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7956889327bbd75d", "level": "note", "message": {"text": "Unused endpoint: POST /api/saves/delete"}, "properties": {"repobilityId": "29befef7afee6c98", "scanner": "scanner-primary", "fingerprint": "7956889327bbd75d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a50f488756b2e99", "level": "note", "message": {"text": "Unused endpoint: POST /api/saves/unload"}, "properties": {"repobilityId": "5dc543b8cd8ab77e", "scanner": "scanner-primary", "fingerprint": "6a50f488756b2e99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-936a389dce953445", "level": "note", "message": {"text": "Unused endpoint: GET /api/saves/clubs"}, "properties": {"repobilityId": "d13458300760b2e4", "scanner": "scanner-primary", "fingerprint": "936a389dce953445", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2c6d59c1a57303f", "level": "note", "message": {"text": "Unused endpoint: GET /api/offseason/beat"}, "properties": {"repobilityId": "4ab49025b5a5e05d", "scanner": "scanner-primary", "fingerprint": "a2c6d59c1a57303f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fdd52f2665ca1c6c", "level": "note", "message": {"text": "Unused endpoint: POST /api/offseason/advance"}, "properties": {"repobilityId": "11b06bcd5355bc5f", "scanner": "scanner-primary", "fingerprint": "fdd52f2665ca1c6c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0c481f6b0247188", "level": "note", "message": {"text": "Unused endpoint: POST /api/offseason/recruit"}, "properties": {"repobilityId": "f344d6c5e2d2e8b5", "scanner": "scanner-primary", "fingerprint": "c0c481f6b0247188", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10d972072ab4acd2", "level": "note", "message": {"text": "Unused endpoint: POST /api/offseason/begin-season"}, "properties": {"repobilityId": "0aaf701a5c5bbc04", "scanner": "scanner-primary", "fingerprint": "10d972072ab4acd2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e48a7834b4cbc0f", "level": "note", "message": {"text": "Unused endpoint: GET /api/history/my-program"}, "properties": {"repobilityId": "51d81d51f66899db", "scanner": "scanner-primary", "fingerprint": "8e48a7834b4cbc0f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-855c0d44e3bf55bd", "level": "note", "message": {"text": "Unused endpoint: GET /api/history/league"}, "properties": {"repobilityId": "62a880c1c9900c81", "scanner": "scanner-primary", "fingerprint": "855c0d44e3bf55bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6467740958df261", "level": "note", "message": {"text": "Unused endpoint: ANY /api/{full_path:path}"}, "properties": {"repobilityId": "7d737ccef5d83490", "scanner": "scanner-primary", "fingerprint": "f6467740958df261", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b1d5926fda286fa", "level": "note", "message": {"text": "Unused endpoint: GET /{full_path:path}"}, "properties": {"repobilityId": "ee7f56ebfc326fd2", "scanner": "scanner-primary", "fingerprint": "1b1d5926fda286fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}