{"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": "MINED111", "name": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or ", "shortDescription": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "fullDescription": {"text": "Either narrow the exception type, log the exception with `logger.exception(...)`, or re-raise after handling."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "medium", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "CFG006", "name": "[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts.", "shortDescription": {"text": "[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts."}, "fullDescription": {"text": "Add a .gitignore appropriate for your language/framework."}, "properties": {"scanner": "repobility-threat-engine", "category": "practices", "severity": "medium", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_CI", "name": "No CI/CD configuration found", "shortDescription": {"text": "No CI/CD configuration found"}, "fullDescription": {"text": "Add a CI/CD pipeline: create .github/workflows/ci.yml for GitHub Actions with steps to lint, test, and build on every push and pull request."}, "properties": {"scanner": "repobility-core", "category": "practices", "severity": "medium", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "AIC003", "name": "Duplicated implementation block across source files", "shortDescription": {"text": "Duplicated implementation block across source files"}, "fullDescription": {"text": "Extract the shared behavior into one function/module or delete the inactive duplicate after proving which path is used."}, "properties": {"scanner": "repobility-ai-code-hygiene", "category": "quality", "severity": "low", "confidence": 0.86, "cwe": "", "owasp": ""}}, {"id": "COMP001", "name": "[COMP001] High cognitive complexity: Function `plot_one_year_comparison` has cognitive complexity 13 (SonarSource scale)", "shortDescription": {"text": "[COMP001] High cognitive complexity: Function `plot_one_year_comparison` has cognitive complexity 13 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, an"}, "fullDescription": {"text": "Extract nested branches into named helper functions; flatten early-return / guard clauses; replace long if/elif chains with dispatch dicts or polymorphism. SonarQube's threshold for 'should refactor' is 15 \u2014 yours is 13."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "low", "confidence": 0.95, "cwe": "", "owasp": ""}}, {"id": "MINED067", "name": "[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever.", "shortDescription": {"text": "[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-400 /  for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "SEC078", "name": "[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsiv", "shortDescription": {"text": "[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsive server, causing thread exhaustion and ReDoS. Ported from bandit B113 (Apache-2.0). NOTE: this regex is heuristic; a re"}, "fullDescription": {"text": "Add `timeout=10` (or appropriate value) to every requests call."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 0.1, "cwe": "", "owasp": ""}}, {"id": "MINED108", "name": "[MINED108] `self.request` used but never assigned in __init__: Method `option_contract` of class `AlpacaPaperClient` rea", "shortDescription": {"text": "[MINED108] `self.request` used but never assigned in __init__: Method `option_contract` of class `AlpacaPaperClient` reads `self.request`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError "}, "fullDescription": {"text": "Initialize `self.request = <default>` in __init__, or add a class-level default."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_TESTS", "name": "No test files found", "shortDescription": {"text": "No test files found"}, "fullDescription": {"text": "Add a test directory (tests/ or __tests__/) with unit tests for core functionality. Use pytest (Python), Jest (JS/TS), or go test (Go). Start with tests for critical business logic and security-sensitive functions."}, "properties": {"scanner": "repobility-core", "category": "testing", "severity": "high", "confidence": null, "cwe": "", "owasp": ""}}]}}, "automationDetails": {"id": "repobility/997"}, "properties": {"repository": "randomwalkhan/Short-Term-Reversal-Strategy", "repoUrl": "https://github.com/randomwalkhan/Short-Term-Reversal-Strategy", "branch": "main"}, "results": [{"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93587, "scanner": "repobility-ast-engine", "fingerprint": "7c4a2d1066874c12f646954073d37e979e73b2d4843926b50a3125f5df1adf05", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|7c4a2d1066874c12f646954073d37e979e73b2d4843926b50a3125f5df1adf05"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_4_1_alpaca_paper.py"}, "region": {"startLine": 550}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93586, "scanner": "repobility-ast-engine", "fingerprint": "2252d3bed59c5ff8037703c39fa43864aefff2fbba1eaf27c2ceb0d1e6b19da0", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|2252d3bed59c5ff8037703c39fa43864aefff2fbba1eaf27c2ceb0d1e6b19da0"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_4_1_alpaca_paper.py"}, "region": {"startLine": 265}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93580, "scanner": "repobility-ast-engine", "fingerprint": "5c2a24d2be23f244eb5d757775ec36fa820dcf117547e24f0c571b4473c660e0", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|5c2a24d2be23f244eb5d757775ec36fa820dcf117547e24f0c571b4473c660e0"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 638}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93579, "scanner": "repobility-ast-engine", "fingerprint": "afdd68f20d2c2270744b28b046ddccd5572e57eac53b57a76cd8a73f2e97bb64", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|afdd68f20d2c2270744b28b046ddccd5572e57eac53b57a76cd8a73f2e97bb64"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 1724}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93578, "scanner": "repobility-ast-engine", "fingerprint": "f4be0a9580efed237d1c14c6d351689a31e0a1960070e9b9855b71e8e82d3ba6", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|f4be0a9580efed237d1c14c6d351689a31e0a1960070e9b9855b71e8e82d3ba6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 1319}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93577, "scanner": "repobility-ast-engine", "fingerprint": "f7fe0033c44ab6038831b00b0dde8c188e3a9fd6dee512633c8bc8aabf8b724f", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|f7fe0033c44ab6038831b00b0dde8c188e3a9fd6dee512633c8bc8aabf8b724f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 985}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93576, "scanner": "repobility-ast-engine", "fingerprint": "5faf0c64956ca2894a04b8d3563b441b7a128747d251b60e912fbee5879a1428", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|5faf0c64956ca2894a04b8d3563b441b7a128747d251b60e912fbee5879a1428"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 650}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93575, "scanner": "repobility-ast-engine", "fingerprint": "1ed79721455831384afa83508146885cdb3eabcaf5f72f20e592b65a3dbe0806", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|1ed79721455831384afa83508146885cdb3eabcaf5f72f20e592b65a3dbe0806"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 502}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93574, "scanner": "repobility-ast-engine", "fingerprint": "7a8e8fe46d517644248a9e5b090cc385158615bf7ad199fdcbfcf4c3ac900beb", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|7a8e8fe46d517644248a9e5b090cc385158615bf7ad199fdcbfcf4c3ac900beb"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 418}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93573, "scanner": "repobility-ast-engine", "fingerprint": "2bb386d17828afaa6332810e5c6641246e2aa514a1b1064af16eb82c2797b3b4", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|2bb386d17828afaa6332810e5c6641246e2aa514a1b1064af16eb82c2797b3b4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 1940}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93572, "scanner": "repobility-ast-engine", "fingerprint": "d1218bfb4cee698c12c7a5cc20bfb37118d25f57b760b22238d5ca6f703c56e6", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|d1218bfb4cee698c12c7a5cc20bfb37118d25f57b760b22238d5ca6f703c56e6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 703}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93571, "scanner": "repobility-ast-engine", "fingerprint": "ffeee50d3874e59eb4b397bfb3751e9d56ad9f5c94adba1cb65d1a360d8bb936", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|ffeee50d3874e59eb4b397bfb3751e9d56ad9f5c94adba1cb65d1a360d8bb936"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 568}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93570, "scanner": "repobility-ast-engine", "fingerprint": "f7a711ac86cca863156021f01c5b6a5141f11cd58b66b5a521c7d3ada8f1b538", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|f7a711ac86cca863156021f01c5b6a5141f11cd58b66b5a521c7d3ada8f1b538"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 561}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93569, "scanner": "repobility-ast-engine", "fingerprint": "817bf8bb2b3ae1dcf2618f288c24651ef5b934dee318086eaee862e71501ba72", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|817bf8bb2b3ae1dcf2618f288c24651ef5b934dee318086eaee862e71501ba72"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_3_live.py"}, "region": {"startLine": 365}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93568, "scanner": "repobility-ast-engine", "fingerprint": "30bdb088e5f4d7491c5cf492d787e44f07df1e269a56903948ed249b81aedecb", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|30bdb088e5f4d7491c5cf492d787e44f07df1e269a56903948ed249b81aedecb"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_2_1_live.py"}, "region": {"startLine": 417}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93567, "scanner": "repobility-ast-engine", "fingerprint": "f34d15c4766e4e67c95ae86bf7516198c65b5beee526aadde31ee9a5abd2accc", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|f34d15c4766e4e67c95ae86bf7516198c65b5beee526aadde31ee9a5abd2accc"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_2_1_live.py"}, "region": {"startLine": 771}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93566, "scanner": "repobility-ast-engine", "fingerprint": "61a3314ed8ca51e36349bb115c068edf3b538861d962fc10fc283421b7feae87", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|61a3314ed8ca51e36349bb115c068edf3b538861d962fc10fc283421b7feae87"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_2_1_live.py"}, "region": {"startLine": 605}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93565, "scanner": "repobility-ast-engine", "fingerprint": "904a273a0a893f37cf42d68a0acc59f8ff5d834a8bd3614ab6a1f92d64dd8c92", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|904a273a0a893f37cf42d68a0acc59f8ff5d834a8bd3614ab6a1f92d64dd8c92"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_2_1_live.py"}, "region": {"startLine": 429}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93564, "scanner": "repobility-ast-engine", "fingerprint": "701a53e11dae1c8c4dec2d350be1fafcc790458b818ffa0fb5efd23aa4a9f68a", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|701a53e11dae1c8c4dec2d350be1fafcc790458b818ffa0fb5efd23aa4a9f68a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_2_1_live.py"}, "region": {"startLine": 348}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93563, "scanner": "repobility-ast-engine", "fingerprint": "b726f7f1503c49791825c8e32dbaf9dadf4f8e6f110432a9944a9f6ad434829b", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|b726f7f1503c49791825c8e32dbaf9dadf4f8e6f110432a9944a9f6ad434829b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_2_1_live.py"}, "region": {"startLine": 1049}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93562, "scanner": "repobility-ast-engine", "fingerprint": "9ec0e7e42de7c386468b7af981bfc4cba26dffa46bb4e59c89499d2b90786989", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|9ec0e7e42de7c386468b7af981bfc4cba26dffa46bb4e59c89499d2b90786989"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_2_1_live.py"}, "region": {"startLine": 469}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"repobilityId": 93561, "scanner": "repobility-ast-engine", "fingerprint": "a7a24dc92addf13a099d3fbb3452e8444453d4f36c30624fefe58349c0056a92", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|a7a24dc92addf13a099d3fbb3452e8444453d4f36c30624fefe58349c0056a92"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "update_reversal_data.py"}, "region": {"startLine": 133}}}]}, {"ruleId": "CFG006", "level": "warning", "message": {"text": "[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts."}, "properties": {"repobilityId": 93530, "scanner": "repobility-threat-engine", "fingerprint": "c65fc71ce58c37a0e07837c0fe294108b731c43ef16027a2f0971c757bbe9a16", "category": "practices", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "No .gitignore file found in repository root", "evidence": {"reason": "No .gitignore file found in repository root", "rule_id": "CFG006", "scanner": "repobility-threat-engine", "confidence": 1.0, "correlation_key": "repo|practices|cfg006"}}}, {"ruleId": "CORE_NO_CI", "level": "warning", "message": {"text": "No CI/CD configuration found"}, "properties": {"repobilityId": 93523, "scanner": "repobility-core", "fingerprint": "ca5da3551af97272c4f099fc472740148135a15816b81b90bd862e8f91ec66ce", "category": "practices", "severity": "medium", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_CI", "scanner": "repobility-core", "correlation_key": "repo|practices|core_no_ci"}}}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93560, "scanner": "repobility-ai-code-hygiene", "fingerprint": "3f8f72d8b40587e4a85807b3ec7c6ccb7d5fda62a0a2e331a6349cc98c33124a", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_3_1_regime_predictive_power.py", "duplicate_line": 148, "correlation_key": "fp|3f8f72d8b40587e4a85807b3ec7c6ccb7d5fda62a0a2e331a6349cc98c33124a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_3_1_calls.py"}, "region": {"startLine": 262}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93559, "scanner": "repobility-ai-code-hygiene", "fingerprint": "8b6c589b6ed079c267132afd5031a7a88c42d0f59f92967fdefc04d56b233572", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_3_calls.py", "duplicate_line": 182, "correlation_key": "fp|8b6c589b6ed079c267132afd5031a7a88c42d0f59f92967fdefc04d56b233572"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_3_1_calls.py"}, "region": {"startLine": 188}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93558, "scanner": "repobility-ai-code-hygiene", "fingerprint": "3610fec22345b7e6aacb04f5954e2c6caef1d157b928aafa79e17317e89e153e", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_2_1_calls.py", "duplicate_line": 37, "correlation_key": "fp|3610fec22345b7e6aacb04f5954e2c6caef1d157b928aafa79e17317e89e153e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_3_1_calls.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93557, "scanner": "repobility-ai-code-hygiene", "fingerprint": "b5860c5df28aa6b556085a76904986aab6ace33391ace69ade4a12bf25a80e49", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 58, "correlation_key": "fp|b5860c5df28aa6b556085a76904986aab6ace33391ace69ade4a12bf25a80e49"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_3_1_calls.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93556, "scanner": "repobility-ai-code-hygiene", "fingerprint": "7d323caaeca6ba9d81bfe7f0061076ca3986082813a0965d5dc5dc8000f5bd46", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_1_calls.py", "duplicate_line": 17, "correlation_key": "fp|7d323caaeca6ba9d81bfe7f0061076ca3986082813a0965d5dc5dc8000f5bd46"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_3_1_calls.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93555, "scanner": "repobility-ai-code-hygiene", "fingerprint": "c435e4466e76372f2694564777c4c7d01bc30588b5f27648132c6aa362d8b3d4", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_5_calls.py", "duplicate_line": 11, "correlation_key": "fp|c435e4466e76372f2694564777c4c7d01bc30588b5f27648132c6aa362d8b3d4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_3_1_calls.py"}, "region": {"startLine": 12}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93554, "scanner": "repobility-ai-code-hygiene", "fingerprint": "5e2fb9e11eb2aac8a68cc0d6a66e2977f462e9904ebc74cebcc4f555b1548994", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_3_1_regime_predictive_power.py", "duplicate_line": 148, "correlation_key": "fp|5e2fb9e11eb2aac8a68cc0d6a66e2977f462e9904ebc74cebcc4f555b1548994"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_calls.py"}, "region": {"startLine": 260}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93553, "scanner": "repobility-ai-code-hygiene", "fingerprint": "2e2c061f8a760204c66419cf2021aa3a186702e6102dc6c81f76c6715ab487c7", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_3_calls.py", "duplicate_line": 182, "correlation_key": "fp|2e2c061f8a760204c66419cf2021aa3a186702e6102dc6c81f76c6715ab487c7"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_calls.py"}, "region": {"startLine": 186}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93552, "scanner": "repobility-ai-code-hygiene", "fingerprint": "063d4fa91dccf66c4db59e4844311e10ad6338a51ed364f90e00092c6c73eb26", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_2_1_calls.py", "duplicate_line": 37, "correlation_key": "fp|063d4fa91dccf66c4db59e4844311e10ad6338a51ed364f90e00092c6c73eb26"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_calls.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93551, "scanner": "repobility-ai-code-hygiene", "fingerprint": "a66d6470cc34bc158d223ea655eed888f3d30bd46416546546157dc0a35d0ac8", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 58, "correlation_key": "fp|a66d6470cc34bc158d223ea655eed888f3d30bd46416546546157dc0a35d0ac8"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_calls.py"}, "region": {"startLine": 37}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93550, "scanner": "repobility-ai-code-hygiene", "fingerprint": "4bb8d7e6bda114909d3425b53d3080d3c60bf9a3d0aee7e3744de96b068a76f5", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_1_calls.py", "duplicate_line": 17, "correlation_key": "fp|4bb8d7e6bda114909d3425b53d3080d3c60bf9a3d0aee7e3744de96b068a76f5"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_calls.py"}, "region": {"startLine": 20}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93549, "scanner": "repobility-ai-code-hygiene", "fingerprint": "f36c646ab76f6c408084b190b4c5b7862460275e5798476fa63ec3e6bde9cd99", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_4_calls.py", "duplicate_line": 7, "correlation_key": "fp|f36c646ab76f6c408084b190b4c5b7862460275e5798476fa63ec3e6bde9cd99"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_calls.py"}, "region": {"startLine": 7}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93548, "scanner": "repobility-ai-code-hygiene", "fingerprint": "9112955020d125ef914ce26fdf3fa07f07c119c3734d7a175d3d73b340cfd85d", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_3_1_regime_predictive_power.py", "duplicate_line": 148, "correlation_key": "fp|9112955020d125ef914ce26fdf3fa07f07c119c3734d7a175d3d73b340cfd85d"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_4_calls.py"}, "region": {"startLine": 256}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93547, "scanner": "repobility-ai-code-hygiene", "fingerprint": "5ef6e6563fb4273c377b97a7e31fbbfdaca485f8ca94e1ca15761cec5f2e6de6", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_2_1_calls.py", "duplicate_line": 37, "correlation_key": "fp|5ef6e6563fb4273c377b97a7e31fbbfdaca485f8ca94e1ca15761cec5f2e6de6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_4_calls.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93546, "scanner": "repobility-ai-code-hygiene", "fingerprint": "dd8a33a7a03071804633e10c14da3d1943578547d0abbfa738700827f888b361", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 58, "correlation_key": "fp|dd8a33a7a03071804633e10c14da3d1943578547d0abbfa738700827f888b361"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_4_calls.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93545, "scanner": "repobility-ai-code-hygiene", "fingerprint": "ca668f64557061e3f1a626f59a0ced33b124badf9b10798e24aa54d059db8899", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_1_calls.py", "duplicate_line": 17, "correlation_key": "fp|ca668f64557061e3f1a626f59a0ced33b124badf9b10798e24aa54d059db8899"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_4_calls.py"}, "region": {"startLine": 19}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93544, "scanner": "repobility-ai-code-hygiene", "fingerprint": "61a41d7bd21eb68ab72eaef050115ce4ad744bd05614b54698424c13b528b8f7", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_3_calls.py", "duplicate_line": 15, "correlation_key": "fp|61a41d7bd21eb68ab72eaef050115ce4ad744bd05614b54698424c13b528b8f7"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_4_calls.py"}, "region": {"startLine": 15}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93543, "scanner": "repobility-ai-code-hygiene", "fingerprint": "434a17a5edb7df00fe8a880561b08d6bca1552d775e9eab6732d154842e2061f", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_3_1_regime_predictive_power.py", "duplicate_line": 148, "correlation_key": "fp|434a17a5edb7df00fe8a880561b08d6bca1552d775e9eab6732d154842e2061f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_calls.py"}, "region": {"startLine": 279}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93542, "scanner": "repobility-ai-code-hygiene", "fingerprint": "4c13d9711ed13491ba0ee8df543b3ed259594f625f699d459db4cf521bca0c47", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_2_1_calls.py", "duplicate_line": 37, "correlation_key": "fp|4c13d9711ed13491ba0ee8df543b3ed259594f625f699d459db4cf521bca0c47"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_calls.py"}, "region": {"startLine": 55}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93541, "scanner": "repobility-ai-code-hygiene", "fingerprint": "62b25ad44106c39dc57c04f0443a1773999cdb6341b6c8843fb835753ad10668", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 58, "correlation_key": "fp|62b25ad44106c39dc57c04f0443a1773999cdb6341b6c8843fb835753ad10668"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_calls.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93540, "scanner": "repobility-ai-code-hygiene", "fingerprint": "1e5b43acb833fe3173d79fe4e2bfc86038f70ba3fccaaab21f1363aa8e320b52", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_1_calls.py", "duplicate_line": 12, "correlation_key": "fp|1e5b43acb833fe3173d79fe4e2bfc86038f70ba3fccaaab21f1363aa8e320b52"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_calls.py"}, "region": {"startLine": 11}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93539, "scanner": "repobility-ai-code-hygiene", "fingerprint": "097d1f12d15983d8d51f3a6d77898113314ef555fd87bcd2afba63ae2f7b723e", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_3_1_regime_predictive_power.py", "duplicate_line": 148, "correlation_key": "fp|097d1f12d15983d8d51f3a6d77898113314ef555fd87bcd2afba63ae2f7b723e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_3_calls.py"}, "region": {"startLine": 256}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93538, "scanner": "repobility-ai-code-hygiene", "fingerprint": "0e4448367e9659e1a95c2b13409e5a066cb13f53b1d4298875450eae0b6b35d6", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_2_1_calls.py", "duplicate_line": 37, "correlation_key": "fp|0e4448367e9659e1a95c2b13409e5a066cb13f53b1d4298875450eae0b6b35d6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_3_calls.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93537, "scanner": "repobility-ai-code-hygiene", "fingerprint": "9ce93144f4d938ac7d4c1ab2ac9f4a94f05a7ec4772dc4dd8a286984bba7b60a", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 58, "correlation_key": "fp|9ce93144f4d938ac7d4c1ab2ac9f4a94f05a7ec4772dc4dd8a286984bba7b60a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_3_calls.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93536, "scanner": "repobility-ai-code-hygiene", "fingerprint": "da70c1f65ea667675e03fd97bb764676a576ffb2469f5ed9dce6ab4994eda52c", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_3_1_calls.py", "duplicate_line": 17, "correlation_key": "fp|da70c1f65ea667675e03fd97bb764676a576ffb2469f5ed9dce6ab4994eda52c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_3_calls.py"}, "region": {"startLine": 19}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93535, "scanner": "repobility-ai-code-hygiene", "fingerprint": "92185a98bdd517436e65cb257f84df93a34eb29b56e00a2a7a8149703c9a5e6f", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_3_1_regime_predictive_power.py", "duplicate_line": 148, "correlation_key": "fp|92185a98bdd517436e65cb257f84df93a34eb29b56e00a2a7a8149703c9a5e6f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_1_calls.py"}, "region": {"startLine": 254}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93534, "scanner": "repobility-ai-code-hygiene", "fingerprint": "679164c9f13462933557c944b209699af897543d0b49f35d9509bb13901bd027", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "backtest_reversal_2_2_1_calls.py", "duplicate_line": 37, "correlation_key": "fp|679164c9f13462933557c944b209699af897543d0b49f35d9509bb13901bd027"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_1_calls.py"}, "region": {"startLine": 54}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93533, "scanner": "repobility-ai-code-hygiene", "fingerprint": "ca5a2854ecbde5c953722e8240c694078df5d0918538faa76db213d532c210e6", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 58, "correlation_key": "fp|ca5a2854ecbde5c953722e8240c694078df5d0918538faa76db213d532c210e6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_3_1_calls.py"}, "region": {"startLine": 34}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93532, "scanner": "repobility-ai-code-hygiene", "fingerprint": "3ecdffa732488bcd12aeec83110ac865346eb723d0a90639d7a59bb0d7870a40", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 224, "correlation_key": "fp|3ecdffa732488bcd12aeec83110ac865346eb723d0a90639d7a59bb0d7870a40"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_2_1_calls.py"}, "region": {"startLine": 115}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 93531, "scanner": "repobility-ai-code-hygiene", "fingerprint": "c9b98e5b43d52cc04ad1bd3dc74583ca58606beff2852c08a73ddaa8c12329b1", "category": "quality", "severity": "low", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "analyze_reversal_2_4_overfitting.py", "duplicate_line": 66, "correlation_key": "fp|c9b98e5b43d52cc04ad1bd3dc74583ca58606beff2852c08a73ddaa8c12329b1"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "analyze_reversal_3_1_regime_predictive_power.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "COMP001", "level": "note", "message": {"text": "[COMP001] High cognitive complexity: Function `plot_one_year_comparison` has cognitive complexity 13 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, and recursion all weigh in. Breakdown: and=1, continue=1, else=1, for=2, if=2, nested_bonus=3, ternary=3."}, "properties": {"repobilityId": 93526, "scanner": "repobility-threat-engine", "fingerprint": "18c722502386fe3e1d61071b2406239cb3ace3abb86f705a5bdb66ac7db4c25e", "category": "quality", "severity": "low", "confidence": 0.95, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "AST-derived cognitive complexity score = 13 (severity threshold for low: 8+).", "evidence": {"scanner": "repobility-threat-engine", "function": "plot_one_year_comparison", "breakdown": {"if": 2, "and": 1, "for": 2, "else": 1, "ternary": 3, "continue": 1, "nested_bonus": 3}, "complexity": 13, "correlation_key": "fp|18c722502386fe3e1d61071b2406239cb3ace3abb86f705a5bdb66ac7db4c25e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_3_1_leveraged_etf_experiment.py"}, "region": {"startLine": 64}}}]}, {"ruleId": "COMP001", "level": "note", "message": {"text": "[COMP001] High cognitive complexity: Function `main` has cognitive complexity 8 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, and recursion all weigh in. Breakdown: for=1, if=1, nested_bonus=3, ternary=3."}, "properties": {"repobilityId": 93525, "scanner": "repobility-threat-engine", "fingerprint": "7473a2ae58cc1e4635f41a7e092cdd35646370d19f837b5b3e3807b9bd501061", "category": "quality", "severity": "low", "confidence": 0.95, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "AST-derived cognitive complexity score = 8 (severity threshold for low: 8+).", "evidence": {"scanner": "repobility-threat-engine", "function": "main", "breakdown": {"if": 1, "for": 1, "ternary": 3, "nested_bonus": 3}, "complexity": 8, "correlation_key": "fp|7473a2ae58cc1e4635f41a7e092cdd35646370d19f837b5b3e3807b9bd501061"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_min_drop_experiment.py"}, "region": {"startLine": 86}}}]}, {"ruleId": "COMP001", "level": "note", "message": {"text": "[COMP001] High cognitive complexity: Function `plot_comparison` has cognitive complexity 13 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, and recursion all weigh in. Breakdown: and=1, continue=1, else=1, for=2, if=2, nested_bonus=3, ternary=3."}, "properties": {"repobilityId": 93524, "scanner": "repobility-threat-engine", "fingerprint": "4218b7814ef22aa16f8e7f2698d23fb6063396b47b9a2fb7c67e713a0e0aa9be", "category": "quality", "severity": "low", "confidence": 0.95, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "AST-derived cognitive complexity score = 13 (severity threshold for low: 8+).", "evidence": {"scanner": "repobility-threat-engine", "function": "plot_comparison", "breakdown": {"if": 2, "and": 1, "for": 2, "else": 1, "ternary": 3, "continue": 1, "nested_bonus": 3}, "complexity": 13, "correlation_key": "fp|4218b7814ef22aa16f8e7f2698d23fb6063396b47b9a2fb7c67e713a0e0aa9be"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backtest_reversal_2_5_min_drop_experiment.py"}, "region": {"startLine": 50}}}]}, {"ruleId": "MINED067", "level": "none", "message": {"text": "[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever."}, "properties": {"repobilityId": 93529, "scanner": "repobility-threat-engine", "fingerprint": "77fb472b91589da7a0a244385228ac3687136f347dedbda0b25982d48d6cf003", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "python-requests-no-timeout", "owasp": null, "cwe_ids": ["CWE-400"], "languages": ["python"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348058+00:00", "triaged_in_corpus": 12, "observations_count": 45429, "ai_coder_pattern_id": 122}, "scanner": "repobility-threat-engine", "correlation_key": "fp|77fb472b91589da7a0a244385228ac3687136f347dedbda0b25982d48d6cf003"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_universe.py"}, "region": {"startLine": 84}}}]}, {"ruleId": "SEC078", "level": "none", "message": {"text": "[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsive server, causing thread exhaustion and ReDoS. Ported from bandit B113 (Apache-2.0). NOTE: this regex is heuristic; a real AST check is preferred for accuracy."}, "properties": {"repobilityId": 93528, "scanner": "repobility-threat-engine", "fingerprint": "3407e19e9a0fc8d87aeddf17f026079ca7bbd3a14f7c4638c13420ec70b2c46e", "category": "quality", "severity": "info", "confidence": 0.1, "triageState": "false_positive", "verdict": "likely_fp", "isResolved": true, "reason": "Safe pattern 'timeout\\s*=' detected on same line", "evidence": {"match": "requests.get(", "reason": "Safe pattern 'timeout\\s*=' detected on same line", "rule_id": "SEC078", "scanner": "repobility-threat-engine", "confidence": 0.1, "correlation_key": "fp|3407e19e9a0fc8d87aeddf17f026079ca7bbd3a14f7c4638c13420ec70b2c46e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_universe.py"}, "region": {"startLine": 84}}}]}, {"ruleId": "COMP001", "level": "none", "message": {"text": "[COMP001] High cognitive complexity (and 3 more): Same pattern found in 3 additional files. Review if needed."}, "properties": {"repobilityId": 93527, "scanner": "repobility-threat-engine", "fingerprint": "ffacc44acd0408185fc3827739658544dd0204c83ccb78694e2ced81539c2c58", "category": "quality", "severity": "info", "confidence": 0.2, "triageState": "false_positive", "verdict": "likely_fp", "isResolved": true, "reason": "Deduplicated summary only: 3 additional occurrences found. The top occurrences remain visible as actionable findings.", "evidence": {"scanner": "repobility-threat-engine", "function": "plot_comparison", "breakdown": {"if": 2, "and": 1, "for": 2, "else": 1, "ternary": 3, "continue": 1, "nested_bonus": 3}, "aggregated": true, "complexity": 13, "correlation_key": "fp|ffacc44acd0408185fc3827739658544dd0204c83ccb78694e2ced81539c2c58", "aggregated_count": 3}}}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.request` used but never assigned in __init__: Method `option_contract` of class `AlpacaPaperClient` reads `self.request`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance."}, "properties": {"repobilityId": 93585, "scanner": "repobility-ast-engine", "fingerprint": "e857a9dd634b80610b7dd7b0ea5602f0e41e9adbebd6e86ca70a6c1cada37f6b", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|e857a9dd634b80610b7dd7b0ea5602f0e41e9adbebd6e86ca70a6c1cada37f6b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_4_1_alpaca_paper.py"}, "region": {"startLine": 146}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.request` used but never assigned in __init__: Method `submit_order` of class `AlpacaPaperClient` reads `self.request`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance."}, "properties": {"repobilityId": 93584, "scanner": "repobility-ast-engine", "fingerprint": "2b8a5077065a2ac8176b608a938a5c460ab2b67c01330c02500589cead2417a7", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|2b8a5077065a2ac8176b608a938a5c460ab2b67c01330c02500589cead2417a7"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_4_1_alpaca_paper.py"}, "region": {"startLine": 143}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.request` used but never assigned in __init__: Method `order` of class `AlpacaPaperClient` reads `self.request`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance."}, "properties": {"repobilityId": 93583, "scanner": "repobility-ast-engine", "fingerprint": "9e3985fd2af383ec47a57a11aa16d69ac826123f1e4c5dd03399cf7412afa3c4", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|9e3985fd2af383ec47a57a11aa16d69ac826123f1e4c5dd03399cf7412afa3c4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_4_1_alpaca_paper.py"}, "region": {"startLine": 140}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.request` used but never assigned in __init__: Method `clock` of class `AlpacaPaperClient` reads `self.request`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance."}, "properties": {"repobilityId": 93582, "scanner": "repobility-ast-engine", "fingerprint": "105e643f7821e69684eda1f26bbee42d935b90bcd1d1036dfd58ccea0762be75", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|105e643f7821e69684eda1f26bbee42d935b90bcd1d1036dfd58ccea0762be75"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_4_1_alpaca_paper.py"}, "region": {"startLine": 137}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.request` used but never assigned in __init__: Method `account` of class `AlpacaPaperClient` reads `self.request`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance."}, "properties": {"repobilityId": 93581, "scanner": "repobility-ast-engine", "fingerprint": "8881bf6c84a490a2f58b58d092c440d5bff4ba5a50f4bcae92023ea083416ffe", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|8881bf6c84a490a2f58b58d092c440d5bff4ba5a50f4bcae92023ea083416ffe"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reversal_3_4_1_alpaca_paper.py"}, "region": {"startLine": 134}}}]}, {"ruleId": "CORE_NO_TESTS", "level": "error", "message": {"text": "No test files found"}, "properties": {"repobilityId": 93522, "scanner": "repobility-core", "fingerprint": "0200e9918bc2a7bf9c116d0907e50ac3df640c758b93852cf1890ec6e14d870d", "category": "testing", "severity": "high", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_TESTS", "scanner": "repobility-core", "correlation_key": "repo|testing|core_no_tests"}}}]}]}