Repository navigation
llm(bitwarden-code-review): reply in the existing thread when re-raising a finding - #268
Conversation
…ing a finding A re-raised finding stays in the thread that first raised it, so its history reads in one place.
Claude Code validationResult: Pass Validated the Not covered: The gh-actions-side preconditions for this feature (whether Findings
Dropped after verification: three claims raised by checkers in this run were settled against direct evidence rather than reaching the report.
No finding needed a Claude Code documentation check: nothing surviving here claims a frontmatter field, settings key, or manifest value is invalid, unknown, or deprecated. What passed
Checks run
The three script checks are not run by this review. Their absence here is not a pass — read their results from the workflow's own steps. Finding 1 was posted inline on the diff; the pull request carried no existing review threads, so nothing was suppressed as a duplicate. SUGGESTED findings stay in this summary by design. |
🤖 Bitwarden Claude Code ReviewOverall Assessment: APPROVE This routes a re-raised CRITICAL or IMPORTANT finding into its original thread via The reply tool is not yet registered in Not covered: Skill review did not run — this review path cannot launch |
…plies # Conflicts: # README.md
|
|
||
| Under either local destination, format every finding exactly as below and write them all to the one file — do not post, whatever comment tools happen to be available. | ||
|
|
||
| On a GitHub pull request, a finding raised again in an existing thread goes as a reply in that thread, so its history stays in one place. Call `mcp__github_replies__add_reply_to_pull_request_comment` with the `database_id` of the thread's first comment as `commentId`, the owner and repository from the threads data's top-level `repository`, and the pull request number as `pullNumber`, which the tool requires whenever a reply has a body. The reply uses the same finding format as an inline comment. When that tool is unavailable, the thread's first comment has no `database_id`, or the reply call fails, post a new inline comment instead. |
There was a problem hiding this comment.
Details and fix
The added sentence reads "a finding raised again in an existing thread goes as a reply in that thread" — any finding, any severity, any number of times. Three other places in this changeset are narrower:
agents/bitwarden-code-reviewer/AGENT.md:196— "For ❌ CRITICAL and⚠️ IMPORTANT: May respond ONCE in existing thread if issue genuinely persists after developer claims resolution"agents/bitwarden-code-reviewer/AGENT.md:197— "For 🎨 SUGGESTED and ❓ QUESTION: Never reopen after human provides answer/decision"CHANGELOG.md:12— "A CRITICAL or IMPORTANT finding raised again on a thread whose issue persists"
A skill is loadable on its own, and AGENT.md:199 hands this skill "each validated finding" without re-stating the gate. Read standalone, this paragraph reads as permission to reply on any re-raised finding, including a 🎨 SUGGESTED thread a human already answered and closed — which AGENT.md:197 forbids outright.
Two checkers in this run (plugin validation and skill review) flagged the same gap independently.
Fix — restate the condition in the first sentence so the skill agrees with the gate that owns it:
On a GitHub pull request, a CRITICAL or IMPORTANT finding raised again on a thread whose issue persists goes as a reply in that thread, once, so its history stays in one place.Alternatively, make the paragraph explicitly mechanics-only ("When the caller has decided a finding goes in an existing thread, call …") so the severity gate has exactly one home in AGENT.md:196.
🎟️ Tracking
Pairs with bitwarden/gh-actions#960, which registers the reply server in run-code-review. Without it every re-raise falls back to a new inline comment, so this one merges first.
📔 Objective
When code-review re-raises a finding whose thread was resolved but whose issue persists, a new inline comment splits the conversation across two threads. We send the re-raise as a reply in the original thread through GitHub's MCP server, the same way #267 does for validate-ai, and fall back to a new comment when the reply tool is missing or the call fails.
🤖 AI-assisted review
A Standard review (code-review-local) ran on the branch before opening, and its one finding was addressed in this change.