{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:02.034860Z","repo":{"ref":{"host":"github.com","owner":"TropicalFan344","name":"TropicalPeer"},"default_branch":"main","clone_url":"https://github.com/TropicalFan344/TropicalPeer.git","html_url":"https://github.com/TropicalFan344/TropicalPeer","description":"Peer-to-peer file transfer for Windows, macOS and Android.","stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":2580,"primary_language":"Go","license_spdx":"MIT","created_at":"2026-10-10T20:38:55Z","pushed_at":"2026-11-10T22:43:26Z","security_policy_url":null,"distribution":{"owner_created_at":"2021-05-02T12:26:54Z","owner_type":"User","release_assets":[{"name":"checksums.txt","size":867,"download_count":26,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":26,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/checksums.txt.sig"},{"name":"TropicalPeer-0.2.6.apk","size":52131678,"download_count":5,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/TropicalPeer-0.2.6.apk"},{"name":"TropicalPeer-0.2.6.dmg","size":16822358,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/TropicalPeer-0.2.6.dmg"},{"name":"TropicalPeer-0.2.6.exe","size":21701120,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/TropicalPeer-0.2.6.exe"},{"name":"tropicalpeer-server-linux-amd64","size":9916576,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":9175200,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":10246784,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":9533506,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":10338304,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":9415680,"download_count":0,"release_tag":"v0.2.6","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":867,"download_count":20,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":20,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/checksums.txt.sig"},{"name":"TropicalPeer-0.2.5.apk","size":52070772,"download_count":3,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/TropicalPeer-0.2.5.apk"},{"name":"TropicalPeer-0.2.5.dmg","size":16780226,"download_count":2,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/TropicalPeer-0.2.5.dmg"},{"name":"TropicalPeer-0.2.5.exe","size":21651968,"download_count":3,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/TropicalPeer-0.2.5.exe"},{"name":"tropicalpeer-server-linux-amd64","size":9900192,"download_count":1,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":9175200,"download_count":1,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":10234352,"download_count":1,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":9500338,"download_count":1,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":10327040,"download_count":1,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":9405952,"download_count":1,"release_tag":"v0.2.5","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.5/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":867,"download_count":32,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":32,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/checksums.txt.sig"},{"name":"TropicalPeer-0.2.4.apk","size":51900732,"download_count":7,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/TropicalPeer-0.2.4.apk"},{"name":"TropicalPeer-0.2.4.dmg","size":16699749,"download_count":3,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/TropicalPeer-0.2.4.dmg"},{"name":"TropicalPeer-0.2.4.exe","size":21542912,"download_count":2,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/TropicalPeer-0.2.4.exe"},{"name":"tropicalpeer-server-linux-amd64","size":9900192,"download_count":2,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":9175200,"download_count":2,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":10234352,"download_count":2,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":9500338,"download_count":1,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":10327040,"download_count":2,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":9405952,"download_count":2,"release_tag":"v0.2.4","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.4/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":867,"download_count":12,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":11,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/checksums.txt.sig"},{"name":"TropicalPeer-0.2.3.apk","size":51799380,"download_count":3,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/TropicalPeer-0.2.3.apk"},{"name":"TropicalPeer-0.2.3.dmg","size":16680292,"download_count":1,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/TropicalPeer-0.2.3.dmg"},{"name":"TropicalPeer-0.2.3.exe","size":21514752,"download_count":0,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/TropicalPeer-0.2.3.exe"},{"name":"tropicalpeer-server-linux-amd64","size":9863328,"download_count":0,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":9109664,"download_count":1,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":10200752,"download_count":0,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":9482978,"download_count":1,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":10292736,"download_count":0,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":9374720,"download_count":1,"release_tag":"v0.2.3","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.3/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":867,"download_count":53,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":53,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/checksums.txt.sig"},{"name":"TropicalPeer-0.2.2.apk","size":51797072,"download_count":4,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/TropicalPeer-0.2.2.apk"},{"name":"TropicalPeer-0.2.2.dmg","size":16676997,"download_count":0,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/TropicalPeer-0.2.2.dmg"},{"name":"TropicalPeer-0.2.2.exe","size":21513216,"download_count":4,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/TropicalPeer-0.2.2.exe"},{"name":"tropicalpeer-server-linux-amd64","size":9863328,"download_count":1,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":9109664,"download_count":1,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":10200752,"download_count":1,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":9482978,"download_count":0,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":10292736,"download_count":0,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":9374720,"download_count":0,"release_tag":"v0.2.2","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.2/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":867,"download_count":145,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":145,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/checksums.txt.sig"},{"name":"TropicalPeer-0.2.1.apk","size":51500724,"download_count":7,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/TropicalPeer-0.2.1.apk"},{"name":"TropicalPeer-0.2.1.dmg","size":16600863,"download_count":1,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/TropicalPeer-0.2.1.dmg"},{"name":"TropicalPeer-0.2.1.exe","size":21420544,"download_count":4,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/TropicalPeer-0.2.1.exe"},{"name":"tropicalpeer-server-linux-amd64","size":9859232,"download_count":0,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":9109664,"download_count":1,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":10196480,"download_count":1,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":9482802,"download_count":0,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":10285568,"download_count":1,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":9368576,"download_count":1,"release_tag":"v0.2.1","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.1/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":867,"download_count":3,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":2,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/checksums.txt.sig"},{"name":"TropicalPeer-0.2.0.apk","size":51500732,"download_count":2,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/TropicalPeer-0.2.0.apk"},{"name":"TropicalPeer-0.2.0.dmg","size":16601794,"download_count":1,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/TropicalPeer-0.2.0.dmg"},{"name":"TropicalPeer-0.2.0.exe","size":21420544,"download_count":1,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/TropicalPeer-0.2.0.exe"},{"name":"tropicalpeer-server-linux-amd64","size":9834656,"download_count":1,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":9109664,"download_count":1,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":10171344,"download_count":1,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":9465746,"download_count":1,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":10265600,"download_count":1,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":9351168,"download_count":0,"release_tag":"v0.2.0","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.0/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":870,"download_count":29,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":29,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/checksums.txt.sig"},{"name":"TropicalPeer-0.1.13.apk","size":37467436,"download_count":2,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/TropicalPeer-0.1.13.apk"},{"name":"TropicalPeer-0.1.13.dmg","size":12613498,"download_count":1,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/TropicalPeer-0.1.13.dmg"},{"name":"TropicalPeer-0.1.13.exe","size":16330752,"download_count":2,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/TropicalPeer-0.1.13.exe"},{"name":"tropicalpeer-server-linux-amd64","size":7397536,"download_count":1,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":6815904,"download_count":0,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":7679472,"download_count":1,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":7119890,"download_count":0,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":7721984,"download_count":0,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":6996992,"download_count":0,"release_tag":"v0.1.13","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.13/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":870,"download_count":33,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":32,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/checksums.txt.sig"},{"name":"TropicalPeer-0.1.12.apk","size":37460096,"download_count":4,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/TropicalPeer-0.1.12.apk"},{"name":"TropicalPeer-0.1.12.dmg","size":12598025,"download_count":9,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/TropicalPeer-0.1.12.dmg"},{"name":"TropicalPeer-0.1.12.exe","size":16316416,"download_count":2,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/TropicalPeer-0.1.12.exe"},{"name":"tropicalpeer-server-linux-amd64","size":7397536,"download_count":1,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":6815904,"download_count":1,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":7679472,"download_count":1,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":7119890,"download_count":0,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":7721984,"download_count":1,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":6996992,"download_count":0,"release_tag":"v0.1.12","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.12/tropicalpeer-server-windows-arm64.exe"},{"name":"checksums.txt","size":870,"download_count":15,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/checksums.txt"},{"name":"checksums.txt.sig","size":89,"download_count":15,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/checksums.txt.sig"},{"name":"TropicalPeer-0.1.11.apk","size":37458528,"download_count":4,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/TropicalPeer-0.1.11.apk"},{"name":"TropicalPeer-0.1.11.dmg","size":12571622,"download_count":3,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/TropicalPeer-0.1.11.dmg"},{"name":"TropicalPeer-0.1.11.exe","size":15441408,"download_count":4,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/TropicalPeer-0.1.11.exe"},{"name":"tropicalpeer-server-linux-amd64","size":7397536,"download_count":1,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/tropicalpeer-server-linux-amd64"},{"name":"tropicalpeer-server-linux-arm64","size":6815904,"download_count":1,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/tropicalpeer-server-linux-arm64"},{"name":"tropicalpeer-server-macos-amd64","size":7679472,"download_count":1,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/tropicalpeer-server-macos-amd64"},{"name":"tropicalpeer-server-macos-arm64","size":7119890,"download_count":2,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/tropicalpeer-server-macos-arm64"},{"name":"tropicalpeer-server-windows-amd64.exe","size":7721984,"download_count":1,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/tropicalpeer-server-windows-amd64.exe"},{"name":"tropicalpeer-server-windows-arm64.exe","size":6996992,"download_count":1,"release_tag":"v0.1.11","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.1.11/tropicalpeer-server-windows-arm64.exe"}]}},"commit_sha":"3e4eee2130b45864e0372d2efa04041268f9a593","profile":{"lines_by_language":{"Go":23681,"Svelte":4057,"TypeScript":3158,"Java":1665,"JavaScript":606,"Kotlin":492,"PowerShell":208,"Shell":189,"Objective-C":66},"files_by_category":{"source":195,"test":44,"binary":41,"config":38,"other":24,"vendored":16,"docs":13,"generated":3},"source_lines":28032,"test_lines":6090},"pillars":{"ai_provenance":{"score":100.0,"confidence":0.85,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.9998,"suspected_share":0.0002,"estimated_share":0.9998,"ai_artifacts":0.0,"flagged_work_units":4.0,"flagged_releases":0.0,"style_index":0.036},"summary":"Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals."},"quality":{"score":77.2,"confidence":0.9,"coverage":1.0,"label":"adequate","breakdown":{"complexity":75.1,"duplication":87.6,"lint":85.4,"testing":75.9,"docs":65.0,"type_safety":60.0,"process":null},"summary":"Code quality is adequate: test-to-source ratio 0.22, CI runs tests; 10% of function code in complex or long functions; 2% duplicated lines. Weakest area: type safety."},"security":{"score":55.7,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":96.7,"sast":78.9,"dependencies":50.5,"ci_actions":0.5,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 22 known vulnerabilities in 8 dependencies; 8 high-severity SAST findings; 32 high-severity workflow issues. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":16.0,"checked":16.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":62.0,"attributed_commits":59.0,"attributed_commit_share":0.9516129032258065,"effective_loc":35364.0,"attributed_loc":35358.0,"attributed_loc_share":0.999830335934849,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 59 attributed commits, 35,358 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3e4eee2130b45864e0372d2efa04041268f9a593","url":"https://github.com/TropicalFan344/TropicalPeer/commit/3e4eee2130b45864e0372d2efa04041268f9a593","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"03e49d472b14974c14034e5effb4edb43d9e532b","url":"https://github.com/TropicalFan344/TropicalPeer/commit/03e49d472b14974c14034e5effb4edb43d9e532b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ea53be0282bf52c64a19cf4d7ec07afb42dd6d6b","url":"https://github.com/TropicalFan344/TropicalPeer/commit/ea53be0282bf52c64a19cf4d7ec07afb42dd6d6b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f5927fba6d5140e4245f856c23210f0e431cd988","url":"https://github.com/TropicalFan344/TropicalPeer/commit/f5927fba6d5140e4245f856c23210f0e431cd988","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"9605229d44955a117c39920854b83766515320c0","url":"https://github.com/TropicalFan344/TropicalPeer/commit/9605229d44955a117c39920854b83766515320c0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f925fcd8e76a3df3fa5b36c2b48b7a9781af4ac0","url":"https://github.com/TropicalFan344/TropicalPeer/commit/f925fcd8e76a3df3fa5b36c2b48b7a9781af4ac0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7f69f0c92be171012bdfe5d4f17cba2352f730bf","url":"https://github.com/TropicalFan344/TropicalPeer/commit/7f69f0c92be171012bdfe5d4f17cba2352f730bf","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"162cd06f6703f58b3ce3350a77fc096de7fcc1d1","url":"https://github.com/TropicalFan344/TropicalPeer/commit/162cd06f6703f58b3ce3350a77fc096de7fcc1d1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"06e13bc53552d8831f09920a1740c6c1416f0acd","url":"https://github.com/TropicalFan344/TropicalPeer/commit/06e13bc53552d8831f09920a1740c6c1416f0acd","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c91136597b578713552197f7105fae0c4fa75180","url":"https://github.com/TropicalFan344/TropicalPeer/commit/c91136597b578713552197f7105fae0c4fa75180","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e998e0b5e7dcbf96cca38aacfb9234e9eca5df62","url":"https://github.com/TropicalFan344/TropicalPeer/commit/e998e0b5e7dcbf96cca38aacfb9234e9eca5df62","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"822955fd9720e604e527a54c35882518d14e2cdc","url":"https://github.com/TropicalFan344/TropicalPeer/commit/822955fd9720e604e527a54c35882518d14e2cdc","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"78f2a422a331907524b7475bb72fbf567aefe7cf","url":"https://github.com/TropicalFan344/TropicalPeer/commit/78f2a422a331907524b7475bb72fbf567aefe7cf","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3878a3548ab856467b83f25851146c9fcc8ae18b","url":"https://github.com/TropicalFan344/TropicalPeer/commit/3878a3548ab856467b83f25851146c9fcc8ae18b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ebed96995b1bb45513aa0bab7be4fb183766cb82","url":"https://github.com/TropicalFan344/TropicalPeer/commit/ebed96995b1bb45513aa0bab7be4fb183766cb82","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0bd6aa5cdf3b59ec22de433a5825a3aacfd2ee91","url":"https://github.com/TropicalFan344/TropicalPeer/commit/0bd6aa5cdf3b59ec22de433a5825a3aacfd2ee91","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"8812f97bd467643e7bcbfdd7b78272d27383c2ab","url":"https://github.com/TropicalFan344/TropicalPeer/commit/8812f97bd467643e7bcbfdd7b78272d27383c2ab","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b0dd4f6c76aa8f4383a2e7d856c7239e87e96450","url":"https://github.com/TropicalFan344/TropicalPeer/commit/b0dd4f6c76aa8f4383a2e7d856c7239e87e96450","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"bae85d2daee67f845c8aa11f6635e41d7ac79554","url":"https://github.com/TropicalFan344/TropicalPeer/commit/bae85d2daee67f845c8aa11f6635e41d7ac79554","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"304ed173b579dc53916bdaab4b05821e7154284c","url":"https://github.com/TropicalFan344/TropicalPeer/commit/304ed173b579dc53916bdaab4b05821e7154284c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"fc64c6eaa9204b3fa3fd14dbcacfe162dc09f8c1","url":"https://github.com/TropicalFan344/TropicalPeer/commit/fc64c6eaa9204b3fa3fd14dbcacfe162dc09f8c1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7f5f7717ba80e16f8c47e89ea7e6d16f46f56b96","url":"https://github.com/TropicalFan344/TropicalPeer/commit/7f5f7717ba80e16f8c47e89ea7e6d16f46f56b96","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7fe98d57f8042b7bde15ce8b7c959842344a29b9","url":"https://github.com/TropicalFan344/TropicalPeer/commit/7fe98d57f8042b7bde15ce8b7c959842344a29b9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7d5038e1689c2a222a861a3e22ca1a6c60ed9075","url":"https://github.com/TropicalFan344/TropicalPeer/commit/7d5038e1689c2a222a861a3e22ca1a6c60ed9075","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"967bfceb7d9bb320552a11ca1141060a2dbe990e","url":"https://github.com/TropicalFan344/TropicalPeer/commit/967bfceb7d9bb320552a11ca1141060a2dbe990e","weight":0.9}],"data":{"attributed_loc_by_commit":{"0e17bf347c2e59393f3d7837ccc1dc043b3933ad":18209,"455b1434817b5cba0da14cc5d960aa92537b71c7":151,"b4dbec1eca0ea2300dba8b2af9dac76bef8aa5e7":80,"c516e3126add720e7f318a7c4ebd3e54c2902a0f":0,"39c6f14fc34b336fcc36a5af121eb29584f32d06":422,"417afc5398c6953631dd0c76eb09726bebf6b2e7":0,"3d4de59cfd68cc151ca0297cc35358c87f616017":0,"8762701f54ff9d3d6da9f7336fb77c74df4f96d8":528,"226abe92ecd434495ffd7cd9c35d7848902bd2af":0,"54f0b2d3b6b7b0914dc12c147f67cd70fbe4f162":1674,"d09c7584f247cdf530f072768537ca48064a28cd":0,"c82f58e49c43cb0e8ad17248baf3f0ad40cb699f":405,"8382ece5057e318368e0353b07a0b0afd1511d40":17,"af4fb33529ce6116b8fea21530e6923dbb02f957":1098,"a4bf6da11a11af5a27b3c3f9b5da7960b29fb4a0":0,"5c1be267de69edf4fe325ef035e4e1d05d4b354b":0,"3900f01f22a6529461618cee94f667aad52d56db":27,"142a0af18160ed64bf5edbd6b3c6b32d201c2b2b":0,"baaecbdbc3f3714df2f1a79c9cdcf9acdc677e1a":623,"bccf7788d2f390bb226bf4fd8001e905d16bf920":209,"0740fef95c4828aa5945ce9c0fa54c227b302aa9":8,"db3454def274636a82d9322a8e817aed450467ad":0,"ebfe01cc11e1ea99ce44608fc7673d8b9e4c1ddf":160,"53a289774525a0428377e0988bed29c32f59cfe2":2346,"15cdd579764818a897d1f0c366659622a27c26fb":112,"ec002a5923005a385e441d5bc1842a50dd9b68eb":921,"635d898d054819ac327a49af226b312e1337c4a3":398,"48f4ec5be9de5adec1fcf4ba63cbdf801034f25e":112,"ff543a120ca5a6fd2656ba3610d6dee3b21f1e92":253,"c5c99426dd05accec813197c3743816a897fce96":249,"145c6345b5ac172cd55e89a0c4cca82ecaea7fed":0,"3f43c936c64b678cd8dd9eb809251f86c551eec2":0,"68f4627c2d8ce1daabb84707bcdfa8e7f1104c36":32,"87924fbb984bbd96252569129352138e7ec5d899":19,"967bfceb7d9bb320552a11ca1141060a2dbe990e":346,"7d5038e1689c2a222a861a3e22ca1a6c60ed9075":108,"7fe98d57f8042b7bde15ce8b7c959842344a29b9":867,"7f5f7717ba80e16f8c47e89ea7e6d16f46f56b96":244,"fc64c6eaa9204b3fa3fd14dbcacfe162dc09f8c1":0,"304ed173b579dc53916bdaab4b05821e7154284c":462,"bae85d2daee67f845c8aa11f6635e41d7ac79554":0,"0bd6aa5cdf3b59ec22de433a5825a3aacfd2ee91":0,"8812f97bd467643e7bcbfdd7b78272d27383c2ab":345,"b0dd4f6c76aa8f4383a2e7d856c7239e87e96450":92,"ebed96995b1bb45513aa0bab7be4fb183766cb82":77,"3878a3548ab856467b83f25851146c9fcc8ae18b":0,"78f2a422a331907524b7475bb72fbf567aefe7cf":1062,"822955fd9720e604e527a54c35882518d14e2cdc":378,"e998e0b5e7dcbf96cca38aacfb9234e9eca5df62":0,"c91136597b578713552197f7105fae0c4fa75180":2186,"06e13bc53552d8831f09920a1740c6c1416f0acd":0,"162cd06f6703f58b3ce3350a77fc096de7fcc1d1":242,"7f69f0c92be171012bdfe5d4f17cba2352f730bf":731,"f925fcd8e76a3df3fa5b36c2b48b7a9781af4ac0":0,"9605229d44955a117c39920854b83766515320c0":79,"f5927fba6d5140e4245f856c23210f0e431cd988":0,"ea53be0282bf52c64a19cf4d7ec07afb42dd6d6b":0,"03e49d472b14974c14034e5effb4edb43d9e532b":66,"3e4eee2130b45864e0372d2efa04041268f9a593":20},"tools":{"claude-code":{"name":"Claude Code","commits":59,"loc":35358,"first_seen":1791670556,"last_seen":1794350602}},"monthly":{"2026-10":{"loc":30523,"attributed_loc":30517},"2026-11":{"loc":4841,"attributed_loc":4841}}},"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":20.0,"flagged_units":4.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":17155.0,"flagged_loc":9862.0,"flagged_loc_share":0.5748761294083358,"max_loc_per_hour":1266.8488543199494,"median_loc_per_hour":359.06063059560586,"pr_timed_units":0.0,"excluded_import_loc":18209.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"1,674 lines of first-party code in ~1.3h (1,267 lines/hour, 1 commit session)","ref":"54f0b2d3b6b7b0914dc12c147f67cd70fbe4f162","url":"https://github.com/TropicalFan344/TropicalPeer/commit/54f0b2d3b6b7b0914dc12c147f67cd70fbe4f162","weight":0.38005465629598484},{"kind":"velocity-burst","description":"1,579 lines of first-party code in ~2.2h (729 lines/hour, 4 commit session)","ref":"304ed173b579dc53916bdaab4b05821e7154284c","url":"https://github.com/TropicalFan344/TropicalPeer/commit/304ed173b579dc53916bdaab4b05821e7154284c","weight":0.21871489034243938},{"kind":"velocity-burst","description":"4,423 lines of first-party code in ~6.2h (715 lines/hour, 8 commit session)","ref":"68f4627c2d8ce1daabb84707bcdfa8e7f1104c36","url":"https://github.com/TropicalFan344/TropicalPeer/commit/68f4627c2d8ce1daabb84707bcdfa8e7f1104c36","weight":0.21453516572352466},{"kind":"velocity-burst","description":"2,186 lines of first-party code in ~4.0h (546 lines/hour, 1 commit session)","ref":"c91136597b578713552197f7105fae0c4fa75180","url":"https://github.com/TropicalFan344/TropicalPeer/commit/c91136597b578713552197f7105fae0c4fa75180","weight":0.16394999999999998}],"data":{"flagged_loc_by_commit":{"54f0b2d3b6b7b0914dc12c147f67cd70fbe4f162":1674,"53a289774525a0428377e0988bed29c32f59cfe2":2346,"15cdd579764818a897d1f0c366659622a27c26fb":112,"ec002a5923005a385e441d5bc1842a50dd9b68eb":921,"635d898d054819ac327a49af226b312e1337c4a3":398,"48f4ec5be9de5adec1fcf4ba63cbdf801034f25e":112,"ff543a120ca5a6fd2656ba3610d6dee3b21f1e92":253,"c5c99426dd05accec813197c3743816a897fce96":249,"68f4627c2d8ce1daabb84707bcdfa8e7f1104c36":32,"7fe98d57f8042b7bde15ce8b7c959842344a29b9":867,"7f5f7717ba80e16f8c47e89ea7e6d16f46f56b96":244,"aac9766f27800b64af04f685ad3740b037d69ed0":6,"304ed173b579dc53916bdaab4b05821e7154284c":462,"c91136597b578713552197f7105fae0c4fa75180":2186},"excluded_import_commits":["0e17bf347c2e59393f3d7837ccc1dc043b3933ad"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":16.0,"flagged_releases":0.0,"max_loc_per_day":30404.4},"findings":[],"evidence":[],"data":{"releases":[{"from":"v0.1.4","to":"v0.1.5","loc":231,"days":0.04,"loc_per_day":5544.0,"flagged":false},{"from":"v0.1.5","to":"v0.1.6","loc":422,"days":0.04,"loc_per_day":9720.3,"flagged":false},{"from":"v0.1.6","to":"v0.1.7","loc":528,"days":0.51,"loc_per_day":1040.2,"flagged":false},{"from":"v0.1.7","to":"v0.1.8","loc":1674,"days":0.06,"loc_per_day":30404.4,"flagged":false},{"from":"v0.1.8","to":"v0.1.9","loc":422,"days":0.2,"loc_per_day":2151.6,"flagged":false},{"from":"v0.1.9","to":"v0.1.10","loc":1098,"days":0.1,"loc_per_day":11381.8,"flagged":false},{"from":"v0.1.10","to":"v0.1.11","loc":27,"days":0.04,"loc_per_day":648.0,"flagged":false},{"from":"v0.1.11","to":"v0.1.12","loc":623,"days":0.85,"loc_per_day":736.8,"flagged":false},{"from":"v0.1.12","to":"v0.1.13","loc":377,"days":0.69,"loc_per_day":545.4,"flagged":false},{"from":"v0.1.13","to":"v0.2.0","loc":6013,"days":2.04,"loc_per_day":2943.3,"flagged":false},{"from":"v0.2.0","to":"v0.2.1","loc":462,"days":0.05,"loc_per_day":10190.7,"flagged":false},{"from":"v0.2.1","to":"v0.2.2","loc":437,"days":11.01,"loc_per_day":39.7,"flagged":false},{"from":"v0.2.2","to":"v0.2.3","loc":77,"days":9.23,"loc_per_day":8.3,"flagged":false},{"from":"v0.2.3","to":"v0.2.4","loc":1440,"days":1.09,"loc_per_day":1321.9,"flagged":false},{"from":"v0.2.4","to":"v0.2.5","loc":2186,"days":4.13,"loc_per_day":529.4,"flagged":false},{"from":"v0.2.5","to":"v0.2.6","loc":1138,"days":0.97,"loc_per_day":1178.8,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":28032.0,"index":0.036,"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":2.0,"per_kloc:emoji_in_code":0.071,"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":1.0,"secrets_low_confidence":0.0},"findings":[{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"internal/update/update_test.go","line":94,"fingerprint":"internal/update/update_test.go:generic-api-key:94"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":52.0,"findings_high":8.0,"findings_medium":44.0,"findings_low":0.0,"weighted_findings":18.75,"scanned_lines":27758.0,"parse_errors":1.0},"findings":[{"rule_id":"opengrep/go.lang.security.audit.dangerous-exec-command","severity":"high","message":"Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code. [confidence low]","path":"internal/desktopapp/update_darwin.go","line":71,"fingerprint":"go.lang.security.audit.dangerous-exec-command:internal/desktopapp/update_darwin.go:71"},{"rule_id":"opengrep/go.lang.security.audit.dangerous-exec-command","severity":"high","message":"Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code. [confidence low]","path":"internal/desktopapp/update_windows.go","line":65,"fingerprint":"go.lang.security.audit.dangerous-exec-command:internal/desktopapp/update_windows.go:65"},{"rule_id":"opengrep/javascript.lang.security.detect-insecure-websocket","severity":"high","message":"Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":3,"fingerprint":"javascript.lang.security.detect-insecure-websocket:internal/server/webdist/assets/index-BENn4tZh.js:3"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.browser.security.insecure-document-method:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `ye.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.browser.security.insecure-innerhtml:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.lang.security.detect-insecure-websocket","severity":"high","message":"Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low]","path":"web/src/link.ts","line":88,"fingerprint":"javascript.lang.security.detect-insecure-websocket:web/src/link.ts:88"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"web/src/main.ts","line":13,"fingerprint":"javascript.browser.security.insecure-document-method:web/src/main.ts:13"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `view.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"web/src/main.ts","line":13,"fingerprint":"javascript.browser.security.insecure-innerhtml:web/src/main.ts:13"},{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"frontend/android/app/src/main/AndroidManifest.xml","line":13,"fingerprint":"java.android.security.exported_activity:frontend/android/app/src/main/AndroidManifest.xml:13"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low]","path":"frontend/src/lib/backend.ts","line":59,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:frontend/src/lib/backend.ts:59"},{"rule_id":"opengrep/go.lang.security.audit.use-of-unsafe-block","severity":"medium","message":"Using the unsafe package in Go gives you low-level memory management and many of the strengths of the C language, but also steps around the type safety of Go and can lead to buffer overflows and possible arbitrary code execution by an attacker. Only use this package if you absolutely know what you'r [confidence low]","path":"internal/desktop/flash_windows.go","line":43,"fingerprint":"go.lang.security.audit.use-of-unsafe-block:internal/desktop/flash_windows.go:43"},{"rule_id":"opengrep/go.lang.security.audit.use-of-unsafe-block","severity":"medium","message":"Using the unsafe package in Go gives you low-level memory management and many of the strengths of the C language, but also steps around the type safety of Go and can lead to buffer overflows and possible arbitrary code execution by an attacker. Only use this package if you absolutely know what you'r [confidence low]","path":"internal/desktop/flash_windows.go","line":44,"fingerprint":"go.lang.security.audit.use-of-unsafe-block:internal/desktop/flash_windows.go:44"},{"rule_id":"opengrep/go.lang.security.audit.use-of-unsafe-block","severity":"medium","message":"Using the unsafe package in Go gives you low-level memory management and many of the strengths of the C language, but also steps around the type safety of Go and can lead to buffer overflows and possible arbitrary code execution by an attacker. Only use this package if you absolutely know what you'r [confidence low]","path":"internal/desktop/flash_windows.go","line":63,"fingerprint":"go.lang.security.audit.use-of-unsafe-block:internal/desktop/flash_windows.go:63"},{"rule_id":"opengrep/go.lang.security.audit.use-of-unsafe-block","severity":"medium","message":"Using the unsafe package in Go gives you low-level memory management and many of the strengths of the C language, but also steps around the type safety of Go and can lead to buffer overflows and possible arbitrary code execution by an attacker. Only use this package if you absolutely know what you'r [confidence low]","path":"internal/desktop/tray_darwin.go","line":28,"fingerprint":"go.lang.security.audit.use-of-unsafe-block:internal/desktop/tray_darwin.go:28"},{"rule_id":"opengrep/go.lang.security.audit.use-of-unsafe-block","severity":"medium","message":"Using the unsafe package in Go gives you low-level memory management and many of the strengths of the C language, but also steps around the type safety of Go and can lead to buffer overflows and possible arbitrary code execution by an attacker. Only use this package if you absolutely know what you'r [confidence low]","path":"internal/desktop/tray_darwin.go","line":29,"fingerprint":"go.lang.security.audit.use-of-unsafe-block:internal/desktop/tray_darwin.go:29"},{"rule_id":"opengrep/go.lang.security.audit.use-of-unsafe-block","severity":"medium","message":"Using the unsafe package in Go gives you low-level memory management and many of the strengths of the C language, but also steps around the type safety of Go and can lead to buffer overflows and possible arbitrary code execution by an attacker. Only use this package if you absolutely know what you'r [confidence low]","path":"internal/desktop/tray_darwin.go","line":36,"fingerprint":"go.lang.security.audit.use-of-unsafe-block:internal/desktop/tray_darwin.go:36"},{"rule_id":"opengrep/go.lang.security.audit.use-of-unsafe-block","severity":"medium","message":"Using the unsafe package in Go gives you low-level memory management and many of the strengths of the C language, but also steps around the type safety of Go and can lead to buffer overflows and possible arbitrary code execution by an attacker. Only use this package if you absolutely know what you'r [confidence low]","path":"internal/desktop/tray_darwin.go","line":37,"fingerprint":"go.lang.security.audit.use-of-unsafe-block:internal/desktop/tray_darwin.go:37"},{"rule_id":"opengrep/go.lang.security.audit.crypto.math-random-used","severity":"medium","message":"Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium]","path":"internal/node/predict.go","line":6,"fingerprint":"go.lang.security.audit.crypto.math-random-used:internal/node/predict.go:6"},{"rule_id":"opengrep/go.lang.security.audit.crypto.math-random-used","severity":"medium","message":"Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium]","path":"internal/portmap/portmap.go","line":11,"fingerprint":"go.lang.security.audit.crypto.math-random-used:internal/portmap/portmap.go:11"},{"rule_id":"opengrep/go.lang.security.audit.crypto.math-random-used","severity":"medium","message":"Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium]","path":"internal/server/server.go","line":17,"fingerprint":"go.lang.security.audit.crypto.math-random-used:internal/server/server.go:17"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":1,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:1"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":4,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:4"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":7,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:7"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":8,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:8"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":10,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:10"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":10,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:10"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":11,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:11"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":13,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:13"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":15,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:15"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":15,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:15"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":22,"fingerprint":"javascript.lang.security.html-in-template-string:internal/server/webdist/assets/index-BENn4tZh.js:22"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":24,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:24"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":25,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:25"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":25,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:25"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":25,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:25"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":25,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:internal/server/webdist/assets/index-BENn4tZh.js:25"},{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"mobile/android-probe/app/src/main/AndroidManifest.xml","line":14,"fingerprint":"java.android.security.exported_activity:mobile/android-probe/app/src/main/AndroidManifest.xml:14"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/bed.ts","line":25,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/bed.ts:25"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low]","path":"web/src/i18n.ts","line":31,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:web/src/i18n.ts:31"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/main.ts","line":45,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/main.ts:45"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/main.ts","line":62,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/main.ts:62"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/main.ts","line":86,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/main.ts:86"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/main.ts","line":87,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/main.ts:87"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/main.ts","line":90,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/main.ts:90"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/main.ts","line":139,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/main.ts:139"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"web/src/main.ts","line":215,"fingerprint":"javascript.lang.security.html-in-template-string:web/src/main.ts:215"}],"evidence":[],"data":{"rulesets":["go","javascript","typescript","java","kotlin","bash"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":8.0,"vulnerabilities":22.0,"vulns_critical":1.0,"vulns_high":5.0,"vulns_medium":13.0,"vulns_low":0.0,"vulns_unknown":3.0,"penalty":41.0},"findings":[{"rule_id":"osv/GHSA-cxf3-9h37-7rr8","severity":"critical","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6839, GHSA-cxf3-9h37-7rr8","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-cxf3-9h37-7rr8"},{"rule_id":"osv/GHSA-w5hq-g745-h8pq","severity":"high","message":"uuid@7.0.3 (npm) is affected by GHSA-w5hq-g745-h8pq","path":"frontend/package-lock.json","line":null,"fingerprint":"uuid@7.0.3 (npm):GHSA-w5hq-g745-h8pq"},{"rule_id":"osv/GHSA-vfp3-v2gw-7wfq","severity":"high","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6293, GHSA-vfp3-v2gw-7wfq","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-vfp3-v2gw-7wfq"},{"rule_id":"osv/GHSA-f48p-c9v4-h7xv","severity":"high","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6840, GHSA-f48p-c9v4-h7xv","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-f48p-c9v4-h7xv"},{"rule_id":"osv/GHSA-h7wr-284f-5qvc","severity":"high","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6842, GHSA-h7wr-284f-5qvc","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-h7wr-284f-5qvc"},{"rule_id":"osv/GHSA-375p-5qhx-8wq4","severity":"high","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6873, GHSA-375p-5qhx-8wq4","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-375p-5qhx-8wq4"},{"rule_id":"osv/GHSA-gcqx-w48m-w2h4","severity":"medium","message":"deepmerge@4.3.1 (npm) is affected by GHSA-gcqx-w48m-w2h4","path":"frontend/package-lock.json","line":null,"fingerprint":"deepmerge@4.3.1 (npm):GHSA-gcqx-w48m-w2h4"},{"rule_id":"osv/GHSA-3g3m-2fjr-6pw4","severity":"medium","message":"glob@13.0.6 (npm) is affected by GHSA-3g3m-2fjr-6pw4","path":"frontend/package-lock.json","line":null,"fingerprint":"glob@13.0.6 (npm):GHSA-3g3m-2fjr-6pw4"},{"rule_id":"osv/GHSA-g3hv-75wg-m249","severity":"medium","message":"minimatch@10.2.6 (npm) is affected by GHSA-g3hv-75wg-m249","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@10.2.6 (npm):GHSA-g3hv-75wg-m249"},{"rule_id":"osv/GHSA-8g5g-mxqh-grgj","severity":"medium","message":"vite@6.4.4 (npm) is affected by GHSA-8g5g-mxqh-grgj; also in web/package-lock.json","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@6.4.4 (npm):GHSA-8g5g-mxqh-grgj"},{"rule_id":"osv/GHSA-246p-cpwv-v3jq","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6872, GHSA-246p-cpwv-v3jq","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-246p-cpwv-v3jq"},{"rule_id":"osv/GHSA-99jh-6h7p-pp36","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6875, GHSA-99jh-6h7p-pp36","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-99jh-6h7p-pp36"},{"rule_id":"osv/GHSA-h9g5-28mm-hx3g","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6876, GHSA-h9g5-28mm-hx3g","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-h9g5-28mm-hx3g"},{"rule_id":"osv/GHSA-r7w9-592q-9vg4","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6877, GHSA-r7w9-592q-9vg4","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-r7w9-592q-9vg4"},{"rule_id":"osv/GHSA-23wf-92cp-8pcj","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6878, GHSA-23wf-92cp-8pcj","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-23wf-92cp-8pcj"},{"rule_id":"osv/GHSA-2ffq-g2xg-c22p","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6879, GHSA-2ffq-g2xg-c22p","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-2ffq-g2xg-c22p"},{"rule_id":"osv/GHSA-3pmx-cf9f-34xr","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6881, GHSA-3pmx-cf9f-34xr","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-3pmx-cf9f-34xr"},{"rule_id":"osv/GHSA-v753-g4cw-jm48","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6883, GHSA-v753-g4cw-jm48","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-v753-g4cw-jm48"},{"rule_id":"osv/GHSA-xwq5-6cqp-vx96","severity":"medium","message":"github.com/labstack/echo/v4@4.13.3 (Go) is affected by GO-2026-6885, GHSA-xwq5-6cqp-vx96","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v4@4.13.3 (Go):GHSA-xwq5-6cqp-vx96"},{"rule_id":"osv/GO-2026-5932","severity":"medium","message":"golang.org/x/crypto@0.58.0 (Go) is affected by GO-2026-5932","path":"go.mod","line":null,"fingerprint":"golang.org/x/crypto@0.58.0 (Go):GO-2026-5932"},{"rule_id":"osv/GO-2026-6860","severity":"medium","message":"golang.org/x/net@0.60.0 (Go) is affected by GO-2026-6860","path":"go.mod","line":null,"fingerprint":"golang.org/x/net@0.60.0 (Go):GO-2026-6860"},{"rule_id":"osv/GO-2026-6866","severity":"medium","message":"golang.org/x/net@0.60.0 (Go) is affected by GO-2026-6866","path":"go.mod","line":null,"fingerprint":"golang.org/x/net@0.60.0 (Go):GO-2026-6866"}],"evidence":[],"data":{"ecosystems":["Go","npm"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":1.0,"findings":39.0,"findings_high":32.0,"findings_medium":6.0,"findings_low":1.0,"penalty":315.6},"findings":[{"rule_id":"zizmor/excessive-permissions","severity":"high","message":"overly broad permissions [confidence high]","path":".github/workflows/build.yml","line":25,"fingerprint":"excessive-permissions:.github/workflows/build.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":31,"fingerprint":"unpinned-uses:.github/workflows/build.yml:31"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":32,"fingerprint":"unpinned-uses:.github/workflows/build.yml:32"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":41,"fingerprint":"unpinned-uses:.github/workflows/build.yml:41"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":42,"fingerprint":"unpinned-uses:.github/workflows/build.yml:42"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":45,"fingerprint":"unpinned-uses:.github/workflows/build.yml:45"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":49,"fingerprint":"unpinned-uses:.github/workflows/build.yml:49"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":58,"fingerprint":"unpinned-uses:.github/workflows/build.yml:58"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":59,"fingerprint":"unpinned-uses:.github/workflows/build.yml:59"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":62,"fingerprint":"unpinned-uses:.github/workflows/build.yml:62"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":66,"fingerprint":"unpinned-uses:.github/workflows/build.yml:66"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":75,"fingerprint":"unpinned-uses:.github/workflows/build.yml:75"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":76,"fingerprint":"unpinned-uses:.github/workflows/build.yml:76"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":80,"fingerprint":"unpinned-uses:.github/workflows/build.yml:80"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":89,"fingerprint":"unpinned-uses:.github/workflows/build.yml:89"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":90,"fingerprint":"unpinned-uses:.github/workflows/build.yml:90"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":93,"fingerprint":"unpinned-uses:.github/workflows/build.yml:93"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":96,"fingerprint":"unpinned-uses:.github/workflows/build.yml:96"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":117,"fingerprint":"unpinned-uses:.github/workflows/build.yml:117"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":127,"fingerprint":"unpinned-uses:.github/workflows/build.yml:127"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":128,"fingerprint":"unpinned-uses:.github/workflows/build.yml:128"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":131,"fingerprint":"unpinned-uses:.github/workflows/build.yml:131"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":143,"fingerprint":"unpinned-uses:.github/workflows/build.yml:143"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":32,"fingerprint":"cache-poisoning:.github/workflows/build.yml:32"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":42,"fingerprint":"cache-poisoning:.github/workflows/build.yml:42"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":45,"fingerprint":"cache-poisoning:.github/workflows/build.yml:45"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":59,"fingerprint":"cache-poisoning:.github/workflows/build.yml:59"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":62,"fingerprint":"cache-poisoning:.github/workflows/build.yml:62"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":76,"fingerprint":"cache-poisoning:.github/workflows/build.yml:76"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":90,"fingerprint":"cache-poisoning:.github/workflows/build.yml:90"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":93,"fingerprint":"cache-poisoning:.github/workflows/build.yml:93"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":128,"fingerprint":"cache-poisoning:.github/workflows/build.yml:128"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":31,"fingerprint":"artipacked:.github/workflows/build.yml:31"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":41,"fingerprint":"artipacked:.github/workflows/build.yml:41"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":58,"fingerprint":"artipacked:.github/workflows/build.yml:58"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":75,"fingerprint":"artipacked:.github/workflows/build.yml:75"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":89,"fingerprint":"artipacked:.github/workflows/build.yml:89"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":127,"fingerprint":"artipacked:.github/workflows/build.yml:127"},{"rule_id":"zizmor/superfluous-actions","severity":"info","message":"action functionality is already included by the runner [confidence high]","path":".github/workflows/build.yml","line":143,"fingerprint":"superfluous-actions:.github/workflows/build.yml:143"}],"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":0.0,"signed_commit_share":0.0161,"unpinned_manifests":1.0},"findings":[],"evidence":[{"kind":"posture","description":"frontend/wailsjs/runtime/package.json has no lockfile alongside it (unpinned dependencies)","ref":"frontend/wailsjs/runtime/package.json","url":null,"weight":0.3}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":50.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v0.2.6 ships TropicalPeer-0.2.6.apk (5 downloads)","ref":"TropicalPeer-0.2.6.apk","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/TropicalPeer-0.2.6.apk","weight":0.0},{"kind":"binary-release-asset","description":"release v0.2.6 ships TropicalPeer-0.2.6.dmg (0 downloads)","ref":"TropicalPeer-0.2.6.dmg","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/TropicalPeer-0.2.6.dmg","weight":0.0},{"kind":"binary-release-asset","description":"release v0.2.6 ships TropicalPeer-0.2.6.exe (0 downloads)","ref":"TropicalPeer-0.2.6.exe","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/TropicalPeer-0.2.6.exe","weight":0.0},{"kind":"binary-release-asset","description":"release v0.2.6 ships tropicalpeer-server-windows-amd64.exe (0 downloads)","ref":"tropicalpeer-server-windows-amd64.exe","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-windows-amd64.exe","weight":0.0},{"kind":"binary-release-asset","description":"release v0.2.6 ships tropicalpeer-server-windows-arm64.exe (0 downloads)","ref":"tropicalpeer-server-windows-arm64.exe","url":"https://github.com/TropicalFan344/TropicalPeer/releases/download/v0.2.6/tropicalpeer-server-windows-arm64.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":2131.0,"function_nloc":15960.0,"mean_ccn":2.73,"p90_ccn":6.0,"complex_functions":20.0,"long_functions":4.0,"many_param_functions":5.0,"risky_nloc_share":0.0953},"findings":[],"evidence":[{"kind":"complex-function","description":"runCommand in cmd/tpcli/main.go: complexity 55, 193 lines","ref":"cmd/tpcli/main.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/cmd/tpcli/main.go#L97","weight":0.9166666666666666},{"kind":"complex-function","description":"handleIncoming in internal/node/node.go: complexity 31, 109 lines","ref":"internal/node/node.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/internal/node/node.go#L355","weight":0.5166666666666667},{"kind":"complex-function","description":"connect in internal/node/connect.go: complexity 30, 102 lines","ref":"internal/node/connect.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/internal/node/connect.go#L242","weight":0.5},{"kind":"complex-function","description":"start in cmd/server/links.go: complexity 28, 106 lines","ref":"cmd/server/links.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/cmd/server/links.go#L111","weight":0.4666666666666667},{"kind":"complex-function","description":"Send in internal/transfer/sender.go: complexity 28, 98 lines","ref":"internal/transfer/sender.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/internal/transfer/sender.go#L124","weight":0.4666666666666667},{"kind":"complex-function","description":"upsertTransfer in frontend/src/lib/state.svelte.ts: complexity 27, 37 lines","ref":"frontend/src/lib/state.svelte.ts","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/state.svelte.ts#L183","weight":0.45},{"kind":"complex-function","description":"serve in internal/linkshare/linkshare.go: complexity 25, 83 lines","ref":"internal/linkshare/linkshare.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/internal/linkshare/linkshare.go#L710","weight":0.4166666666666667},{"kind":"complex-function","description":"handleLinkHost in internal/server/links.go: complexity 25, 76 lines","ref":"internal/server/links.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/internal/server/links.go#L106","weight":0.4166666666666667},{"kind":"complex-function","description":"handleRegister in internal/server/server.go: complexity 24, 73 lines","ref":"internal/server/server.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/internal/server/server.go#L201","weight":0.4},{"kind":"complex-function","description":"receiveFile in internal/transfer/receiver.go: complexity 24, 88 lines","ref":"internal/transfer/receiver.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/internal/transfer/receiver.go#L492","weight":0.4}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":20651.0,"duplicated_lines":457.0,"duplicated_share":0.0221,"files":195.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: cmd/server/links.go:259 and cmd/server/links.go:308","ref":"cmd/server/links.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/cmd/server/links.go#L259","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: cmd/tpcli/main.go:248 and cmd/tpcli/main.go:296","ref":"cmd/tpcli/main.go","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/cmd/tpcli/main.go#L248","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/App.svelte:82 and frontend/src/lib/components/Pager.svelte:157","ref":"frontend/src/App.svelte","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/App.svelte#L82","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/lib/components/ComposeBar.svelte:124 and frontend/src/lib/components/SendChooser.svelte:89","ref":"frontend/src/lib/components/ComposeBar.svelte","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/components/ComposeBar.svelte#L124","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/lib/components/PeerCard.svelte:291 and frontend/src/lib/components/PeerCard.svelte:302","ref":"frontend/src/lib/components/PeerCard.svelte","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/components/PeerCard.svelte#L291","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/lib/components/ShareSheet.svelte:66 and frontend/src/lib/components/TextDialog.svelte:70","ref":"frontend/src/lib/components/ShareSheet.svelte","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/components/ShareSheet.svelte#L66","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/lib/components/Sidebar.svelte:10 and frontend/src/lib/components/TabBar.svelte:11","ref":"frontend/src/lib/components/Sidebar.svelte","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/components/Sidebar.svelte#L10","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/lib/components/Sidebar.svelte:23 and frontend/src/lib/pages/SettingsPage.svelte:181","ref":"frontend/src/lib/components/Sidebar.svelte","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/components/Sidebar.svelte#L23","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/lib/format.ts:3 and web/src/main.ts:24","ref":"frontend/src/lib/format.ts","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/format.ts#L3","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/lib/i18n.svelte.ts:70 and web/src/i18n.ts:17","ref":"frontend/src/lib/i18n.svelte.ts","url":"https://github.com/TropicalFan344/TropicalPeer/blob/3e4eee2130b45864e0372d2efa04041268f9a593/frontend/src/lib/i18n.svelte.ts#L70","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":28.0,"weighted_findings":17.5,"scanned_lines":27758.0,"category:best-practice":1.0,"category:correctness":27.0},"findings":[{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"cmd/server/dnscert.go","line":81,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:cmd/server/dnscert.go:81"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/desktopapp/notify_windows.go","line":28,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/desktopapp/notify_windows.go:28"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/desktopapp/update.go","line":75,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/desktopapp/update.go:75"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/identity/identity.go","line":74,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/identity/identity.go:74"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/node/lock.go","line":20,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/node/lock.go:20"},{"rule_id":"opengrep/go.lang.best-practice.hidden-goroutine","severity":"medium","message":"Detected a hidden goroutine. Function invocations are expected to synchronous, and this function will execute asynchronously because all it does is call a goroutine. Instead, remove the internal goroutine and call the function using 'go'.","path":"internal/node/predict.go","line":138,"fingerprint":"go.lang.best-practice.hidden-goroutine:internal/node/predict.go:138"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/node/settings.go","line":56,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/node/settings.go:56"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/peers/store.go","line":302,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/peers/store.go:302"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/peers/store.go","line":315,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/peers/store.go:315"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/transfer/receiver.go","line":295,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/transfer/receiver.go:295"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/transfer/receiver.go","line":483,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/transfer/receiver.go:483"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/transfer/receiver.go","line":489,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/transfer/receiver.go:489"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/transfer/receiver.go","line":640,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/transfer/receiver.go:640"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/update/update.go","line":129,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/update/update.go:129"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`r` is assigned twice; the first assignment is useless","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":4,"fingerprint":"javascript.lang.correctness.useless-assignment:internal/server/webdist/assets/index-BENn4tZh.js:4"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":4,"fingerprint":"javascript.lang.correctness.useless-assignment:internal/server/webdist/assets/index-BENn4tZh.js:4"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":11,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/server/webdist/assets/index-BENn4tZh.js:11"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":11,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/server/webdist/assets/index-BENn4tZh.js:11"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":24,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/server/webdist/assets/index-BENn4tZh.js:24"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":24,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/server/webdist/assets/index-BENn4tZh.js:24"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":25,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/server/webdist/assets/index-BENn4tZh.js:25"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/server/webdist/assets/index-BENn4tZh.js","line":25,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/server/webdist/assets/index-BENn4tZh.js:25"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"web/src/main.ts","line":91,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:web/src/main.ts:91"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"web/src/main.ts","line":91,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:web/src/main.ts:91"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"web/src/main.ts","line":217,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:web/src/main.ts:217"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"web/src/main.ts","line":217,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:web/src/main.ts:217"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"web/src/main.ts","line":218,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:web/src/main.ts:218"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"web/src/main.ts","line":218,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:web/src/main.ts:218"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.4345,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":0.0,"check:tests_cochange":1.0,"test_lines":6090.0,"source_lines":28032.0,"test_ratio":0.2173,"ci_files":1.0,"cochange_share":0.7143,"cochange_commits":35.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/build.yml","ref":".github/workflows/build.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (go test)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["go 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":196.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":1.0,"check:low_escape_density":0.0,"escapes":45.0,"escapes_per_kloc":14.25},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: frontend/tsconfig.node.json","ref":"frontend/tsconfig.node.json","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":28032.0,"other_lines":0.0,"files_blamed":195.0,"blame_failures":0.0,"quality:ai_findings":28.0,"quality:ai_per_kloc":0.999,"quality:other_findings":0.0,"security:ai_findings":50.0,"security:ai_per_kloc":1.784,"security:other_findings":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}