{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:02.180478Z","repo":{"ref":{"host":"github.com","owner":"VirologyCharite","name":"iterated-consensus"},"default_branch":"main","clone_url":"https://github.com/VirologyCharite/iterated-consensus.git","html_url":"https://github.com/VirologyCharite/iterated-consensus","description":"Iteratively build a consensus sequence from a BAM/FASTQ by remapping against each new consensus until convergence","stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":388,"primary_language":"Python","license_spdx":"MIT","created_at":"2026-08-17T23:29:46Z","pushed_at":"2026-10-08T08:41:19Z","security_policy_url":null,"distribution":{"owner_created_at":"2017-09-18T14:35:17Z","owner_type":"Organization","release_assets":[]}},"commit_sha":"24047fe090a685f614ea1095a88838d1391a2a48","profile":{"lines_by_language":{"Python":7586,"Shell":21},"files_by_category":{"test":20,"source":16,"config":6,"docs":3,"other":2,"generated":1},"source_lines":3269,"test_lines":4338},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.43,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0,"suspected_share":0.2928,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":1.0,"flagged_releases":null,"style_index":0.0},"summary":"Weak signals consistent with AI-assisted development."},"quality":{"score":63.2,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":60.5,"duplication":100.0,"lint":37.0,"testing":55.0,"docs":85.0,"type_safety":40.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 1.33, no CI test run detected; 17% of function code in complex or long functions; 0% duplicated lines. Weakest area: lint."},"security":{"score":74.2,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":76.5,"dependencies":76.6,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 31 known vulnerabilities in 2 dependencies; 3 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":8.0,"checked":8.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":13.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":7985.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2026-08":{"loc":7757,"attributed_loc":0},"2026-10":{"loc":228,"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":1.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":4765.0,"flagged_loc":2338.0,"flagged_loc_share":0.4906610703043022,"max_loc_per_hour":695.8579881656805,"median_loc_per_hour":105.92212345060724,"pr_timed_units":0.0,"excluded_import_loc":3220.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"2,338 lines of first-party code in ~4.0h (584 lines/hour, 1 commit session)","ref":"cbe7133b9a2dafad02ef964f4359a7328190b8a7","url":"https://github.com/VirologyCharite/iterated-consensus/commit/cbe7133b9a2dafad02ef964f4359a7328190b8a7","weight":0.17535}],"data":{"flagged_loc_by_commit":{"cbe7133b9a2dafad02ef964f4359a7328190b8a7":2338},"excluded_import_commits":["3e52ce5a47141ac6086915056ea87d91f919d64f"]},"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":3269.0,"index":0.0,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"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":4.0,"findings_high":3.0,"findings_medium":1.0,"findings_low":0.0,"weighted_findings":2.5,"scanned_lines":3269.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"src/iterated_consensus/commands.py","line":53,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/iterated_consensus/commands.py:53"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"src/iterated_consensus/commands.py","line":59,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/iterated_consensus/commands.py:59"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"src/iterated_consensus/commands.py","line":106,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/iterated_consensus/commands.py:106"},{"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/iterated_consensus/reference.py","line":121,"fingerprint":"python.lang.security.audit.dynamic-urllib-use-detected:src/iterated_consensus/reference.py:121"}],"evidence":[],"data":{"rulesets":["python","bash"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":2.0,"vulnerabilities":31.0,"vulns_critical":0.0,"vulns_high":11.0,"vulns_medium":15.0,"vulns_low":5.0,"vulns_unknown":0.0,"penalty":16.0},"findings":[{"rule_id":"osv/GHSA-v4x8-3wr5-3wq8","severity":"high","message":"filelock@3.32.3 (PyPI) is affected by GHSA-v4x8-3wr5-3wq8","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-v4x8-3wr5-3wq8"},{"rule_id":"osv/GHSA-94p9-xgh2-xp45","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by PYSEC-2026-4011, GHSA-94p9-xgh2-xp45","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-94p9-xgh2-xp45"},{"rule_id":"osv/GHSA-p58f-9548-mpm2","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by PYSEC-2026-4013, GHSA-p58f-9548-mpm2","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-p58f-9548-mpm2"},{"rule_id":"osv/GHSA-x78j-v8h9-3j2q","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by PYSEC-2026-4014, GHSA-x78j-v8h9-3j2q","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-x78j-v8h9-3j2q"},{"rule_id":"osv/GHSA-394h-qwmc-48pf","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-394h-qwmc-48pf","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-394h-qwmc-48pf"},{"rule_id":"osv/GHSA-5vjq-rrrf-7h2q","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-5vjq-rrrf-7h2q","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-5vjq-rrrf-7h2q"},{"rule_id":"osv/GHSA-6w3r-xr62-4xcp","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-6w3r-xr62-4xcp","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-6w3r-xr62-4xcp"},{"rule_id":"osv/GHSA-8rjx-v5ww-45pp","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-8rjx-v5ww-45pp","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-8rjx-v5ww-45pp"},{"rule_id":"osv/GHSA-c947-3pg5-gm8q","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-c947-3pg5-gm8q","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-c947-3pg5-gm8q"},{"rule_id":"osv/GHSA-c978-59m8-c77v","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-c978-59m8-c77v","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-c978-59m8-c77v"},{"rule_id":"osv/GHSA-vxj4-q4g9-crj7","severity":"high","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-vxj4-q4g9-crj7","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-vxj4-q4g9-crj7"},{"rule_id":"osv/GHSA-6627-m3xw-93mp","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-6627-m3xw-93mp","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-6627-m3xw-93mp"},{"rule_id":"osv/GHSA-69hj-f68j-2879","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-69hj-f68j-2879","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-69hj-f68j-2879"},{"rule_id":"osv/GHSA-8mx5-7m5m-r77g","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-8mx5-7m5m-r77g","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-8mx5-7m5m-r77g"},{"rule_id":"osv/GHSA-9c4x-gm8v-wgc4","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-9c4x-gm8v-wgc4","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-9c4x-gm8v-wgc4"},{"rule_id":"osv/GHSA-cwqr-hh33-gh44","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-cwqr-hh33-gh44","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-cwqr-hh33-gh44"},{"rule_id":"osv/GHSA-fq56-3cx3-fjxp","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-fq56-3cx3-fjxp","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-fq56-3cx3-fjxp"},{"rule_id":"osv/GHSA-j8f7-rjxc-mr56","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-j8f7-rjxc-mr56","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-j8f7-rjxc-mr56"},{"rule_id":"osv/GHSA-m462-7rxw-wvpg","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-m462-7rxw-wvpg","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-m462-7rxw-wvpg"},{"rule_id":"osv/GHSA-rfpc-qcw5-3pc4","severity":"medium","message":"filelock@3.32.3 (PyPI) is affected by GHSA-rfpc-qcw5-3pc4","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-rfpc-qcw5-3pc4"},{"rule_id":"osv/GHSA-9h9j-4vrj-gf7g","severity":"medium","message":"virtualenv@21.7.4 (PyPI) is affected by PYSEC-2026-4012, GHSA-9h9j-4vrj-gf7g","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-9h9j-4vrj-gf7g"},{"rule_id":"osv/GHSA-43mp-35q3-x3fq","severity":"medium","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-43mp-35q3-x3fq","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-43mp-35q3-x3fq"},{"rule_id":"osv/GHSA-558c-9hv2-4prj","severity":"medium","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-558c-9hv2-4prj","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-558c-9hv2-4prj"},{"rule_id":"osv/GHSA-cw65-gx24-rc82","severity":"medium","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-cw65-gx24-rc82","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-cw65-gx24-rc82"},{"rule_id":"osv/GHSA-fc2g-4w5p-6whm","severity":"medium","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-fc2g-4w5p-6whm","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-fc2g-4w5p-6whm"},{"rule_id":"osv/GHSA-hhxq-47xx-j5xx","severity":"medium","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-hhxq-47xx-j5xx","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-hhxq-47xx-j5xx"},{"rule_id":"osv/GHSA-567q-5qvw-pf92","severity":"low","message":"filelock@3.32.3 (PyPI) is affected by GHSA-567q-5qvw-pf92","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-567q-5qvw-pf92"},{"rule_id":"osv/GHSA-9vhv-jxww-xfm5","severity":"low","message":"filelock@3.32.3 (PyPI) is affected by GHSA-9vhv-jxww-xfm5","path":"uv.lock","line":null,"fingerprint":"filelock@3.32.3 (PyPI):GHSA-9vhv-jxww-xfm5"},{"rule_id":"osv/GHSA-494p-63j8-28p3","severity":"low","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-494p-63j8-28p3","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-494p-63j8-28p3"},{"rule_id":"osv/GHSA-cx28-75q4-x26q","severity":"low","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-cx28-75q4-x26q","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-cx28-75q4-x26q"},{"rule_id":"osv/GHSA-qmx5-4p3x-wvqf","severity":"low","message":"virtualenv@21.7.4 (PyPI) is affected by GHSA-qmx5-4p3x-wvqf","path":"uv.lock","line":null,"fingerprint":"virtualenv@21.7.4 (PyPI):GHSA-qmx5-4p3x-wvqf"}],"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.0,"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":115.0,"function_nloc":1784.0,"mean_ccn":4.34,"p90_ccn":9.0,"complex_functions":2.0,"long_functions":2.0,"many_param_functions":3.0,"risky_nloc_share":0.1676},"findings":[],"evidence":[{"kind":"complex-function","description":"run_cmd in src/iterated_consensus/cli.py: complexity 21, 131 lines","ref":"src/iterated_consensus/cli.py","url":"https://github.com/VirologyCharite/iterated-consensus/blob/24047fe090a685f614ea1095a88838d1391a2a48/src/iterated_consensus/cli.py#L65","weight":0.35},{"kind":"complex-function","description":"run in src/iterated_consensus/runner.py: complexity 20, 168 lines","ref":"src/iterated_consensus/runner.py","url":"https://github.com/VirologyCharite/iterated-consensus/blob/24047fe090a685f614ea1095a88838d1391a2a48/src/iterated_consensus/runner.py#L734","weight":0.3333333333333333}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":2514.0,"duplicated_lines":0.0,"duplicated_share":0.0,"files":16.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":13.0,"weighted_findings":13.0,"scanned_lines":3269.0,"category:best-practice":1.0,"category:correctness":5.0,"category:maintainability":7.0},"findings":[{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_unmapped\" a function or an attribute? If it is a function, you may have meant read.is_unmapped() because read.is_unmapped is always true.","path":"src/iterated_consensus/bam.py","line":148,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/iterated_consensus/bam.py:148"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_secondary\" a function or an attribute? If it is a function, you may have meant read.is_secondary() because read.is_secondary is always true.","path":"src/iterated_consensus/bam.py","line":148,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/iterated_consensus/bam.py:148"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_supplementary\" a function or an attribute? If it is a function, you may have meant read.is_supplementary() because read.is_supplementary is always true.","path":"src/iterated_consensus/bam.py","line":149,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/iterated_consensus/bam.py:149"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_shell\" a function or an attribute? If it is a function, you may have meant cmd.is_shell() because cmd.is_shell is always true.","path":"src/iterated_consensus/commands.py","line":53,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/iterated_consensus/commands.py:53"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_shell\" a function or an attribute? If it is a function, you may have meant cmd.is_shell() because cmd.is_shell is always true.","path":"src/iterated_consensus/commands.py","line":61,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/iterated_consensus/commands.py:61"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_shell\" a function or an attribute? If it is a function, you may have meant rendered.is_shell() because rendered.is_shell is always true.","path":"src/iterated_consensus/commands.py","line":107,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/iterated_consensus/commands.py:107"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"src/iterated_consensus/report.py","line":97,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:src/iterated_consensus/report.py:97"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"src/iterated_consensus/report.py","line":111,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:src/iterated_consensus/report.py:111"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"src/iterated_consensus/report.py","line":118,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:src/iterated_consensus/report.py:118"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"src/iterated_consensus/report.py","line":210,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:src/iterated_consensus/report.py:210"},{"rule_id":"opengrep/python.lang.best-practice.manual-defaultdict-list-create","severity":"medium","message":"manually creating a defaultdict - use collections.defaultdict(list)","path":"src/iterated_consensus/report.py","line":233,"fingerprint":"python.lang.best-practice.manual-defaultdict-list-create:src/iterated_consensus/report.py:233"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_whole_file\" a function or an attribute? If it is a function, you may have meant resolved.is_whole_file() because resolved.is_whole_file is always true.","path":"src/iterated_consensus/runner.py","line":253,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/iterated_consensus/runner.py:253"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":"src/iterated_consensus/runner.py","line":485,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:src/iterated_consensus/runner.py:485"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":1.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":1.0,"test_lines":4338.0,"source_lines":3269.0,"test_ratio":1.327,"ci_files":0.0,"cochange_share":0.9091,"cochange_commits":11.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":1.0,"readme_lines":629.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},{"kind":"docs","description":"CHANGELOG.md","ref":"CHANGELOG.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":2.0,"escapes_per_kloc":0.616},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}