Skip secret-scanner findings inside installed plugins instead of blocking the import - #57
Merged
ilovecrayons merged 2 commits intoSep 4, 2026
Conversation
A marketplace plugin ships its own test suite, and a secret-shaped string in one of those fixtures refused the whole claude profile import. The override the dashboard offered carried the plugin version in its path, so it died on that plugin's next update. A scanner finding under a harness's vendored roots - claude's plugins/cache/ - now drops that one file and reports it as vendored-secret, the way a symlink escape is already skipped rather than made fatal. The flagged bytes still never leave the machine, a finding anywhere the user writes still refuses the push, and --allow-secret still carries a vendored file when the user wants it. The rule matches the plugins/cache/ prefix alone, so a version bump, a new plugin, or a new marketplace changes nothing. The dashboard row names them as third-party plugin content and keeps the harness importable.
The review found plugins/marketplaces/ left out: it is the same third-party content as plugins/cache/, holds the plugin sources inline, and is the larger of the two on a stock install, so a fixture there still blocked the whole import. Both trees are vendored roots now, and isVendored requires a segment after the root so a file named plugins/cache is not swept in. The rest is accuracy. A vendored detail carries its location beside the rule instead of trailing after the sentence. aether profile push prints the exact --allow-secret command next to each plugin skip, as docs/harnesses.md promises. The dashboard row says "at least N" when the gateway capped the exclusion list, and names the two directories rather than claiming the user did not write what is in them. Three stale comments and the quickstart and gateway docs no longer state the old absolute refuse-the-push rule. Tests: both trees end to end, the fixture's own bytes absent from the wire, and codex and opencode still refusing the same path.
not-varram
deleted the
varram/sup-74-profile-import-plugin-fixtures-scanner
branch
September 4, 2026 04:18
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
Closes SUP-74. A secret-shaped string inside an installed plugin's test fixture (for example
plugins/cache/<marketplace>/<plugin>/<version>/tests/...) blocked the whole claude profile import, and the only override carried the plugin version, so it had to be redone on every plugin update.The scanner is unchanged. A finding inside a harness's vendored roots (
plugins/cache/andplugins/marketplaces/for claude) is now its own exclusion reason,vendored-secret: that file is dropped from the push, reported as third-party content with its rule and location, and the rest of the profile imports. A finding in a file the user wrote still refuses the push with the same--allow-secretadvice, and--allow-secretstill carries a vendored file when the user wants it. The CLI prints the exact override command under a vendored skip. Other harnesses have no vendored roots and keep blocking.Checked against a real plugin cache (shapes only): versions are semver,
unknown, or content hashes, several co-installed at once, andplugins/marketplaces/is a larger clone of the marketplace repo with inline plugin sources; both trees are covered.Validation
--allow-secretstill carries a vendored file; codex and opencode still block; the gateway end-to-end (profile.previewthenprofile.push) asserts the fixture's bytes are absent from the wire.make fmt-check vet lint test test-scripts public-auditpass;cd web && bun run typecheck && bun run test(512 tests) pass.🤖 Generated with Claude Code
https://claude.ai/code/session_019irxg6aWWKmn2w3QsJR5CJ