{"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": "COMP001", "name": "[COMP001] High cognitive complexity: Function `table_rows` has cognitive complexity 9 (SonarSource scale). Cognitive com", "shortDescription": {"text": "[COMP001] High cognitive complexity: Function `table_rows` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, and recursion all"}, "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 9."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "low", "confidence": 0.95, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_LICENSE", "name": "No LICENSE file", "shortDescription": {"text": "No LICENSE file"}, "fullDescription": {"text": "Add a LICENSE file to your repository. Use choosealicense.com to pick the right license (MIT for permissive, Apache 2.0 for patent protection, GPL for copyleft)."}, "properties": {"scanner": "repobility-core", "category": "documentation", "severity": "low", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "MINED115", "name": "[MINED115] Action `actions/setup-python` pinned to mutable ref `@v6`: `uses: actions/setup-python@v6` resolves at workfl", "shortDescription": {"text": "[MINED115] Action `actions/setup-python` pinned to mutable ref `@v6`: `uses: actions/setup-python@v6` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-actions/changed-files compromise ("}, "fullDescription": {"text": "Replace with: `uses: actions/setup-python@<40-char-sha>  # v6` and let Dependabot bump it on a scheduled cadence."}, "properties": {"scanner": "repobility-supply-chain", "category": "dependency", "severity": "high", "confidence": 0.9, "cwe": "", "owasp": ""}}, {"id": "MINED108", "name": "[MINED108] `self.assertTrue` used but never assigned in __init__: Method `test_trusted_ai_source_defaults_to_keep` of cl", "shortDescription": {"text": "[MINED108] `self.assertTrue` used but never assigned in __init__: Method `test_trusted_ai_source_defaults_to_keep` of class `AiRelevanceScoringTests` reads `self.assertTrue`, but no assignment to it exists in __init__ (and no class-level fa"}, "fullDescription": {"text": "Initialize `self.assertTrue = <default>` in __init__, or add a class-level default."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "MINED107", "name": "[MINED107] Missing import: `html` used but not imported: The file uses `html.something(...)` but never imports `html`. T", "shortDescription": {"text": "[MINED107] Missing import: `html` used but not imported: The file uses `html.something(...)` but never imports `html`. This raises NameError at runtime the first time the line executes."}, "fullDescription": {"text": "Add `import html` at the top of the file."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "critical", "confidence": 1.0, "cwe": "", "owasp": ""}}]}}, "automationDetails": {"id": "repobility/1219"}, "properties": {"repository": "LearnPrompt/ai-news-radar", "repoUrl": "https://github.com/LearnPrompt/ai-news-radar", "branch": "master"}, "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": 123059, "scanner": "repobility-ast-engine", "fingerprint": "64cb0cd1e66683f6b909ff2c524987008a49c96cd8132f3061ead4c65aadccdb", "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|64cb0cd1e66683f6b909ff2c524987008a49c96cd8132f3061ead4c65aadccdb"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 1266}}}]}, {"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": 123058, "scanner": "repobility-ast-engine", "fingerprint": "d4b693558aebf46c0237b10efee1e9c8259f962090bb30457f8835e20fa3f521", "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|d4b693558aebf46c0237b10efee1e9c8259f962090bb30457f8835e20fa3f521"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 914}}}]}, {"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": 123057, "scanner": "repobility-ast-engine", "fingerprint": "c73a45af52ab7165f3fefe630cde08e3b850fc6900f4302b35e648d52e7b4435", "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|c73a45af52ab7165f3fefe630cde08e3b850fc6900f4302b35e648d52e7b4435"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 578}}}]}, {"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": 123056, "scanner": "repobility-ast-engine", "fingerprint": "e020d79ae8ee8c48256dc4ec28bfacedef49048c9bebc26f46c9c76781e1fadc", "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|e020d79ae8ee8c48256dc4ec28bfacedef49048c9bebc26f46c9c76781e1fadc"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 493}}}]}, {"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": 123055, "scanner": "repobility-ast-engine", "fingerprint": "520f8b12f7da164606d4a1fba9f87e47d9a7b5744b28a14e9f4be91ebfefaa6f", "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|520f8b12f7da164606d4a1fba9f87e47d9a7b5744b28a14e9f4be91ebfefaa6f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 369}}}]}, {"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": 123054, "scanner": "repobility-ast-engine", "fingerprint": "cdec933de9ead08cdbf19379ad0835e7a98661a67a05a6a6f2bed48144e75e91", "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|cdec933de9ead08cdbf19379ad0835e7a98661a67a05a6a6f2bed48144e75e91"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 235}}}]}, {"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": 123053, "scanner": "repobility-ast-engine", "fingerprint": "dafc171a1a39357f4a683271e703b7b0f09dc8dfb085179d2d58c89ac73866f4", "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|dafc171a1a39357f4a683271e703b7b0f09dc8dfb085179d2d58c89ac73866f4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 3673}}}]}, {"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": 123052, "scanner": "repobility-ast-engine", "fingerprint": "c49589c94c226dbb62e3799125c64fabf14b67928bfb5e4fc3bd4d851a4e9ad9", "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|c49589c94c226dbb62e3799125c64fabf14b67928bfb5e4fc3bd4d851a4e9ad9"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 3127}}}]}, {"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": 123051, "scanner": "repobility-ast-engine", "fingerprint": "3bd02ed4560532814d6fd8ad23a9bf574e1a3896914af2277baa694b9921a51c", "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|3bd02ed4560532814d6fd8ad23a9bf574e1a3896914af2277baa694b9921a51c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 3056}}}]}, {"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": 123050, "scanner": "repobility-ast-engine", "fingerprint": "53c201f58044a24eefd7235d2f4f21e7807b9ebf0dd28a686f352b1c3ed6e7cc", "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|53c201f58044a24eefd7235d2f4f21e7807b9ebf0dd28a686f352b1c3ed6e7cc"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 2961}}}]}, {"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": 123049, "scanner": "repobility-ast-engine", "fingerprint": "56ade1fb5aa0764363c3544f93ede3cab6e3ace96ceab3c172962adc5925982d", "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|56ade1fb5aa0764363c3544f93ede3cab6e3ace96ceab3c172962adc5925982d"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 2889}}}]}, {"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": 123048, "scanner": "repobility-ast-engine", "fingerprint": "5ea06bf3b75583a4534bab0e4a81ca0b50e18d7a8df94501b4d3a40fe06e0c6b", "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|5ea06bf3b75583a4534bab0e4a81ca0b50e18d7a8df94501b4d3a40fe06e0c6b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 2751}}}]}, {"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": 123047, "scanner": "repobility-ast-engine", "fingerprint": "0a02367d446134dfddff1fc754ecaa8c5f929adb37f0e00de06dab23f252704c", "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|0a02367d446134dfddff1fc754ecaa8c5f929adb37f0e00de06dab23f252704c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 2276}}}]}, {"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": 123046, "scanner": "repobility-ast-engine", "fingerprint": "b576a9c1ccf3d58951dc403cd169f794fc4969b88019eb7e6cf58abb029e4ba4", "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|b576a9c1ccf3d58951dc403cd169f794fc4969b88019eb7e6cf58abb029e4ba4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 2046}}}]}, {"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": 123045, "scanner": "repobility-ast-engine", "fingerprint": "ff564c1387ad9ad95b1517d99e258cc93d13a7020972e3a380ec0ae114d95f88", "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|ff564c1387ad9ad95b1517d99e258cc93d13a7020972e3a380ec0ae114d95f88"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 760}}}]}, {"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": 123044, "scanner": "repobility-ast-engine", "fingerprint": "5b29c7a5d8a96f73e94f103f29f2d01eee663e4b179a934b12e3a78cd38eee93", "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|5b29c7a5d8a96f73e94f103f29f2d01eee663e4b179a934b12e3a78cd38eee93"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 699}}}]}, {"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": 123043, "scanner": "repobility-ast-engine", "fingerprint": "f15614de5b1c6fb751a1d843d3064a53e78806314f314b428869089981c6e509", "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|f15614de5b1c6fb751a1d843d3064a53e78806314f314b428869089981c6e509"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 522}}}]}, {"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": 123042, "scanner": "repobility-ast-engine", "fingerprint": "c08362b83236c7d721a3e8d755543a1bf404912e89702b98ea64f340830ae46e", "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|c08362b83236c7d721a3e8d755543a1bf404912e89702b98ea64f340830ae46e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 424}}}]}, {"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": 123041, "scanner": "repobility-ast-engine", "fingerprint": "ff055b36d459dd0a80e46dd39bdc280451ba18b93a650395a685ead52ed59fba", "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|ff055b36d459dd0a80e46dd39bdc280451ba18b93a650395a685ead52ed59fba"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 416}}}]}, {"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": 123040, "scanner": "repobility-ast-engine", "fingerprint": "7947a56fd987dff8352b36fa4763a587ba65c4f08aaf92f27dad40b55a0d2e6d", "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|7947a56fd987dff8352b36fa4763a587ba65c4f08aaf92f27dad40b55a0d2e6d"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 317}}}]}, {"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": 123039, "scanner": "repobility-ast-engine", "fingerprint": "edf9f14909238e9e0e46c599b1048f56fdecfb0e00367e031d691e4103e1c38b", "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|edf9f14909238e9e0e46c599b1048f56fdecfb0e00367e031d691e4103e1c38b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 311}}}]}, {"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": 123038, "scanner": "repobility-ast-engine", "fingerprint": "167fd6ae13858c676eea42df94bbd7e9938c8a044cbbfa08df8155b7752cda74", "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|167fd6ae13858c676eea42df94bbd7e9938c8a044cbbfa08df8155b7752cda74"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 259}}}]}, {"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": 123037, "scanner": "repobility-ast-engine", "fingerprint": "8bc2285f7b961d7ce2493cb9146d48ed423faec9b95fc2fc3f9ed271b424e894", "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|8bc2285f7b961d7ce2493cb9146d48ed423faec9b95fc2fc3f9ed271b424e894"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 209}}}]}, {"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": 123036, "scanner": "repobility-ast-engine", "fingerprint": "bbbb429f076824464001d5ee5f071a5925481f5beaf07a177a66a4b374197f1c", "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|bbbb429f076824464001d5ee5f071a5925481f5beaf07a177a66a4b374197f1c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 202}}}]}, {"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": 123035, "scanner": "repobility-ast-engine", "fingerprint": "021c7ed0b6be64a2ce0fafc47f9c54ce9095c3dc217aaaa47ec27bb0530da8fd", "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|021c7ed0b6be64a2ce0fafc47f9c54ce9095c3dc217aaaa47ec27bb0530da8fd"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 163}}}]}, {"ruleId": "CFG006", "level": "warning", "message": {"text": "[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts."}, "properties": {"repobilityId": 123033, "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": "COMP001", "level": "note", "message": {"text": "[COMP001] High cognitive complexity: Function `table_rows` has cognitive complexity 9 (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, or=8."}, "properties": {"repobilityId": 123032, "scanner": "repobility-threat-engine", "fingerprint": "312541b3980a4853098af41bb41d85d4e49ae8ca9f3f9f76608f2f6e98b71f30", "category": "quality", "severity": "low", "confidence": 0.95, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "AST-derived cognitive complexity score = 9 (severity threshold for low: 8+).", "evidence": {"scanner": "repobility-threat-engine", "function": "table_rows", "breakdown": {"or": 8, "for": 1}, "complexity": 9, "correlation_key": "fp|312541b3980a4853098af41bb41d85d4e49ae8ca9f3f9f76608f2f6e98b71f30"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/audit_ai_relevance.py"}, "region": {"startLine": 26}}}]}, {"ruleId": "COMP001", "level": "note", "message": {"text": "[COMP001] High cognitive complexity: Function `main` 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: for=1, or=11, ternary=1."}, "properties": {"repobilityId": 123031, "scanner": "repobility-threat-engine", "fingerprint": "423f398bf9cfde46e2fae5bec1fb9df8b33080ae25ba84b96f5c4082f1fd0522", "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": "main", "breakdown": {"or": 11, "for": 1, "ternary": 1}, "complexity": 13, "correlation_key": "fp|423f398bf9cfde46e2fae5bec1fb9df8b33080ae25ba84b96f5c4082f1fd0522"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/audit_ai_relevance.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "CORE_NO_LICENSE", "level": "note", "message": {"text": "No LICENSE file"}, "properties": {"repobilityId": 123029, "scanner": "repobility-core", "fingerprint": "9314e9238cd99885865b92490d1aaa96ca62b1390c9377878d5f3d99227e1c3c", "category": "documentation", "severity": "low", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_LICENSE", "scanner": "repobility-core", "correlation_key": "repo|documentation|core_no_license"}}}, {"ruleId": "MINED115", "level": "error", "message": {"text": "[MINED115] Action `actions/setup-python` pinned to mutable ref `@v6`: `uses: actions/setup-python@v6` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-actions/changed-files compromise (2025) instantly affect ~23K repos. Pin to a 40-char commit SHA + lock with Dependabot or renovate."}, "properties": {"repobilityId": 123086, "scanner": "repobility-supply-chain", "fingerprint": "6b88e089198ed72261f8e348d068a654a8a94352f1a81254a547320ad2f6ccb5", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|6b88e089198ed72261f8e348d068a654a8a94352f1a81254a547320ad2f6ccb5"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-news.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "[MINED115] Action `actions/checkout` pinned to mutable ref `@v6`: `uses: actions/checkout@v6` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-actions/changed-files compromise (2025) instantly affect ~23K repos. Pin to a 40-char commit SHA + lock with Dependabot or renovate."}, "properties": {"repobilityId": 123085, "scanner": "repobility-supply-chain", "fingerprint": "56c5307fa9705c539f674c64f751429306b8f31f8fb4e8ce2d04c45a49e506cc", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|56c5307fa9705c539f674c64f751429306b8f31f8fb4e8ce2d04c45a49e506cc"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-news.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertTrue` used but never assigned in __init__: Method `test_trusted_ai_source_defaults_to_keep` of class `AiRelevanceScoringTests` reads `self.assertTrue`, 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": 123084, "scanner": "repobility-ast-engine", "fingerprint": "42b48455594735ef94435456d41db8ae147667cac9bcb0169007abef102b727c", "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|42b48455594735ef94435456d41db8ae147667cac9bcb0169007abef102b727c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 71}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_accepts_agent_context_as_developer_tool` of class `AiRelevanceScoringTests` reads `self.assertEqual`, 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": 123083, "scanner": "repobility-ast-engine", "fingerprint": "882ad4971680b1b01e8d09be5f7b76b10a4f780e87c8e65eb5b7e0aca4b736e0", "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|882ad4971680b1b01e8d09be5f7b76b10a4f780e87c8e65eb5b7e0aca4b736e0"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertGreaterEqual` used but never assigned in __init__: Method `test_accepts_agent_context_as_developer_tool` of class `AiRelevanceScoringTests` reads `self.assertGreaterEqual`, 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": 123082, "scanner": "repobility-ast-engine", "fingerprint": "df8c0693346cbed5db205ce3f42344d64a5707a8f43b5b6960efc478a2ab7df2", "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|df8c0693346cbed5db205ce3f42344d64a5707a8f43b5b6960efc478a2ab7df2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertTrue` used but never assigned in __init__: Method `test_accepts_agent_context_as_developer_tool` of class `AiRelevanceScoringTests` reads `self.assertTrue`, 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": 123081, "scanner": "repobility-ast-engine", "fingerprint": "2cb21fc2d8238043b53a65f0dd14f2d39c75c279a915e953f3e15b8c55d8400e", "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|2cb21fc2d8238043b53a65f0dd14f2d39c75c279a915e953f3e15b8c55d8400e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 58}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertIn` used but never assigned in __init__: Method `test_accepts_broad_ai_plus_tech_context` of class `AiRelevanceScoringTests` reads `self.assertIn`, 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": 123080, "scanner": "repobility-ast-engine", "fingerprint": "0d2a477b07983100fbf719359afdad2c1dc0ff5273c6f6c69e3dc67401c87d08", "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|0d2a477b07983100fbf719359afdad2c1dc0ff5273c6f6c69e3dc67401c87d08"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_accepts_broad_ai_plus_tech_context` of class `AiRelevanceScoringTests` reads `self.assertEqual`, 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": 123079, "scanner": "repobility-ast-engine", "fingerprint": "c3986e21126d875f8503a8ea69c4e816dfa8a0bc111309a8ad2a76730a0445d0", "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|c3986e21126d875f8503a8ea69c4e816dfa8a0bc111309a8ad2a76730a0445d0"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 46}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertGreaterEqual` used but never assigned in __init__: Method `test_accepts_broad_ai_plus_tech_context` of class `AiRelevanceScoringTests` reads `self.assertGreaterEqual`, 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": 123078, "scanner": "repobility-ast-engine", "fingerprint": "9385279d735010a1acad36b5ac3280af7af45d7c399f003aa26ff3457367f8e8", "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|9385279d735010a1acad36b5ac3280af7af45d7c399f003aa26ff3457367f8e8"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 45}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertTrue` used but never assigned in __init__: Method `test_accepts_broad_ai_plus_tech_context` of class `AiRelevanceScoringTests` reads `self.assertTrue`, 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": 123077, "scanner": "repobility-ast-engine", "fingerprint": "30d1094293804db8a31eb1a56a033de3a35ee9b27e5a8f9e21e88c51ca1556e9", "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|30d1094293804db8a31eb1a56a033de3a35ee9b27e5a8f9e21e88c51ca1556e9"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_rejects_broad_model_without_tech_context` of class `AiRelevanceScoringTests` reads `self.assertEqual`, 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": 123076, "scanner": "repobility-ast-engine", "fingerprint": "5ed75c2621ad809158067b78578444e427de8d73c9b349e360f30df10493957f", "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|5ed75c2621ad809158067b78578444e427de8d73c9b349e360f30df10493957f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertLess` used but never assigned in __init__: Method `test_rejects_broad_model_without_tech_context` of class `AiRelevanceScoringTests` reads `self.assertLess`, 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": 123075, "scanner": "repobility-ast-engine", "fingerprint": "640e01b372bdcfb4e71e69a699cb6b1f40350e9c4e678b441a261a651321180f", "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|640e01b372bdcfb4e71e69a699cb6b1f40350e9c4e678b441a261a651321180f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 32}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertFalse` used but never assigned in __init__: Method `test_rejects_broad_model_without_tech_context` of class `AiRelevanceScoringTests` reads `self.assertFalse`, 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": 123074, "scanner": "repobility-ast-engine", "fingerprint": "9571b6be3f68fb304db48511b93d895fface4025ddd91af160f6f80ecd53ee2e", "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|9571b6be3f68fb304db48511b93d895fface4025ddd91af160f6f80ecd53ee2e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 31}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertIn` used but never assigned in __init__: Method `test_scores_strong_ai_signal_with_reason` of class `AiRelevanceScoringTests` reads `self.assertIn`, 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": 123073, "scanner": "repobility-ast-engine", "fingerprint": "5ba9b25bba4d69dcfaceb43d6e969fe2dbf94568b0b0b5f018c476b95ee0d5ed", "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|5ba9b25bba4d69dcfaceb43d6e969fe2dbf94568b0b0b5f018c476b95ee0d5ed"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 20}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertIn` used but never assigned in __init__: Method `test_scores_strong_ai_signal_with_reason` of class `AiRelevanceScoringTests` reads `self.assertIn`, 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": 123072, "scanner": "repobility-ast-engine", "fingerprint": "e300916c520358ef0420d9c388947a1680fe0f8c1caccbc20867c51ec1753c85", "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|e300916c520358ef0420d9c388947a1680fe0f8c1caccbc20867c51ec1753c85"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 19}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_scores_strong_ai_signal_with_reason` of class `AiRelevanceScoringTests` reads `self.assertEqual`, 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": 123071, "scanner": "repobility-ast-engine", "fingerprint": "7cb3aadfd6ef7f5e6988e70b8db9da215b593d83cf9c046242799747b1e97a58", "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|7cb3aadfd6ef7f5e6988e70b8db9da215b593d83cf9c046242799747b1e97a58"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertGreaterEqual` used but never assigned in __init__: Method `test_scores_strong_ai_signal_with_reason` of class `AiRelevanceScoringTests` reads `self.assertGreaterEqual`, 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": 123070, "scanner": "repobility-ast-engine", "fingerprint": "52f2b9c7e38011287a478b099daa1e0af0a657141b9992742bbb1a8e83465203", "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|52f2b9c7e38011287a478b099daa1e0af0a657141b9992742bbb1a8e83465203"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 17}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertTrue` used but never assigned in __init__: Method `test_scores_strong_ai_signal_with_reason` of class `AiRelevanceScoringTests` reads `self.assertTrue`, 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": 123069, "scanner": "repobility-ast-engine", "fingerprint": "32c31c2122a416793af96920104d9fcc2d7259f14361c4b831ac323b56ad98d2", "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|32c31c2122a416793af96920104d9fcc2d7259f14361c4b831ac323b56ad98d2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_relevance.py"}, "region": {"startLine": 16}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_extract_recent_updates_from_block_map` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123068, "scanner": "repobility-ast-engine", "fingerprint": "0a6d0c3798ab4771346cd8e90d5083ec8a797474689f173238ed5383f0583de2", "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|0a6d0c3798ab4771346cd8e90d5083ec8a797474689f173238ed5383f0583de2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 77}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_extract_recent_updates_from_block_map` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123067, "scanner": "repobility-ast-engine", "fingerprint": "21776ac820856ab2bc666c6c6c1528c6399e3bbd3a4be9e1e7c523ce5ea63e40", "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|21776ac820856ab2bc666c6c6c1528c6399e3bbd3a4be9e1e7c523ce5ea63e40"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 76}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_extract_recent_updates_from_block_map` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123066, "scanner": "repobility-ast-engine", "fingerprint": "e4ad21fd4003f2fdf7893c33df597303b6a14c4871bb44d1778cc33089e547d2", "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|e4ad21fd4003f2fdf7893c33df597303b6a14c4871bb44d1778cc33089e547d2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 75}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_infer_shanghai_year_for_month_day` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123065, "scanner": "repobility-ast-engine", "fingerprint": "71c0d7b7065f8f3e84936ba185056245883b997d43873a2c51945deb376e15fd", "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|71c0d7b7065f8f3e84936ba185056245883b997d43873a2c51945deb376e15fd"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_infer_shanghai_year_for_month_day` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123064, "scanner": "repobility-ast-engine", "fingerprint": "7e191138b2056d139114fef22d9138b4fcdb8949620e47fe5031ced517a2d2a3", "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|7e191138b2056d139114fef22d9138b4fcdb8949620e47fe5031ced517a2d2a3"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 32}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_decode_escaped_json` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123063, "scanner": "repobility-ast-engine", "fingerprint": "97b457dc19a658afc005cbcb877c085f8079ed12a9b17b7fb77a913fe6bdc87d", "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|97b457dc19a658afc005cbcb877c085f8079ed12a9b17b7fb77a913fe6bdc87d"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 28}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_clean_update_title` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123062, "scanner": "repobility-ast-engine", "fingerprint": "16046dfde4cb05bd0290447e493a52b01a1975f90c9c183907c23ba9aaf197af", "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|16046dfde4cb05bd0290447e493a52b01a1975f90c9c183907c23ba9aaf197af"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 23}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_parse_md_heading` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123061, "scanner": "repobility-ast-engine", "fingerprint": "8719c3745dba10cc4eeb1a00f239bea6e8ca1c36959707904e5a60b22fb1b4c2", "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|8719c3745dba10cc4eeb1a00f239bea6e8ca1c36959707904e5a60b22fb1b4c2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 20}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_parse_ym_heading` of class `WaytoAgiUtilsTests` reads `self.assertEqual`, 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": 123060, "scanner": "repobility-ast-engine", "fingerprint": "34d7f1285a99fb8e7cd895ca8bd3c440dfe82bfd1d75ebe7030e8f586e10521f", "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|34d7f1285a99fb8e7cd895ca8bd3c440dfe82bfd1d75ebe7030e8f586e10521f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_waytoagi_utils.py"}, "region": {"startLine": 17}}}]}, {"ruleId": "COMP001", "level": "error", "message": {"text": "[COMP001] High cognitive complexity: Function `score_ai_relevance` has cognitive complexity 29 (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: if=12, nested_bonus=5, or=8, ternary=4."}, "properties": {"repobilityId": 123030, "scanner": "repobility-threat-engine", "fingerprint": "30a2278c8a7417e9d755c7a42d920a3e8268bf90185659f3c83d1d3e06f31c26", "category": "quality", "severity": "high", "confidence": 0.95, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "AST-derived cognitive complexity score = 29 (severity threshold for high: 25+).", "evidence": {"scanner": "repobility-threat-engine", "function": "score_ai_relevance", "breakdown": {"if": 12, "or": 8, "ternary": 4, "nested_bonus": 5}, "complexity": 29, "correlation_key": "fp|30a2278c8a7417e9d755c7a42d920a3e8268bf90185659f3c83d1d3e06f31c26"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ai_relevance.py"}, "region": {"startLine": 212}}}]}, {"ruleId": "MINED107", "level": "error", "message": {"text": "[MINED107] Missing import: `html` used but not imported: The file uses `html.something(...)` but never imports `html`. This raises NameError at runtime the first time the line executes."}, "properties": {"repobilityId": 123034, "scanner": "repobility-ast-engine", "fingerprint": "243363d1c7e926b9ae95ff7bbe7f794313f400bd8226a71593425a94fa7e4db8", "category": "quality", "severity": "critical", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "missing-import-python", "owasp": "A06:2021", "cwe_ids": ["CWE-1075"], "languages": ["python"], "observations_count": 2192}, "scanner": "repobility-ast-engine", "correlation_key": "fp|243363d1c7e926b9ae95ff7bbe7f794313f400bd8226a71593425a94fa7e4db8"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/update_news.py"}, "region": {"startLine": 1974}}}]}]}]}