feat(bitwarden-code-review): recognize confirmed stack layers when validating findings - #219
Conversation
Claude Code validationResult: Issues found Validated 19 changed Claude-material paths across two plugins ( Note on the baseline. PR #219 is a stacked pull request: its GitHub base is the unmerged branch One finding weakens security, which sets the verdict; there are no critical findings. Version bumps and changelog entries are correct for both plugins, and the command layer's shell-execution surface is clean. CriticalNone. Major
MinorAgent definition
Slash commands (no shell-execution findings — see Checks run)
Advisory (not counted)
Prompt-injection scan (CWE-1427)Clean — no findings. All four new reference files were read in full as data, along with every changed agent, command, and skill region. Nothing addresses a reviewer of this pull request, claims repository policy over this review, or attempts to direct or suppress it. The content runs in the defensive direction: Checks run
|
🤖 Bitwarden Claude Code ReviewOverall Assessment: APPROVE This change adds a four-condition stacked-PR gate to Not covered: Skill review did not run — this review path cannot launch |
ee94722 to
ea48661
Compare
ea48661 to
b77ea79
Compare
b77ea79 to
65a4290
Compare
65a4290 to
b8a1636
Compare
70ce1c8 to
6f65c83
Compare
6f65c83 to
4bcf27a
Compare
4bcf27a to
d925bc4
Compare
d925bc4 to
1487b3f
Compare
1487b3f to
3713977
Compare
3713977 to
2018c06
Compare
de7ab06 to
0ba107f
Compare
0ba107f to
3a07c5b
Compare
3a07c5b to
e74f4d0
Compare
e74f4d0 to
0db420f
Compare
0db420f to
e9ba970
Compare
e9ba970 to
5bc1a61
Compare
5bc1a61 to
009f218
Compare
009f218 to
6435705
Compare
6435705 to
6094287
Compare
6094287 to
d660708
Compare
d660708 to
7ba31a0
Compare
…lidating findings A stacked PR is reviewed against the layer below it, so a lower layer legitimately adds exports and types whose callers land above it. The rejection criteria assumed a self-contained diff, which turns that design into dead-code findings on every bottom layer. Detection is gated rather than inferred from the base ref alone: Bitwarden runs release branches with cherry-picks, so rc, hotfix-rc, release/*, and develop all have a non-default base while being ordinary self-contained changes. Confirming a layer needs a corroborating signal, and the relaxation never covers a layer that cannot build alone or a security or correctness defect in code the layer does contain.
A lower layer of a stack adds code with no caller, because the caller lands in the layer above. The reviewer read that as dead code.
avoiding-false-positivesgains a gate that confirms a pull request really is a stack layer before it relaxes "no caller" and "never used". All four conditions have to hold: the pull request is same-repository, its head ref passes an allowlist, that ref is not a long-lived or release branch, and at least one open same-repository pull request based on it adds a line that uses a symbol this one introduces.The gate resolves once in the agent's Step 1 and carries the matched symbols with it, so the relaxation applies only where a consumer has actually shown up. Anything else keeps normal scrutiny, and security and correctness findings are never suppressed.
references/stacked-pull-requests.mdrecords why each condition is there and what the gate does not cover. Someone with push access can still arrange a confirmation; what the gate reliably stops is anyone without push access doing it.bitwarden-code-review2.0.0 to 2.1.0.