{"repo":"NousResearch/hermes-agent","public_id":"89610","display_label":"Security scanner incorrectly flagging test fixture paths","summary":"The plugin_guard security scanner was scanning test directories, causing plugins with adversarial security fixtures in test trees to be unconditionally blocked. These members address scoping the scanner away from test paths and improving block reason reporting.","subsystem":"agent","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":110218,"merged_at":"2026-09-13T21:43:05+00:00"},"resolution":{"state":"resolved","by":"pr-110218"},"freshness":{"state":"verified","last_verified_at":"2026-09-13T21:43:05+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":89610,"pr_number":110218,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-13T21:43:05+00:00"},{"issue_number":93927,"pr_number":110218,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-13T21:43:05+00:00"},{"issue_number":109391,"pr_number":110218,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-13T21:43:05+00:00"}],"members":[{"kind":"issue","number":89610,"title":"plugin_guard scans tests/, so any plugin with adversarial security fixtures is unconditionally blocked","url":null,"state":"closed"},{"kind":"pr","number":89613,"title":"fix(plugins): stop the security scanner from reading test trees","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"1e76efbe28ef","number":0},{"kind":"pr","value":"#110218","number":110218}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":110218,"title":"plugin_guard: test trees no longer force a DANGEROUS verdict; block reason names the critical rule (#93927, #109391, salvage #89613 #109420)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_plugin_guard.py","tests/tools/test_plugin_guard_block_reason.py","tools/plugin_guard.py","website/docs/user-guide/features/plugins.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}