{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-14T00:11:51.365067Z","repo":{"ref":{"host":"github.com","owner":"MrGeDiao","name":"shuorenhua"},"default_branch":"main","clone_url":"https://github.com/MrGeDiao/shuorenhua.git","html_url":"https://github.com/MrGeDiao/shuorenhua","description":"说人话｜中文优先的去 AI 味改写 skill：保事实、分场景、改完可直接发。Chinese-first rewrite skill for Codex / Claude Code / Cursor / ChatGPT — removes AI tone, preserves facts.","stars":2613,"forks":95,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":5148,"primary_language":"Python","license_spdx":"MIT","created_at":"2026-03-22T17:22:11Z","pushed_at":"2026-11-13T08:44:45Z","security_policy_url":null,"distribution":{"owner_created_at":"2015-10-27T02:50:00Z","owner_type":"User","release_assets":[{"name":"RELEASE_NOTES.md","size":1860,"download_count":21,"release_tag":"v2.5.0","url":"https://github.com/MrGeDiao/shuorenhua/releases/download/v2.5.0/RELEASE_NOTES.md"},{"name":"SHA256SUMS","size":171,"download_count":17,"release_tag":"v2.5.0","url":"https://github.com/MrGeDiao/shuorenhua/releases/download/v2.5.0/SHA256SUMS"},{"name":"shuorenhua-v2.5.0.zip","size":10198,"download_count":168,"release_tag":"v2.5.0","url":"https://github.com/MrGeDiao/shuorenhua/releases/download/v2.5.0/shuorenhua-v2.5.0.zip"}]}},"commit_sha":"39809cea2d8c006ff590ae7168ba0e9ed4565143","profile":{"lines_by_language":{"Python":5433},"files_by_category":{"docs":78,"config":10,"source":7,"test":6,"binary":3,"other":3,"oversized":1,"vendored":1},"source_lines":3650,"test_lines":1783},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.95,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":2.0,"flagged_work_units":0.0,"flagged_releases":0.0},"summary":"Explicit AI attribution on 0% of first-party code added; an estimated 0% including velocity signals."},"quality":{"score":71.7,"confidence":0.9,"coverage":1.0,"label":"adequate","breakdown":{"complexity":22.0,"duplication":90.4,"lint":81.4,"testing":89.4,"docs":100.0,"type_safety":40.0,"process":null},"summary":"Code quality is adequate: test-to-source ratio 0.49, CI runs tests; 50% of function code in complex or long functions; 2% duplicated lines. Weakest area: complexity."},"security":{"score":69.9,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":82.5,"dependencies":null,"ci_actions":49.7,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 2 high-severity SAST findings; 3 high-severity workflow issues. 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":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":112.0,"attributed_commits":3.0,"attributed_commit_share":0.026785714285714284,"effective_loc":5612.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":2.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 2 attributed commits, 0 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"OpenAI Codex: 1 attributed commits, 0 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2a3a27a0298966037e716471d53dee7e87efba80","url":"https://github.com/MrGeDiao/shuorenhua/commit/2a3a27a0298966037e716471d53dee7e87efba80","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"501fda64529d674d6f4cd032d16450bb8eb060cc","url":"https://github.com/MrGeDiao/shuorenhua/commit/501fda64529d674d6f4cd032d16450bb8eb060cc","weight":0.9},{"kind":"attributed-commit","description":"OpenAI Codex: on merged branch (99a9d5ac54)","ref":"fd90da17849c48e6b37cc518b778831e9c80fed6","url":"https://github.com/MrGeDiao/shuorenhua/commit/fd90da17849c48e6b37cc518b778831e9c80fed6","weight":0.9}],"data":{"attributed_loc_by_commit":{"fd90da17849c48e6b37cc518b778831e9c80fed6":0,"501fda64529d674d6f4cd032d16450bb8eb060cc":0,"2a3a27a0298966037e716471d53dee7e87efba80":0},"tools":{"openai-codex":{"name":"OpenAI Codex","commits":1,"loc":0,"first_seen":1774708977,"last_seen":1774708977},"claude-code":{"name":"Claude Code","commits":2,"loc":0,"first_seen":1778274407,"last_seen":1780441465}},"monthly":{"2026-03":{"loc":0,"attributed_loc":0},"2026-04":{"loc":0,"attributed_loc":0},"2026-05":{"loc":0,"attributed_loc":0},"2026-06":{"loc":0,"attributed_loc":0},"2026-07":{"loc":558,"attributed_loc":0},"2026-08":{"loc":3161,"attributed_loc":0},"2026-09":{"loc":1522,"attributed_loc":0},"2026-10":{"loc":12,"attributed_loc":0},"2026-11":{"loc":359,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":2.0,"workflow_agents":0.0,"tools_configured":2.0,"earliest_adoption":1776725304.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/CLAUDE.md","weight":0.5},{"kind":"ai-artifact","description":"AGENTS.md (generic-agent configuration)","ref":"AGENTS.md","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/AGENTS.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1781062516},{"tool":"generic-agent","path":"AGENTS.md","added_at":1776725304}],"workflows":[],"tools":["claude-code","generic-agent"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":17.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":5612.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":485.5,"median_loc_per_hour":72.25,"pr_timed_units":2.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":39.0,"flagged_releases":0.0,"max_loc_per_day":278.7},"findings":[],"evidence":[],"data":{"releases":[{"from":"v1.1.0","to":"v1.2.0","loc":0,"days":0.82,"loc_per_day":0.0,"flagged":false},{"from":"v1.2.0","to":"v1.3.0","loc":0,"days":0.18,"loc_per_day":0.0,"flagged":false},{"from":"v1.3.0","to":"v1.4.0","loc":0,"days":1.91,"loc_per_day":0.0,"flagged":false},{"from":"v1.4.0","to":"v1.4.1","loc":0,"days":0.63,"loc_per_day":0.0,"flagged":false},{"from":"v1.4.1","to":"v1.4.2","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"v1.4.2","to":"v1.4.3","loc":0,"days":2.3,"loc_per_day":0.0,"flagged":false},{"from":"v1.4.3","to":"v1.5.0","loc":0,"days":2.67,"loc_per_day":0.0,"flagged":false},{"from":"v1.5.0","to":"v1.6.0","loc":0,"days":3.34,"loc_per_day":0.0,"flagged":false},{"from":"v1.6.0","to":"v1.6.1","loc":0,"days":4.54,"loc_per_day":0.0,"flagged":false},{"from":"v1.6.1","to":"v1.7.0","loc":0,"days":5.01,"loc_per_day":0.0,"flagged":false},{"from":"v1.7.0","to":"v1.7.1","loc":0,"days":1.48,"loc_per_day":0.0,"flagged":false},{"from":"v1.7.1","to":"v1.7.2","loc":0,"days":2.2,"loc_per_day":0.0,"flagged":false},{"from":"v1.7.2","to":"v1.7.3","loc":0,"days":0.67,"loc_per_day":0.0,"flagged":false},{"from":"v1.7.3","to":"v1.7.4","loc":0,"days":3.41,"loc_per_day":0.0,"flagged":false},{"from":"v1.7.4","to":"v1.8.0","loc":0,"days":3.2,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.0","to":"v1.8.1","loc":0,"days":2.53,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.1","to":"v1.8.2","loc":0,"days":4.1,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.2","to":"v1.8.3","loc":0,"days":8.1,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.3","to":"v1.8.4","loc":0,"days":8.62,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.4","to":"v1.8.5","loc":0,"days":9.34,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.5","to":"v1.8.6","loc":0,"days":7.13,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.6","to":"v1.8.7","loc":0,"days":7.19,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.7","to":"v1.8.8","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"v1.8.8","to":"v1.9.0","loc":0,"days":7.91,"loc_per_day":0.0,"flagged":false},{"from":"v1.9.0","to":"v1.9.1","loc":0,"days":13.28,"loc_per_day":0.0,"flagged":false},{"from":"v1.9.1","to":"v1.9.2","loc":0,"days":3.44,"loc_per_day":0.0,"flagged":false},{"from":"v1.9.2","to":"v2.0.0","loc":109,"days":10.31,"loc_per_day":10.6,"flagged":false},{"from":"v2.0.0","to":"v2.0.2","loc":289,"days":6.61,"loc_per_day":43.7,"flagged":false},{"from":"v2.0.2","to":"v2.1.0","loc":160,"days":1.79,"loc_per_day":89.3,"flagged":false},{"from":"v2.1.0","to":"v2.2.0","loc":691,"days":11.01,"loc_per_day":62.8,"flagged":false},{"from":"v2.2.0","to":"v2.2.1","loc":0,"days":2.8,"loc_per_day":0.0,"flagged":false},{"from":"v2.2.1","to":"v2.3.0","loc":507,"days":7.88,"loc_per_day":64.3,"flagged":false},{"from":"v2.3.0","to":"v2.3.1","loc":1942,"days":6.97,"loc_per_day":278.7,"flagged":false},{"from":"v2.3.1","to":"v2.4.0","loc":21,"days":8.41,"loc_per_day":2.5,"flagged":false},{"from":"v2.4.0","to":"v2.5.0","loc":1431,"days":15.06,"loc_per_day":95.0,"flagged":false},{"from":"v2.5.0","to":"v2.5.1","loc":91,"days":16.79,"loc_per_day":5.4,"flagged":false},{"from":"v2.5.1","to":"v2.6.0","loc":0,"days":15.86,"loc_per_day":0.0,"flagged":false},{"from":"v2.6.0","to":"v2.6.1","loc":371,"days":20.31,"loc_per_day":18.3,"flagged":false},{"from":"v2.6.1","to":"v2.7.0","loc":0,"days":4.91,"loc_per_day":0.0,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":3650.0,"index":1.644,"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":12.0,"per_kloc:emoji_in_code":3.288,"files:emoji_in_code":2.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":2.0,"findings_medium":2.0,"findings_low":0.0,"weighted_findings":2.0,"scanned_lines":3650.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":"automation/check_repo.py","line":56,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:automation/check_repo.py:56"},{"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":"automation/eval/runner.py","line":463,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:automation/eval/runner.py:463"},{"rule_id":"opengrep/python.lang.security.audit.exec-detected","severity":"medium","message":"Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources. [confidence low]","path":"automation/check_repo.py","line":479,"fingerprint":"python.lang.security.audit.exec-detected:automation/check_repo.py:479"},{"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":"automation/eval/fetch_human_corpus.py","line":222,"fingerprint":"python.lang.security.audit.dynamic-urllib-use-detected:automation/eval/fetch_human_corpus.py:222"}],"evidence":[],"data":{"rulesets":["python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":2.0,"findings":7.0,"findings_high":3.0,"findings_medium":4.0,"findings_low":0.0,"penalty":42.0},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/check.yml","line":10,"fingerprint":"unpinned-uses:.github/workflows/check.yml:10"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/star-history.yml","line":15,"fingerprint":"unpinned-uses:.github/workflows/star-history.yml:15"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/star-history.yml","line":16,"fingerprint":"unpinned-uses:.github/workflows/star-history.yml:16"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/check.yml","line":10,"fingerprint":"artipacked:.github/workflows/check.yml:10"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/check.yml","line":7,"fingerprint":"excessive-permissions:.github/workflows/check.yml:7"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/star-history.yml","line":15,"fingerprint":"artipacked:.github/workflows/star-history.yml:15"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/star-history.yml","line":16,"fingerprint":"artipacked:.github/workflows/star-history.yml:16"}],"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.0446,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":1.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v2.5.0 ships shuorenhua-v2.5.0.zip (168 downloads)","ref":"shuorenhua-v2.5.0.zip","url":"https://github.com/MrGeDiao/shuorenhua/releases/download/v2.5.0/shuorenhua-v2.5.0.zip","weight":0.0}],"data":{"signals":["binary-release-assets"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":125.0,"function_nloc":2646.0,"mean_ccn":8.88,"p90_ccn":25.0,"complex_functions":17.0,"long_functions":3.0,"many_param_functions":0.0,"risky_nloc_share":0.5042},"findings":[],"evidence":[{"kind":"complex-function","description":"load_human_corpus in automation/eval/hard_metrics.py: complexity 118, 275 lines","ref":"automation/eval/hard_metrics.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/hard_metrics.py#L1022","weight":1.0},{"kind":"complex-function","description":"analyze_run in automation/eval/hard_metrics.py: complexity 60, 146 lines","ref":"automation/eval/hard_metrics.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/hard_metrics.py#L767","weight":1.0},{"kind":"complex-function","description":"check_runtime_manifest in automation/check_repo.py: complexity 44, 85 lines","ref":"automation/check_repo.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/check_repo.py#L175","weight":0.7333333333333333},{"kind":"complex-function","description":"calibrate in automation/eval/hard_metrics.py: complexity 44, 131 lines","ref":"automation/eval/hard_metrics.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/hard_metrics.py#L1484","weight":0.7333333333333333},{"kind":"complex-function","description":"analyze_case in automation/eval/hard_metrics.py: complexity 41, 96 lines","ref":"automation/eval/hard_metrics.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/hard_metrics.py#L603","weight":0.6833333333333333},{"kind":"complex-function","description":"validate_identity in automation/eval/runner.py: complexity 37, 37 lines","ref":"automation/eval/runner.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/runner.py#L293","weight":0.6166666666666667},{"kind":"complex-function","description":"validate_attempt in automation/eval/runner.py: complexity 31, 50 lines","ref":"automation/eval/runner.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/runner.py#L344","weight":0.5166666666666667},{"kind":"complex-function","description":"check_meta in automation/check_repo.py: complexity 30, 71 lines","ref":"automation/check_repo.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/check_repo.py#L314","weight":0.5},{"kind":"complex-function","description":"parse_response in automation/eval/protocol.py: complexity 28, 33 lines","ref":"automation/eval/protocol.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/protocol.py#L39","weight":0.4666666666666667},{"kind":"complex-function","description":"main in automation/eval/hard_metrics.py: complexity 26, 88 lines","ref":"automation/eval/hard_metrics.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/hard_metrics.py#L1654","weight":0.43333333333333335}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":2957.0,"duplicated_lines":50.0,"duplicated_share":0.0169,"files":7.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: automation/check_repo.py:145 and automation/check_repo.py:239","ref":"automation/check_repo.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/check_repo.py#L145","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: automation/eval/hard_metrics.py:263 and automation/eval/hard_metrics.py:404","ref":"automation/eval/hard_metrics.py","url":"https://github.com/MrGeDiao/shuorenhua/blob/39809cea2d8c006ff590ae7168ba0e9ed4565143/automation/eval/hard_metrics.py#L263","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":1.0,"weighted_findings":3.0,"scanned_lines":3650.0,"category:correctness":1.0},"findings":[{"rule_id":"opengrep/python.lang.correctness.tempfile.tempfile-without-flush","severity":"high","message":"Using 'handle.name' without '.flush()' or '.close()' may cause an error because the file may not exist when 'handle.name' is used. Use '.flush()' or close the file before using 'handle.name'.","path":"automation/eval/fetch_human_corpus.py","line":298,"fingerprint":"python.lang.correctness.tempfile.tempfile-without-flush:automation/eval/fetch_human_corpus.py:298"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.977,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":0.0,"check:tests_cochange":1.0,"test_lines":1783.0,"source_lines":3650.0,"test_ratio":0.4885,"ci_files":2.0,"cochange_share":0.3529,"cochange_commits":17.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/check.yml","ref":".github/workflows/check.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/star-history.yml","ref":".github/workflows/star-history.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (unittest)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["unittest"],"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":1.0,"check:changelog":1.0,"readme_lines":209.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":"CONTRIBUTING.md","ref":"CONTRIBUTING.md","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":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":0.0,"other_lines":3650.0,"files_blamed":7.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:other_findings":1.0,"quality:other_per_kloc":0.274,"security:ai_findings":0.0,"security:other_findings":4.0,"security:other_per_kloc":1.096},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}