Repository navigation
fix: second round of v2.4.0 release review follow-ups - #353
Conversation
Qodo review of #352: - An encrypted empty secret is only IV + tag (28 bytes); requiring 29 made the migration encrypt it again and reads return ciphertext. - Redaction: URL userinfo is a credential only as user:pass@ or a long mixed token (so ssh://git@github.com stays visible), and a base64-style value needs + or = or the 40 characters of an AWS secret key (so relative paths stay visible). - A failed plugin restores the skill-claim snapshot taken before it instead of deleting claims by install id, which another entry may share. - Sub-agent search judges "callable elsewhere" by the tools the caller can see. - buildSearchPayload takes hidden and note separately instead of checking a message prefix. - Doc comments sit above their own functions again.
PR Summary by QodoFix v2.4.0 secret handling, plugin rollback, and tool search
AI Description
Diagram
High-Level Assessment
Files changed (8)
|
Code Review by Qodo
1.
|
Token-only URL userinfo counts at 16+ characters, letters only included. Base64-style values are told apart from relative paths by Shannon entropy instead of requiring + / = or exactly 40 characters.
The entropy check alone let low-entropy AWS-style keys through. The fixtures named *_TOKEN / *_SECRET were blanked by name before the value rules ran, so the tests did not cover them.
Redaction: keep the 40-character key rule, test value rules directly
Redaction: letter-only URL tokens and unpadded base64 secrets
Summary
Second round of Qodo follow-ups for the v2.4.0 release, on top of #352. All six comments on #352 were valid and are fixed here.
Stacked on #352: merge this into
fix/release-240-reviewfirst, then #352 intodevelop.What changed
secret-crypto.ts): an encrypted empty string is only the IV and auth tag (28 bytes). fix: follow-ups from the v2.4.0 release review #352 required 29, so the migration would have encrypted it a second time, and reads would have returned ciphertext. The minimum is now 28.secret-redaction.ts):user:pass@, or as a token of 16 or more mixed letters and digits, sossh://git@github.com/org/repo.gitstays visible.+or=, or as exactly 40 mixed-case characters (an AWS secret key), so relative paths likeopt/ghidra11/support/analyzeHeadlessstay visible.plugin-install.ts): a failed entry restores the claims snapshot taken before it, instead of deleting every claim with its install id. Another entry may share that id.mcp-handler.ts):exposurePolicyReasontakes the tools the caller can see, so a tool the sub-agent can't call no longer suppresses the explanation for a hidden one.mcp-tool-defaults.ts):buildSearchPayloadtakeshiddenandnoteseparately instead of checking whether a message starts with "Tool ".mcp-handler.ts): each one sits above its own function again.Test plan
"". This test fails against fix: follow-ups from the v2.4.0 release review #352.ssh://git@github.com/org/repo.gitandopt/ghidra11/support/analyzeHeadlessare shown; a 40-characterghp_token in a URL,password=,Pwd=and an AWS-style secret are blanked.exposurePolicyReason:nullfor the main agent when the tool is callable elsewhere; theexceptexplanation when the caller can't see that tool.hiddenandnote.bunx tsc --noEmit; CLI, DB, server and shared suites have no assertion failures.Checklist
bunx tsc --noEmitpasses🤖 Generated with Claude Code