{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:07.353341Z","repo":{"ref":{"host":"github.com","owner":"robindarlington","name":"LinuxWhisper"},"default_branch":"master","clone_url":"https://github.com/robindarlington/LinuxWhisper.git","html_url":"https://github.com/robindarlington/LinuxWhisper","description":null,"stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":332,"primary_language":"Python","license_spdx":"MIT","created_at":"2026-02-19T05:59:27Z","pushed_at":"2026-10-11T10:50:07Z","security_policy_url":null,"distribution":{"owner_created_at":"2013-08-14T10:29:31Z","owner_type":"User","release_assets":[]}},"commit_sha":"a0425ee2ed7dd581806a03bd2db4df2a23658dbb","profile":{"lines_by_language":{"Python":3580},"files_by_category":{"docs":52,"source":43,"config":4,"other":2,"test":1},"source_lines":3489,"test_lines":91},"pillars":{"ai_provenance":{"score":40.5,"confidence":0.89,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.4049,"suspected_share":0.0,"estimated_share":0.4049,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":null,"style_index":0.0},"summary":"Explicit AI attribution on 40% of first-party code added; an estimated 40% including velocity signals."},"quality":{"score":53.0,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":67.6,"duplication":88.1,"lint":45.5,"testing":22.6,"docs":65.0,"type_safety":40.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.03, no CI test run detected; 13% of function code in complex or long functions; 2% duplicated lines. Weakest area: testing."},"security":{"score":72.4,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":74.0,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 4 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":7.0,"checked":7.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":76.0,"attributed_commits":40.0,"attributed_commit_share":0.5263157894736842,"effective_loc":3784.0,"attributed_loc":1532.0,"attributed_loc_share":0.4048625792811839,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 40 attributed commits, 1,532 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2b759224447e6357b9cea5b4e2c495cbe2d3a327","url":"https://github.com/robindarlington/LinuxWhisper/commit/2b759224447e6357b9cea5b4e2c495cbe2d3a327","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"5c8a3e275c7f4ca68672d47c37815ea1f6dacc98","url":"https://github.com/robindarlington/LinuxWhisper/commit/5c8a3e275c7f4ca68672d47c37815ea1f6dacc98","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1ca68fbb0ae0481e450f172417cffd915550876e","url":"https://github.com/robindarlington/LinuxWhisper/commit/1ca68fbb0ae0481e450f172417cffd915550876e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a01d1c048e26e705b175575bfc2f829ccda763a5","url":"https://github.com/robindarlington/LinuxWhisper/commit/a01d1c048e26e705b175575bfc2f829ccda763a5","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0a521851a380ae0bc2a13e44208dc873ddb6b64f","url":"https://github.com/robindarlington/LinuxWhisper/commit/0a521851a380ae0bc2a13e44208dc873ddb6b64f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f2e2ac3928b67c2aac851f271c14309907f2dbff","url":"https://github.com/robindarlington/LinuxWhisper/commit/f2e2ac3928b67c2aac851f271c14309907f2dbff","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e9f90d388818bbd59e49500b85a45d1822269d93","url":"https://github.com/robindarlington/LinuxWhisper/commit/e9f90d388818bbd59e49500b85a45d1822269d93","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2dbb3e8fc7ef2f072ae6cb0a88eec9b9b9d49822","url":"https://github.com/robindarlington/LinuxWhisper/commit/2dbb3e8fc7ef2f072ae6cb0a88eec9b9b9d49822","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ec86907f708a62a341a3800105bee3df186100d0","url":"https://github.com/robindarlington/LinuxWhisper/commit/ec86907f708a62a341a3800105bee3df186100d0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b48d79ec3410b41940a2fbe38d805b9269f44997","url":"https://github.com/robindarlington/LinuxWhisper/commit/b48d79ec3410b41940a2fbe38d805b9269f44997","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f399135fe20ced3c4dcf050e1a631a22588278ab","url":"https://github.com/robindarlington/LinuxWhisper/commit/f399135fe20ced3c4dcf050e1a631a22588278ab","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"6e916401a110398264afc5e11d89b728768c4f8b","url":"https://github.com/robindarlington/LinuxWhisper/commit/6e916401a110398264afc5e11d89b728768c4f8b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"786161319853fb2f3296488e2d6a40ba27102f39","url":"https://github.com/robindarlington/LinuxWhisper/commit/786161319853fb2f3296488e2d6a40ba27102f39","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7eb8894837d59b68571bad5b03ac5dc92684a566","url":"https://github.com/robindarlington/LinuxWhisper/commit/7eb8894837d59b68571bad5b03ac5dc92684a566","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"35f4d9fcce21f322d3095baa8566e9cba8755d4b","url":"https://github.com/robindarlington/LinuxWhisper/commit/35f4d9fcce21f322d3095baa8566e9cba8755d4b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"50363e37aac8bbd654b59b2a551b74d9884898b7","url":"https://github.com/robindarlington/LinuxWhisper/commit/50363e37aac8bbd654b59b2a551b74d9884898b7","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b952fb44a006a307f432c930738fc5b55db29775","url":"https://github.com/robindarlington/LinuxWhisper/commit/b952fb44a006a307f432c930738fc5b55db29775","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0669252d71cc2c66866a4fabffc934b326260b28","url":"https://github.com/robindarlington/LinuxWhisper/commit/0669252d71cc2c66866a4fabffc934b326260b28","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a7745e7805c35c1fb47ee8c56fe23fa2f9b10d5e","url":"https://github.com/robindarlington/LinuxWhisper/commit/a7745e7805c35c1fb47ee8c56fe23fa2f9b10d5e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e70fb87b0b38c58e258b6950dcd11878f3753542","url":"https://github.com/robindarlington/LinuxWhisper/commit/e70fb87b0b38c58e258b6950dcd11878f3753542","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"71294de6a09668a294b14e789167e11d5b2adafb","url":"https://github.com/robindarlington/LinuxWhisper/commit/71294de6a09668a294b14e789167e11d5b2adafb","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"4b896054ff0070284614e7f1fdaa369cc7ce1c74","url":"https://github.com/robindarlington/LinuxWhisper/commit/4b896054ff0070284614e7f1fdaa369cc7ce1c74","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"02e387a72f680e3ddf6735e5b97c94e9d0797d57","url":"https://github.com/robindarlington/LinuxWhisper/commit/02e387a72f680e3ddf6735e5b97c94e9d0797d57","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"befcabc875719ea267e9605ced862d09494650a6","url":"https://github.com/robindarlington/LinuxWhisper/commit/befcabc875719ea267e9605ced862d09494650a6","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d6d809f1b3b19ba7d546be0f3d3547bb8e6bf6bb","url":"https://github.com/robindarlington/LinuxWhisper/commit/d6d809f1b3b19ba7d546be0f3d3547bb8e6bf6bb","weight":0.9}],"data":{"attributed_loc_by_commit":{"256cb461397aead01aa93e42daf48a458017cfd7":25,"a5fd089a7e4da3063f5bdf4b801e987c25c5f863":0,"c1b79d33a521f2f981d874cd3c4fbe6c2457e1a4":0,"377e8fc739e38dbc4543e01563334e792f7a7c61":0,"039bca891743ebf6fdd770760b5838ebafa8c15c":0,"cf44cae7433ba0ae09e29fe209d1fe3267d0f0e8":0,"b17518bab41ff4ec329feaea790125fb91e4adb0":8,"343e2029a3ecbaa74ff73acd77a620dbc0034871":0,"887b194bb6bc062ecd7ce349b9d3311e1994f0a0":0,"108f2063695a80251523d0e92efaac289bc605b0":102,"bec7a8a71262ec61c7d8259fa2e49175cb1c195e":0,"8c46818186bfd15fd957c3842f2078412ef2700f":443,"4c2132141506d498617908881ff6299958abe512":56,"04dc1b27149fdbf59c056250982d0655ccf0a183":0,"80cc671f63a4068c9389a2a0566fda9fd9f941ab":13,"d6d809f1b3b19ba7d546be0f3d3547bb8e6bf6bb":0,"befcabc875719ea267e9605ced862d09494650a6":0,"02e387a72f680e3ddf6735e5b97c94e9d0797d57":0,"4b896054ff0070284614e7f1fdaa369cc7ce1c74":214,"71294de6a09668a294b14e789167e11d5b2adafb":197,"e70fb87b0b38c58e258b6950dcd11878f3753542":0,"a7745e7805c35c1fb47ee8c56fe23fa2f9b10d5e":23,"0669252d71cc2c66866a4fabffc934b326260b28":31,"b952fb44a006a307f432c930738fc5b55db29775":0,"50363e37aac8bbd654b59b2a551b74d9884898b7":0,"35f4d9fcce21f322d3095baa8566e9cba8755d4b":30,"7eb8894837d59b68571bad5b03ac5dc92684a566":121,"786161319853fb2f3296488e2d6a40ba27102f39":0,"6e916401a110398264afc5e11d89b728768c4f8b":194,"f399135fe20ced3c4dcf050e1a631a22588278ab":59,"b48d79ec3410b41940a2fbe38d805b9269f44997":0,"ec86907f708a62a341a3800105bee3df186100d0":0,"2dbb3e8fc7ef2f072ae6cb0a88eec9b9b9d49822":0,"e9f90d388818bbd59e49500b85a45d1822269d93":0,"f2e2ac3928b67c2aac851f271c14309907f2dbff":16,"0a521851a380ae0bc2a13e44208dc873ddb6b64f":0,"a01d1c048e26e705b175575bfc2f829ccda763a5":0,"1ca68fbb0ae0481e450f172417cffd915550876e":0,"5c8a3e275c7f4ca68672d47c37815ea1f6dacc98":0,"2b759224447e6357b9cea5b4e2c495cbe2d3a327":0},"tools":{"claude-code":{"name":"Claude Code","commits":40,"loc":1532,"first_seen":1771400380,"last_seen":1771487940}},"monthly":{"2026-02":{"loc":3629,"attributed_loc":1532},"2026-10":{"loc":155,"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":11.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":3784.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":460.261337432744,"median_loc_per_hour":184.05226118071482,"pr_timed_units":0.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":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":3489.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":4.0,"findings_medium":0.0,"findings_low":0.0,"weighted_findings":3.0,"scanned_lines":3489.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'Popen' 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/linuxwhisper/cli/commands.py","line":57,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/linuxwhisper/cli/commands.py:57"},{"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/linuxwhisper/injection/focus.py","line":22,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/linuxwhisper/injection/focus.py:22"},{"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/linuxwhisper/overlay/__init__.py","line":61,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/linuxwhisper/overlay/__init__.py:61"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'Popen' 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/linuxwhisper/overlay/__init__.py","line":123,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/linuxwhisper/overlay/__init__.py:123"}],"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":"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":143.0,"function_nloc":1668.0,"mean_ccn":3.38,"p90_ccn":7.0,"complex_functions":3.0,"long_functions":1.0,"many_param_functions":0.0,"risky_nloc_share":0.1307},"findings":[],"evidence":[{"kind":"complex-function","description":"check_compositor_conflicts in src/linuxwhisper/config/validation.py: complexity 29, 116 lines","ref":"src/linuxwhisper/config/validation.py","url":"https://github.com/robindarlington/LinuxWhisper/blob/a0425ee2ed7dd581806a03bd2db4df2a23658dbb/src/linuxwhisper/config/validation.py#L104","weight":0.48333333333333334},{"kind":"complex-function","description":"start in src/linuxwhisper/hotkey/detector.py: complexity 17, 46 lines","ref":"src/linuxwhisper/hotkey/detector.py","url":"https://github.com/robindarlington/LinuxWhisper/blob/a0425ee2ed7dd581806a03bd2db4df2a23658dbb/src/linuxwhisper/hotkey/detector.py#L121","weight":0.2833333333333333},{"kind":"complex-function","description":"reload_config_safe in src/linuxwhisper/daemon/lifecycle.py: complexity 16, 56 lines","ref":"src/linuxwhisper/daemon/lifecycle.py","url":"https://github.com/robindarlington/LinuxWhisper/blob/a0425ee2ed7dd581806a03bd2db4df2a23658dbb/src/linuxwhisper/daemon/lifecycle.py#L97","weight":0.26666666666666666}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":2455.0,"duplicated_lines":52.0,"duplicated_share":0.0212,"files":43.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src/linuxwhisper/cli/commands.py:88 and src/linuxwhisper/cli/commands.py:131","ref":"src/linuxwhisper/cli/commands.py","url":"https://github.com/robindarlington/LinuxWhisper/blob/a0425ee2ed7dd581806a03bd2db4df2a23658dbb/src/linuxwhisper/cli/commands.py#L88","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/linuxwhisper/injection/clipboard.py:34 and src/linuxwhisper/injection/clipboard.py:99","ref":"src/linuxwhisper/injection/clipboard.py","url":"https://github.com/robindarlington/LinuxWhisper/blob/a0425ee2ed7dd581806a03bd2db4df2a23658dbb/src/linuxwhisper/injection/clipboard.py#L34","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":5.0,"weighted_findings":11.0,"scanned_lines":3489.0,"category:best-practice":4.0,"category:maintainability":1.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/linuxwhisper/cli/commands.py","line":65,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/linuxwhisper/cli/commands.py:65"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/linuxwhisper/cli/commands.py","line":108,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/linuxwhisper/cli/commands.py:108"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/linuxwhisper/daemon/main.py","line":108,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/linuxwhisper/daemon/main.py:108"},{"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/linuxwhisper/config/validation.py","line":205,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/linuxwhisper/config/validation.py:205"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_recording\" a function or an attribute? If it is a function, you may have meant self._recorder.is_recording() because self._recorder.is_recording is always true.","path":"src/linuxwhisper/pipeline/coordinator.py","line":332,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/linuxwhisper/pipeline/coordinator.py:332"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0522,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.1333,"test_lines":91.0,"source_lines":3489.0,"test_ratio":0.0261,"ci_files":0.0,"cochange_share":0.0333,"cochange_commits":30.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":159.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":0.0,"check:low_escape_density":1.0,"escapes":5.0,"escapes_per_kloc":1.433},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":1490.0,"other_lines":1999.0,"files_blamed":43.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":5.0,"quality:other_per_kloc":2.501,"quality:ratio":0.0,"security:ai_findings":2.0,"security:ai_per_kloc":1.342,"security:other_findings":2.0,"security:other_per_kloc":1.001,"security:ratio":1.34},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":["unreviewed-ai-risk"]}