{"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-3dee776500388004", "name": "Possibly dead Python function: adapt_points", "shortDescription": {"text": "Possibly dead Python function: adapt_points"}, "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-45e4fc295a4a4926", "name": "Possibly dead Python function: load_factual_contract", "shortDescription": {"text": "Possibly dead Python function: load_factual_contract"}, "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-b3e8d2329556fe69", "name": "Possibly dead Python function: evaluate_redraft", "shortDescription": {"text": "Possibly dead Python function: evaluate_redraft"}, "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-5c9ac9bb9604c044", "name": "Stray `console.log` in TS/JS \u2014 static/htmx.min.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/htmx.min.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b6b4e729e041c17", "name": "Insecure pattern 'new_function_used' in static/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'new_function_used' in static/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32261904363e0be2", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc3aa39cba978bfa", "name": "Insecure pattern 'insert_adjacent_html' in static/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in static/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-774cdfa8a2008f3f", "name": "Insecure pattern 'domparser_html_parse' in static/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in static/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-efe776e97404316e", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd74b35e20ba874f", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ab03860524c83d4", "name": "Very large file: app.py (2621 lines)", "shortDescription": {"text": "Very large file: app.py (2621 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-77e893b23b23ae8c", "name": "Very large file: prospects/rank_v1.py (1641 lines)", "shortDescription": {"text": "Very large file: prospects/rank_v1.py (1641 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-a11e1b5409e93df5", "name": "Very large file: quality/valucast_governor.py (1544 lines)", "shortDescription": {"text": "Very large file: quality/valucast_governor.py (1544 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 144 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-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-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-6433699fb732476e", "name": "Legacy-named symbol `valucast_hp_2026_v1` in app.py:105", "shortDescription": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in app.py:105"}, "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-9bba87722c7daa7c", "name": "Legacy-named symbol `rank_v1` in prospects/model_v07.py:16", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/model_v07.py:16"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d50ff69cf8b748d", "name": "Legacy-named symbol `valucast_prospect_rank_v1` in prospects/milb_stat_freshness.py:17", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in prospects/milb_stat_freshness.py:17"}, "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-1aa973a3f58345a0", "name": "Legacy-named symbol `rank_v1` in prospects/peak_projection.py:17", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/peak_projection.py:17"}, "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-a7ff885d3982fa81", "name": "Legacy-named symbol `rank_v1` in prospects/forward_validation.py:19", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/forward_validation.py:19"}, "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-91e066a9f650fe2d", "name": "Legacy-named symbol `rank_v1` in prospects/buys.py:19", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/buys.py:19"}, "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-d5612b416dc2fac9", "name": "Legacy-named symbol `monitors_live_buys_v1` in prospects/buys_monitor.py:98", "shortDescription": {"text": "Legacy-named symbol `monitors_live_buys_v1` in prospects/buys_monitor.py:98"}, "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-8c43fc4347f8c4f4", "name": "Legacy-named symbol `rank_v1` in prospects/calibration_report.py:16", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/calibration_report.py:16"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-262063748cc05191", "name": "Legacy-named symbol `rank_v1` in prospects/coverage_audit.py:11", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/coverage_audit.py:11"}, "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-dc9d782247c3f01d", "name": "Legacy-named symbol `rank_v1` in prospects/front_office_failures.py:14", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/front_office_failures.py:14"}, "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-ed05296653fd73fc", "name": "Legacy-named symbol `rank_v1` in prospects/raw_data_independence.py:9", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in prospects/raw_data_independence.py:9"}, "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-ce9161047a91af89", "name": "Legacy-named symbol `valucast_prospect_rank_v1` in prospects/rank_v1.py:27", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in prospects/rank_v1.py:27"}, "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-8887b20ec2433040", "name": "Legacy-named symbol `k_old` in projections/models/marcel_params.py:13", "shortDescription": {"text": "Legacy-named symbol `k_old` in projections/models/marcel_params.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-2e694be48c4ba8a6", "name": "Legacy-named symbol `k_old` in projections/models/marcel_hitter.py:19", "shortDescription": {"text": "Legacy-named symbol `k_old` in projections/models/marcel_hitter.py:19"}, "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-eed357e6811d162b", "name": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_public_data_refresh.py:331", "shortDescription": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_public_data_refresh.py:331"}, "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-d73ebc51dbd14cbd", "name": "Legacy-named symbol `rank_v1` in tests/test_prospect_rank_v1.py:4", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in tests/test_prospect_rank_v1.py:4"}, "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-589b166658854112", "name": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in tests/test_prospect_model_v07.py:94", "shortDescription": {"text": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in tests/test_prospect_model_v07.py:94"}, "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-5a68f09a8fb9b8a8", "name": "Legacy-named symbol `k_old` in tests/test_pitcher_params.py:25", "shortDescription": {"text": "Legacy-named symbol `k_old` in tests/test_pitcher_params.py:25"}, "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-1a91131c45f7b0e2", "name": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in tests/test_public_dynasty_snapshot.py:219", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in tests/test_public_dynasty_snapshot.py:219"}, "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-e62278c521ad0b12", "name": "Legacy-named symbol `marcel_2024_v1` in tests/test_marcel_run.py:50", "shortDescription": {"text": "Legacy-named symbol `marcel_2024_v1` in tests/test_marcel_run.py:50"}, "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-84ac4c447b43a6f1", "name": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in tests/test_prospect_peak_projection.py:68", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in tests/test_prospect_peak_projection.py:68"}, "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-37197d45cfb81fb5", "name": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_valucast_hp_run.py:28", "shortDescription": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_valucast_hp_run.py:28"}, "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-030d52cd3d0cd250", "name": "Legacy-named symbol `test_high_miss_high_walk_pitcher_read_is_not_rule_tree_copy` in tests/test_card_intelligence.py:336", "shortDescription": {"text": "Legacy-named symbol `test_high_miss_high_walk_pitcher_read_is_not_rule_tree_copy` in tests/test_card_intelligence.py:336"}, "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-281bb35fe4215002", "name": "Legacy-named symbol `test_prospects_count_copy` in tests/test_app.py:313", "shortDescription": {"text": "Legacy-named symbol `test_prospects_count_copy` in tests/test_app.py:313"}, "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-74981b32d52f9858", "name": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in tests/test_front_office_failures.py:52", "shortDescription": {"text": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in tests/test_front_office_failures.py:52"}, "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-52924373b3c86c7e", "name": "Legacy-named symbol `k_old` in tests/test_marcel_params.py:11", "shortDescription": {"text": "Legacy-named symbol `k_old` in tests/test_marcel_params.py:11"}, "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-08f20e935af67d18", "name": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_valucast_run_quality.py:6", "shortDescription": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_valucast_run_quality.py:6"}, "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-259373cac5379e0f", "name": "Legacy-named symbol `valucast_prospect_buys_v1` in tests/test_valucast_buys.py:147", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_buys_v1` in tests/test_valucast_buys.py:147"}, "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-84bddb6e5cac580a", "name": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_mlb_dynasty_layer.py:164", "shortDescription": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_mlb_dynasty_layer.py:164"}, "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-19011df3b792a049", "name": "Legacy-named symbol `valucast_prospect_rank_v1` in ops/pipeline_observability.py:20", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in ops/pipeline_observability.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-986d63ce6eb9ee2e", "name": "Legacy-named symbol `rank_v1` in scripts/build_prospect_rank_v1.py:10", "shortDescription": {"text": "Legacy-named symbol `rank_v1` in scripts/build_prospect_rank_v1.py:10"}, "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-36347a99608c5ff9", "name": "Legacy-named symbol `monitors_live_buys_v1` in scripts/validate_valucast_buys_monitor.py:49", "shortDescription": {"text": "Legacy-named symbol `monitors_live_buys_v1` in scripts/validate_valucast_buys_monitor.py:49"}, "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-ea41de9e02061a9b", "name": "Legacy-named symbol `valucast_hp_2026_v1` in scripts/build_mlb_dynasty_layer.py:13", "shortDescription": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in scripts/build_mlb_dynasty_layer.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-9f0a991c4b9ac5d2", "name": "Legacy-named symbol `ready_for_card_v2` in scripts/build_prospect_peak_projection.py:15", "shortDescription": {"text": "Legacy-named symbol `ready_for_card_v2` in scripts/build_prospect_peak_projection.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-d1b60b1a5cc57266", "name": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in scripts/validate_prospect_peak_projection.py:12", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in scripts/validate_prospect_peak_projection.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-5c487be9bafbc853", "name": "Legacy-named symbol `valucast_hp_2026_v1` in scripts/build_validation_scorecard.py:30", "shortDescription": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in scripts/build_validation_scorecard.py:30"}, "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-f96b750157d0f2c2", "name": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in scripts/validate_prospect_model_v07.py:111", "shortDescription": {"text": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in scripts/validate_prospect_model_v07.py:111"}, "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-d7e0801116c79f7d", "name": "Legacy-named symbol `valucast_prospect_rank_v1` in scripts/build_public_dynasty_snapshot.py:20", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in scripts/build_public_dynasty_snapshot.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-d748a5982926062d", "name": "Legacy-named symbol `valucast_prospect_rank_v1` in quality/valucast_governor.py:20", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in quality/valucast_governor.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-b112115ecb7b3520", "name": "Legacy-named symbol `ros_copy` in scraper/combine.py:125", "shortDescription": {"text": "Legacy-named symbol `ros_copy` in scraper/combine.py:125"}, "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-8032eb945507eeb2", "name": "Legacy-named symbol `entry_copy` in web/projection_store.py:42", "shortDescription": {"text": "Legacy-named symbol `entry_copy` in web/projection_store.py:42"}, "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-7d2b773a8d7b475d", "name": "Legacy-named symbol `valucast_prospect_buys_v1` in web/valucast_buy_store.py:12", "shortDescription": {"text": "Legacy-named symbol `valucast_prospect_buys_v1` in web/valucast_buy_store.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-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nprospects/dynasty.py:archive_predictions, prospects/dd_adapter.py:archive_dd_adapter, prospects/buys.py:archive_buy_signals, prospects/rank_v1.py:archive_rank\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-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:\nprospects/dynasty.py:run_layer, prospects/index.py:run_index\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-6297377883dd7783", "name": "Near-duplicate function bodies in 13 places", "shortDescription": {"text": "Near-duplicate function bodies in 13 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nprospects/model_v07.py:write_model_v07_preview, prospects/model.py:write_artifact, prospects/outcome_backtest.py:write_outcome_backtest, prospects/buys_monitor.py:write_buys_monitor\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nprospects/milb_stat_freshness.py:write_milb_stat_freshness_audit, prospects/forward_validation.py:write_forward_validation_report, prospects/calibration_report.py:write_prospect_calibration_report, prospects/coverage_audit.py:write_prospect_coverage_audit\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:\nprospects/universe.py:identity_key, prospects/rank_v1.py:identity_key, prospects/availability.py:identity_key\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-fe1d9311d6aee734", "name": "Near-duplicate function bodies in 12 places", "shortDescription": {"text": "Near-duplicate function bodies in 12 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/validate_mlb_track_record.py:validate_track_record, scripts/validate_valucast_buys_monitor.py:validate_buys_monitor, scripts/validate_valucast_quality_governor.py:validate_governor, scripts/validate_prospect_coverage_audit.py:validate_audit\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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`app.py` declares `ANY /` 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-21ba7cd6298df30d", "name": "Unused endpoint: ANY /rankings", "shortDescription": {"text": "Unused endpoint: ANY /rankings"}, "fullDescription": {"text": "`app.py` declares `ANY /rankings` 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-7c99e2dad703b374", "name": "Unused endpoint: ANY /league-import", "shortDescription": {"text": "Unused endpoint: ANY /league-import"}, "fullDescription": {"text": "`app.py` declares `ANY /league-import` 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-b722d12b4dd164e9", "name": "Unused endpoint: ANY /methodology", "shortDescription": {"text": "Unused endpoint: ANY /methodology"}, "fullDescription": {"text": "`app.py` declares `ANY /methodology` 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-6c4b71bea6e8b246", "name": "Unused endpoint: ANY /front-office", "shortDescription": {"text": "Unused endpoint: ANY /front-office"}, "fullDescription": {"text": "`app.py` declares `ANY /front-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-6e8af70d6ef893d3", "name": "Unused endpoint: ANY /map", "shortDescription": {"text": "Unused endpoint: ANY /map"}, "fullDescription": {"text": "`app.py` declares `ANY /map` 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-4062f33d3f14a7bc", "name": "Unused endpoint: ANY /buys", "shortDescription": {"text": "Unused endpoint: ANY /buys"}, "fullDescription": {"text": "`app.py` declares `ANY /buys` 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-589ef3fc02b4fc38", "name": "Unused endpoint: ANY /player/<player_id>", "shortDescription": {"text": "Unused endpoint: ANY /player/<player_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /player/<player_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-e4846c410eb6a0e7", "name": "Unused endpoint: ANY /compare", "shortDescription": {"text": "Unused endpoint: ANY /compare"}, "fullDescription": {"text": "`app.py` declares `ANY /compare` 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-10d6c2f14a0f976e", "name": "Unused endpoint: ANY /export", "shortDescription": {"text": "Unused endpoint: ANY /export"}, "fullDescription": {"text": "`app.py` declares `ANY /export` 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-bec6a398af8f9278", "name": "Unused endpoint: ANY /prospects/share-card", "shortDescription": {"text": "Unused endpoint: ANY /prospects/share-card"}, "fullDescription": {"text": "`app.py` declares `ANY /prospects/share-card` 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-3c08d05a7d9c8cfc", "name": "Unused endpoint: ANY /prospects/share-card.png", "shortDescription": {"text": "Unused endpoint: ANY /prospects/share-card.png"}, "fullDescription": {"text": "`app.py` declares `ANY /prospects/share-card.png` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-265c3342ed4c20ae", "name": "Unused endpoint: ANY /prospects/player-card/<player_id>", "shortDescription": {"text": "Unused endpoint: ANY /prospects/player-card/<player_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /prospects/player-card/<player_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-d420bf9d896cc479", "name": "Unused endpoint: ANY /prospects/player-card/<player_id>.png", "shortDescription": {"text": "Unused endpoint: ANY /prospects/player-card/<player_id>.png"}, "fullDescription": {"text": "`app.py` declares `ANY /prospects/player-card/<player_id>.png` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-180c743df8798f29", "name": "Unused endpoint: ANY /prospects/share-card.svg", "shortDescription": {"text": "Unused endpoint: ANY /prospects/share-card.svg"}, "fullDescription": {"text": "`app.py` declares `ANY /prospects/share-card.svg` 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-530b9ceb6058882f", "name": "Unused endpoint: ANY /prospects/graphic", "shortDescription": {"text": "Unused endpoint: ANY /prospects/graphic"}, "fullDescription": {"text": "`app.py` declares `ANY /prospects/graphic` 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/22519"}, "properties": {"repository": "walshja9/league-values", "repoUrl": "https://github.com/walshja9/league-values", "branch": "main"}, "results": [{"ruleId": "scanner-3dee776500388004", "level": "note", "message": {"text": "Possibly dead Python function: adapt_points"}, "properties": {"repobilityId": "430b3b8c1c66d1a8", "scanner": "scanner-primary", "fingerprint": "3dee776500388004", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prospects/adapters.py:186"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45e4fc295a4a4926", "level": "note", "message": {"text": "Possibly dead Python function: load_factual_contract"}, "properties": {"repobilityId": "6fe73006ff57b2e8", "scanner": "scanner-primary", "fingerprint": "45e4fc295a4a4926", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prospects/input_contract.py:67"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b3e8d2329556fe69", "level": "note", "message": {"text": "Possibly dead Python function: evaluate_redraft"}, "properties": {"repobilityId": "db2eed86457aa225", "scanner": "scanner-primary", "fingerprint": "b3e8d2329556fe69", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/league_values/risk.py:80"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c9ac9bb9604c044", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/htmx.min.js:1"}, "properties": {"repobilityId": "ff878ac44fa99a88", "scanner": "scanner-primary", "fingerprint": "5c9ac9bb9604c044", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-7b6b4e729e041c17", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in static/htmx.min.js:1"}, "properties": {"repobilityId": "7e7446ce33cde5df", "scanner": "scanner-primary", "fingerprint": "7b6b4e729e041c17", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32261904363e0be2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/htmx.min.js:1"}, "properties": {"repobilityId": "0413f606c7c9e392", "scanner": "scanner-primary", "fingerprint": "32261904363e0be2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc3aa39cba978bfa", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in static/htmx.min.js:1"}, "properties": {"repobilityId": "f373f5b2d0c97abe", "scanner": "scanner-primary", "fingerprint": "fc3aa39cba978bfa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-774cdfa8a2008f3f", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in static/htmx.min.js:1"}, "properties": {"repobilityId": "9c547910f4e30c2a", "scanner": "scanner-primary", "fingerprint": "774cdfa8a2008f3f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"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-efe776e97404316e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "bc68eea52b501625", "scanner": "scanner-primary", "fingerprint": "efe776e97404316e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prospect-shadow.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cd74b35e20ba874f", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "0a4c7a21068da64f", "scanner": "scanner-primary", "fingerprint": "cd74b35e20ba874f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-public-data.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ab03860524c83d4", "level": "note", "message": {"text": "Very large file: app.py (2621 lines)"}, "properties": {"repobilityId": "5a74e6652f3a10d4", "scanner": "scanner-primary", "fingerprint": "0ab03860524c83d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-77e893b23b23ae8c", "level": "note", "message": {"text": "Very large file: prospects/rank_v1.py (1641 lines)"}, "properties": {"repobilityId": "3a2b53e2dacb2432", "scanner": "scanner-primary", "fingerprint": "77e893b23b23ae8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a11e1b5409e93df5", "level": "note", "message": {"text": "Very large file: quality/valucast_governor.py (1544 lines)"}, "properties": {"repobilityId": "4715d5f0ba2bb370", "scanner": "scanner-primary", "fingerprint": "a11e1b5409e93df5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "695854ce0fa195cf", "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": "8357056f04dfc00f", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "2fb4377bcb894068", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "634c9d3e3844dcd2", "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": "fe40fb214a4f9dcf", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-6433699fb732476e", "level": "note", "message": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in app.py:105"}, "properties": {"repobilityId": "06c6e7f65959d45a", "scanner": "scanner-primary", "fingerprint": "6433699fb732476e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9bba87722c7daa7c", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/model_v07.py:16"}, "properties": {"repobilityId": "29fa93a4c5e6bc69", "scanner": "scanner-primary", "fingerprint": "9bba87722c7daa7c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1d50ff69cf8b748d", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in prospects/milb_stat_freshness.py:17"}, "properties": {"repobilityId": "5d9c18b02c8dedc6", "scanner": "scanner-primary", "fingerprint": "1d50ff69cf8b748d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1aa973a3f58345a0", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/peak_projection.py:17"}, "properties": {"repobilityId": "970423608706e37a", "scanner": "scanner-primary", "fingerprint": "1aa973a3f58345a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a7ff885d3982fa81", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/forward_validation.py:19"}, "properties": {"repobilityId": "73821fd27bf3d6ff", "scanner": "scanner-primary", "fingerprint": "a7ff885d3982fa81", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-91e066a9f650fe2d", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/buys.py:19"}, "properties": {"repobilityId": "74077d6db14b0bdc", "scanner": "scanner-primary", "fingerprint": "91e066a9f650fe2d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d5612b416dc2fac9", "level": "note", "message": {"text": "Legacy-named symbol `monitors_live_buys_v1` in prospects/buys_monitor.py:98"}, "properties": {"repobilityId": "7b3602825ee37cba", "scanner": "scanner-primary", "fingerprint": "d5612b416dc2fac9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8c43fc4347f8c4f4", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/calibration_report.py:16"}, "properties": {"repobilityId": "b95b405c3c4a8ff8", "scanner": "scanner-primary", "fingerprint": "8c43fc4347f8c4f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-262063748cc05191", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/coverage_audit.py:11"}, "properties": {"repobilityId": "4c7b3e457f1a784a", "scanner": "scanner-primary", "fingerprint": "262063748cc05191", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc9d782247c3f01d", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/front_office_failures.py:14"}, "properties": {"repobilityId": "29d5d277292e8b7d", "scanner": "scanner-primary", "fingerprint": "dc9d782247c3f01d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ed05296653fd73fc", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in prospects/raw_data_independence.py:9"}, "properties": {"repobilityId": "b0bbff94eadf0daa", "scanner": "scanner-primary", "fingerprint": "ed05296653fd73fc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ce9161047a91af89", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in prospects/rank_v1.py:27"}, "properties": {"repobilityId": "ebbc284533c10bf0", "scanner": "scanner-primary", "fingerprint": "ce9161047a91af89", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8887b20ec2433040", "level": "note", "message": {"text": "Legacy-named symbol `k_old` in projections/models/marcel_params.py:13"}, "properties": {"repobilityId": "217785a74f780af8", "scanner": "scanner-primary", "fingerprint": "8887b20ec2433040", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2e694be48c4ba8a6", "level": "note", "message": {"text": "Legacy-named symbol `k_old` in projections/models/marcel_hitter.py:19"}, "properties": {"repobilityId": "cbf0388acc9125df", "scanner": "scanner-primary", "fingerprint": "2e694be48c4ba8a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eed357e6811d162b", "level": "note", "message": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_public_data_refresh.py:331"}, "properties": {"repobilityId": "11a473b53087043a", "scanner": "scanner-primary", "fingerprint": "eed357e6811d162b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d73ebc51dbd14cbd", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in tests/test_prospect_rank_v1.py:4"}, "properties": {"repobilityId": "1bac6d3afd7d85d4", "scanner": "scanner-primary", "fingerprint": "d73ebc51dbd14cbd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-589b166658854112", "level": "note", "message": {"text": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in tests/test_prospect_model_v07.py:94"}, "properties": {"repobilityId": "6e5d99f2c844df07", "scanner": "scanner-primary", "fingerprint": "589b166658854112", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5a68f09a8fb9b8a8", "level": "note", "message": {"text": "Legacy-named symbol `k_old` in tests/test_pitcher_params.py:25"}, "properties": {"repobilityId": "807e13af4f8f9952", "scanner": "scanner-primary", "fingerprint": "5a68f09a8fb9b8a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a91131c45f7b0e2", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in tests/test_public_dynasty_snapshot.py:219"}, "properties": {"repobilityId": "e82df2236644377e", "scanner": "scanner-primary", "fingerprint": "1a91131c45f7b0e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e62278c521ad0b12", "level": "note", "message": {"text": "Legacy-named symbol `marcel_2024_v1` in tests/test_marcel_run.py:50"}, "properties": {"repobilityId": "873bb6b551ae824c", "scanner": "scanner-primary", "fingerprint": "e62278c521ad0b12", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-84ac4c447b43a6f1", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in tests/test_prospect_peak_projection.py:68"}, "properties": {"repobilityId": "42feb8e272393586", "scanner": "scanner-primary", "fingerprint": "84ac4c447b43a6f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-37197d45cfb81fb5", "level": "note", "message": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_valucast_hp_run.py:28"}, "properties": {"repobilityId": "baa5057a6427a6ad", "scanner": "scanner-primary", "fingerprint": "37197d45cfb81fb5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-030d52cd3d0cd250", "level": "note", "message": {"text": "Legacy-named symbol `test_high_miss_high_walk_pitcher_read_is_not_rule_tree_copy` in tests/test_card_intelligence.py:336"}, "properties": {"repobilityId": "a0ef7080efb0ac4a", "scanner": "scanner-primary", "fingerprint": "030d52cd3d0cd250", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-281bb35fe4215002", "level": "note", "message": {"text": "Legacy-named symbol `test_prospects_count_copy` in tests/test_app.py:313"}, "properties": {"repobilityId": "334190c196755781", "scanner": "scanner-primary", "fingerprint": "281bb35fe4215002", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-74981b32d52f9858", "level": "note", "message": {"text": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in tests/test_front_office_failures.py:52"}, "properties": {"repobilityId": "991bbf03b89ac81d", "scanner": "scanner-primary", "fingerprint": "74981b32d52f9858", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-52924373b3c86c7e", "level": "note", "message": {"text": "Legacy-named symbol `k_old` in tests/test_marcel_params.py:11"}, "properties": {"repobilityId": "ae07efa8469174f1", "scanner": "scanner-primary", "fingerprint": "52924373b3c86c7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-08f20e935af67d18", "level": "note", "message": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_valucast_run_quality.py:6"}, "properties": {"repobilityId": "fb9e9eac3ff7466c", "scanner": "scanner-primary", "fingerprint": "08f20e935af67d18", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-259373cac5379e0f", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_buys_v1` in tests/test_valucast_buys.py:147"}, "properties": {"repobilityId": "a17259944512ffdd", "scanner": "scanner-primary", "fingerprint": "259373cac5379e0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-84bddb6e5cac580a", "level": "note", "message": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in tests/test_mlb_dynasty_layer.py:164"}, "properties": {"repobilityId": "2ba797d5b3ce74f6", "scanner": "scanner-primary", "fingerprint": "84bddb6e5cac580a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-19011df3b792a049", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in ops/pipeline_observability.py:20"}, "properties": {"repobilityId": "2e1dbf60c79837dc", "scanner": "scanner-primary", "fingerprint": "19011df3b792a049", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-986d63ce6eb9ee2e", "level": "note", "message": {"text": "Legacy-named symbol `rank_v1` in scripts/build_prospect_rank_v1.py:10"}, "properties": {"repobilityId": "1c26c5eedd9981a8", "scanner": "scanner-primary", "fingerprint": "986d63ce6eb9ee2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-36347a99608c5ff9", "level": "note", "message": {"text": "Legacy-named symbol `monitors_live_buys_v1` in scripts/validate_valucast_buys_monitor.py:49"}, "properties": {"repobilityId": "f3f6192d3e5c606b", "scanner": "scanner-primary", "fingerprint": "36347a99608c5ff9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ea41de9e02061a9b", "level": "note", "message": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in scripts/build_mlb_dynasty_layer.py:13"}, "properties": {"repobilityId": "d427383ffb63df78", "scanner": "scanner-primary", "fingerprint": "ea41de9e02061a9b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9f0a991c4b9ac5d2", "level": "note", "message": {"text": "Legacy-named symbol `ready_for_card_v2` in scripts/build_prospect_peak_projection.py:15"}, "properties": {"repobilityId": "1ebd823c3d8972b5", "scanner": "scanner-primary", "fingerprint": "9f0a991c4b9ac5d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d1b60b1a5cc57266", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_peak_projection_v1` in scripts/validate_prospect_peak_projection.py:12"}, "properties": {"repobilityId": "143133b15073d739", "scanner": "scanner-primary", "fingerprint": "d1b60b1a5cc57266", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5c487be9bafbc853", "level": "note", "message": {"text": "Legacy-named symbol `valucast_hp_2026_v1` in scripts/build_validation_scorecard.py:30"}, "properties": {"repobilityId": "5e1e7bc55368fc10", "scanner": "scanner-primary", "fingerprint": "5c487be9bafbc853", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f96b750157d0f2c2", "level": "note", "message": {"text": "Legacy-named symbol `v0_7_delta_vs_rank_v1` in scripts/validate_prospect_model_v07.py:111"}, "properties": {"repobilityId": "6a8b629a5bb9c5a4", "scanner": "scanner-primary", "fingerprint": "f96b750157d0f2c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d7e0801116c79f7d", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in scripts/build_public_dynasty_snapshot.py:20"}, "properties": {"repobilityId": "263fa8da9b196b4e", "scanner": "scanner-primary", "fingerprint": "d7e0801116c79f7d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d748a5982926062d", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_rank_v1` in quality/valucast_governor.py:20"}, "properties": {"repobilityId": "0f26f845d3d66bfb", "scanner": "scanner-primary", "fingerprint": "d748a5982926062d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b112115ecb7b3520", "level": "note", "message": {"text": "Legacy-named symbol `ros_copy` in scraper/combine.py:125"}, "properties": {"repobilityId": "61dd5903f87b7a9b", "scanner": "scanner-primary", "fingerprint": "b112115ecb7b3520", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8032eb945507eeb2", "level": "note", "message": {"text": "Legacy-named symbol `entry_copy` in web/projection_store.py:42"}, "properties": {"repobilityId": "7be7d116269c0a71", "scanner": "scanner-primary", "fingerprint": "8032eb945507eeb2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7d2b773a8d7b475d", "level": "note", "message": {"text": "Legacy-named symbol `valucast_prospect_buys_v1` in web/valucast_buy_store.py:12"}, "properties": {"repobilityId": "97e5c8724fab099f", "scanner": "scanner-primary", "fingerprint": "7d2b773a8d7b475d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "aa0ed1f546ce461d", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "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": "b101e732852e2c9f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-6297377883dd7783", "level": "note", "message": {"text": "Near-duplicate function bodies in 13 places"}, "properties": {"repobilityId": "2e14d6300d93d40a", "scanner": "scanner-primary", "fingerprint": "6297377883dd7783", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "8d7248e3179550aa", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "506ef4b4dbdedd72", "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": "64d5ac4bf2f7d536", "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": "921bc22a07c3b375", "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": "e830e16d19293269", "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": "22c4e31a621194a1", "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": "7727bcf608ff0736", "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": "8215dc6e909d59d2", "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": "8f18518473d25303", "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": "59bde8f99d116901", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-fe1d9311d6aee734", "level": "note", "message": {"text": "Near-duplicate function bodies in 12 places"}, "properties": {"repobilityId": "41417f8fe81d663c", "scanner": "scanner-primary", "fingerprint": "fe1d9311d6aee734", "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": "3dc8bbf8af52b433", "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": "6db3c73e48c0bc75", "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": "43f8fa0a6b543847", "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": "d2c6750bc485645d", "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": "0aa54137d3fe712b", "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": "c14aabb7e76f91fc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "302fe621a396c5fd", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-21ba7cd6298df30d", "level": "note", "message": {"text": "Unused endpoint: ANY /rankings"}, "properties": {"repobilityId": "f33d96d2d31897d7", "scanner": "scanner-primary", "fingerprint": "21ba7cd6298df30d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7c99e2dad703b374", "level": "note", "message": {"text": "Unused endpoint: ANY /league-import"}, "properties": {"repobilityId": "56aa0e9a6f3f478e", "scanner": "scanner-primary", "fingerprint": "7c99e2dad703b374", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b722d12b4dd164e9", "level": "note", "message": {"text": "Unused endpoint: ANY /methodology"}, "properties": {"repobilityId": "404e91f0d528506e", "scanner": "scanner-primary", "fingerprint": "b722d12b4dd164e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c4b71bea6e8b246", "level": "note", "message": {"text": "Unused endpoint: ANY /front-office"}, "properties": {"repobilityId": "9d67259d5e1afc0f", "scanner": "scanner-primary", "fingerprint": "6c4b71bea6e8b246", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e8af70d6ef893d3", "level": "note", "message": {"text": "Unused endpoint: ANY /map"}, "properties": {"repobilityId": "3f7e3bfa1566c7b2", "scanner": "scanner-primary", "fingerprint": "6e8af70d6ef893d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4062f33d3f14a7bc", "level": "note", "message": {"text": "Unused endpoint: ANY /buys"}, "properties": {"repobilityId": "8f2ab2dc2c9ffd5c", "scanner": "scanner-primary", "fingerprint": "4062f33d3f14a7bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-589ef3fc02b4fc38", "level": "note", "message": {"text": "Unused endpoint: ANY /player/<player_id>"}, "properties": {"repobilityId": "4af744ff21d0bd7c", "scanner": "scanner-primary", "fingerprint": "589ef3fc02b4fc38", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4846c410eb6a0e7", "level": "note", "message": {"text": "Unused endpoint: ANY /compare"}, "properties": {"repobilityId": "488440ae60bef2ad", "scanner": "scanner-primary", "fingerprint": "e4846c410eb6a0e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10d6c2f14a0f976e", "level": "note", "message": {"text": "Unused endpoint: ANY /export"}, "properties": {"repobilityId": "7d8075e18bcd0696", "scanner": "scanner-primary", "fingerprint": "10d6c2f14a0f976e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bec6a398af8f9278", "level": "note", "message": {"text": "Unused endpoint: ANY /prospects/share-card"}, "properties": {"repobilityId": "6001a24198df6a68", "scanner": "scanner-primary", "fingerprint": "bec6a398af8f9278", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3c08d05a7d9c8cfc", "level": "note", "message": {"text": "Unused endpoint: ANY /prospects/share-card.png"}, "properties": {"repobilityId": "2f16199bf9880c08", "scanner": "scanner-primary", "fingerprint": "3c08d05a7d9c8cfc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-265c3342ed4c20ae", "level": "note", "message": {"text": "Unused endpoint: ANY /prospects/player-card/<player_id>"}, "properties": {"repobilityId": "f294fb1c0f13c5ae", "scanner": "scanner-primary", "fingerprint": "265c3342ed4c20ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d420bf9d896cc479", "level": "note", "message": {"text": "Unused endpoint: ANY /prospects/player-card/<player_id>.png"}, "properties": {"repobilityId": "5f3050941c1a891c", "scanner": "scanner-primary", "fingerprint": "d420bf9d896cc479", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-180c743df8798f29", "level": "note", "message": {"text": "Unused endpoint: ANY /prospects/share-card.svg"}, "properties": {"repobilityId": "20a64c93fabeee6a", "scanner": "scanner-primary", "fingerprint": "180c743df8798f29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-530b9ceb6058882f", "level": "note", "message": {"text": "Unused endpoint: ANY /prospects/graphic"}, "properties": {"repobilityId": "8e1e65802c363fd9", "scanner": "scanner-primary", "fingerprint": "530b9ceb6058882f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}