{"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-a14e20de0472682e", "name": "Possibly dead Python function: show_crop", "shortDescription": {"text": "Possibly dead Python function: show_crop"}, "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-3fd742d69fc9c160", "name": "Possibly dead Python function: decide_main_screen", "shortDescription": {"text": "Possibly dead Python function: decide_main_screen"}, "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-aeb69762a679cef9", "name": "Possibly dead Python function: decide_main_menu_panel", "shortDescription": {"text": "Possibly dead Python function: decide_main_menu_panel"}, "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-82fe9fd93816e130", "name": "Possibly dead Python function: decide_filter_dialog", "shortDescription": {"text": "Possibly dead Python function: decide_filter_dialog"}, "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-1da1682900e6afe4", "name": "Possibly dead Python function: decide_support_picker", "shortDescription": {"text": "Possibly dead Python function: decide_support_picker"}, "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-002a50d69c31601a", "name": "Possibly dead Python function: decide_support_friend_list", "shortDescription": {"text": "Possibly dead Python function: decide_support_friend_list"}, "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-886e98c8aad5a036", "name": "Possibly dead Python function: decide_support_card_detail", "shortDescription": {"text": "Possibly dead Python function: decide_support_card_detail"}, "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-a481e50d8dead294", "name": "Possibly dead Python function: is_blue_region", "shortDescription": {"text": "Possibly dead Python function: is_blue_region"}, "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-238c6b9ff5b8fe4c", "name": "Possibly dead Python function: is_blessing_slot_filled", "shortDescription": {"text": "Possibly dead Python function: is_blessing_slot_filled"}, "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-2b921b0e2af751b2", "name": "Possibly dead Python function: card_highlight_score", "shortDescription": {"text": "Possibly dead Python function: card_highlight_score"}, "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-35493e50e3c3a979", "name": "Possibly dead Python function: detail_sub_blessing_slot_filled", "shortDescription": {"text": "Possibly dead Python function: detail_sub_blessing_slot_filled"}, "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-fcd02ae50356ce75", "name": "Possibly dead Python function: detect_red_text", "shortDescription": {"text": "Possibly dead Python function: detect_red_text"}, "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-710a40fa7de9ecc0", "name": "Possibly dead Python function: detect_yellow_text", "shortDescription": {"text": "Possibly dead Python function: detect_yellow_text"}, "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-5f024dcdd281badf", "name": "Possibly dead Python function: blessing_score", "shortDescription": {"text": "Possibly dead Python function: blessing_score"}, "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-9198b834e2b1f74f", "name": "Possibly dead Python function: read_names", "shortDescription": {"text": "Possibly dead Python function: read_names"}, "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-37bc503eeb157e8f", "name": "Possibly dead Python function: parse_filter_dialog", "shortDescription": {"text": "Possibly dead Python function: parse_filter_dialog"}, "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-f5833efea567b686", "name": "Possibly dead Python function: parse_skip_battle_confirm", "shortDescription": {"text": "Possibly dead Python function: parse_skip_battle_confirm"}, "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-7403e3905ff28daf", "name": "Possibly dead Python function: parse_support_picker", "shortDescription": {"text": "Possibly dead Python function: parse_support_picker"}, "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-8115c492c211cd5f", "name": "Possibly dead Python function: parse_support_friend_list", "shortDescription": {"text": "Possibly dead Python function: parse_support_friend_list"}, "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-3cb86652a20a3203", "name": "Possibly dead Python function: parse_support_card_detail", "shortDescription": {"text": "Possibly dead Python function: parse_support_card_detail"}, "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-7a126f747db576f6", "name": "Possibly dead Python function: worker", "shortDescription": {"text": "Possibly dead Python function: worker"}, "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-30b8b5ad5a091594", "name": "Possibly dead Python function: visit", "shortDescription": {"text": "Possibly dead Python function: visit"}, "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-53a952c683f11e53", "name": "Possibly dead Python function: wrapped", "shortDescription": {"text": "Possibly dead Python function: wrapped"}, "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-fcad88d6b9036049", "name": "Possibly dead Python function: stop_process", "shortDescription": {"text": "Possibly dead Python function: stop_process"}, "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-bfdc1922118ccb14", "name": "Possibly dead Python function: clear_log", "shortDescription": {"text": "Possibly dead Python function: clear_log"}, "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-df1d1b1e9d1e186c", "name": "Possibly dead Python function: reload_characters", "shortDescription": {"text": "Possibly dead Python function: reload_characters"}, "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-6271e90936e49e41", "name": "Possibly dead Python function: start_loop", "shortDescription": {"text": "Possibly dead Python function: start_loop"}, "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-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-70a6be535ad34511", "name": "Very large file: tests/test_policy.py (1362 lines)", "shortDescription": {"text": "Very large file: tests/test_policy.py (1362 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-9ebe6c0ed436ae2d", "name": "Very large file: tests/test_screen_reader.py (1007 lines)", "shortDescription": {"text": "Very large file: tests/test_screen_reader.py (1007 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-aef63057e68ff5a6", "name": "Very large file: starsavior_trainer/policy.py (1091 lines)", "shortDescription": {"text": "Very large file: starsavior_trainer/policy.py (1091 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-5902046ad7655471", "name": "Very large file: starsavior_trainer/classifier.py (1035 lines)", "shortDescription": {"text": "Very large file: starsavior_trainer/classifier.py (1035 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-3a364be6219a946f", "name": "Very large file: starsavior_trainer/screen_reader.py (1834 lines)", "shortDescription": {"text": "Very large file: starsavior_trainer/screen_reader.py (1834 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-6f6f325232e49f51", "name": "Very large file: starsavior_trainer/cli/live_loop.py (1510 lines)", "shortDescription": {"text": "Very large file: starsavior_trainer/cli/live_loop.py (1510 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 199 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. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bdafb94b134818e9", "name": "Commented-code block (5 lines) in tests/test_classifier.py:220", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_classifier.py:220"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-620e539344397879", "name": "Commented-code block (6 lines) in tests/test_policy.py:453", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_policy.py:453"}, "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-bf4749a591334093", "name": "Commented-code block (7 lines) in tests/test_executor.py:79", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_executor.py:79"}, "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-2b29abdd8ab0148f", "name": "Commented-code block (6 lines) in starsavior_trainer/training_inspector.py:63", "shortDescription": {"text": "Commented-code block (6 lines) in starsavior_trainer/training_inspector.py:63"}, "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-49d92bfa56e17447", "name": "Commented-code block (6 lines) in starsavior_trainer/policy.py:207", "shortDescription": {"text": "Commented-code block (6 lines) in starsavior_trainer/policy.py:207"}, "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-7375ae51896bcd3d", "name": "Commented-code block (6 lines) in starsavior_trainer/classifier.py:22", "shortDescription": {"text": "Commented-code block (6 lines) in starsavior_trainer/classifier.py:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf24dd979903a600", "name": "Commented-code block (5 lines) in starsavior_trainer/models.py:64", "shortDescription": {"text": "Commented-code block (5 lines) in starsavior_trainer/models.py:64"}, "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-fdbf421f51839c59", "name": "Legacy-named symbol `text_v2` in starsavior_trainer/screen_reader.py:703", "shortDescription": {"text": "Legacy-named symbol `text_v2` in starsavior_trainer/screen_reader.py:703"}, "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-773b0b2e58fd1761", "name": "Commented-code block (6 lines) in starsavior_trainer/screen_reader.py:987", "shortDescription": {"text": "Commented-code block (6 lines) in starsavior_trainer/screen_reader.py:987"}, "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-5de063c91c9411b7", "name": "Commented-code block (5 lines) in starsavior_trainer/ocr.py:314", "shortDescription": {"text": "Commented-code block (5 lines) in starsavior_trainer/ocr.py:314"}, "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-236ee7d2446f9f47", "name": "Commented-code block (8 lines) in starsavior_trainer/screens/__init__.py:419", "shortDescription": {"text": "Commented-code block (8 lines) in starsavior_trainer/screens/__init__.py:419"}, "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-5c1abd7aa06b3ebf", "name": "Commented-code block (5 lines) in starsavior_trainer/cli/live_loop.py:106", "shortDescription": {"text": "Commented-code block (5 lines) in starsavior_trainer/cli/live_loop.py:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nstarsavior_trainer/vision.py:detect, starsavior_trainer/vision.py:detect\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nstarsavior_trainer/executor.py:execute, starsavior_trainer/executor.py:execute, starsavior_trainer/executor.py:execute, starsavior_trainer/executor.py:execute\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:\nstarsavior_trainer/ocr.py:read_text, starsavior_trainer/ocr.py:read_text, starsavior_trainer/ocr.py:read_text, starsavior_trainer/ocr.py:read_text\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/24915"}, "properties": {"repository": "chengfeng16833/chengfeng", "repoUrl": "https://github.com/chengfeng16833/chengfeng", "branch": "main"}, "results": [{"ruleId": "scanner-a14e20de0472682e", "level": "note", "message": {"text": "Possibly dead Python function: show_crop"}, "properties": {"repobilityId": "7fd12381e952843f", "scanner": "scanner-primary", "fingerprint": "a14e20de0472682e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/_measure.py:7"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3fd742d69fc9c160", "level": "note", "message": {"text": "Possibly dead Python function: decide_main_screen"}, "properties": {"repobilityId": "c3784a03c4238c95", "scanner": "scanner-primary", "fingerprint": "3fd742d69fc9c160", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/prejourney.py:109"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aeb69762a679cef9", "level": "note", "message": {"text": "Possibly dead Python function: decide_main_menu_panel"}, "properties": {"repobilityId": "ed764d1372883ef1", "scanner": "scanner-primary", "fingerprint": "aeb69762a679cef9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/prejourney.py:116"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-82fe9fd93816e130", "level": "note", "message": {"text": "Possibly dead Python function: decide_filter_dialog"}, "properties": {"repobilityId": "26a0cef4ce33d882", "scanner": "scanner-primary", "fingerprint": "82fe9fd93816e130", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/prejourney.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1da1682900e6afe4", "level": "note", "message": {"text": "Possibly dead Python function: decide_support_picker"}, "properties": {"repobilityId": "41dcf942983fbe5d", "scanner": "scanner-primary", "fingerprint": "1da1682900e6afe4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/prejourney.py:198"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-002a50d69c31601a", "level": "note", "message": {"text": "Possibly dead Python function: decide_support_friend_list"}, "properties": {"repobilityId": "cb20c8ab3ddaffd0", "scanner": "scanner-primary", "fingerprint": "002a50d69c31601a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/prejourney.py:216"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-886e98c8aad5a036", "level": "note", "message": {"text": "Possibly dead Python function: decide_support_card_detail"}, "properties": {"repobilityId": "5ac6eccdc8f4c433", "scanner": "scanner-primary", "fingerprint": "886e98c8aad5a036", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/prejourney.py:236"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a481e50d8dead294", "level": "note", "message": {"text": "Possibly dead Python function: is_blue_region"}, "properties": {"repobilityId": "e922e4bcc9be7c4d", "scanner": "scanner-primary", "fingerprint": "a481e50d8dead294", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/vision.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-238c6b9ff5b8fe4c", "level": "note", "message": {"text": "Possibly dead Python function: is_blessing_slot_filled"}, "properties": {"repobilityId": "b86c9f4c58ad0061", "scanner": "scanner-primary", "fingerprint": "238c6b9ff5b8fe4c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/vision.py:152"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2b921b0e2af751b2", "level": "note", "message": {"text": "Possibly dead Python function: card_highlight_score"}, "properties": {"repobilityId": "9fa50783f2e6e6db", "scanner": "scanner-primary", "fingerprint": "2b921b0e2af751b2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/vision.py:170"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-35493e50e3c3a979", "level": "note", "message": {"text": "Possibly dead Python function: detail_sub_blessing_slot_filled"}, "properties": {"repobilityId": "452ee71290ab425f", "scanner": "scanner-primary", "fingerprint": "35493e50e3c3a979", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/vision.py:202"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcd02ae50356ce75", "level": "note", "message": {"text": "Possibly dead Python function: detect_red_text"}, "properties": {"repobilityId": "74e02ccf69f84121", "scanner": "scanner-primary", "fingerprint": "fcd02ae50356ce75", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/vision.py:216"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-710a40fa7de9ecc0", "level": "note", "message": {"text": "Possibly dead Python function: detect_yellow_text"}, "properties": {"repobilityId": "667f19b56e433464", "scanner": "scanner-primary", "fingerprint": "710a40fa7de9ecc0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/vision.py:233"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f024dcdd281badf", "level": "note", "message": {"text": "Possibly dead Python function: blessing_score"}, "properties": {"repobilityId": "c1813fc45e7a490e", "scanner": "scanner-primary", "fingerprint": "5f024dcdd281badf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/policy.py:521"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9198b834e2b1f74f", "level": "note", "message": {"text": "Possibly dead Python function: read_names"}, "properties": {"repobilityId": "96a79edf9a2959b8", "scanner": "scanner-primary", "fingerprint": "9198b834e2b1f74f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/screen_reader.py:134"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-37bc503eeb157e8f", "level": "note", "message": {"text": "Possibly dead Python function: parse_filter_dialog"}, "properties": {"repobilityId": "9103a5c883cadeb7", "scanner": "scanner-primary", "fingerprint": "37bc503eeb157e8f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/screen_reader.py:655"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f5833efea567b686", "level": "note", "message": {"text": "Possibly dead Python function: parse_skip_battle_confirm"}, "properties": {"repobilityId": "7449589269e74072", "scanner": "scanner-primary", "fingerprint": "f5833efea567b686", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/screen_reader.py:692"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7403e3905ff28daf", "level": "note", "message": {"text": "Possibly dead Python function: parse_support_picker"}, "properties": {"repobilityId": "0aa2170f4e407c29", "scanner": "scanner-primary", "fingerprint": "7403e3905ff28daf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/screen_reader.py:797"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8115c492c211cd5f", "level": "note", "message": {"text": "Possibly dead Python function: parse_support_friend_list"}, "properties": {"repobilityId": "a8773666a9b1dda8", "scanner": "scanner-primary", "fingerprint": "8115c492c211cd5f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/screen_reader.py:814"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3cb86652a20a3203", "level": "note", "message": {"text": "Possibly dead Python function: parse_support_card_detail"}, "properties": {"repobilityId": "375ac25956508d79", "scanner": "scanner-primary", "fingerprint": "3cb86652a20a3203", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/screen_reader.py:836"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7a126f747db576f6", "level": "note", "message": {"text": "Possibly dead Python function: worker"}, "properties": {"repobilityId": "fbe2b50200068803", "scanner": "scanner-primary", "fingerprint": "7a126f747db576f6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/capture.py:141"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30b8b5ad5a091594", "level": "note", "message": {"text": "Possibly dead Python function: visit"}, "properties": {"repobilityId": "317f58061af0c67b", "scanner": "scanner-primary", "fingerprint": "30b8b5ad5a091594", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/capture.py:233"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-53a952c683f11e53", "level": "note", "message": {"text": "Possibly dead Python function: wrapped"}, "properties": {"repobilityId": "faacdada21d43bd9", "scanner": "scanner-primary", "fingerprint": "53a952c683f11e53", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/capture.py:296"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcad88d6b9036049", "level": "note", "message": {"text": "Possibly dead Python function: stop_process"}, "properties": {"repobilityId": "7c891cac07ec7982", "scanner": "scanner-primary", "fingerprint": "fcad88d6b9036049", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/cli/gui.py:511"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bfdc1922118ccb14", "level": "note", "message": {"text": "Possibly dead Python function: clear_log"}, "properties": {"repobilityId": "fb1e7b60eeafa98e", "scanner": "scanner-primary", "fingerprint": "bfdc1922118ccb14", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/cli/gui.py:520"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-df1d1b1e9d1e186c", "level": "note", "message": {"text": "Possibly dead Python function: reload_characters"}, "properties": {"repobilityId": "7da28374c5443321", "scanner": "scanner-primary", "fingerprint": "df1d1b1e9d1e186c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/cli/gui.py:532"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6271e90936e49e41", "level": "note", "message": {"text": "Possibly dead Python function: start_loop"}, "properties": {"repobilityId": "3c33bce77982d7ce", "scanner": "scanner-primary", "fingerprint": "6271e90936e49e41", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "starsavior_trainer/cli/gui.py:538"}, "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-70a6be535ad34511", "level": "note", "message": {"text": "Very large file: tests/test_policy.py (1362 lines)"}, "properties": {"repobilityId": "e1f35ffa85d02e9d", "scanner": "scanner-primary", "fingerprint": "70a6be535ad34511", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9ebe6c0ed436ae2d", "level": "note", "message": {"text": "Very large file: tests/test_screen_reader.py (1007 lines)"}, "properties": {"repobilityId": "c15d10589921df6c", "scanner": "scanner-primary", "fingerprint": "9ebe6c0ed436ae2d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aef63057e68ff5a6", "level": "note", "message": {"text": "Very large file: starsavior_trainer/policy.py (1091 lines)"}, "properties": {"repobilityId": "f31985e5d597ad95", "scanner": "scanner-primary", "fingerprint": "aef63057e68ff5a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5902046ad7655471", "level": "note", "message": {"text": "Very large file: starsavior_trainer/classifier.py (1035 lines)"}, "properties": {"repobilityId": "540ce99246bfbdb6", "scanner": "scanner-primary", "fingerprint": "5902046ad7655471", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3a364be6219a946f", "level": "note", "message": {"text": "Very large file: starsavior_trainer/screen_reader.py (1834 lines)"}, "properties": {"repobilityId": "d064eb4cc6c48165", "scanner": "scanner-primary", "fingerprint": "3a364be6219a946f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6f6f325232e49f51", "level": "note", "message": {"text": "Very large file: starsavior_trainer/cli/live_loop.py (1510 lines)"}, "properties": {"repobilityId": "efcbad1c3afb3e2c", "scanner": "scanner-primary", "fingerprint": "6f6f325232e49f51", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "18513810012d571e", "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": "a74d44fc7e914e59", "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": "033b219029159c24", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "bac9f5ab23ffdc35", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-bdafb94b134818e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_classifier.py:220"}, "properties": {"repobilityId": "d0852562da9a7081", "scanner": "scanner-primary", "fingerprint": "bdafb94b134818e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-620e539344397879", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_policy.py:453"}, "properties": {"repobilityId": "4c9f7ee387e35d6d", "scanner": "scanner-primary", "fingerprint": "620e539344397879", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf4749a591334093", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_executor.py:79"}, "properties": {"repobilityId": "b1ca11a5339c6091", "scanner": "scanner-primary", "fingerprint": "bf4749a591334093", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b29abdd8ab0148f", "level": "none", "message": {"text": "Commented-code block (6 lines) in starsavior_trainer/training_inspector.py:63"}, "properties": {"repobilityId": "46e92a0abd6e965b", "scanner": "scanner-primary", "fingerprint": "2b29abdd8ab0148f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49d92bfa56e17447", "level": "none", "message": {"text": "Commented-code block (6 lines) in starsavior_trainer/policy.py:207"}, "properties": {"repobilityId": "66dd0a2931352322", "scanner": "scanner-primary", "fingerprint": "49d92bfa56e17447", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7375ae51896bcd3d", "level": "none", "message": {"text": "Commented-code block (6 lines) in starsavior_trainer/classifier.py:22"}, "properties": {"repobilityId": "5689083ff22a3c70", "scanner": "scanner-primary", "fingerprint": "7375ae51896bcd3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf24dd979903a600", "level": "none", "message": {"text": "Commented-code block (5 lines) in starsavior_trainer/models.py:64"}, "properties": {"repobilityId": "eb6f94eb758c1f8c", "scanner": "scanner-primary", "fingerprint": "bf24dd979903a600", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fdbf421f51839c59", "level": "note", "message": {"text": "Legacy-named symbol `text_v2` in starsavior_trainer/screen_reader.py:703"}, "properties": {"repobilityId": "3bf3b394657bb7b8", "scanner": "scanner-primary", "fingerprint": "fdbf421f51839c59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-773b0b2e58fd1761", "level": "none", "message": {"text": "Commented-code block (6 lines) in starsavior_trainer/screen_reader.py:987"}, "properties": {"repobilityId": "8f49d59e233902a6", "scanner": "scanner-primary", "fingerprint": "773b0b2e58fd1761", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5de063c91c9411b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in starsavior_trainer/ocr.py:314"}, "properties": {"repobilityId": "cf2bdf6b89ff0de2", "scanner": "scanner-primary", "fingerprint": "5de063c91c9411b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-236ee7d2446f9f47", "level": "none", "message": {"text": "Commented-code block (8 lines) in starsavior_trainer/screens/__init__.py:419"}, "properties": {"repobilityId": "3f3cc6fe2b853668", "scanner": "scanner-primary", "fingerprint": "236ee7d2446f9f47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c1abd7aa06b3ebf", "level": "none", "message": {"text": "Commented-code block (5 lines) in starsavior_trainer/cli/live_loop.py:106"}, "properties": {"repobilityId": "ae3f80ec906a8067", "scanner": "scanner-primary", "fingerprint": "5c1abd7aa06b3ebf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f57e94c8ce064de7", "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": "bdbaa9bd5ab26b35", "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": "18579f13e9739f34", "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": "f2fc836e132e1578", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "8afcf1d0eb128ff7", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "9a069d16483b4979", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "e08eb39a584ce02f", "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": "3ac0931944f992cd", "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": "df66caefb8834021", "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": "f01788a08bb0b6f9", "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": "955e0a6846ca6e04", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}