feat(plugins): add install-time reputation and typosquat scanning#6448
Merged
Conversation
bug-ops
enabled auto-merge (squash)
July 18, 2026 13:03
Closes #5864 Adds a local, offline-first advisory check that warns when an incoming plugin or skill name closely resembles a bundled or already-installed name (e.g. github-pr vs. legitimate git-pr), closing the parity gap with IronClaw's Community Scanner. - ReputationSource trait with a LocalTyposquatCheck implementation (hand-rolled Levenshtein similarity, no new dependency), pluggable for a future external reputation source (US-003) - Wired into all three plugin install entry points: PluginManager::add, the --plugin-url ephemeral path, and the auto-update apply path, so no entry point silently bypasses the check - New [plugins.reputation] config section (enabled, similarity_threshold, min_name_len, enforcement=warn|block), CLI --strict-reputation flag, --init wizard prompt, and a config migration step - Advisory by default (surfaces a warning, does not block); enforcement = block returns PluginError::ReputationBlocked before any files are written - Promotes the feature's spec into the canonical /specs/079-plugins/spec.md (was drafted at .local/specs/043-plugin-install-reputation-scanning/spec.md during design, per CLAUDE.md's mandatory spec registration rule)
bug-ops
force-pushed
the
feat/issue-5864/parity-zeph-plugins-lacks-inst
branch
from
July 18, 2026 13:21
6ff787f to
c37110f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
github-prvs. legitimategit-pr), closing the parity gap with IronClaw's Community ScannerReputationSourcetrait +LocalTyposquatCheck(hand-rolled Levenshtein similarity, no new runtime dependency), pluggable for a future external reputation sourcePluginManager::add, the--plugin-urlephemeral path, and the auto-update path — no entry point silently bypasses the check[plugins.reputation]config section, CLI--strict-reputationflag,--initwizard prompt, config migration stepenforcement = blockreturnsPluginError::ReputationBlockedbefore any files are written/specs/079-plugins/spec.md(§16) per this project's mandatory spec registration ruleCloses #5864
Test plan
cargo +nightly fmt --checkcargo clippy --profile ci --workspace --all-targets --features "desktop,ide,server,chat,pdf,scheduler,testing" -- -D warningscargo nextest run --config-file .github/nextest.toml --workspace --features "desktop,ide,server,chat,pdf,scheduler" --lib --bins(14346/14346 passing)RUSTFLAGS="-D warnings" RUSTDOCFLAGS="--deny rustdoc::broken_intra_doc_links" cargo doc --no-deps --workspace ...)gitleaks protect --staged— no leaksgithub-pr/git-prmotivating example and the hyphen-strip raw-equality boundary caseOk)bundled_skill_names()corpus (0 internal collisions at the shipped threshold).local/testing/in the main repo