{"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-75dac1240ce2c86f", "name": "Possibly dead Python function: refresh_if_stale", "shortDescription": {"text": "Possibly dead Python function: refresh_if_stale"}, "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-66aa083f8ece6f19", "name": "Possibly dead Python function: lookup", "shortDescription": {"text": "Possibly dead Python function: lookup"}, "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-85548b5fafaa5810", "name": "Possibly dead Python function: compute_all_hitters_xwoba3d", "shortDescription": {"text": "Possibly dead Python function: compute_all_hitters_xwoba3d"}, "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-2b70bddbff6faeab", "name": "Possibly dead Python function: rv_hitter_runexp", "shortDescription": {"text": "Possibly dead Python function: rv_hitter_runexp"}, "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-26b21575788004db", "name": "Possibly dead Python function: normalize_team", "shortDescription": {"text": "Possibly dead Python function: normalize_team"}, "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-0a751683b2c82a15", "name": "Possibly dead Python function: normalize_event", "shortDescription": {"text": "Possibly dead Python function: normalize_event"}, "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-ab8c82e6c6187244", "name": "Possibly dead Python function: remap", "shortDescription": {"text": "Possibly dead Python function: remap"}, "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-f210fb8e7d15943f", "name": "Very large file: Cards.py (1895 lines)", "shortDescription": {"text": "Very large file: Cards.py (1895 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-462956e317e08ad2", "name": "Very large file: process_data.py (3823 lines)", "shortDescription": {"text": "Very large file: process_data.py (3823 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-3ff1a9b5cbcd4927", "name": "Very large file: HitterCards.py (2430 lines)", "shortDescription": {"text": "Very large file: HitterCards.py (2430 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-e1c78cd15def3d19", "name": "Very large file: Pitcher2026.py (1756 lines)", "shortDescription": {"text": "Very large file: Pitcher2026.py (1756 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 25 source file(s) (ratio 0.04). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 426 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a1942948c5c81b71", "name": "Commented-code block (5 lines) in pipeline_utils.py:47", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline_utils.py:47"}, "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-3cd75c0b173faa4f", "name": "Commented-code block (6 lines) in sheets_append.py:154", "shortDescription": {"text": "Commented-code block (6 lines) in sheets_append.py:154"}, "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-10743f83ed090f8e", "name": "Commented-code block (6 lines) in Cards.py:118", "shortDescription": {"text": "Commented-code block (6 lines) in Cards.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-fedf0d2ab983b4de", "name": "Commented-code block (5 lines) in pipeline_compute.py:565", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline_compute.py:565"}, "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-45a1b15473634de2", "name": "Commented-code block (9 lines) in process_data.py:1178", "shortDescription": {"text": "Commented-code block (9 lines) in process_data.py:1178"}, "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-e6ed7ea1199ee789", "name": "Commented-code block (7 lines) in backfill_supplement.py:84", "shortDescription": {"text": "Commented-code block (7 lines) in backfill_supplement.py:84"}, "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-bc61317966f903a9", "name": "Commented-code block (12 lines) in pipeline_contact.py:42", "shortDescription": {"text": "Commented-code block (12 lines) in pipeline_contact.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e57ff0f466cad93b", "name": "Commented-code block (5 lines) in pipeline_fetch.py:261", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline_fetch.py:261"}, "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-52f3f715e36ed0aa", "name": "Legacy-named symbol `_bg_hex_unused` in HitterCards.py:242", "shortDescription": {"text": "Legacy-named symbol `_bg_hex_unused` in HitterCards.py:242"}, "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-abf6f800f55597d0", "name": "Commented-code block (6 lines) in HitterCards.py:201", "shortDescription": {"text": "Commented-code block (6 lines) in HitterCards.py:201"}, "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-c36c696c41863c18", "name": "Commented-code block (5 lines) in pipeline_sdplus.py:58", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline_sdplus.py:58"}, "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-eeaf53842b27c47e", "name": "Network/subprocess call without timeout or try/except \u2014 generate_pitcher_card.py:188", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 generate_pitcher_card.py:188"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` 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-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:\nCards.py:avg_tilt, generate_batch_cards.py:avg_tilt\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}}]}}, "automationDetails": {"id": "repobility/30438"}, "properties": {"repository": "wjhuron/Huronalytics", "repoUrl": "https://github.com/wjhuron/Huronalytics", "branch": "main"}, "results": [{"ruleId": "scanner-75dac1240ce2c86f", "level": "note", "message": {"text": "Possibly dead Python function: refresh_if_stale"}, "properties": {"repobilityId": "7a67ca6ea5e8f428", "scanner": "scanner-primary", "fingerprint": "75dac1240ce2c86f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fg_overrides.py:228"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-66aa083f8ece6f19", "level": "note", "message": {"text": "Possibly dead Python function: lookup"}, "properties": {"repobilityId": "16e76142eb4f59a9", "scanner": "scanner-primary", "fingerprint": "66aa083f8ece6f19", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "HitterCards.py:466"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-85548b5fafaa5810", "level": "note", "message": {"text": "Possibly dead Python function: compute_all_hitters_xwoba3d"}, "properties": {"repobilityId": "bac6f6f228a3b6d0", "scanner": "scanner-primary", "fingerprint": "85548b5fafaa5810", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline_xwoba3d.py:177"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2b70bddbff6faeab", "level": "note", "message": {"text": "Possibly dead Python function: rv_hitter_runexp"}, "properties": {"repobilityId": "e03e1d1d94947a05", "scanner": "scanner-primary", "fingerprint": "2b70bddbff6faeab", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline_sdplus.py:170"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26b21575788004db", "level": "note", "message": {"text": "Possibly dead Python function: normalize_team"}, "properties": {"repobilityId": "8dc79d4ab78fdf23", "scanner": "scanner-primary", "fingerprint": "26b21575788004db", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Hitter2026.py:45"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a751683b2c82a15", "level": "note", "message": {"text": "Possibly dead Python function: normalize_event"}, "properties": {"repobilityId": "9a2af103ea368fe1", "scanner": "scanner-primary", "fingerprint": "0a751683b2c82a15", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Hitter2026.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ab8c82e6c6187244", "level": "note", "message": {"text": "Possibly dead Python function: remap"}, "properties": {"repobilityId": "601e7981faa0138a", "scanner": "scanner-primary", "fingerprint": "ab8c82e6c6187244", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Pitcher2026.py:273"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f210fb8e7d15943f", "level": "note", "message": {"text": "Very large file: Cards.py (1895 lines)"}, "properties": {"repobilityId": "7cead527a26dab50", "scanner": "scanner-primary", "fingerprint": "f210fb8e7d15943f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-462956e317e08ad2", "level": "note", "message": {"text": "Very large file: process_data.py (3823 lines)"}, "properties": {"repobilityId": "c46daf8d8baee425", "scanner": "scanner-primary", "fingerprint": "462956e317e08ad2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ff1a9b5cbcd4927", "level": "note", "message": {"text": "Very large file: HitterCards.py (2430 lines)"}, "properties": {"repobilityId": "6b400bcacf5959f3", "scanner": "scanner-primary", "fingerprint": "3ff1a9b5cbcd4927", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1c78cd15def3d19", "level": "note", "message": {"text": "Very large file: Pitcher2026.py (1756 lines)"}, "properties": {"repobilityId": "3e8fce8d6cf669ee", "scanner": "scanner-primary", "fingerprint": "e1c78cd15def3d19", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "e8bd2f1d7653d32f", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "a681ed129292b30d", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c01229d982ca0e31", "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": "f3e89444ccdadbee", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "9da2626b3aa6ec8e", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-a1942948c5c81b71", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline_utils.py:47"}, "properties": {"repobilityId": "87d69e30a8d2290e", "scanner": "scanner-primary", "fingerprint": "a1942948c5c81b71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cd75c0b173faa4f", "level": "none", "message": {"text": "Commented-code block (6 lines) in sheets_append.py:154"}, "properties": {"repobilityId": "33bf213ac8eb1b0a", "scanner": "scanner-primary", "fingerprint": "3cd75c0b173faa4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10743f83ed090f8e", "level": "none", "message": {"text": "Commented-code block (6 lines) in Cards.py:118"}, "properties": {"repobilityId": "633250cad813ee4b", "scanner": "scanner-primary", "fingerprint": "10743f83ed090f8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fedf0d2ab983b4de", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline_compute.py:565"}, "properties": {"repobilityId": "34d2673279417147", "scanner": "scanner-primary", "fingerprint": "fedf0d2ab983b4de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45a1b15473634de2", "level": "none", "message": {"text": "Commented-code block (9 lines) in process_data.py:1178"}, "properties": {"repobilityId": "eb5669c45db30097", "scanner": "scanner-primary", "fingerprint": "45a1b15473634de2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6ed7ea1199ee789", "level": "none", "message": {"text": "Commented-code block (7 lines) in backfill_supplement.py:84"}, "properties": {"repobilityId": "e3e2a6133fd4f1bd", "scanner": "scanner-primary", "fingerprint": "e6ed7ea1199ee789", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc61317966f903a9", "level": "none", "message": {"text": "Commented-code block (12 lines) in pipeline_contact.py:42"}, "properties": {"repobilityId": "1fab1e5fdab95bad", "scanner": "scanner-primary", "fingerprint": "bc61317966f903a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e57ff0f466cad93b", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline_fetch.py:261"}, "properties": {"repobilityId": "91df6792ecc7e0e0", "scanner": "scanner-primary", "fingerprint": "e57ff0f466cad93b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52f3f715e36ed0aa", "level": "note", "message": {"text": "Legacy-named symbol `_bg_hex_unused` in HitterCards.py:242"}, "properties": {"repobilityId": "e2c77b255202923d", "scanner": "scanner-primary", "fingerprint": "52f3f715e36ed0aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-abf6f800f55597d0", "level": "none", "message": {"text": "Commented-code block (6 lines) in HitterCards.py:201"}, "properties": {"repobilityId": "6b0057b46ea5dfd8", "scanner": "scanner-primary", "fingerprint": "abf6f800f55597d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c36c696c41863c18", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline_sdplus.py:58"}, "properties": {"repobilityId": "2ef8a961c0965a82", "scanner": "scanner-primary", "fingerprint": "c36c696c41863c18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eeaf53842b27c47e", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 generate_pitcher_card.py:188"}, "properties": {"repobilityId": "2ab6521309f9c121", "scanner": "scanner-primary", "fingerprint": "eeaf53842b27c47e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3b17d33e9e88582c", "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": "a9184b79774533a4", "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": "0bd89b2372c57925", "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": "fe164cc73f42ae59", "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": "fafdee113920a7be", "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": "c7998f794043a694", "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": "3fba6eaa9e486437", "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": "c253989c08268840", "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": "fd2283d67d21d2ee", "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": "f76c43ec7051df32", "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": "9b6d96ed41ae0a91", "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": "311b33fef1eb1d2f", "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": "7c9780dde47ffc28", "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": "cb847f246f47ec87", "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": "7a9b7dccab406efa", "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": "389df6496f632d45", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}