{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-13T23:56:18.652130Z","repo":{"ref":{"host":"github.com","owner":"crspytopgn","name":"openmcm2"},"default_branch":"main","clone_url":"https://github.com/crspytopgn/openmcm2.git","html_url":"https://github.com/crspytopgn/openmcm2","description":"Open-source engine for Motocross Madness 2, rewritten from scratch in Rust. Native on macOS, Windows and Linux. Bring your own copy of the game.","stars":18,"forks":2,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":17117,"primary_language":"Rust","license_spdx":"Apache-2.0","created_at":"2026-10-21T15:45:54Z","pushed_at":"2026-11-13T14:29:11Z","security_policy_url":null,"distribution":{"owner_created_at":"2016-04-28T21:31:20Z","owner_type":"User","release_assets":[{"name":"openmcm2-v0.3.2-linux-x86_64.tar.gz","size":24208380,"download_count":11,"release_tag":"v0.3.2","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.3.2-macos-arm64.zip","size":19903248,"download_count":4,"release_tag":"v0.3.2","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-macos-arm64.zip"},{"name":"openmcm2-v0.3.2-macos-x86_64.zip","size":20798089,"download_count":2,"release_tag":"v0.3.2","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-macos-x86_64.zip"},{"name":"openmcm2-v0.3.2-windows-x86_64.zip","size":20120922,"download_count":23,"release_tag":"v0.3.2","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":1,"release_tag":"v0.3.2","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/SHA256SUMS"},{"name":"openmcm2-v0.3.1-linux-x86_64.tar.gz","size":24229416,"download_count":34,"release_tag":"v0.3.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.1/openmcm2-v0.3.1-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.3.1-macos-arm64.zip","size":19914286,"download_count":13,"release_tag":"v0.3.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.1/openmcm2-v0.3.1-macos-arm64.zip"},{"name":"openmcm2-v0.3.1-macos-x86_64.zip","size":20805409,"download_count":6,"release_tag":"v0.3.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.1/openmcm2-v0.3.1-macos-x86_64.zip"},{"name":"openmcm2-v0.3.1-windows-x86_64.zip","size":20110469,"download_count":80,"release_tag":"v0.3.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.1/openmcm2-v0.3.1-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":4,"release_tag":"v0.3.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.1/SHA256SUMS"},{"name":"openmcm2-v0.3.0-linux-x86_64.tar.gz","size":23376102,"download_count":4,"release_tag":"v0.3.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.0/openmcm2-v0.3.0-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.3.0-macos-arm64.zip","size":19909163,"download_count":4,"release_tag":"v0.3.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.0/openmcm2-v0.3.0-macos-arm64.zip"},{"name":"openmcm2-v0.3.0-macos-x86_64.zip","size":20802479,"download_count":3,"release_tag":"v0.3.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.0/openmcm2-v0.3.0-macos-x86_64.zip"},{"name":"openmcm2-v0.3.0-windows-x86_64.zip","size":20110503,"download_count":6,"release_tag":"v0.3.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.0/openmcm2-v0.3.0-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":1,"release_tag":"v0.3.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.0/SHA256SUMS"},{"name":"openmcm2-v0.2.1-linux-x86_64.tar.gz","size":23246656,"download_count":64,"release_tag":"v0.2.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.1/openmcm2-v0.2.1-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.2.1-macos-arm64.zip","size":19781450,"download_count":27,"release_tag":"v0.2.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.1/openmcm2-v0.2.1-macos-arm64.zip"},{"name":"openmcm2-v0.2.1-macos-x86_64.zip","size":20653061,"download_count":8,"release_tag":"v0.2.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.1/openmcm2-v0.2.1-macos-x86_64.zip"},{"name":"openmcm2-v0.2.1-windows-x86_64.zip","size":19962542,"download_count":189,"release_tag":"v0.2.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.1/openmcm2-v0.2.1-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":7,"release_tag":"v0.2.1","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.1/SHA256SUMS"},{"name":"openmcm2-v0.2.0-linux-x86_64.tar.gz","size":23178528,"download_count":11,"release_tag":"v0.2.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.0/openmcm2-v0.2.0-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.2.0-macos-arm64.zip","size":19478726,"download_count":5,"release_tag":"v0.2.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.0/openmcm2-v0.2.0-macos-arm64.zip"},{"name":"openmcm2-v0.2.0-macos-x86_64.zip","size":20356641,"download_count":3,"release_tag":"v0.2.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.0/openmcm2-v0.2.0-macos-x86_64.zip"},{"name":"openmcm2-v0.2.0-windows-x86_64.zip","size":19832560,"download_count":28,"release_tag":"v0.2.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.0/openmcm2-v0.2.0-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":2,"release_tag":"v0.2.0","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.2.0/SHA256SUMS"},{"name":"openmcm2-v0.1.8-linux-x86_64.tar.gz","size":23044694,"download_count":4,"release_tag":"v0.1.8","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.8/openmcm2-v0.1.8-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.1.8-macos-arm64.zip","size":19359861,"download_count":4,"release_tag":"v0.1.8","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.8/openmcm2-v0.1.8-macos-arm64.zip"},{"name":"openmcm2-v0.1.8-macos-x86_64.zip","size":20221299,"download_count":4,"release_tag":"v0.1.8","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.8/openmcm2-v0.1.8-macos-x86_64.zip"},{"name":"openmcm2-v0.1.8-windows-x86_64.zip","size":19720565,"download_count":5,"release_tag":"v0.1.8","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.8/openmcm2-v0.1.8-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":1,"release_tag":"v0.1.8","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.8/SHA256SUMS"},{"name":"openmcm2-v0.1.7-linux-x86_64.tar.gz","size":23039159,"download_count":4,"release_tag":"v0.1.7","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.7/openmcm2-v0.1.7-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.1.7-macos-arm64.zip","size":19356714,"download_count":10,"release_tag":"v0.1.7","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.7/openmcm2-v0.1.7-macos-arm64.zip"},{"name":"openmcm2-v0.1.7-macos-x86_64.zip","size":20216061,"download_count":7,"release_tag":"v0.1.7","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.7/openmcm2-v0.1.7-macos-x86_64.zip"},{"name":"openmcm2-v0.1.7-windows-x86_64.zip","size":19723218,"download_count":9,"release_tag":"v0.1.7","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.7/openmcm2-v0.1.7-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":1,"release_tag":"v0.1.7","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.7/SHA256SUMS"},{"name":"openmcm2-v0.1.6-linux-x86_64.tar.gz","size":23037401,"download_count":1,"release_tag":"v0.1.6","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.6/openmcm2-v0.1.6-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.1.6-macos-arm64.zip","size":19354923,"download_count":8,"release_tag":"v0.1.6","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.6/openmcm2-v0.1.6-macos-arm64.zip"},{"name":"openmcm2-v0.1.6-macos-x86_64.zip","size":20218881,"download_count":7,"release_tag":"v0.1.6","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.6/openmcm2-v0.1.6-macos-x86_64.zip"},{"name":"openmcm2-v0.1.6-windows-x86_64.zip","size":19719217,"download_count":7,"release_tag":"v0.1.6","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.6/openmcm2-v0.1.6-windows-x86_64.zip"},{"name":"SHA256SUMS","size":400,"download_count":1,"release_tag":"v0.1.6","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.6/SHA256SUMS"},{"name":"openmcm2-v0.1.5-linux-x86_64.tar.gz","size":21660685,"download_count":1,"release_tag":"v0.1.5","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.5/openmcm2-v0.1.5-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.1.5-macos-arm64.zip","size":18158825,"download_count":1,"release_tag":"v0.1.5","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.5/openmcm2-v0.1.5-macos-arm64.zip"},{"name":"openmcm2-v0.1.5-macos-x86_64.zip","size":18878327,"download_count":2,"release_tag":"v0.1.5","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.5/openmcm2-v0.1.5-macos-x86_64.zip"},{"name":"openmcm2-v0.1.5-windows-x86_64.zip","size":18529024,"download_count":2,"release_tag":"v0.1.5","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.5/openmcm2-v0.1.5-windows-x86_64.zip"},{"name":"openmcm2-v0.1.4-linux-x86_64.tar.gz","size":21658037,"download_count":3,"release_tag":"v0.1.4","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.4/openmcm2-v0.1.4-linux-x86_64.tar.gz"},{"name":"openmcm2-v0.1.4-macos-arm64.zip","size":18158828,"download_count":1,"release_tag":"v0.1.4","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.4/openmcm2-v0.1.4-macos-arm64.zip"},{"name":"openmcm2-v0.1.4-macos-x86_64.zip","size":18878293,"download_count":1,"release_tag":"v0.1.4","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.4/openmcm2-v0.1.4-macos-x86_64.zip"},{"name":"openmcm2-v0.1.4-windows-x86_64.zip","size":18528003,"download_count":2,"release_tag":"v0.1.4","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.1.4/openmcm2-v0.1.4-windows-x86_64.zip"}]}},"commit_sha":"3a455e528623201fb9032ae9bdcbdeadd8e4e023","profile":{"lines_by_language":{"Rust":56473,"Java":205,"Shell":103,"Python":85},"files_by_category":{"source":135,"binary":49,"other":24,"config":14,"docs":12,"test":2,"generated":1},"source_lines":56467,"test_lines":399},"pillars":{"ai_provenance":{"score":100.0,"confidence":0.84,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":1.0,"suspected_share":0.0,"estimated_share":1.0,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":0.0},"summary":"Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals."},"quality":{"score":64.7,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":39.7,"duplication":86.7,"lint":97.8,"testing":56.3,"docs":65.0,"type_safety":40.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.01, CI runs tests; 31% of function code in complex or long functions; 2% duplicated lines. Weakest area: complexity."},"security":{"score":71.0,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":96.1,"dependencies":86.1,"ci_actions":3.3,"posture":20.0,"scorecard":null},"summary":"Security posture is adequate: 3 known vulnerabilities in 3 dependencies; 17 high-severity workflow issues. Weakest area: ci actions."}},"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":17.0,"checked":17.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":57.0,"attributed_commits":57.0,"attributed_commit_share":1.0,"effective_loc":58263.0,"attributed_loc":58263.0,"attributed_loc_share":1.0,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 57 attributed commits, 58,263 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"fb08a6aee32ca6c1dfd11108daa7e6a1fbb939c0","url":"https://github.com/crspytopgn/openmcm2/commit/fb08a6aee32ca6c1dfd11108daa7e6a1fbb939c0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"1d7407a5c3e9ca35d47a473d4553107f70edd576","url":"https://github.com/crspytopgn/openmcm2/commit/1d7407a5c3e9ca35d47a473d4553107f70edd576","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"5ade6f1dd116a7759825cc9981f88fcae9ee3cf0","url":"https://github.com/crspytopgn/openmcm2/commit/5ade6f1dd116a7759825cc9981f88fcae9ee3cf0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"63adf597fb795b757e461dd646e9625c190c41b1","url":"https://github.com/crspytopgn/openmcm2/commit/63adf597fb795b757e461dd646e9625c190c41b1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"a0e42f592256af989644989cc37e16d3aa381fd1","url":"https://github.com/crspytopgn/openmcm2/commit/a0e42f592256af989644989cc37e16d3aa381fd1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"6ed40aab741b3a193898b0d369f0e16e506fcf6f","url":"https://github.com/crspytopgn/openmcm2/commit/6ed40aab741b3a193898b0d369f0e16e506fcf6f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"7b192ac47d58e677fd2d50996f5e80bb3a53d22e","url":"https://github.com/crspytopgn/openmcm2/commit/7b192ac47d58e677fd2d50996f5e80bb3a53d22e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"c2d8f4563cf5048eb18c38a1cda39d3c4b1449d4","url":"https://github.com/crspytopgn/openmcm2/commit/c2d8f4563cf5048eb18c38a1cda39d3c4b1449d4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"5ae9b62d784694d5639aeda6b00050ca68596c10","url":"https://github.com/crspytopgn/openmcm2/commit/5ae9b62d784694d5639aeda6b00050ca68596c10","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"f6853685b81b1bc0cfbfce2ef9a08fff55629416","url":"https://github.com/crspytopgn/openmcm2/commit/f6853685b81b1bc0cfbfce2ef9a08fff55629416","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"a33038a08b162a7fbe94b5230305caba77df05cc","url":"https://github.com/crspytopgn/openmcm2/commit/a33038a08b162a7fbe94b5230305caba77df05cc","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"639aa4f55a995391c5e9203b9f826cd2e4955fed","url":"https://github.com/crspytopgn/openmcm2/commit/639aa4f55a995391c5e9203b9f826cd2e4955fed","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"7707988f2112c048c171c2f77a82dd9acd6d2e77","url":"https://github.com/crspytopgn/openmcm2/commit/7707988f2112c048c171c2f77a82dd9acd6d2e77","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"2c8ac6d9f6433a4b36870c1001e5234b5f13688d","url":"https://github.com/crspytopgn/openmcm2/commit/2c8ac6d9f6433a4b36870c1001e5234b5f13688d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"0dce22196e0f0c9edaa2b82c8623155ffbba0a73","url":"https://github.com/crspytopgn/openmcm2/commit/0dce22196e0f0c9edaa2b82c8623155ffbba0a73","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"d21cd7a549c31a98bb6976968b29889eac41b831","url":"https://github.com/crspytopgn/openmcm2/commit/d21cd7a549c31a98bb6976968b29889eac41b831","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"ad2d41f7f75867463dd3d53c8bc2ad8e59caa9f8","url":"https://github.com/crspytopgn/openmcm2/commit/ad2d41f7f75867463dd3d53c8bc2ad8e59caa9f8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"75940f88917c273988aae08b99d633b0d0af36e4","url":"https://github.com/crspytopgn/openmcm2/commit/75940f88917c273988aae08b99d633b0d0af36e4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"b029fe5252b694ac79a4a8f4ee6e726b1064b74f","url":"https://github.com/crspytopgn/openmcm2/commit/b029fe5252b694ac79a4a8f4ee6e726b1064b74f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"0741ca8ee84a37ff52381a50a051813136a02d8c","url":"https://github.com/crspytopgn/openmcm2/commit/0741ca8ee84a37ff52381a50a051813136a02d8c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"2006dc6859b1ffd894cebae09b3b45ecb78f0cc6","url":"https://github.com/crspytopgn/openmcm2/commit/2006dc6859b1ffd894cebae09b3b45ecb78f0cc6","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"42014b793b585301786c558d7695cc8440332808","url":"https://github.com/crspytopgn/openmcm2/commit/42014b793b585301786c558d7695cc8440332808","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"89b911e2cca2b73263713dd2f582db8856b2a571","url":"https://github.com/crspytopgn/openmcm2/commit/89b911e2cca2b73263713dd2f582db8856b2a571","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"c18adc01f38ce459515453d8ac384967e3428bcf","url":"https://github.com/crspytopgn/openmcm2/commit/c18adc01f38ce459515453d8ac384967e3428bcf","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: committer email noreply@anthropic.com","ref":"6eb4f8f4501b4f64765070ebf2834d7b576ac87e","url":"https://github.com/crspytopgn/openmcm2/commit/6eb4f8f4501b4f64765070ebf2834d7b576ac87e","weight":0.9}],"data":{"attributed_loc_by_commit":{"a2a30e966cd77682177c261f396b3e96e2d15290":49858,"8191f5590a34952f25f70c33507e4f928f04493f":0,"45e01ee760f91959f7ebbda7d940e31871ae8ff2":633,"412812410ce8f2c12d62721b91e9e4a0d79ce19b":205,"90e04182a05199ff16e3228ad7b4c7f3f49d010a":0,"d6347410fc6a6cd841799ccf1b51a821b1e7532d":365,"667f16315a97cfa2732d6cdd231f935426e93c8a":312,"2189e2cdbb35eeb293a8b8199d65cea58696c91a":0,"6b77a851dcb04efe7aa692cec16cfe1da22317f1":90,"847fbe1405510ad9ecee10cd9d10773df47cc557":29,"18272dfbc0604012326e84b439019dbc237edd34":0,"308bc532ac5b9e6d068829842e55a364bbc2cfb1":796,"08e3d49de6a646754237fc6be42506997502593b":122,"d7af66f59594e4a3709699a3517c0964de3e284b":173,"37b4e757f3705555841527e217ea326a8f5ef741":868,"16de80f4e2477c25075ee2853884809d358ae054":50,"046c3008d95fc8ef903583a43666db3cdab2e82c":275,"4e2d2e89d19378d4c25ecd1280686caada9a53ac":339,"2b158020855314afc5605f9cc2a293d31b0c4442":0,"19f3a76d339946e5c60e7edee82dea417994b68b":110,"eff1b2408e31ad989332398d66355c6ed7387b25":83,"5d8d993597a5dea801ba45d78462c7fcbba5301a":42,"a2114781589861e9b000391f88c6d845dd85b011":70,"a20251c82b045a1fe6cdb9c1c9e31c4440739c27":34,"8c723d8b269133567718207b6f72dd9f718e1111":0,"c6efb12ba9d786b004390d8783547cbe55a5579b":255,"c3d732e3afb59b4284a7073064fcc5ac5aa67e7d":61,"08c5c9b1dcd55ba6f1764d68d3d77a3fab31f781":227,"9dbc7bb23aac3416b71aee6b1c449f7fdeb91096":75,"d0b9900a0782a22194951857ac79e58dfeeffe15":27,"4b44d83fe4f485ef885530010f0f80eac7062a86":1,"98103ae4fe9060514b6faa58a8f82f8c48db2879":156,"6eb4f8f4501b4f64765070ebf2834d7b576ac87e":0,"c18adc01f38ce459515453d8ac384967e3428bcf":67,"89b911e2cca2b73263713dd2f582db8856b2a571":525,"42014b793b585301786c558d7695cc8440332808":73,"0741ca8ee84a37ff52381a50a051813136a02d8c":1206,"2006dc6859b1ffd894cebae09b3b45ecb78f0cc6":0,"b029fe5252b694ac79a4a8f4ee6e726b1064b74f":195,"75940f88917c273988aae08b99d633b0d0af36e4":170,"ad2d41f7f75867463dd3d53c8bc2ad8e59caa9f8":0,"d21cd7a549c31a98bb6976968b29889eac41b831":112,"0dce22196e0f0c9edaa2b82c8623155ffbba0a73":21,"2c8ac6d9f6433a4b36870c1001e5234b5f13688d":65,"7707988f2112c048c171c2f77a82dd9acd6d2e77":18,"639aa4f55a995391c5e9203b9f826cd2e4955fed":2,"a33038a08b162a7fbe94b5230305caba77df05cc":104,"f6853685b81b1bc0cfbfce2ef9a08fff55629416":315,"5ae9b62d784694d5639aeda6b00050ca68596c10":0,"c2d8f4563cf5048eb18c38a1cda39d3c4b1449d4":35,"7b192ac47d58e677fd2d50996f5e80bb3a53d22e":23,"6ed40aab741b3a193898b0d369f0e16e506fcf6f":0,"a0e42f592256af989644989cc37e16d3aa381fd1":0,"63adf597fb795b757e461dd646e9625c190c41b1":0,"5ade6f1dd116a7759825cc9981f88fcae9ee3cf0":0,"1d7407a5c3e9ca35d47a473d4553107f70edd576":0,"fb08a6aee32ca6c1dfd11108daa7e6a1fbb939c0":76},"tools":{"claude-code":{"name":"Claude Code","commits":57,"loc":58263,"first_seen":1792956286,"last_seen":1794576826}},"monthly":{"2026-10":{"loc":55848,"attributed_loc":55848},"2026-11":{"loc":2415,"attributed_loc":2415}}},"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":27.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":8405.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":602.1897810218977,"median_loc_per_hour":84.75,"pr_timed_units":3.0,"excluded_import_loc":49858.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["a2a30e966cd77682177c261f396b3e96e2d15290"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":13.0,"flagged_releases":0.0,"max_loc_per_day":19104.0},"findings":[],"evidence":[],"data":{"releases":[{"from":"v0.1.0","to":"v0.1.1","loc":838,"days":0.63,"loc_per_day":1329.2,"flagged":false},{"from":"v0.1.1","to":"v0.1.2","loc":365,"days":0.99,"loc_per_day":368.0,"flagged":false},{"from":"v0.1.2","to":"v0.1.3","loc":312,"days":0.04,"loc_per_day":7488.0,"flagged":false},{"from":"v0.1.3","to":"v0.1.4","loc":90,"days":0.11,"loc_per_day":790.9,"flagged":false},{"from":"v0.1.4","to":"v0.1.5","loc":29,"days":0.04,"loc_per_day":696.0,"flagged":false},{"from":"v0.1.5","to":"v0.1.6","loc":796,"days":0.04,"loc_per_day":19104.0,"flagged":false},{"from":"v0.1.6","to":"v0.1.7","loc":122,"days":0.29,"loc_per_day":417.6,"flagged":false},{"from":"v0.1.7","to":"v0.1.8","loc":173,"days":0.47,"loc_per_day":371.3,"flagged":false},{"from":"v0.1.8","to":"v0.2.0","loc":868,"days":0.26,"loc_per_day":3402.1,"flagged":false},{"from":"v0.2.0","to":"v0.2.1","loc":325,"days":0.69,"loc_per_day":472.0,"flagged":false},{"from":"v0.2.1","to":"v0.3.0","loc":4353,"days":13.21,"loc_per_day":329.6,"flagged":false},{"from":"v0.3.0","to":"v0.3.1","loc":58,"days":0.08,"loc_per_day":713.8,"flagged":false},{"from":"v0.3.1","to":"v0.3.2","loc":76,"days":1.95,"loc_per_day":38.9,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":56467.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":26.0,"findings_high":0.0,"findings_medium":0.0,"findings_low":26.0,"weighted_findings":6.5,"scanned_lines":56467.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/mm2-launcher/src/iso.rs","line":215,"fingerprint":"rust.lang.security.temp-dir:crates/mm2-launcher/src/iso.rs:215"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"crates/mm2-launcher/src/main.rs","line":35,"fingerprint":"rust.lang.security.args:crates/mm2-launcher/src/main.rs:35"},{"rule_id":"opengrep/rust.lang.security.current-exe","severity":"low","message":"current_exe should not be used for security operations. From the docs: \"The output of this function should not be trusted for anything that might have security implications. Basically, if users can run the executable, they can change the output arbitrarily.\" [confidence high]","path":"crates/mm2-launcher/src/settings.rs","line":10,"fingerprint":"rust.lang.security.current-exe:crates/mm2-launcher/src/settings.rs:10"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/mm2-launcher/src/tracks.rs","line":403,"fingerprint":"rust.lang.security.temp-dir:crates/mm2-launcher/src/tracks.rs:403"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/mm2-launcher/src/tracks.rs","line":430,"fingerprint":"rust.lang.security.temp-dir:crates/mm2-launcher/src/tracks.rs:430"},{"rule_id":"opengrep/rust.lang.security.current-exe","severity":"low","message":"current_exe should not be used for security operations. From the docs: \"The output of this function should not be trusted for anything that might have security implications. Basically, if users can run the executable, they can change the output arbitrarily.\" [confidence high]","path":"crates/mm2-launcher/src/update.rs","line":84,"fingerprint":"rust.lang.security.current-exe:crates/mm2-launcher/src/update.rs:84"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-launcher/src/update.rs","line":483,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-launcher/src/update.rs:483"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/mm2-launcher/src/update.rs","line":608,"fingerprint":"rust.lang.security.temp-dir:crates/mm2-launcher/src/update.rs:608"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"crates/mm2-tools/src/main.rs","line":24,"fingerprint":"rust.lang.security.args:crates/mm2-tools/src/main.rs:24"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"crates/mm2-viewer/src/main.rs","line":135,"fingerprint":"rust.lang.security.args:crates/mm2-viewer/src/main.rs:135"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"crates/mm2-viewer/src/main.rs","line":756,"fingerprint":"rust.lang.security.args:crates/mm2-viewer/src/main.rs:756"},{"rule_id":"opengrep/rust.lang.security.current-exe","severity":"low","message":"current_exe should not be used for security operations. From the docs: \"The output of this function should not be trusted for anything that might have security implications. Basically, if users can run the executable, they can change the output arbitrarily.\" [confidence high]","path":"crates/mm2-viewer/src/main.rs","line":774,"fingerprint":"rust.lang.security.current-exe:crates/mm2-viewer/src/main.rs:774"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"crates/mm2-viewer/src/main.rs","line":3574,"fingerprint":"rust.lang.security.args:crates/mm2-viewer/src/main.rs:3574"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/mm2-viewer/src/profile.rs","line":770,"fingerprint":"rust.lang.security.temp-dir:crates/mm2-viewer/src/profile.rs:770"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/mm2-viewer/src/screens/records.rs","line":328,"fingerprint":"rust.lang.security.temp-dir:crates/mm2-viewer/src/screens/records.rs:328"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"crates/mm2-viewer/src/screens/records.rs","line":361,"fingerprint":"rust.lang.security.temp-dir:crates/mm2-viewer/src/screens/records.rs:361"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"crates/mm2-viewer/src/tweaks.rs","line":123,"fingerprint":"rust.lang.security.args:crates/mm2-viewer/src/tweaks.rs:123"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":33,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:33"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":38,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:38"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":50,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:50"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":55,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:55"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":66,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:66"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":67,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:67"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":73,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:73"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":76,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:76"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"crates/mm2-viewer/src/winwatch.rs","line":95,"fingerprint":"rust.lang.security.unsafe-usage:crates/mm2-viewer/src/winwatch.rs:95"}],"evidence":[],"data":{"rulesets":["rust","java","bash","python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":3.0,"vulnerabilities":3.0,"vulns_critical":0.0,"vulns_high":0.0,"vulns_medium":1.0,"vulns_low":0.0,"vulns_unknown":2.0,"penalty":9.0},"findings":[{"rule_id":"osv/RUSTSEC-2026-0486","severity":"medium","message":"rustix@1.1.5 (crates.io) is affected by RUSTSEC-2026-0486","path":"Cargo.lock","line":null,"fingerprint":"rustix@1.1.5 (crates.io):RUSTSEC-2026-0486"},{"rule_id":"osv/GHSA-5wjr-9356-4wc8","severity":"medium","message":"tokio@1.54.0 (crates.io) is affected by RUSTSEC-2026-0384, GHSA-5wjr-9356-4wc8","path":"Cargo.lock","line":null,"fingerprint":"tokio@1.54.0 (crates.io):GHSA-5wjr-9356-4wc8"},{"rule_id":"osv/RUSTSEC-2026-0192","severity":"medium","message":"ttf-parser@0.25.1 (crates.io) is affected by RUSTSEC-2026-0192","path":"Cargo.lock","line":null,"fingerprint":"ttf-parser@0.25.1 (crates.io):RUSTSEC-2026-0192"}],"evidence":[],"data":{"ecosystems":["crates.io"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":4.0,"findings":24.0,"findings_high":17.0,"findings_medium":6.0,"findings_low":1.0,"penalty":204.0},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":17,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:17"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":18,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:18"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":23,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:23"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":26,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:26"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":29,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:29"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":33,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:33"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/publish-release.yml","line":20,"fingerprint":"unpinned-uses:.github/workflows/publish-release.yml:20"},{"rule_id":"zizmor/excessive-permissions","severity":"high","message":"overly broad permissions [confidence high]","path":".github/workflows/release.yml","line":25,"fingerprint":"excessive-permissions:.github/workflows/release.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":39,"fingerprint":"unpinned-uses:.github/workflows/release.yml:39"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":40,"fingerprint":"unpinned-uses:.github/workflows/release.yml:40"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":43,"fingerprint":"unpinned-uses:.github/workflows/release.yml:43"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":84,"fingerprint":"unpinned-uses:.github/workflows/release.yml:84"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":94,"fingerprint":"unpinned-uses:.github/workflows/release.yml:94"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":95,"fingerprint":"unpinned-uses:.github/workflows/release.yml:95"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":108,"fingerprint":"unpinned-uses:.github/workflows/release.yml:108"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/release.yml","line":43,"fingerprint":"cache-poisoning:.github/workflows/release.yml:43"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":17,"fingerprint":"artipacked:.github/workflows/ci.yml:17"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":10,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:10"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/pages.yml","line":25,"fingerprint":"artipacked:.github/workflows/pages.yml:25"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/publish-release.yml","line":20,"fingerprint":"artipacked:.github/workflows/publish-release.yml:20"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/release.yml","line":39,"fingerprint":"artipacked:.github/workflows/release.yml:39"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/release.yml","line":94,"fingerprint":"artipacked:.github/workflows/release.yml:94"},{"rule_id":"zizmor/superfluous-actions","severity":"info","message":"action functionality is already included by the runner [confidence high]","path":".github/workflows/release.yml","line":108,"fingerprint":"superfluous-actions:.github/workflows/release.yml:108"}],"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":1.0,"check:lockfiles":0.0,"signed_commit_share":1.0,"unpinned_manifests":7.0},"findings":[],"evidence":[{"kind":"posture","description":"crates/mm2-formats/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/mm2-formats/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/mm2-indeo/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/mm2-indeo/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/mm2-launcher/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/mm2-launcher/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/mm2-physics/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/mm2-physics/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/mm2-settings/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/mm2-settings/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/mm2-tools/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/mm2-tools/Cargo.toml","url":null,"weight":0.3},{"kind":"posture","description":"crates/mm2-viewer/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"crates/mm2-viewer/Cargo.toml","url":null,"weight":0.3}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":40.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v0.3.2 ships openmcm2-v0.3.2-linux-x86_64.tar.gz (11 downloads)","ref":"openmcm2-v0.3.2-linux-x86_64.tar.gz","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-linux-x86_64.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v0.3.2 ships openmcm2-v0.3.2-macos-arm64.zip (4 downloads)","ref":"openmcm2-v0.3.2-macos-arm64.zip","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-macos-arm64.zip","weight":0.0},{"kind":"binary-release-asset","description":"release v0.3.2 ships openmcm2-v0.3.2-macos-x86_64.zip (2 downloads)","ref":"openmcm2-v0.3.2-macos-x86_64.zip","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-macos-x86_64.zip","weight":0.0},{"kind":"binary-release-asset","description":"release v0.3.2 ships openmcm2-v0.3.2-windows-x86_64.zip (23 downloads)","ref":"openmcm2-v0.3.2-windows-x86_64.zip","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.2/openmcm2-v0.3.2-windows-x86_64.zip","weight":0.0},{"kind":"binary-release-asset","description":"release v0.3.1 ships openmcm2-v0.3.1-linux-x86_64.tar.gz (34 downloads)","ref":"openmcm2-v0.3.1-linux-x86_64.tar.gz","url":"https://github.com/crspytopgn/openmcm2/releases/download/v0.3.1/openmcm2-v0.3.1-linux-x86_64.tar.gz","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":1963.0,"function_nloc":40058.0,"mean_ccn":4.6,"p90_ccn":10.0,"complex_functions":105.0,"long_functions":43.0,"many_param_functions":19.0,"risky_nloc_share":0.3079},"findings":[],"evidence":[{"kind":"complex-function","description":"window_event in crates/mm2-viewer/src/main.rs: complexity 130, 330 lines","ref":"crates/mm2-viewer/src/main.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/main.rs#L4877","weight":1.0},{"kind":"complex-function","description":"main in crates/mm2-viewer/src/main.rs: complexity 108, 535 lines","ref":"crates/mm2-viewer/src/main.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/main.rs#L134","weight":1.0},{"kind":"complex-function","description":"scan_code in crates/mm2-viewer/src/screens/keys.rs: complexity 100, 105 lines","ref":"crates/mm2-viewer/src/screens/keys.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/screens/keys.rs#L78","weight":1.0},{"kind":"complex-function","description":"update in crates/mm2-viewer/src/sound.rs: complexity 79, 234 lines","ref":"crates/mm2-viewer/src/sound.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/sound.rs#L592","weight":1.0},{"kind":"complex-function","description":"update in crates/mm2-viewer/src/race.rs: complexity 69, 188 lines","ref":"crates/mm2-viewer/src/race.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/race.rs#L1941","weight":1.0},{"kind":"complex-function","description":"tick in crates/mm2-physics/src/bike.rs: complexity 68, 274 lines","ref":"crates/mm2-physics/src/bike.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-physics/src/bike.rs#L840","weight":1.0},{"kind":"complex-function","description":"parse in crates/mm2-viewer/src/graphics.rs: complexity 53, 104 lines","ref":"crates/mm2-viewer/src/graphics.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/graphics.rs#L166","weight":0.8833333333333333},{"kind":"complex-function","description":"lobby_event in crates/mm2-viewer/src/screens/multi.rs: complexity 53, 152 lines","ref":"crates/mm2-viewer/src/screens/multi.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/screens/multi.rs#L900","weight":0.8833333333333333},{"kind":"complex-function","description":"render in crates/mm2-viewer/src/renderer.rs: complexity 51, 329 lines","ref":"crates/mm2-viewer/src/renderer.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/renderer.rs#L758","weight":0.85},{"kind":"complex-function","description":"load_track in crates/mm2-viewer/src/main.rs: complexity 48, 463 lines","ref":"crates/mm2-viewer/src/main.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/main.rs#L1507","weight":0.8}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":43606.0,"duplicated_lines":1037.0,"duplicated_share":0.0238,"files":135.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-indeo/src/dsp.rs:131 and crates/mm2-indeo/src/dsp.rs:176","ref":"crates/mm2-indeo/src/dsp.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-indeo/src/dsp.rs#L131","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-indeo/src/tables.rs:288 and crates/mm2-indeo/src/tables.rs:318","ref":"crates/mm2-indeo/src/tables.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-indeo/src/tables.rs#L288","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-launcher/build.rs:1 and crates/mm2-viewer/build.rs:1","ref":"crates/mm2-launcher/build.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-launcher/build.rs#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-launcher/src/main.rs:482 and crates/mm2-launcher/src/main.rs:703","ref":"crates/mm2-launcher/src/main.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-launcher/src/main.rs#L482","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-physics/src/bike.rs:2007 and crates/mm2-physics/src/computer.rs:324","ref":"crates/mm2-physics/src/bike.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-physics/src/bike.rs#L2007","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-physics/src/collision.rs:474 and crates/mm2-viewer/src/ground.rs:465","ref":"crates/mm2-physics/src/collision.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-physics/src/collision.rs#L474","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-settings/src/lib.rs:47 and crates/mm2-viewer/src/profile.rs:626","ref":"crates/mm2-settings/src/lib.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-settings/src/lib.rs#L47","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-settings/src/lib.rs:200 and crates/mm2-viewer/src/tweaks.rs:18","ref":"crates/mm2-settings/src/lib.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-settings/src/lib.rs#L200","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-tools/src/main.rs:236 and crates/mm2-viewer/src/ui.rs:107","ref":"crates/mm2-tools/src/main.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-tools/src/main.rs#L236","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: crates/mm2-viewer/src/audio.rs:311 and crates/mm2-viewer/src/audio.rs:332","ref":"crates/mm2-viewer/src/audio.rs","url":"https://github.com/crspytopgn/openmcm2/blob/3a455e528623201fb9032ae9bdcbdeadd8e4e023/crates/mm2-viewer/src/audio.rs#L311","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":5.0,"scanned_lines":56467.0,"category:best-practice":5.0},"findings":[{"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":"docs/re/cg.py","line":4,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:docs/re/cg.py:4"},{"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":"docs/re/cg.py","line":7,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:docs/re/cg.py:7"},{"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":"docs/re/cg.py","line":9,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:docs/re/cg.py:9"},{"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":"docs/re/cg.py","line":12,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:docs/re/cg.py:12"},{"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":"docs/re/show.py","line":26,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:docs/re/show.py:26"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0141,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0952,"test_lines":399.0,"source_lines":56467.0,"test_ratio":0.0071,"ci_files":4.0,"cochange_share":0.0238,"cochange_commits":42.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/ci.yml","ref":".github/workflows/ci.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/pages.yml","ref":".github/workflows/pages.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/publish-release.yml","ref":".github/workflows/publish-release.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/release.yml","ref":".github/workflows/release.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (go test, cargo test)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["go test","cargo test"],"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":169.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.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":56467.0,"other_lines":0.0,"files_blamed":135.0,"blame_failures":0.0,"quality:ai_findings":5.0,"quality:ai_per_kloc":0.089,"quality:other_findings":0.0,"security:ai_findings":26.0,"security:ai_per_kloc":0.46,"security:other_findings":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}