{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:07.433365Z","repo":{"ref":{"host":"github.com","owner":"rommapp","name":"ROMCruncher"},"default_branch":"main","clone_url":"https://github.com/rommapp/ROMCruncher.git","html_url":"https://github.com/rommapp/ROMCruncher","description":"Cross-platform GUI for ROM image conversion, verification, and DAT auditing.","stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":604,"primary_language":"TypeScript","license_spdx":null,"created_at":"2026-03-26T13:53:57Z","pushed_at":"2026-11-04T01:47:27Z","security_policy_url":null,"distribution":{"owner_created_at":"2024-03-19T16:57:53Z","owner_type":"Organization","release_assets":[{"name":"romcruncher.exe","size":11355136,"download_count":19,"release_tag":"v2026-03-27-2","url":"https://github.com/rommapp/ROMCruncher/releases/download/v2026-03-27-2/romcruncher.exe"},{"name":"romcruncher.exe","size":11331584,"download_count":1,"release_tag":"v2026-03-27-1","url":"https://github.com/rommapp/ROMCruncher/releases/download/v2026-03-27-1/romcruncher.exe"}]}},"commit_sha":"8238421669989380d65bb6e1165bb657a04e4ce9","profile":{"lines_by_language":{"TypeScript":2423,"Rust":885},"files_by_category":{"source":22,"binary":16,"config":9,"other":5,"generated":2,"docs":1},"source_lines":3308,"test_lines":0},"pillars":{"ai_provenance":{"score":100.0,"confidence":0.76,"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,"style_index":0.453},"summary":"Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals."},"quality":{"score":41.4,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":50.8,"duplication":20.6,"lint":100.0,"testing":0.0,"docs":40.0,"type_safety":100.0,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 23% of function code in complex or long functions; 26% duplicated lines. Weakest area: testing."},"security":{"score":58.8,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":87.6,"dependencies":7.8,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 69 known vulnerabilities in 35 dependencies. 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":24.0,"checked":24.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":24.0,"attributed_commits":24.0,"attributed_commit_share":1.0,"effective_loc":4245.0,"attributed_loc":4245.0,"attributed_loc_share":1.0,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 24 attributed commits, 4,245 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"8238421669989380d65bb6e1165bb657a04e4ce9","url":"https://github.com/rommapp/ROMCruncher/commit/8238421669989380d65bb6e1165bb657a04e4ce9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"33a9d78237f5e9dcd639459200811761f22ae52e","url":"https://github.com/rommapp/ROMCruncher/commit/33a9d78237f5e9dcd639459200811761f22ae52e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e83931c1b4c93bd11d3a6f9e0c5ff315f91018e9","url":"https://github.com/rommapp/ROMCruncher/commit/e83931c1b4c93bd11d3a6f9e0c5ff315f91018e9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"271a1ed09b827efcbd02ce79946f02e52b261f08","url":"https://github.com/rommapp/ROMCruncher/commit/271a1ed09b827efcbd02ce79946f02e52b261f08","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e468eee13c0c7a385549284cb6a904be6ca0b875","url":"https://github.com/rommapp/ROMCruncher/commit/e468eee13c0c7a385549284cb6a904be6ca0b875","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"37751fc8ba921f0e4d477f4399b6d6dae632b480","url":"https://github.com/rommapp/ROMCruncher/commit/37751fc8ba921f0e4d477f4399b6d6dae632b480","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1fb69236147c5a2d07b03a3a9c58dba3c35616da","url":"https://github.com/rommapp/ROMCruncher/commit/1fb69236147c5a2d07b03a3a9c58dba3c35616da","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"cc2c915fdc178ecbe16d5d4c2940c37f6712166a","url":"https://github.com/rommapp/ROMCruncher/commit/cc2c915fdc178ecbe16d5d4c2940c37f6712166a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"9a18b82fa37f2ce260ac6ef01ba8a92e81000148","url":"https://github.com/rommapp/ROMCruncher/commit/9a18b82fa37f2ce260ac6ef01ba8a92e81000148","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b306ccede56665c581338cc8d7d4ca35151bdd60","url":"https://github.com/rommapp/ROMCruncher/commit/b306ccede56665c581338cc8d7d4ca35151bdd60","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"407ba2bfcca4d6c1c7006c0affc276ff2aa2d5a2","url":"https://github.com/rommapp/ROMCruncher/commit/407ba2bfcca4d6c1c7006c0affc276ff2aa2d5a2","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"05710c470684e20807a51638746e8d43e5e98268","url":"https://github.com/rommapp/ROMCruncher/commit/05710c470684e20807a51638746e8d43e5e98268","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7ae306a975119b3e6440e033e7f145985e95db4c","url":"https://github.com/rommapp/ROMCruncher/commit/7ae306a975119b3e6440e033e7f145985e95db4c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"4015c9f3813843c312b7e31bc209f7bdd0936b7c","url":"https://github.com/rommapp/ROMCruncher/commit/4015c9f3813843c312b7e31bc209f7bdd0936b7c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"699c4df562582050aa1f47642f01bdd595c3771c","url":"https://github.com/rommapp/ROMCruncher/commit/699c4df562582050aa1f47642f01bdd595c3771c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"32ebd89a12bd5cba95015efeb2e0150fac62e753","url":"https://github.com/rommapp/ROMCruncher/commit/32ebd89a12bd5cba95015efeb2e0150fac62e753","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0ef7c28bf19436f65a59fb8a6b2c66a684792eef","url":"https://github.com/rommapp/ROMCruncher/commit/0ef7c28bf19436f65a59fb8a6b2c66a684792eef","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"22ed2129b7a89936f2a18cf17b3566759f87457e","url":"https://github.com/rommapp/ROMCruncher/commit/22ed2129b7a89936f2a18cf17b3566759f87457e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0e7271277d73bf091dfd71e4606ef3f8ae56c6e5","url":"https://github.com/rommapp/ROMCruncher/commit/0e7271277d73bf091dfd71e4606ef3f8ae56c6e5","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"039960a3297ae1a92ccfc602545618cc266c4a22","url":"https://github.com/rommapp/ROMCruncher/commit/039960a3297ae1a92ccfc602545618cc266c4a22","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"98a8f39a4b7d9031a2659274b41804962cef1104","url":"https://github.com/rommapp/ROMCruncher/commit/98a8f39a4b7d9031a2659274b41804962cef1104","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"95b80fffab8ea166e758b6bb616fc5e861bfc458","url":"https://github.com/rommapp/ROMCruncher/commit/95b80fffab8ea166e758b6bb616fc5e861bfc458","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"98c12ebaa52ab4235e2bb62929a6b5a958bb7f52","url":"https://github.com/rommapp/ROMCruncher/commit/98c12ebaa52ab4235e2bb62929a6b5a958bb7f52","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"291acf0a1fd713a702003ea4fd68f6df3dfe4e67","url":"https://github.com/rommapp/ROMCruncher/commit/291acf0a1fd713a702003ea4fd68f6df3dfe4e67","weight":0.9}],"data":{"attributed_loc_by_commit":{"291acf0a1fd713a702003ea4fd68f6df3dfe4e67":2163,"98c12ebaa52ab4235e2bb62929a6b5a958bb7f52":0,"95b80fffab8ea166e758b6bb616fc5e861bfc458":125,"98a8f39a4b7d9031a2659274b41804962cef1104":639,"039960a3297ae1a92ccfc602545618cc266c4a22":45,"0e7271277d73bf091dfd71e4606ef3f8ae56c6e5":63,"22ed2129b7a89936f2a18cf17b3566759f87457e":11,"0ef7c28bf19436f65a59fb8a6b2c66a684792eef":4,"32ebd89a12bd5cba95015efeb2e0150fac62e753":0,"699c4df562582050aa1f47642f01bdd595c3771c":119,"4015c9f3813843c312b7e31bc209f7bdd0936b7c":0,"7ae306a975119b3e6440e033e7f145985e95db4c":0,"05710c470684e20807a51638746e8d43e5e98268":4,"407ba2bfcca4d6c1c7006c0affc276ff2aa2d5a2":201,"b306ccede56665c581338cc8d7d4ca35151bdd60":70,"9a18b82fa37f2ce260ac6ef01ba8a92e81000148":0,"cc2c915fdc178ecbe16d5d4c2940c37f6712166a":181,"1fb69236147c5a2d07b03a3a9c58dba3c35616da":5,"37751fc8ba921f0e4d477f4399b6d6dae632b480":323,"e468eee13c0c7a385549284cb6a904be6ca0b875":164,"271a1ed09b827efcbd02ce79946f02e52b261f08":11,"e83931c1b4c93bd11d3a6f9e0c5ff315f91018e9":5,"33a9d78237f5e9dcd639459200811761f22ae52e":95,"8238421669989380d65bb6e1165bb657a04e4ce9":17},"tools":{"claude-code":{"name":"Claude Code","commits":24,"loc":4245,"first_seen":1774485870,"last_seen":1774710382}},"monthly":{"2026-03":{"loc":4245,"attributed_loc":4245}}},"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":9.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":2082.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":175.45054945054946,"median_loc_per_hour":43.876548063691764,"pr_timed_units":0.0,"excluded_import_loc":2163.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["291acf0a1fd713a702003ea4fd68f6df3dfe4e67"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":2.0,"flagged_releases":0.0,"max_loc_per_day":799.8},"findings":[],"evidence":[],"data":{"releases":[{"from":"2026-03-27-1","to":"v2026-03-27-1","loc":180,"days":0.23,"loc_per_day":799.8,"flagged":false},{"from":"v2026-03-27-1","to":"v2026-03-27-2","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":3308.0,"index":0.453,"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":3.0,"per_kloc:emoji_in_code":0.907,"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":2.0,"findings_high":0.0,"findings_medium":1.0,"findings_low":1.0,"weighted_findings":1.25,"scanned_lines":3308.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/rust.lang.security.insecure-hashes","severity":"medium","message":"Detected cryptographically insecure hashing function [confidence high]","path":"src-tauri/src/lib.rs","line":805,"fingerprint":"rust.lang.security.insecure-hashes:src-tauri/src/lib.rs:805"},{"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":"src-tauri/src/lib.rs","line":51,"fingerprint":"rust.lang.security.current-exe:src-tauri/src/lib.rs:51"}],"evidence":[],"data":{"rulesets":["typescript","javascript","rust"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":35.0,"vulnerabilities":69.0,"vulns_critical":2.0,"vulns_high":17.0,"vulns_medium":12.0,"vulns_low":3.0,"vulns_unknown":35.0,"penalty":153.0},"findings":[{"rule_id":"osv/RUSTSEC-2026-0369","severity":"critical","message":"zip@2.4.2 (crates.io) is affected by RUSTSEC-2026-0369","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@2.4.2 (crates.io):RUSTSEC-2026-0369"},{"rule_id":"osv/GHSA-m665-v7pm-7grj","severity":"critical","message":"zip@2.4.2 (crates.io) is affected by GHSA-m665-v7pm-7grj","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@2.4.2 (crates.io):GHSA-m665-v7pm-7grj"},{"rule_id":"osv/GHSA-73wf-gq98-2v4g","severity":"high","message":"browserslist@4.28.1 (npm) is affected by GHSA-73wf-gq98-2v4g","path":"package-lock.json","line":null,"fingerprint":"browserslist@4.28.1 (npm):GHSA-73wf-gq98-2v4g"},{"rule_id":"osv/GHSA-c83g-rgw3-j3cx","severity":"high","message":"browserslist@4.28.1 (npm) is affected by GHSA-c83g-rgw3-j3cx","path":"package-lock.json","line":null,"fingerprint":"browserslist@4.28.1 (npm):GHSA-c83g-rgw3-j3cx"},{"rule_id":"osv/GHSA-28wg-ghj8-5hjv","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-28wg-ghj8-5hjv","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-28wg-ghj8-5hjv"},{"rule_id":"osv/GHSA-2v37-7h3g-55p8","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-2v37-7h3g-55p8","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-2v37-7h3g-55p8"},{"rule_id":"osv/GHSA-xwg4-73v4-xw9w","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-xwg4-73v4-xw9w","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-xwg4-73v4-xw9w"},{"rule_id":"osv/GHSA-6g55-p6wh-862q","severity":"high","message":"postcss@8.5.8 (npm) is affected by GHSA-6g55-p6wh-862q","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-6g55-p6wh-862q"},{"rule_id":"osv/GHSA-r28c-9q8g-f849","severity":"high","message":"postcss@8.5.8 (npm) is affected by GHSA-r28c-9q8g-f849","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-r28c-9q8g-f849"},{"rule_id":"osv/GHSA-68fv-2mgg-jv7q","severity":"high","message":"source-map-js@1.2.1 (npm) is affected by GHSA-68fv-2mgg-jv7q","path":"package-lock.json","line":null,"fingerprint":"source-map-js@1.2.1 (npm):GHSA-68fv-2mgg-jv7q"},{"rule_id":"osv/GHSA-587h-7wmj-h5pm","severity":"high","message":"vite@7.3.1 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-p9ff-h696-f583","severity":"high","message":"vite@7.3.1 (npm) is affected by GHSA-p9ff-h696-f583","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-p9ff-h696-f583"},{"rule_id":"osv/GHSA-v2wj-q39q-566r","severity":"high","message":"vite@7.3.1 (npm) is affected by GHSA-v2wj-q39q-566r","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-v2wj-q39q-566r"},{"rule_id":"osv/RUSTSEC-2026-0194","severity":"high","message":"quick-xml@0.38.4 (crates.io) is affected by RUSTSEC-2026-0194","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"quick-xml@0.38.4 (crates.io):RUSTSEC-2026-0194"},{"rule_id":"osv/RUSTSEC-2026-0195","severity":"high","message":"quick-xml@0.38.4 (crates.io) is affected by RUSTSEC-2026-0195","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"quick-xml@0.38.4 (crates.io):RUSTSEC-2026-0195"},{"rule_id":"osv/RUSTSEC-2026-0245","severity":"high","message":"sevenz-rust@0.6.1 (crates.io) is affected by RUSTSEC-2026-0245","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"sevenz-rust@0.6.1 (crates.io):RUSTSEC-2026-0245"},{"rule_id":"osv/GHSA-7gmj-67g7-phm9","severity":"high","message":"tauri@2.10.3 (crates.io) is affected by GHSA-7gmj-67g7-phm9","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"tauri@2.10.3 (crates.io):GHSA-7gmj-67g7-phm9"},{"rule_id":"osv/RUSTSEC-2026-0367","severity":"high","message":"zip@2.4.2 (crates.io) is affected by RUSTSEC-2026-0367","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@2.4.2 (crates.io):RUSTSEC-2026-0367"},{"rule_id":"osv/GHSA-q7v9-x93c-xqv3","severity":"high","message":"zip@2.4.2 (crates.io) is affected by RUSTSEC-2026-0429, GHSA-q7v9-x93c-xqv3","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@2.4.2 (crates.io):GHSA-q7v9-x93c-xqv3"},{"rule_id":"osv/GHSA-w5vr-8v7q-w6rv","severity":"medium","message":"baseline-browser-mapping@2.10.10 (npm) is affected by GHSA-w5vr-8v7q-w6rv","path":"package-lock.json","line":null,"fingerprint":"baseline-browser-mapping@2.10.10 (npm):GHSA-w5vr-8v7q-w6rv"},{"rule_id":"osv/GHSA-fxqj-rqcc-2cmp","severity":"medium","message":"postcss@8.5.8 (npm) is affected by GHSA-fxqj-rqcc-2cmp","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-fxqj-rqcc-2cmp"},{"rule_id":"osv/GHSA-qx2v-qp2m-jg93","severity":"medium","message":"postcss@8.5.8 (npm) is affected by GHSA-qx2v-qp2m-jg93","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-qx2v-qp2m-jg93"},{"rule_id":"osv/GHSA-4w7w-66w2-5vf9","severity":"medium","message":"vite@7.3.1 (npm) is affected by GHSA-4w7w-66w2-5vf9","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-4w7w-66w2-5vf9"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"vite@7.3.1 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-fx2h-pf6j-xcff","severity":"medium","message":"vite@7.3.1 (npm) is affected by GHSA-fx2h-pf6j-xcff","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-fx2h-pf6j-xcff"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"vite@7.3.1 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-rq7h-c2jc-7f22","severity":"medium","message":"vite@7.3.1 (npm) is affected by GHSA-rq7h-c2jc-7f22","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-rq7h-c2jc-7f22"},{"rule_id":"osv/GHSA-v6wh-96g9-6wx3","severity":"medium","message":"vite@7.3.1 (npm) is affected by GHSA-v6wh-96g9-6wx3","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-v6wh-96g9-6wx3"},{"rule_id":"osv/RUSTSEC-2026-0190","severity":"medium","message":"anyhow@1.0.102 (crates.io) is affected by RUSTSEC-2026-0190","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"anyhow@1.0.102 (crates.io):RUSTSEC-2026-0190"},{"rule_id":"osv/RUSTSEC-2026-0221","severity":"medium","message":"event-listener@5.4.1 (crates.io) is affected by RUSTSEC-2026-0221","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"event-listener@5.4.1 (crates.io):RUSTSEC-2026-0221"},{"rule_id":"osv/RUSTSEC-2025-0057","severity":"medium","message":"fxhash@0.2.1 (crates.io) is affected by RUSTSEC-2025-0057","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"fxhash@0.2.1 (crates.io):RUSTSEC-2025-0057"},{"rule_id":"osv/GHSA-wrw7-89jp-8q8g","severity":"medium","message":"glib@0.18.5 (crates.io) is affected by RUSTSEC-2024-0429, GHSA-wrw7-89jp-8q8g","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"glib@0.18.5 (crates.io):GHSA-wrw7-89jp-8q8g"},{"rule_id":"osv/RUSTSEC-2026-0441","severity":"medium","message":"pin-utils@0.1.0 (crates.io) is affected by RUSTSEC-2026-0441","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"pin-utils@0.1.0 (crates.io):RUSTSEC-2026-0441"},{"rule_id":"osv/RUSTSEC-2024-0370","severity":"medium","message":"proc-macro-error@1.0.4 (crates.io) is affected by RUSTSEC-2024-0370","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"proc-macro-error@1.0.4 (crates.io):RUSTSEC-2024-0370"},{"rule_id":"osv/GHSA-cq8v-f236-94qc","severity":"medium","message":"rand@0.7.3 (crates.io) is affected by RUSTSEC-2026-0097, GHSA-cq8v-f236-94qc","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rand@0.7.3 (crates.io):GHSA-cq8v-f236-94qc"},{"rule_id":"osv/GHSA-cq8v-f236-94qc","severity":"medium","message":"rand@0.8.5 (crates.io) is affected by RUSTSEC-2026-0097, GHSA-cq8v-f236-94qc","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rand@0.8.5 (crates.io):GHSA-cq8v-f236-94qc"},{"rule_id":"osv/RUSTSEC-2022-0004","severity":"medium","message":"rustc-serialize@0.3.25 (crates.io) is affected by RUSTSEC-2022-0004","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustc-serialize@0.3.25 (crates.io):RUSTSEC-2022-0004"},{"rule_id":"osv/RUSTSEC-2025-0025","severity":"medium","message":"rustc-serialize@0.3.25 (crates.io) is affected by RUSTSEC-2025-0025","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustc-serialize@0.3.25 (crates.io):RUSTSEC-2025-0025"},{"rule_id":"osv/RUSTSEC-2026-0486","severity":"medium","message":"rustix@1.1.4 (crates.io) is affected by RUSTSEC-2026-0486","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustix@1.1.4 (crates.io):RUSTSEC-2026-0486"},{"rule_id":"osv/GHSA-7gcf-g7xr-8hxj","severity":"medium","message":"serde_with@3.18.0 (crates.io) is affected by GHSA-7gcf-g7xr-8hxj","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"serde_with@3.18.0 (crates.io):GHSA-7gcf-g7xr-8hxj"},{"rule_id":"osv/RUSTSEC-2026-0246","severity":"medium","message":"sevenz-rust@0.6.1 (crates.io) is affected by RUSTSEC-2026-0246","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"sevenz-rust@0.6.1 (crates.io):RUSTSEC-2026-0246"},{"rule_id":"osv/RUSTSEC-2026-0386","severity":"medium","message":"tokio@1.50.0 (crates.io) is affected by RUSTSEC-2026-0386","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"tokio@1.50.0 (crates.io):RUSTSEC-2026-0386"},{"rule_id":"osv/RUSTSEC-2025-0081","severity":"medium","message":"unic-char-property@0.9.0 (crates.io) is affected by RUSTSEC-2025-0081","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-char-property@0.9.0 (crates.io):RUSTSEC-2025-0081"},{"rule_id":"osv/RUSTSEC-2025-0075","severity":"medium","message":"unic-char-range@0.9.0 (crates.io) is affected by RUSTSEC-2025-0075","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-char-range@0.9.0 (crates.io):RUSTSEC-2025-0075"},{"rule_id":"osv/RUSTSEC-2025-0080","severity":"medium","message":"unic-common@0.9.0 (crates.io) is affected by RUSTSEC-2025-0080","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-common@0.9.0 (crates.io):RUSTSEC-2025-0080"},{"rule_id":"osv/RUSTSEC-2025-0100","severity":"medium","message":"unic-ucd-ident@0.9.0 (crates.io) is affected by RUSTSEC-2025-0100","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-ucd-ident@0.9.0 (crates.io):RUSTSEC-2025-0100"},{"rule_id":"osv/RUSTSEC-2025-0098","severity":"medium","message":"unic-ucd-version@0.9.0 (crates.io) is affected by RUSTSEC-2025-0098","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-ucd-version@0.9.0 (crates.io):RUSTSEC-2025-0098"},{"rule_id":"osv/RUSTSEC-2026-0371","severity":"medium","message":"zbus_names@4.3.1 (crates.io) is affected by RUSTSEC-2026-0371","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zbus_names@4.3.1 (crates.io):RUSTSEC-2026-0371"},{"rule_id":"osv/RUSTSEC-2026-0368","severity":"medium","message":"zip@2.4.2 (crates.io) is affected by RUSTSEC-2026-0368","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@2.4.2 (crates.io):RUSTSEC-2026-0368"},{"rule_id":"osv/GHSA-8hxf-qr8p-62x4","severity":"medium","message":"zip@2.4.2 (crates.io) is affected by GHSA-8hxf-qr8p-62x4","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@2.4.2 (crates.io):GHSA-8hxf-qr8p-62x4"},{"rule_id":"osv/RUSTSEC-2026-0391","severity":"medium","message":"zstd@0.13.3 (crates.io) is affected by RUSTSEC-2026-0391","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd@0.13.3 (crates.io):RUSTSEC-2026-0391"},{"rule_id":"osv/RUSTSEC-2026-0395","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0395","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0395"},{"rule_id":"osv/RUSTSEC-2026-0396","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0396","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0396"},{"rule_id":"osv/RUSTSEC-2026-0397","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0397","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0397"},{"rule_id":"osv/RUSTSEC-2026-0398","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0398","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0398"},{"rule_id":"osv/RUSTSEC-2026-0399","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0399","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0399"},{"rule_id":"osv/RUSTSEC-2026-0400","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0400","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0400"},{"rule_id":"osv/RUSTSEC-2026-0401","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0401","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0401"},{"rule_id":"osv/RUSTSEC-2026-0402","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0402","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0402"},{"rule_id":"osv/RUSTSEC-2026-0403","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0403","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0403"},{"rule_id":"osv/RUSTSEC-2026-0404","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0404","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0404"},{"rule_id":"osv/RUSTSEC-2026-0405","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0405","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0405"},{"rule_id":"osv/RUSTSEC-2026-0406","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0406","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0406"},{"rule_id":"osv/RUSTSEC-2026-0410","severity":"medium","message":"zstd-sys@2.0.16+zstd.1.5.7 (crates.io) is affected by RUSTSEC-2026-0410","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-sys@2.0.16+zstd.1.5.7 (crates.io):RUSTSEC-2026-0410"},{"rule_id":"osv/RUSTSEC-2026-0370","severity":"medium","message":"zvariant@5.10.0 (crates.io) is affected by RUSTSEC-2026-0370","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zvariant@5.10.0 (crates.io):RUSTSEC-2026-0370"},{"rule_id":"osv/RUSTSEC-2026-0372","severity":"medium","message":"zvariant_derive@5.10.0 (crates.io) is affected by RUSTSEC-2026-0372","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zvariant_derive@5.10.0 (crates.io):RUSTSEC-2026-0372"},{"rule_id":"osv/GHSA-4x5r-pxfx-6jf8","severity":"low","message":"@babel/core@7.29.0 (npm) is affected by GHSA-4x5r-pxfx-6jf8","path":"package-lock.json","line":null,"fingerprint":"@babel/core@7.29.0 (npm):GHSA-4x5r-pxfx-6jf8"},{"rule_id":"osv/GHSA-g7r4-m6w7-qqqr","severity":"low","message":"esbuild@0.27.4 (npm) is affected by GHSA-g7r4-m6w7-qqqr","path":"package-lock.json","line":null,"fingerprint":"esbuild@0.27.4 (npm):GHSA-g7r4-m6w7-qqqr"},{"rule_id":"osv/GHSA-9jrq-w75r-8gcw","severity":"low","message":"vite@7.3.1 (npm) is affected by GHSA-9jrq-w75r-8gcw","path":"package-lock.json","line":null,"fingerprint":"vite@7.3.1 (npm):GHSA-9jrq-w75r-8gcw"}],"evidence":[],"data":{"ecosystems":["crates.io","npm"]},"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":1.0,"binary_assets":2.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v2026-03-27-2 ships romcruncher.exe (19 downloads)","ref":"romcruncher.exe","url":"https://github.com/rommapp/ROMCruncher/releases/download/v2026-03-27-2/romcruncher.exe","weight":0.0},{"kind":"binary-release-asset","description":"release v2026-03-27-1 ships romcruncher.exe (1 downloads)","ref":"romcruncher.exe","url":"https://github.com/rommapp/ROMCruncher/releases/download/v2026-03-27-1/romcruncher.exe","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":316.0,"function_nloc":2629.0,"mean_ccn":2.54,"p90_ccn":5.0,"complex_functions":7.0,"long_functions":1.0,"many_param_functions":0.0,"risky_nloc_share":0.2256},"findings":[],"evidence":[{"kind":"complex-function","description":"extract_archive in src-tauri/src/lib.rs: complexity 30, 97 lines","ref":"src-tauri/src/lib.rs","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src-tauri/src/lib.rs#L325","weight":0.5},{"kind":"complex-function","description":"AuditPage in src/pages/AuditPage.tsx: complexity 21, 90 lines","ref":"src/pages/AuditPage.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/AuditPage.tsx#L10","weight":0.35},{"kind":"complex-function","description":"get_chd_data_sha1 in src-tauri/src/lib.rs: complexity 17, 41 lines","ref":"src-tauri/src/lib.rs","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src-tauri/src/lib.rs#L750","weight":0.2833333333333333},{"kind":"complex-function","description":"detect_chd_type in src-tauri/src/lib.rs: complexity 16, 39 lines","ref":"src-tauri/src/lib.rs","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src-tauri/src/lib.rs#L511","weight":0.26666666666666666},{"kind":"complex-function","description":"handleRunAll in src/pages/ConvertCHD.tsx: complexity 16, 70 lines","ref":"src/pages/ConvertCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/ConvertCHD.tsx#L167","weight":0.26666666666666666},{"kind":"complex-function","description":"handleRunAll in src/pages/CreateCHD.tsx: complexity 16, 69 lines","ref":"src/pages/CreateCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/CreateCHD.tsx#L163","weight":0.26666666666666666},{"kind":"complex-function","description":"handleRunAll in src/pages/ExtractCHD.tsx: complexity 16, 69 lines","ref":"src/pages/ExtractCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/ExtractCHD.tsx#L150","weight":0.26666666666666666},{"kind":"complex-function","description":"CreateCHD in src/pages/CreateCHD.tsx: complexity 15, 118 lines","ref":"src/pages/CreateCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/CreateCHD.tsx#L66","weight":0.25}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":2416.0,"duplicated_lines":637.0,"duplicated_share":0.2637,"files":22.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/lib.rs:512 and src-tauri/src/lib.rs:751","ref":"src-tauri/src/lib.rs","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src-tauri/src/lib.rs#L512","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/pages/ConvertCHD.tsx:22 and src/pages/CreateCHD.tsx:20","ref":"src/pages/ConvertCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/ConvertCHD.tsx#L22","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/pages/ConvertCHD.tsx:87 and src/pages/ExtractCHD.tsx:90","ref":"src/pages/ConvertCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/ConvertCHD.tsx#L87","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/pages/ConvertCHD.tsx:121 and src/pages/VerifyPage.tsx:47","ref":"src/pages/ConvertCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/ConvertCHD.tsx#L121","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/pages/CreateCHD.tsx:14 and src/pages/ExtractCHD.tsx:16","ref":"src/pages/CreateCHD.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/CreateCHD.tsx#L14","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/pages/InfoPage.tsx:48 and src/pages/VerifyPage.tsx:58","ref":"src/pages/InfoPage.tsx","url":"https://github.com/rommapp/ROMCruncher/blob/8238421669989380d65bb6e1165bb657a04e4ce9/src/pages/InfoPage.tsx#L48","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":0.0,"weighted_findings":0.0,"scanned_lines":3308.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":3308.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":20.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":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":59.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":1.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: tsconfig.json","ref":"tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":3308.0,"other_lines":0.0,"files_blamed":22.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":0.0,"security:ai_findings":2.0,"security:ai_per_kloc":0.605,"security:other_findings":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":["unreviewed-ai-risk"]}