{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:04.995316Z","repo":{"ref":{"host":"github.com","owner":"gvmfhy","name":"constitutional-seq"},"default_branch":"master","clone_url":"https://github.com/gvmfhy/constitutional-seq.git","html_url":"https://github.com/gvmfhy/constitutional-seq","description":"Principle-based canonical sequence retrieval for mRNA therapeutics. An AI-safety inspired approach to biological sequence selection.","stars":1,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":724,"primary_language":"Python","license_spdx":"MIT","created_at":"2025-08-06T23:29:26Z","pushed_at":"2026-09-09T21:50:24Z","security_policy_url":null,"distribution":{"owner_created_at":"2022-12-10T21:40:21Z","owner_type":"User","release_assets":[]}},"commit_sha":"8f8c546d3e203911b879d30898bd4b4226187a9d","profile":{"lines_by_language":{"Python":16908},"files_by_category":{"source":38,"test":20,"docs":10,"config":4},"source_lines":11889,"test_lines":5019},"pillars":{"ai_provenance":{"score":75.8,"confidence":0.84,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.7582,"suspected_share":0.0939,"estimated_share":0.7582,"ai_artifacts":0.0,"flagged_work_units":2.0,"flagged_releases":null,"style_index":0.967},"summary":"Explicit AI attribution on 76% of first-party code added; an estimated 76% including velocity signals."},"quality":{"score":52.3,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":46.0,"duplication":54.1,"lint":40.5,"testing":48.8,"docs":65.0,"type_safety":100.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.42, no CI test run detected; 26% of function code in complex or long functions; 10% duplicated lines. Weakest area: lint."},"security":{"score":76.7,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":96.7,"dependencies":65.9,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 20 known vulnerabilities in 5 dependencies; 1 high-severity SAST findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":16.0,"checked":16.0,"missing":0.0,"recent":0.0,"lookup_errors":0.0},"findings":[],"evidence":[],"data":{"phantom":false},"error":null},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":55.0,"attributed_commits":6.0,"attributed_commit_share":0.10909090909090909,"effective_loc":18374.0,"attributed_loc":13931.0,"attributed_loc_share":0.7581909219549363,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 6 attributed commits, 13,931 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ff2bbd648624df2b78be4426d28c376f1beebc20","url":"https://github.com/gvmfhy/constitutional-seq/commit/ff2bbd648624df2b78be4426d28c376f1beebc20","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"48c6eec9b97e3c1bb24f5b3a30f8a48e5424a11f","url":"https://github.com/gvmfhy/constitutional-seq/commit/48c6eec9b97e3c1bb24f5b3a30f8a48e5424a11f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"cb2c828b616a695c666dc0ccaadf0b680e46976c","url":"https://github.com/gvmfhy/constitutional-seq/commit/cb2c828b616a695c666dc0ccaadf0b680e46976c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"9057241833612b10377d5ac302092eb4d926a5c6","url":"https://github.com/gvmfhy/constitutional-seq/commit/9057241833612b10377d5ac302092eb4d926a5c6","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0a072e0e80b5c78c85b5a64d4063502e27e40639","url":"https://github.com/gvmfhy/constitutional-seq/commit/0a072e0e80b5c78c85b5a64d4063502e27e40639","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c28d369d018ce79144463100de2c05bb5f1be703","url":"https://github.com/gvmfhy/constitutional-seq/commit/c28d369d018ce79144463100de2c05bb5f1be703","weight":0.9}],"data":{"attributed_loc_by_commit":{"c28d369d018ce79144463100de2c05bb5f1be703":2098,"0a072e0e80b5c78c85b5a64d4063502e27e40639":829,"9057241833612b10377d5ac302092eb4d926a5c6":8058,"cb2c828b616a695c666dc0ccaadf0b680e46976c":1427,"48c6eec9b97e3c1bb24f5b3a30f8a48e5424a11f":451,"ff2bbd648624df2b78be4426d28c376f1beebc20":1068},"tools":{"claude-code":{"name":"Claude Code","commits":6,"loc":13931,"first_seen":1753216060,"last_seen":1754497533}},"monthly":{"2025-07":{"loc":12863,"attributed_loc":12863},"2025-08":{"loc":5511,"attributed_loc":1068},"2026-09":{"loc":0,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":8.0,"flagged_units":2.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":8218.0,"flagged_loc":4220.0,"flagged_loc_share":0.5135069359941592,"max_loc_per_hour":822.007848266841,"median_loc_per_hour":242.57375742247635,"pr_timed_units":0.0,"excluded_import_loc":10156.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"2,793 lines of first-party code in ~3.4h (822 lines/hour, 13 commit session)","ref":"5ac9b924af4c7df280e75918326f96fc6eb3ec78","url":"https://github.com/gvmfhy/constitutional-seq/commit/5ac9b924af4c7df280e75918326f96fc6eb3ec78","weight":0.2466023544800523},{"kind":"velocity-burst","description":"1,427 lines of first-party code in ~2.4h (598 lines/hour, 1 commit session)","ref":"cb2c828b616a695c666dc0ccaadf0b680e46976c","url":"https://github.com/gvmfhy/constitutional-seq/commit/cb2c828b616a695c666dc0ccaadf0b680e46976c","weight":0.17943415997205728}],"data":{"flagged_loc_by_commit":{"cb2c828b616a695c666dc0ccaadf0b680e46976c":1427,"ff2bbd648624df2b78be4426d28c376f1beebc20":1068,"4450f8add8ffd237d1d9bbda5007c3d31079d081":521,"a5dd2aaeca90bdb0b9e83c7e9310d0248c8afb2c":4,"f8ad0c9c078bbe0fff9c2094b89a376b1c1ecc6b":315,"14acfcafa226c7df99ffbe8fc114a4bf6e5ebf97":53,"8fd6dd70058f0fa8449c036d641d823a173f9c73":34,"7a1d9944d36a14b54efa45f464338246b6119324":6,"c8229d9f78435e8e264ac3994d39c8835fdee298":5,"0493239721f16c4a1724b522d532fd1ea17c335e":18,"e1f6e6295612ecb03a2a1f0de3c05d1fea77c825":21,"9bcb168b166b51e1c2ea4d5d70106011f31c7631":1,"332ffab7b6a4e31a3a4004eed91126d118476cd2":2,"5ac9b924af4c7df280e75918326f96fc6eb3ec78":745},"excluded_import_commits":["9057241833612b10377d5ac302092eb4d926a5c6","c28d369d018ce79144463100de2c05bb5f1be703"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":11889.0,"index":0.967,"count:narrated_steps":2.0,"per_kloc:narrated_steps":0.168,"files:narrated_steps":2.0,"count:placeholder":1.0,"per_kloc:placeholder":0.084,"files:placeholder":1.0,"count:emoji_in_code":15.0,"per_kloc:emoji_in_code":1.262,"files:emoji_in_code":6.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # First, get gene ID","ref":"src/genbank_tool/mane_selector.py:195","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/mane_selector.py#L195","weight":0.0},{"kind":"stylometry:placeholder","description":"placeholder or demo-only phrasing: # This is a simplified version - would need proper GenBank parsing","ref":"src/genbank_tool/mane_selector.py:380","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/mane_selector.py#L380","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # First, get the UniProt entry","ref":"src/genbank_tool/uniprot_features.py:164","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/uniprot_features.py#L164","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":3.0,"findings_high":1.0,"findings_medium":1.0,"findings_low":1.0,"weighted_findings":1.15,"scanned_lines":11889.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/python.lang.security.use-defused-xml","severity":"high","message":"The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and \"XML bombs\" can cause denial of service. [confidence low]","path":"src/genbank_tool/mane_selector.py","line":221,"fingerprint":"python.lang.security.use-defused-xml:src/genbank_tool/mane_selector.py:221"},{"rule_id":"opengrep/python.lang.security.audit.dynamic-urllib-use-detected","severity":"medium","message":"Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead. [confidence low]","path":"src/genbank_tool/mane_database.py","line":32,"fingerprint":"python.lang.security.audit.dynamic-urllib-use-detected:src/genbank_tool/mane_database.py:32"},{"rule_id":"opengrep/python.lang.security.audit.insecure-transport.requests.request-session-with-http","severity":"low","message":"Detected a request using 'http://'. This request will be unencrypted. Use 'https://' instead. [confidence medium]","path":"src/genbank_tool/network_recovery.py","line":142,"fingerprint":"python.lang.security.audit.insecure-transport.requests.request-session-with-http:src/genbank_tool/network_recovery.py:142"}],"evidence":[],"data":{"rulesets":["python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":5.0,"vulnerabilities":20.0,"vulns_critical":0.0,"vulns_high":9.0,"vulns_medium":11.0,"vulns_low":0.0,"vulns_unknown":0.0,"penalty":25.0},"findings":[{"rule_id":"osv/GHSA-5wmx-573v-2qwq","severity":"high","message":"markdown@3.3.0 (PyPI) is affected by PYSEC-2026-89, GHSA-5wmx-573v-2qwq","path":"requirements.txt","line":null,"fingerprint":"markdown@3.3.0 (PyPI):GHSA-5wmx-573v-2qwq"},{"rule_id":"osv/GHSA-q2q7-5pp4-w6pg","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2021-108, GHSA-q2q7-5pp4-w6pg","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-q2q7-5pp4-w6pg"},{"rule_id":"osv/GHSA-v845-jxx5-vc9f","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2023-192, GHSA-v845-jxx5-vc9f","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-v845-jxx5-vc9f"},{"rule_id":"osv/GHSA-qccp-gfcp-xxvc","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-141, GHSA-qccp-gfcp-xxvc","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-qccp-gfcp-xxvc"},{"rule_id":"osv/GHSA-2xpw-w6gg-jr37","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-1994, GHSA-2xpw-w6gg-jr37","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-2xpw-w6gg-jr37"},{"rule_id":"osv/GHSA-38jv-5279-wg99","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-1996, GHSA-38jv-5279-wg99","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-38jv-5279-wg99"},{"rule_id":"osv/GHSA-gm62-xv2j-4w53","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-1998, GHSA-gm62-xv2j-4w53","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-gm62-xv2j-4w53"},{"rule_id":"osv/GHSA-8988-9cw3-xx77","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-4175, GHSA-8988-9cw3-xx77","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-8988-9cw3-xx77"},{"rule_id":"osv/GHSA-vxq7-64xx-v4gw","severity":"high","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-4177, GHSA-vxq7-64xx-v4gw","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-vxq7-64xx-v4gw"},{"rule_id":"osv/GHSA-x3vf-39hj-gxr4","severity":"medium","message":"biopython@1.79 (PyPI) is affected by PYSEC-2026-1221, GHSA-x3vf-39hj-gxr4","path":"requirements.txt","line":null,"fingerprint":"biopython@1.79 (PyPI):GHSA-x3vf-39hj-gxr4"},{"rule_id":"osv/GHSA-6p56-wp2h-9hxr","severity":"medium","message":"numpy@1.20.0 (PyPI) is affected by GHSA-6p56-wp2h-9hxr","path":"requirements.txt","line":null,"fingerprint":"numpy@1.20.0 (PyPI):GHSA-6p56-wp2h-9hxr"},{"rule_id":"osv/GHSA-fpfv-jqm9-f5jm","severity":"medium","message":"numpy@1.20.0 (PyPI) is affected by GHSA-fpfv-jqm9-f5jm","path":"requirements.txt","line":null,"fingerprint":"numpy@1.20.0 (PyPI):GHSA-fpfv-jqm9-f5jm"},{"rule_id":"osv/GHSA-j8r2-6x86-q33q","severity":"medium","message":"requests@2.26.0 (PyPI) is affected by PYSEC-2023-74, GHSA-j8r2-6x86-q33q","path":"requirements.txt","line":null,"fingerprint":"requests@2.26.0 (PyPI):GHSA-j8r2-6x86-q33q"},{"rule_id":"osv/GHSA-9hjg-9r4m-mvj7","severity":"medium","message":"requests@2.26.0 (PyPI) is affected by PYSEC-2026-1872, GHSA-9hjg-9r4m-mvj7","path":"requirements.txt","line":null,"fingerprint":"requests@2.26.0 (PyPI):GHSA-9hjg-9r4m-mvj7"},{"rule_id":"osv/GHSA-9wx4-h78v-vm56","severity":"medium","message":"requests@2.26.0 (PyPI) is affected by PYSEC-2026-1873, GHSA-9wx4-h78v-vm56","path":"requirements.txt","line":null,"fingerprint":"requests@2.26.0 (PyPI):GHSA-9wx4-h78v-vm56"},{"rule_id":"osv/GHSA-gc5v-m9x4-r6x2","severity":"medium","message":"requests@2.26.0 (PyPI) is affected by PYSEC-2026-2275, GHSA-gc5v-m9x4-r6x2","path":"requirements.txt","line":null,"fingerprint":"requests@2.26.0 (PyPI):GHSA-gc5v-m9x4-r6x2"},{"rule_id":"osv/GHSA-5phf-pp7p-vc2r","severity":"medium","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2021-59, GHSA-5phf-pp7p-vc2r","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-5phf-pp7p-vc2r"},{"rule_id":"osv/GHSA-g4mx-q9vg-27p4","severity":"medium","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2023-212, GHSA-g4mx-q9vg-27p4","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-g4mx-q9vg-27p4"},{"rule_id":"osv/GHSA-34jh-p97f-mpxf","severity":"medium","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-1995, GHSA-34jh-p97f-mpxf","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-34jh-p97f-mpxf"},{"rule_id":"osv/GHSA-pq67-6m6q-mj2v","severity":"medium","message":"urllib3@1.26.0 (PyPI) is affected by PYSEC-2026-1999, GHSA-pq67-6m6q-mj2v","path":"requirements.txt","line":null,"fingerprint":"urllib3@1.26.0 (PyPI):GHSA-pq67-6m6q-mj2v"}],"evidence":[],"data":{"ecosystems":["PyPI"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0909,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":350.0,"function_nloc":6834.0,"mean_ccn":4.34,"p90_ccn":9.0,"complex_functions":14.0,"long_functions":6.0,"many_param_functions":7.0,"risky_nloc_share":0.259},"findings":[],"evidence":[{"kind":"complex-function","description":"main in src/genbank_tool/cli_with_error_handling.py: complexity 56, 270 lines","ref":"src/genbank_tool/cli_with_error_handling.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli_with_error_handling.py#L129","weight":0.9333333333333333},{"kind":"complex-function","description":"main in src/genbank_tool/cli.py: complexity 36, 158 lines","ref":"src/genbank_tool/cli.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli.py#L44","weight":0.6},{"kind":"complex-function","description":"main in src/genbank_tool/cli_old.py: complexity 36, 146 lines","ref":"src/genbank_tool/cli_old.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli_old.py#L35","weight":0.6},{"kind":"complex-function","description":"main in src/genbank_tool/cli_enhanced.py: complexity 34, 169 lines","ref":"src/genbank_tool/cli_enhanced.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli_enhanced.py#L112","weight":0.5666666666666667},{"kind":"complex-function","description":"select_canonical in src/genbank_tool/transcript_selector.py: complexity 30, 158 lines","ref":"src/genbank_tool/transcript_selector.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/transcript_selector.py#L73","weight":0.5},{"kind":"complex-function","description":"resolve in src/genbank_tool/gene_resolver.py: complexity 27, 56 lines","ref":"src/genbank_tool/gene_resolver.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/gene_resolver.py#L441","weight":0.45},{"kind":"complex-function","description":"_parse_csv_file in src/genbank_tool/input_parser.py: complexity 22, 35 lines","ref":"src/genbank_tool/input_parser.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/input_parser.py#L94","weight":0.36666666666666664},{"kind":"complex-function","description":"request_with_recovery in src/genbank_tool/network_recovery.py: complexity 22, 88 lines","ref":"src/genbank_tool/network_recovery.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/network_recovery.py#L153","weight":0.36666666666666664},{"kind":"complex-function","description":"parse_mapping_file in src/genbank_tool/uniprot_downloader.py: complexity 20, 55 lines","ref":"src/genbank_tool/uniprot_downloader.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/uniprot_downloader.py#L80","weight":0.3333333333333333},{"kind":"complex-function","description":"process_batch in src/genbank_tool/batch_processor.py: complexity 19, 85 lines","ref":"src/genbank_tool/batch_processor.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/batch_processor.py#L79","weight":0.31666666666666665}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":8880.0,"duplicated_lines":909.0,"duplicated_share":0.1024,"files":38.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: examples/demos/auto_demo.py:17 and examples/demos/simple_demo.py:19","ref":"examples/demos/auto_demo.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/examples/demos/auto_demo.py#L17","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/batch_processor.py:168 and src/genbank_tool/batch_processor.py:189","ref":"src/genbank_tool/batch_processor.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/batch_processor.py#L168","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/cli.py:1 and src/genbank_tool/cli_old.py:1","ref":"src/genbank_tool/cli.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli.py#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/cli.py:25 and src/genbank_tool/cli_enhanced.py:88","ref":"src/genbank_tool/cli.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli.py#L25","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/cli.py:161 and src/genbank_tool/cli.py:186","ref":"src/genbank_tool/cli.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli.py#L161","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/cli_enhanced.py:35 and src/genbank_tool/cli_with_error_handling.py:41","ref":"src/genbank_tool/cli_enhanced.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli_enhanced.py#L35","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/cli_enhanced.py:266 and src/genbank_tool/cli_enhanced.py:294","ref":"src/genbank_tool/cli_enhanced.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli_enhanced.py#L266","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/cli_old.py:97 and src/genbank_tool/cli_old.py:121","ref":"src/genbank_tool/cli_old.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/cli_old.py#L97","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/data_validator.py:99 and src/genbank_tool/gene_resolver.py:65","ref":"src/genbank_tool/data_validator.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/data_validator.py#L99","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/genbank_tool/data_validator.py:102 and src/genbank_tool/hgnc_resolver.py:69","ref":"src/genbank_tool/data_validator.py","url":"https://github.com/gvmfhy/constitutional-seq/blob/8f8c546d3e203911b879d30898bd4b4226187a9d/src/genbank_tool/data_validator.py#L102","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":41.0,"weighted_findings":43.0,"scanned_lines":11889.0,"category:best-practice":36.0,"category:maintainability":5.0},"findings":[{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/genbank_tool/network_recovery.py","line":99,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/genbank_tool/network_recovery.py:99"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/batch_processor.py","line":38,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/batch_processor.py:38"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/batch_processor.py","line":44,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/batch_processor.py:44"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/cache_manager.py","line":112,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/cache_manager.py:112"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/cache_manager.py","line":165,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/cache_manager.py:165"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/cache_manager.py","line":331,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/cache_manager.py:331"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/cache_manager.py","line":360,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/cache_manager.py:360"},{"rule_id":"opengrep/python.lang.best-practice.pass-body-fn","severity":"medium","message":"`pass` is the body of function progress_callback. Consider removing this or raise NotImplementedError() if this is a TODO","path":"src/genbank_tool/cli_enhanced.py","line":245,"fingerprint":"python.lang.best-practice.pass-body-fn:src/genbank_tool/cli_enhanced.py:245"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/cli_old.py","line":54,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/cli_old.py:54"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_valid\" a function or an attribute? If it is a function, you may have meant validation_result.is_valid() because validation_result.is_valid is always true.","path":"src/genbank_tool/cli_old.py","line":171,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/genbank_tool/cli_old.py:171"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/config.py","line":81,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/config.py:81"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/config.py","line":104,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/config.py:104"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_valid\" a function or an attribute? If it is a function, you may have meant r.is_valid() because r.is_valid is always true.","path":"src/genbank_tool/data_validator.py","line":447,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/genbank_tool/data_validator.py:447"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_valid\" a function or an attribute? If it is a function, you may have meant r.is_valid() because r.is_valid is always true.","path":"src/genbank_tool/data_validator.py","line":472,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/genbank_tool/data_validator.py:472"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/error_handler.py","line":440,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/error_handler.py:440"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/error_handler.py","line":462,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/error_handler.py:462"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/error_handler.py","line":495,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/error_handler.py:495"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/error_handler.py","line":597,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/error_handler.py:597"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/gene_resolver.py","line":152,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/gene_resolver.py:152"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/gene_resolver.py","line":170,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/gene_resolver.py:170"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/gui/main_window.py","line":676,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/gui/main_window.py:676"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/hgnc_resolver.py","line":237,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/hgnc_resolver.py:237"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/hgnc_resolver.py","line":267,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/hgnc_resolver.py:267"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/input_parser.py","line":79,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/input_parser.py:79"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/input_parser.py","line":103,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/input_parser.py:103"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/input_parser.py","line":215,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/input_parser.py:215"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/input_parser.py","line":269,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/input_parser.py:269"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/input_parser.py","line":280,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/input_parser.py:280"},{"rule_id":"opengrep/python.lang.best-practice.logging-error-without-handling","severity":"medium","message":"Errors should only be logged when handled. The code logs the error and propogates the exception, consider reducing the level to warning or info.","path":"src/genbank_tool/logging_config.py","line":296,"fingerprint":"python.lang.best-practice.logging-error-without-handling:src/genbank_tool/logging_config.py:296"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/mane_selector.py","line":452,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/mane_selector.py:452"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/mane_selector.py","line":473,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/mane_selector.py:473"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"src/genbank_tool/network_recovery.py","line":62,"fingerprint":"python.requests.best-practice.use-raise-for-status:src/genbank_tool/network_recovery.py:62"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_valid\" a function or an attribute? If it is a function, you may have meant validation.is_valid() because validation.is_valid is always true.","path":"src/genbank_tool/output_formatter.py","line":154,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/genbank_tool/output_formatter.py:154"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_valid\" a function or an attribute? If it is a function, you may have meant validation.is_valid() because validation.is_valid is always true.","path":"src/genbank_tool/output_formatter.py","line":183,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/genbank_tool/output_formatter.py:183"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/sequence_retriever.py","line":99,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/sequence_retriever.py:99"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/sequence_retriever.py","line":117,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/sequence_retriever.py:117"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/uniprot_canonical.py","line":58,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/uniprot_canonical.py:58"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/uniprot_canonical.py","line":271,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/uniprot_canonical.py:271"},{"rule_id":"opengrep/python.requests.best-practice.use-timeout","severity":"medium","message":"Detected a 'requests' call without a timeout set. By default, 'requests' calls wait until the connection is closed. This means a 'requests' call without a timeout will hang the program if a response is never received. Consider setting a timeout for all 'requests'.","path":"src/genbank_tool/uniprot_downloader.py","line":57,"fingerprint":"python.requests.best-practice.use-timeout:src/genbank_tool/uniprot_downloader.py:57"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/uniprot_downloader.py","line":89,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/uniprot_downloader.py:89"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/genbank_tool/uniprot_downloader.py","line":186,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/genbank_tool/uniprot_downloader.py:186"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.8443,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.7742,"test_lines":5019.0,"source_lines":11889.0,"test_ratio":0.4222,"ci_files":0.0,"cochange_share":0.1935,"cochange_commits":31.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":183.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":1.0,"check:low_escape_density":1.0,"escapes":47.0,"escapes_per_kloc":3.953},"findings":[],"evidence":[{"kind":"typing","description":"Python strict type checking: pyproject.toml","ref":"pyproject.toml","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":9515.0,"other_lines":2374.0,"files_blamed":38.0,"blame_failures":0.0,"quality:ai_findings":36.0,"quality:ai_per_kloc":3.783,"quality:other_findings":5.0,"quality:other_per_kloc":2.106,"quality:ratio":1.8,"security:ai_findings":3.0,"security:ai_per_kloc":0.315,"security:other_findings":0.0,"security:other_per_kloc":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":["unreviewed-ai-risk"]}