{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:07.667293Z","repo":{"ref":{"host":"github.com","owner":"simon141","name":"pabloagent"},"default_branch":"main","clone_url":"https://github.com/simon141/pabloagent.git","html_url":"https://github.com/simon141/pabloagent","description":"Pablo Agent is an AI chat application that uses Claude Code, Codex and other CLIs over SSH as a backend.","stars":9,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":3256,"primary_language":"Rust","license_spdx":"MIT","created_at":"2026-08-28T08:33:25Z","pushed_at":"2026-10-23T11:32:20Z","security_policy_url":null,"distribution":{"owner_created_at":"2020-01-21T05:16:45Z","owner_type":"User","release_assets":[{"name":"pabloagent-android-arm64.apk","size":10056851,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-android-arm64.apk"},{"name":"pabloagent-linux-aarch64","size":10408080,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-aarch64"},{"name":"pabloagent-linux-aarch64.AppImage","size":80935432,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-aarch64.AppImage"},{"name":"pabloagent-linux-aarch64.deb","size":4671126,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-aarch64.deb"},{"name":"pabloagent-linux-aarch64.rpm","size":4671718,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-aarch64.rpm"},{"name":"pabloagent-linux-x86_64","size":11691248,"download_count":1,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-x86_64"},{"name":"pabloagent-linux-x86_64.AppImage","size":82897400,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-x86_64.AppImage"},{"name":"pabloagent-linux-x86_64.deb","size":4850180,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-x86_64.deb"},{"name":"pabloagent-linux-x86_64.rpm","size":4850588,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-x86_64.rpm"},{"name":"pabloagent-macos-universal.dmg","size":7863965,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-macos-universal.dmg"},{"name":"pabloagent-windows-portable.exe","size":12644864,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-windows-portable.exe"},{"name":"pabloagent-windows-setup.exe","size":3182319,"download_count":0,"release_tag":"continuous","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-windows-setup.exe"},{"name":"pabloagent-android-arm64.apk","size":9993255,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-android-arm64.apk"},{"name":"pabloagent-linux-aarch64","size":10428432,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-aarch64"},{"name":"pabloagent-linux-aarch64.AppImage","size":80353800,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-aarch64.AppImage"},{"name":"pabloagent-linux-aarch64.deb","size":4681156,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-aarch64.deb"},{"name":"pabloagent-linux-aarch64.rpm","size":4681965,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-aarch64.rpm"},{"name":"pabloagent-linux-x86_64","size":11668336,"download_count":1,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-x86_64"},{"name":"pabloagent-linux-x86_64.AppImage","size":82262520,"download_count":20,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-x86_64.AppImage"},{"name":"pabloagent-linux-x86_64.deb","size":4833662,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-x86_64.deb"},{"name":"pabloagent-linux-x86_64.rpm","size":4834078,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-linux-x86_64.rpm"},{"name":"pabloagent-macos-universal.dmg","size":7833677,"download_count":1,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-macos-universal.dmg"},{"name":"pabloagent-windows-portable.exe","size":12570112,"download_count":3,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-windows-portable.exe"},{"name":"pabloagent-windows-setup.exe","size":3156142,"download_count":0,"release_tag":"v1.1.2","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.2/pabloagent-windows-setup.exe"},{"name":"pabloagent-android-arm64.apk","size":9986675,"download_count":5,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-android-arm64.apk"},{"name":"pabloagent-linux-aarch64","size":10420240,"download_count":3,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-aarch64"},{"name":"pabloagent-linux-aarch64.AppImage","size":80345608,"download_count":5,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-aarch64.AppImage"},{"name":"pabloagent-linux-aarch64.deb","size":4676164,"download_count":3,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-aarch64.deb"},{"name":"pabloagent-linux-aarch64.rpm","size":4676704,"download_count":4,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-aarch64.rpm"},{"name":"pabloagent-linux-x86_64","size":11661040,"download_count":4,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-x86_64"},{"name":"pabloagent-linux-x86_64.AppImage","size":82262520,"download_count":3,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-x86_64.AppImage"},{"name":"pabloagent-linux-x86_64.deb","size":4828906,"download_count":3,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-x86_64.deb"},{"name":"pabloagent-linux-x86_64.rpm","size":4829497,"download_count":4,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-linux-x86_64.rpm"},{"name":"pabloagent-macos-universal.dmg","size":7826754,"download_count":3,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-macos-universal.dmg"},{"name":"pabloagent-windows-portable.exe","size":12562944,"download_count":3,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-windows-portable.exe"},{"name":"pabloagent-windows-setup.exe","size":3150067,"download_count":3,"release_tag":"v1.1.1","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.1/pabloagent-windows-setup.exe"},{"name":"pabloagent-android-arm64.apk","size":9981831,"download_count":4,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-android-arm64.apk"},{"name":"pabloagent-linux-aarch64","size":10412048,"download_count":3,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-aarch64"},{"name":"pabloagent-linux-aarch64.AppImage","size":80329224,"download_count":7,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-aarch64.AppImage"},{"name":"pabloagent-linux-aarch64.deb","size":4674150,"download_count":3,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-aarch64.deb"},{"name":"pabloagent-linux-aarch64.rpm","size":4674920,"download_count":6,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-aarch64.rpm"},{"name":"pabloagent-linux-x86_64","size":11653872,"download_count":4,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-x86_64"},{"name":"pabloagent-linux-x86_64.AppImage","size":82254328,"download_count":3,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-x86_64.AppImage"},{"name":"pabloagent-linux-x86_64.deb","size":4821960,"download_count":3,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-x86_64.deb"},{"name":"pabloagent-linux-x86_64.rpm","size":4823009,"download_count":6,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-linux-x86_64.rpm"},{"name":"pabloagent-macos-universal.dmg","size":7817221,"download_count":3,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-macos-universal.dmg"},{"name":"pabloagent-windows-portable.exe","size":12554240,"download_count":3,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-windows-portable.exe"},{"name":"pabloagent-windows-setup.exe","size":3146580,"download_count":3,"release_tag":"v1.1.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.1.0/pabloagent-windows-setup.exe"},{"name":"pabloagent-android-arm64.apk","size":9908615,"download_count":1,"release_tag":"v1.0.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.0.0/pabloagent-android-arm64.apk"},{"name":"pabloagent-linux-x86_64","size":11557232,"download_count":1,"release_tag":"v1.0.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.0.0/pabloagent-linux-x86_64"},{"name":"pabloagent-linux-x86_64.AppImage","size":82225656,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.0.0/pabloagent-linux-x86_64.AppImage"},{"name":"pabloagent-windows-x86_64.exe","size":12429824,"download_count":2,"release_tag":"v1.0.0","url":"https://github.com/simon141/pabloagent/releases/download/v1.0.0/pabloagent-windows-x86_64.exe"}]}},"commit_sha":"bbb339979aee6d5aca62d9c0139186afd928a206","profile":{"lines_by_language":{"TypeScript":11205,"Rust":10706,"JavaScript":1606,"Shell":872,"Kotlin":742},"files_by_category":{"binary":45,"source":44,"config":32,"other":19,"docs":5,"generated":2,"test":2},"source_lines":21372,"test_lines":3759},"pillars":{"ai_provenance":{"score":9.7,"confidence":0.95,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.0966,"suspected_share":0.0,"estimated_share":0.0966,"ai_artifacts":2.0,"flagged_work_units":0.0,"flagged_releases":0.0,"style_index":0.304},"summary":"Explicit AI attribution on 10% of first-party code added; an estimated 10% including velocity signals."},"quality":{"score":77.0,"confidence":0.9,"coverage":1.0,"label":"adequate","breakdown":{"complexity":61.7,"duplication":82.9,"lint":88.7,"testing":79.1,"docs":65.0,"type_safety":100.0,"process":null},"summary":"Code quality is adequate: test-to-source ratio 0.18, CI runs tests; 16% of function code in complex or long functions; 3% duplicated lines. Weakest area: complexity."},"security":{"score":51.6,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":96.7,"sast":79.2,"dependencies":31.7,"ci_actions":0.4,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 35 known vulnerabilities in 18 dependencies; 8 high-severity SAST findings; 33 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":22.0,"checked":22.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":105.0,"attributed_commits":45.0,"attributed_commit_share":0.42857142857142855,"effective_loc":26704.0,"attributed_loc":2580.0,"attributed_loc_share":0.09661473936488915,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 45 attributed commits, 2,580 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"bbb339979aee6d5aca62d9c0139186afd928a206","url":"https://github.com/simon141/pabloagent/commit/bbb339979aee6d5aca62d9c0139186afd928a206","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2a3bddab5a9ca6b0b97f820bee91c0df80583b9e","url":"https://github.com/simon141/pabloagent/commit/2a3bddab5a9ca6b0b97f820bee91c0df80583b9e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b14fc3ed59313c2c8cc40338da3d18f46a0638a8","url":"https://github.com/simon141/pabloagent/commit/b14fc3ed59313c2c8cc40338da3d18f46a0638a8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"009a3c3903e677b15e1edecebb932f3ff44a3a06","url":"https://github.com/simon141/pabloagent/commit/009a3c3903e677b15e1edecebb932f3ff44a3a06","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2f39781fefc92d1beaf61254ecf37530bd7a40ad","url":"https://github.com/simon141/pabloagent/commit/2f39781fefc92d1beaf61254ecf37530bd7a40ad","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d30ca6e79cf4c1b0c04051e53d4e231d6719bc6d","url":"https://github.com/simon141/pabloagent/commit/d30ca6e79cf4c1b0c04051e53d4e231d6719bc6d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0e25384e2067a0fb6673cb5d766d2e1c1002887b","url":"https://github.com/simon141/pabloagent/commit/0e25384e2067a0fb6673cb5d766d2e1c1002887b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c215348cbe99b57529d8a68c5efb72c2396d37eb","url":"https://github.com/simon141/pabloagent/commit/c215348cbe99b57529d8a68c5efb72c2396d37eb","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e9ae4e15e5324d21579987faebfe65fc274541be","url":"https://github.com/simon141/pabloagent/commit/e9ae4e15e5324d21579987faebfe65fc274541be","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"5d406bafdee060536fdd4a7256196425b018b3a1","url":"https://github.com/simon141/pabloagent/commit/5d406bafdee060536fdd4a7256196425b018b3a1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"24085ca383152c5c210e01cc37fa649d290b630f","url":"https://github.com/simon141/pabloagent/commit/24085ca383152c5c210e01cc37fa649d290b630f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ee6e2bf6b491a9d9d9bdb18dc1d52f93445192ef","url":"https://github.com/simon141/pabloagent/commit/ee6e2bf6b491a9d9d9bdb18dc1d52f93445192ef","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d9bd66113e0498a83a2b6d060fe00889af05d599","url":"https://github.com/simon141/pabloagent/commit/d9bd66113e0498a83a2b6d060fe00889af05d599","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"aff46bf23c41d674c8b41d57a18b8876bef24e0b","url":"https://github.com/simon141/pabloagent/commit/aff46bf23c41d674c8b41d57a18b8876bef24e0b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a069d93c384a1a7f76e86fb90ff3bb927f456996","url":"https://github.com/simon141/pabloagent/commit/a069d93c384a1a7f76e86fb90ff3bb927f456996","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"950657ea4b71e654d36e3a8186f88de59e2eae97","url":"https://github.com/simon141/pabloagent/commit/950657ea4b71e654d36e3a8186f88de59e2eae97","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f185d9d44eab956f52f3bd4f5c34304b5813fc15","url":"https://github.com/simon141/pabloagent/commit/f185d9d44eab956f52f3bd4f5c34304b5813fc15","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"5e72c0bd0828d3ada758bf60170c4b5bdc870335","url":"https://github.com/simon141/pabloagent/commit/5e72c0bd0828d3ada758bf60170c4b5bdc870335","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"863799821990841611f14536b1ac7e1037cf07b3","url":"https://github.com/simon141/pabloagent/commit/863799821990841611f14536b1ac7e1037cf07b3","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"cfd79b76fc2ea97cc7303923f4b81eefc8e629cb","url":"https://github.com/simon141/pabloagent/commit/cfd79b76fc2ea97cc7303923f4b81eefc8e629cb","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b7aac9543b784dfb97d55f3398562385d30c9f9d","url":"https://github.com/simon141/pabloagent/commit/b7aac9543b784dfb97d55f3398562385d30c9f9d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3eb6729a3603283a38d9eede2f88684ebff777b4","url":"https://github.com/simon141/pabloagent/commit/3eb6729a3603283a38d9eede2f88684ebff777b4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7bcb8cf4aad9bddceaa1fbfd2cea18ed22aa53f7","url":"https://github.com/simon141/pabloagent/commit/7bcb8cf4aad9bddceaa1fbfd2cea18ed22aa53f7","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f2c46af71452476c0f61a108fe86c1827f440cf5","url":"https://github.com/simon141/pabloagent/commit/f2c46af71452476c0f61a108fe86c1827f440cf5","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"772357a1533d42e724bafc6e9810e57cabcb5a91","url":"https://github.com/simon141/pabloagent/commit/772357a1533d42e724bafc6e9810e57cabcb5a91","weight":0.9}],"data":{"attributed_loc_by_commit":{"3502ae422565be6c78211b989736d593f5316c17":0,"5cd985b5e69376eacd45089d3f6fe26f1244ceba":17,"2f178c5fa23f8a37bc0b34eb7e3a441ce90876da":227,"9c67d792314a965df9a29beba569cccfdb322d34":27,"5b9c2a8983b666363a06d87a559798bd0ead74b2":636,"cc8dd429d78f96d2759386434279636926c0db1a":172,"e80c565330d03a999e3a1308a5e0cff20dd26197":9,"8d7ae772dfe60ea75073f9569ca0c1c93507f4f8":2,"dd0f6fc288e1ef0559cf2914313ea65df747ee2c":100,"ddffec85aad2e0205794055f3f0bd4e5be8e282c":130,"ee941ab7c68e649fe202ca2b1c922ea5dcc362bc":83,"c962a37422718fbf8507e7629f0864e2040b5260":4,"515ecf78d47d812c782917359da44721a4c51de6":0,"9be3e14afffe1156d6b4857df6bd1b64664e7694":0,"941e3b90af6d379ec6063d2baa3000ec19fe3203":65,"75ceb58c030db0b442653f45a10fe3471fb8d328":0,"de529566b7e56e2a51993847c673af4085a341cf":4,"6374235a15c6b816700c0c28fc68d635f18022bd":0,"0942b4776b823f62537b83b608a3c1608ef53b76":0,"275a901494736b828f3d04ed55b30f1dd45f45e5":0,"772357a1533d42e724bafc6e9810e57cabcb5a91":5,"f2c46af71452476c0f61a108fe86c1827f440cf5":1,"7bcb8cf4aad9bddceaa1fbfd2cea18ed22aa53f7":7,"3eb6729a3603283a38d9eede2f88684ebff777b4":0,"b7aac9543b784dfb97d55f3398562385d30c9f9d":318,"cfd79b76fc2ea97cc7303923f4b81eefc8e629cb":12,"863799821990841611f14536b1ac7e1037cf07b3":0,"5e72c0bd0828d3ada758bf60170c4b5bdc870335":0,"f185d9d44eab956f52f3bd4f5c34304b5813fc15":0,"950657ea4b71e654d36e3a8186f88de59e2eae97":3,"a069d93c384a1a7f76e86fb90ff3bb927f456996":42,"aff46bf23c41d674c8b41d57a18b8876bef24e0b":146,"d9bd66113e0498a83a2b6d060fe00889af05d599":131,"ee6e2bf6b491a9d9d9bdb18dc1d52f93445192ef":25,"24085ca383152c5c210e01cc37fa649d290b630f":0,"5d406bafdee060536fdd4a7256196425b018b3a1":2,"e9ae4e15e5324d21579987faebfe65fc274541be":12,"c215348cbe99b57529d8a68c5efb72c2396d37eb":166,"0e25384e2067a0fb6673cb5d766d2e1c1002887b":91,"d30ca6e79cf4c1b0c04051e53d4e231d6719bc6d":28,"2f39781fefc92d1beaf61254ecf37530bd7a40ad":70,"009a3c3903e677b15e1edecebb932f3ff44a3a06":9,"b14fc3ed59313c2c8cc40338da3d18f46a0638a8":14,"2a3bddab5a9ca6b0b97f820bee91c0df80583b9e":9,"bbb339979aee6d5aca62d9c0139186afd928a206":13},"tools":{"claude-code":{"name":"Claude Code","commits":45,"loc":2580,"first_seen":1788057713,"last_seen":1792754663}},"monthly":{"2026-08":{"loc":22650,"attributed_loc":244},"2026-09":{"loc":3642,"attributed_loc":1924},"2026-10":{"loc":412,"attributed_loc":412}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":2.0,"workflow_agents":0.0,"tools_configured":2.0,"earliest_adoption":1787906103.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/CLAUDE.md","weight":0.5},{"kind":"ai-artifact","description":"AGENTS.md (generic-agent configuration)","ref":"AGENTS.md","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/AGENTS.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1787906103},{"tool":"generic-agent","path":"AGENTS.md","added_at":1787906103}],"workflows":[],"tools":["claude-code","generic-agent"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":43.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":4361.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":239.64831484195102,"median_loc_per_hour":64.65458579881657,"pr_timed_units":0.0,"excluded_import_loc":22343.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["fff12eb03928f12dcca7968d2028e2fa68dc719a"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":4.0,"flagged_releases":0.0,"max_loc_per_day":532.4},"findings":[],"evidence":[],"data":{"releases":[{"from":"v1.0.0","to":"v1.1.0","loc":3325,"days":6.24,"loc_per_day":532.4,"flagged":false},{"from":"v1.1.0","to":"v1.1.1","loc":376,"days":6.16,"loc_per_day":61.1,"flagged":false},{"from":"v1.1.1","to":"v1.1.2","loc":184,"days":5.97,"loc_per_day":30.8,"flagged":false},{"from":"v1.1.2","to":"continuous","loc":476,"days":35.99,"loc_per_day":13.2,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":21372.0,"index":0.304,"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":13.0,"per_kloc:emoji_in_code":0.608,"files:emoji_in_code":4.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/private-key","severity":"low","message":"Possible private-key secret in the current tree (test/docs/example file)","path":"src-tauri/tests/remote_session.rs","line":38,"fingerprint":"src-tauri/tests/remote_session.rs:private-key:38"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":41.0,"findings_high":8.0,"findings_medium":24.0,"findings_low":9.0,"weighted_findings":14.25,"scanned_lines":21372.0,"parse_errors":3.0},"findings":[{"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":"src/main.ts","line":1538,"fingerprint":"javascript.browser.security.insecure-document-method:src/main.ts:1538"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `el.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/main.ts","line":1538,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/main.ts:1538"},{"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":"src/main.ts","line":3292,"fingerprint":"javascript.browser.security.insecure-document-method:src/main.ts:3292"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `model.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/main.ts","line":3292,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/main.ts:3292"},{"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":"src/transcript.ts","line":642,"fingerprint":"javascript.browser.security.insecure-document-method:src/transcript.ts:642"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `el.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/transcript.ts","line":642,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/transcript.ts:642"},{"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":"src/transcript.ts","line":1742,"fingerprint":"javascript.browser.security.insecure-document-method:src/transcript.ts:1742"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `body.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/transcript.ts","line":1742,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/transcript.ts:1742"},{"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":"src/main.ts","line":213,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:src/main.ts:213"},{"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":"src/main.ts","line":531,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:src/main.ts:531"},{"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":"src/main.ts","line":540,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:src/main.ts:540"},{"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":"src/main.ts","line":547,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:src/main.ts:547"},{"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":"src/main.ts","line":3292,"fingerprint":"javascript.lang.security.html-in-template-string:src/main.ts:3292"},{"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":"src/transcript.ts","line":63,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:63"},{"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":"src/transcript.ts","line":179,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:179"},{"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":"src/transcript.ts","line":185,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:185"},{"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":"src/transcript.ts","line":186,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:186"},{"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":"src/transcript.ts","line":266,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:266"},{"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":"src/transcript.ts","line":282,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:282"},{"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":"src/transcript.ts","line":389,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:389"},{"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":"src/transcript.ts","line":392,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:392"},{"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":"src/transcript.ts","line":395,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:395"},{"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":"src/transcript.ts","line":467,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:467"},{"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":"src/transcript.ts","line":474,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:474"},{"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":"src/transcript.ts","line":486,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:486"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-redos","severity":"medium","message":"Detected the use of a regular expression `^\\s*(?:[-*_]\\s*){3,}$` which appears to be vulnerable to a Regular expression Denial-of-Service (ReDoS). For this reason, it is recommended to review the regex and ensure it is not vulnerable to catastrophic backtracking, and if possible use a library which  [confidence low]","path":"src/transcript.ts","line":519,"fingerprint":"javascript.lang.security.audit.detect-redos:src/transcript.ts:519"},{"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":"src/transcript.ts","line":544,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:544"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-redos","severity":"medium","message":"Detected the use of a regular expression `^\\s*(?:[-*_]\\s*){3,}$` which appears to be vulnerable to a Regular expression Denial-of-Service (ReDoS). For this reason, it is recommended to review the regex and ensure it is not vulnerable to catastrophic backtracking, and if possible use a library which  [confidence low]","path":"src/transcript.ts","line":548,"fingerprint":"javascript.lang.security.audit.detect-redos:src/transcript.ts:548"},{"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":"src/transcript.ts","line":598,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:598"},{"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":"src/transcript.ts","line":624,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:624"},{"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":"src/transcript.ts","line":643,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:643"},{"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":"src/transcript.ts","line":644,"fingerprint":"javascript.lang.security.html-in-template-string:src/transcript.ts:644"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/download.rs","line":351,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/download.rs:351"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/download.rs","line":374,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/download.rs:374"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/download.rs","line":391,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/download.rs:391"},{"rule_id":"opengrep/rust.lang.security.current-exe","severity":"low","message":"current_exe should not be used for security operations. From the docs: \"The output of this function should not be trusted for anything that might have security implications. Basically, if users can run the executable, they can change the output arbitrarily.\" [confidence high]","path":"src-tauri/src/store.rs","line":136,"fingerprint":"rust.lang.security.current-exe:src-tauri/src/store.rs:136"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/store.rs","line":221,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/store.rs:221"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/watch.rs","line":392,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/watch.rs:392"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/watch.rs","line":394,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/watch.rs:394"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/watch.rs","line":420,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/watch.rs:420"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/watch.rs","line":422,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/watch.rs:422"}],"evidence":[],"data":{"rulesets":["typescript","javascript","rust","bash","kotlin"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":18.0,"vulnerabilities":35.0,"vulns_critical":0.0,"vulns_high":4.0,"vulns_medium":11.0,"vulns_low":7.0,"vulns_unknown":13.0,"penalty":69.0},"findings":[{"rule_id":"osv/GHSA-68fv-2mgg-jv7q","severity":"high","message":"source-map-js@1.2.1 (npm) is affected by GHSA-68fv-2mgg-jv7q","path":"package-lock.json","line":null,"fingerprint":"source-map-js@1.2.1 (npm):GHSA-68fv-2mgg-jv7q"},{"rule_id":"osv/GHSA-587h-7wmj-h5pm","severity":"high","message":"vite@6.4.3 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-47hw-gvq5-r2gm","severity":"high","message":"russh@0.62.4 (crates.io) is affected by RUSTSEC-2026-0492, GHSA-47hw-gvq5-r2gm","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-47hw-gvq5-r2gm"},{"rule_id":"osv/GHSA-vp5q-ff62-jwqv","severity":"high","message":"russh@0.62.4 (crates.io) is affected by RUSTSEC-2026-0495, GHSA-vp5q-ff62-jwqv","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-vp5q-ff62-jwqv"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"vite@6.4.3 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"vite@6.4.3 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-rq7h-c2jc-7f22","severity":"medium","message":"vite@6.4.3 (npm) is affected by GHSA-rq7h-c2jc-7f22","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-rq7h-c2jc-7f22"},{"rule_id":"osv/RUSTSEC-2026-0387","severity":"medium","message":"crypto-bigint@0.7.5 (crates.io) is affected by RUSTSEC-2026-0387","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"crypto-bigint@0.7.5 (crates.io):RUSTSEC-2026-0387"},{"rule_id":"osv/RUSTSEC-2026-0385","severity":"medium","message":"ctutils@0.4.2 (crates.io) is affected by RUSTSEC-2026-0385","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"ctutils@0.4.2 (crates.io):RUSTSEC-2026-0385"},{"rule_id":"osv/GHSA-wrw7-89jp-8q8g","severity":"medium","message":"glib@0.18.5 (crates.io) is affected by RUSTSEC-2024-0429, GHSA-wrw7-89jp-8q8g","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"glib@0.18.5 (crates.io):GHSA-wrw7-89jp-8q8g"},{"rule_id":"osv/GHSA-g4mp-vgx3-xrvm","severity":"medium","message":"pageant@0.2.1 (crates.io) is affected by GHSA-g4mp-vgx3-xrvm","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"pageant@0.2.1 (crates.io):GHSA-g4mp-vgx3-xrvm"},{"rule_id":"osv/RUSTSEC-2024-0370","severity":"medium","message":"proc-macro-error@1.0.4 (crates.io) is affected by RUSTSEC-2024-0370","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"proc-macro-error@1.0.4 (crates.io):RUSTSEC-2024-0370"},{"rule_id":"osv/GHSA-35g8-35p8-c8fw","severity":"medium","message":"russh@0.62.4 (crates.io) is affected by GHSA-35g8-35p8-c8fw","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-35g8-35p8-c8fw"},{"rule_id":"osv/GHSA-4p9f-7p9m-5vfg","severity":"medium","message":"russh@0.62.4 (crates.io) is affected by GHSA-4p9f-7p9m-5vfg","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-4p9f-7p9m-5vfg"},{"rule_id":"osv/GHSA-4wc5-f2rc-q74m","severity":"medium","message":"russh@0.62.4 (crates.io) is affected by GHSA-4wc5-f2rc-q74m","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-4wc5-f2rc-q74m"},{"rule_id":"osv/GHSA-fw5c-8223-6h42","severity":"medium","message":"russh@0.62.4 (crates.io) is affected by GHSA-fw5c-8223-6h42","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-fw5c-8223-6h42"},{"rule_id":"osv/GHSA-m65r-rprj-r5rg","severity":"medium","message":"russh@0.62.4 (crates.io) is affected by GHSA-m65r-rprj-r5rg","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-m65r-rprj-r5rg"},{"rule_id":"osv/GHSA-w3jg-pjxf-73p4","severity":"medium","message":"russh@0.62.4 (crates.io) is affected by GHSA-w3jg-pjxf-73p4","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-w3jg-pjxf-73p4"},{"rule_id":"osv/RUSTSEC-2026-0486","severity":"medium","message":"rustix@1.1.4 (crates.io) is affected by RUSTSEC-2026-0486","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustix@1.1.4 (crates.io):RUSTSEC-2026-0486"},{"rule_id":"osv/RUSTSEC-2026-0386","severity":"medium","message":"tokio@1.53.1 (crates.io) is affected by RUSTSEC-2026-0386","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"tokio@1.53.1 (crates.io):RUSTSEC-2026-0386"},{"rule_id":"osv/RUSTSEC-2025-0081","severity":"medium","message":"unic-char-property@0.9.0 (crates.io) is affected by RUSTSEC-2025-0081","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-char-property@0.9.0 (crates.io):RUSTSEC-2025-0081"},{"rule_id":"osv/RUSTSEC-2025-0075","severity":"medium","message":"unic-char-range@0.9.0 (crates.io) is affected by RUSTSEC-2025-0075","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-char-range@0.9.0 (crates.io):RUSTSEC-2025-0075"},{"rule_id":"osv/RUSTSEC-2025-0080","severity":"medium","message":"unic-common@0.9.0 (crates.io) is affected by RUSTSEC-2025-0080","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-common@0.9.0 (crates.io):RUSTSEC-2025-0080"},{"rule_id":"osv/RUSTSEC-2025-0100","severity":"medium","message":"unic-ucd-ident@0.9.0 (crates.io) is affected by RUSTSEC-2025-0100","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-ucd-ident@0.9.0 (crates.io):RUSTSEC-2025-0100"},{"rule_id":"osv/RUSTSEC-2025-0098","severity":"medium","message":"unic-ucd-version@0.9.0 (crates.io) is affected by RUSTSEC-2025-0098","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-ucd-version@0.9.0 (crates.io):RUSTSEC-2025-0098"},{"rule_id":"osv/RUSTSEC-2026-0371","severity":"medium","message":"zbus_names@4.3.4 (crates.io) is affected by RUSTSEC-2026-0371","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zbus_names@4.3.4 (crates.io):RUSTSEC-2026-0371"},{"rule_id":"osv/RUSTSEC-2026-0370","severity":"medium","message":"zvariant@5.13.1 (crates.io) is affected by RUSTSEC-2026-0370","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zvariant@5.13.1 (crates.io):RUSTSEC-2026-0370"},{"rule_id":"osv/RUSTSEC-2026-0372","severity":"medium","message":"zvariant_derive@5.13.1 (crates.io) is affected by RUSTSEC-2026-0372","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zvariant_derive@5.13.1 (crates.io):RUSTSEC-2026-0372"},{"rule_id":"osv/GHSA-9jrq-w75r-8gcw","severity":"low","message":"vite@6.4.3 (npm) is affected by GHSA-9jrq-w75r-8gcw","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-9jrq-w75r-8gcw"},{"rule_id":"osv/GHSA-662x-8wvj-2276","severity":"low","message":"pageant@0.2.1 (crates.io) is affected by GHSA-662x-8wvj-2276","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"pageant@0.2.1 (crates.io):GHSA-662x-8wvj-2276"},{"rule_id":"osv/GHSA-9264-jvgf-6w2f","severity":"low","message":"russh@0.62.4 (crates.io) is affected by GHSA-9264-jvgf-6w2f","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-9264-jvgf-6w2f"},{"rule_id":"osv/GHSA-9wfm-jcj8-jfv9","severity":"low","message":"russh@0.62.4 (crates.io) is affected by GHSA-9wfm-jcj8-jfv9","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-9wfm-jcj8-jfv9"},{"rule_id":"osv/GHSA-g6xm-f9xp-qq35","severity":"low","message":"russh@0.62.4 (crates.io) is affected by GHSA-g6xm-f9xp-qq35","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-g6xm-f9xp-qq35"},{"rule_id":"osv/GHSA-j7h2-66j4-ghjf","severity":"low","message":"russh@0.62.4 (crates.io) is affected by GHSA-j7h2-66j4-ghjf","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-j7h2-66j4-ghjf"},{"rule_id":"osv/GHSA-p8qx-h547-fjw9","severity":"low","message":"russh@0.62.4 (crates.io) is affected by GHSA-p8qx-h547-fjw9","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"russh@0.62.4 (crates.io):GHSA-p8qx-h547-fjw9"}],"evidence":[],"data":{"ecosystems":["crates.io","npm"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":3.0,"findings":34.0,"findings_high":33.0,"findings_medium":0.0,"findings_low":1.0,"penalty":325.0},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":26,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:26"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":30,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:30"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":35,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:35"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":45,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:45"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":92,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:92"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":119,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:119"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":123,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:123"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":131,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:131"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":181,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:181"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":197,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:197"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":201,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:201"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":211,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:211"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":257,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:257"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":269,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:269"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":273,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:273"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":285,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:285"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":315,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:315"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":333,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:333"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/android-release.yml","line":343,"fingerprint":"unpinned-uses:.github/workflows/android-release.yml:343"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":30,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:30"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":45,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:45"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":123,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:123"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":131,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:131"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":201,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:201"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":211,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:211"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":273,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:273"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/android-release.yml","line":285,"fingerprint":"cache-poisoning:.github/workflows/android-release.yml:285"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/checks.yml","line":15,"fingerprint":"unpinned-uses:.github/workflows/checks.yml:15"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/checks.yml","line":19,"fingerprint":"unpinned-uses:.github/workflows/checks.yml:19"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/checks.yml","line":43,"fingerprint":"unpinned-uses:.github/workflows/checks.yml:43"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/checks.yml","line":52,"fingerprint":"unpinned-uses:.github/workflows/checks.yml:52"},{"rule_id":"zizmor/dangerous-triggers","severity":"high","message":"use of fundamentally insecure workflow trigger [confidence medium]","path":".github/workflows/pr-build-downloads.yml","line":4,"fingerprint":"dangerous-triggers:.github/workflows/pr-build-downloads.yml:4"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pr-build-downloads.yml","line":19,"fingerprint":"unpinned-uses:.github/workflows/pr-build-downloads.yml:19"},{"rule_id":"zizmor/self-repository","severity":"low","message":"use GitHub's dedicated self-repository syntax [confidence high]","path":".github/workflows/android-release.yml","line":19,"fingerprint":"self-repository:.github/workflows/android-release.yml:19"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0095,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":2.0,"binary_assets":43.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release continuous ships pabloagent-android-arm64.apk (0 downloads)","ref":"pabloagent-android-arm64.apk","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-android-arm64.apk","weight":0.0},{"kind":"binary-release-asset","description":"release continuous ships pabloagent-linux-aarch64.AppImage (0 downloads)","ref":"pabloagent-linux-aarch64.AppImage","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-aarch64.AppImage","weight":0.0},{"kind":"binary-release-asset","description":"release continuous ships pabloagent-linux-aarch64.deb (0 downloads)","ref":"pabloagent-linux-aarch64.deb","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-aarch64.deb","weight":0.0},{"kind":"binary-release-asset","description":"release continuous ships pabloagent-linux-aarch64.rpm (0 downloads)","ref":"pabloagent-linux-aarch64.rpm","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-aarch64.rpm","weight":0.0},{"kind":"binary-release-asset","description":"release continuous ships pabloagent-linux-x86_64.AppImage (0 downloads)","ref":"pabloagent-linux-x86_64.AppImage","url":"https://github.com/simon141/pabloagent/releases/download/continuous/pabloagent-linux-x86_64.AppImage","weight":0.0},{"kind":"readme-download-lure","description":"links directly to a downloadable archive or installer","ref":"README.md","url":null,"weight":0.0}],"data":{"signals":["binary-release-assets","readme-download-lure"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":1221.0,"function_nloc":14594.0,"mean_ccn":3.22,"p90_ccn":7.0,"complex_functions":31.0,"long_functions":7.0,"many_param_functions":1.0,"risky_nloc_share":0.161},"findings":[],"evidence":[{"kind":"complex-function","description":"renderPiSession in src/pi-rollout.ts: complexity 69, 193 lines","ref":"src/pi-rollout.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/pi-rollout.ts#L162","weight":1.0},{"kind":"complex-function","description":"renderClaudeSession in src/claude-rollout.ts: complexity 45, 139 lines","ref":"src/claude-rollout.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/claude-rollout.ts#L230","weight":0.75},{"kind":"complex-function","description":"renderRollout in src/rollout.ts: complexity 45, 118 lines","ref":"src/rollout.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/rollout.ts#L311","weight":0.75},{"kind":"complex-function","description":"renderItem in src/transcript.ts: complexity 43, 119 lines","ref":"src/transcript.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/transcript.ts#L1572","weight":0.7166666666666667},{"kind":"complex-function","description":"parse_sessions in src-tauri/src/remote.rs: complexity 35, 172 lines","ref":"src-tauri/src/remote.rs","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src-tauri/src/remote.rs#L1142","weight":0.5833333333333334},{"kind":"complex-function","description":"followTurn in src/main.ts: complexity 33, 106 lines","ref":"src/main.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/main.ts#L2122","weight":0.55},{"kind":"complex-function","description":"parse_turn_poll in src-tauri/src/remote.rs: complexity 29, 88 lines","ref":"src-tauri/src/remote.rs","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src-tauri/src/remote.rs#L1834","weight":0.48333333333333334},{"kind":"complex-function","description":"handleShortcut in src/main.ts: complexity 28, 52 lines","ref":"src/main.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/main.ts#L292","weight":0.4666666666666667},{"kind":"complex-function","description":"saveSessionDetails in src/main.ts: complexity 26, 70 lines","ref":"src/main.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/main.ts#L3963","weight":0.43333333333333335},{"kind":"complex-function","description":"opencodeFacts in src/opencode-rollout.ts: complexity 26, 57 lines","ref":"src/opencode-rollout.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/opencode-rollout.ts#L276","weight":0.43333333333333335}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":16426.0,"duplicated_lines":514.0,"duplicated_share":0.0313,"files":44.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: scripts/check-drafts.mjs:104 and scripts/check-drafts.mjs:155","ref":"scripts/check-drafts.mjs","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/scripts/check-drafts.mjs#L104","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/gen/android/app/src/main/java/app/pabloagent/MainActivity.kt:197 and src-tauri/gen/android/app/src/main/java/app/pabloagent/MainActivity.kt:245","ref":"src-tauri/gen/android/app/src/main/java/app/pabloagent/MainActivity.kt","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src-tauri/gen/android/app/src/main/java/app/pabloagent/MainActivity.kt#L197","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/remote.rs:1411 and src-tauri/src/remote.rs:1428","ref":"src-tauri/src/remote.rs","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src-tauri/src/remote.rs#L1411","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/ssh.rs:159 and src-tauri/src/ssh.rs:212","ref":"src-tauri/src/ssh.rs","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src-tauri/src/ssh.rs#L159","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/turn.sh:421 and src-tauri/src/turn.sh:442","ref":"src-tauri/src/turn.sh","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src-tauri/src/turn.sh#L421","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/watch.rs:231 and src-tauri/src/watch.rs:464","ref":"src-tauri/src/watch.rs","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src-tauri/src/watch.rs#L231","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/claude-rollout.ts:27 and src/pi-rollout.ts:50","ref":"src/claude-rollout.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/claude-rollout.ts#L27","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/claude-rollout.ts:128 and src/rollout.ts:109","ref":"src/claude-rollout.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/claude-rollout.ts#L128","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/main.ts:837 and src/main.ts:866","ref":"src/main.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/main.ts#L837","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/main.ts:1271 and src/transcript.ts:1295","ref":"src/main.ts","url":"https://github.com/simon141/pabloagent/blob/bbb339979aee6d5aca62d9c0139186afd928a206/src/main.ts#L1271","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":11.0,"weighted_findings":10.25,"scanned_lines":21372.0,"category:best-practice":1.0,"category:correctness":10.0},"findings":[{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":150,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:150"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":334,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:334"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":522,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:522"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":674,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:674"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":1126,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:1126"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":1132,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:1132"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":1180,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:1180"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":1187,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:1187"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"scripts/check-rollout.mjs","line":1210,"fingerprint":"javascript.lang.correctness.no-stringify-keys:scripts/check-rollout.mjs:1210"},{"rule_id":"opengrep/bash.lang.best-practice.useless-cat","severity":"medium","message":"Useless call to 'cat' in a pipeline. Use '<' and '>' for any command to read from a file or write to a file.","path":"src-tauri/src/turn.sh","line":264,"fingerprint":"bash.lang.best-practice.useless-cat:src-tauri/src/turn.sh:264"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`input.style.height` is assigned twice; the first assignment is useless","path":"src/main.ts","line":4420,"fingerprint":"javascript.lang.correctness.useless-assignment:src/main.ts:4420"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.3518,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":1.0,"check:tests_cochange":0.5263,"test_lines":3759.0,"source_lines":21372.0,"test_ratio":0.1759,"ci_files":3.0,"cochange_share":0.1316,"cochange_commits":76.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/android-release.yml","ref":".github/workflows/android-release.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/checks.yml","ref":".github/workflows/checks.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/pr-build-downloads.yml","ref":".github/workflows/pr-build-downloads.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (go test, cargo test)","ref":null,"url":null,"weight":0.0},{"kind":"ci","description":"CI runs linters (biome, clippy, rustfmt, cargo fmt)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["go test","cargo test"],"lint_commands":["biome","clippy","rustfmt","cargo fmt"]},"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":234.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":1.0,"escapes":1.0,"escapes_per_kloc":0.089},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: tsconfig.json","ref":"tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":1826.0,"other_lines":19546.0,"files_blamed":44.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":11.0,"quality:other_per_kloc":0.563,"quality:ratio":0.0,"security:ai_findings":1.0,"security:ai_per_kloc":0.548,"security:other_findings":40.0,"security:other_per_kloc":2.046,"security:ratio":0.27},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":[]}