diff --git a/.roo/rules-pr-fixer/1_workflow.xml b/.roo/rules-pr-fixer/1_workflow.xml
index fb487e5fddf..08b2f7521e9 100644
--- a/.roo/rules-pr-fixer/1_workflow.xml
+++ b/.roo/rules-pr-fixer/1_workflow.xml
@@ -55,6 +55,16 @@
+
+ After pushing fixes, resolve the review threads on GitHub that have been addressed. This provides clear signal to reviewers that their feedback was acted on.
+
+ Fetch all review threads for the PR using the GraphQL API: 'gh api graphql' with the pullRequest.reviewThreads query.
+ For each unresolved thread, determine if the corresponding feedback has been addressed by the code changes just pushed.
+ Resolve each addressed thread using the GraphQL 'resolveReviewThread' mutation with the thread's node ID.
+ Leave threads unresolved if they represent open questions, future work, or feedback that was intentionally not addressed.
+
+
+
Verify that the pushed changes resolve the issues.
@@ -68,6 +78,7 @@
All actionable review comments have been addressed.
+ Addressed review threads have been resolved on GitHub using the GraphQL API.
All tests are passing.
The PR is free of merge conflicts.
All required translations have been completed and committed (if changes affect user-facing content).
diff --git a/.roo/rules-pr-fixer/2_best_practices.xml b/.roo/rules-pr-fixer/2_best_practices.xml
index 2dc5775cedf..1fdafab3fa4 100644
--- a/.roo/rules-pr-fixer/2_best_practices.xml
+++ b/.roo/rules-pr-fixer/2_best_practices.xml
@@ -37,6 +37,16 @@
- Verify .gitignore is properly configured
+
+ Resolve Review Threads, Don't Just Check Boxes
+ After addressing review feedback and pushing changes, resolve the corresponding review threads on GitHub using the GraphQL API. This provides clear signal to reviewers that their feedback was acted on and keeps the PR review state clean.
+ Checking off internal checklists is not visible to reviewers. Resolving threads on GitHub is the standard way to communicate that feedback has been addressed, and it declutters the review interface.
+
+ Review comment asking to rename a variable was addressed
+ Fetch review threads via GraphQL, find the matching thread, resolve it with the resolveReviewThread mutation
+ Only check off an internal checkbox or leave a reply comment without resolving the thread
+
+
@@ -67,6 +77,7 @@ This ensures consistent and intelligent conflict resolution across all PRs.
- Have all review comments been addressed?
+ - Have addressed review threads been resolved on GitHub via the GraphQL API?
- Are all CI/CD checks passing?
- Is the PR free of merge conflicts?
- Have the changes been tested locally?
diff --git a/.roo/rules-pr-fixer/3_common_patterns.xml b/.roo/rules-pr-fixer/3_common_patterns.xml
index 4ef2a34b9e6..9f9e1501f58 100644
--- a/.roo/rules-pr-fixer/3_common_patterns.xml
+++ b/.roo/rules-pr-fixer/3_common_patterns.xml
@@ -106,6 +106,92 @@
git commit -m ""
+
+ Fetch all review threads for a PR using the GitHub GraphQL API. This returns each thread's node ID, resolution status, and the first comment's body/path/line for context.
+
+ -f repo= -F number=]]>
+ Parse the JSON output to get each thread's id (node ID) and isResolved status.
+ Only threads where isResolved is false need to be resolved.
+
+
+
+
+ Resolve a single review thread on GitHub using its node ID via the GraphQL API. Use this after addressing the feedback in the thread.
+
+ ]]>
+ Replace thread_node_id with the actual node ID from the fetch_review_threads query.
+ Only resolve threads whose feedback has actually been addressed in code.
+
+
+
+
+ End-to-end pattern: fetch all unresolved review threads, then resolve each one that was addressed.
+
+ Step 1: Fetch all review threads
+ -f repo= -F number=]]>
+ Step 2: For each unresolved thread (isResolved: false), check if the feedback was addressed
+ Step 3: Resolve each addressed thread individually
+ ]]>
+ Repeat step 3 for each addressed thread. Do NOT resolve threads for open questions or unaddressed feedback.
+
+
+
Safely stage files for commit while avoiding temporary files and respecting .gitignore.
diff --git a/.roo/rules-pr-fixer/4_tool_usage.xml b/.roo/rules-pr-fixer/4_tool_usage.xml
index d8ce7e8859b..93eb8ea110e 100644
--- a/.roo/rules-pr-fixer/4_tool_usage.xml
+++ b/.roo/rules-pr-fixer/4_tool_usage.xml
@@ -81,6 +81,50 @@
+
+
+ After pushing code changes that address review feedback, use the GraphQL API to resolve the corresponding review threads on GitHub.
+ First fetch all review threads: use the pullRequest.reviewThreads query to get each thread's node ID, isResolved status, and the first comment for context.
+ Only resolve threads where the feedback has actually been addressed in the pushed code changes. Do not resolve threads for open questions, future work items, or feedback that was intentionally skipped.
+ Resolve threads one at a time using the resolveReviewThread mutation with the thread's node ID.
+ If a thread is already resolved (isResolved: true) or outdated (isOutdated: true), skip it.
+
+
+
+
+
After analyzing all the problems (reviews, tests, conflicts), present a summary to the user.
@@ -152,5 +196,10 @@ Please ensure all supported languages (ca, de, es, fr, hi, id, it, ja, ko, nl, p
gh run view [RUN_ID] --repo [owner]/[repo] --log-failed
gh workflow view [WORKFLOW_NAME] --repo [owner]/[repo]
+
+
+ gh api graphql -f query='query { repository(owner:"[owner]", name:"[repo]") { pullRequest(number:[PR_NUMBER]) { reviewThreads(first:100) { nodes { id isResolved isOutdated comments(first:1) { nodes { body path line } } } } } } }'
+ gh api graphql -f query='mutation { resolveReviewThread(input:{threadId:"[THREAD_NODE_ID]"}) { thread { id isResolved } } }'
+
\ No newline at end of file
diff --git a/.roo/rules-pr-fixer/5_examples.xml b/.roo/rules-pr-fixer/5_examples.xml
index 640e6398ad8..a28b9767b8e 100644
--- a/.roo/rules-pr-fixer/5_examples.xml
+++ b/.roo/rules-pr-fixer/5_examples.xml
@@ -81,12 +81,61 @@
Monitor checks continuously until all complete. The --watch flag provides real-time updates as check statuses change.
+
+
+ Fetch all review threads to find unresolved ones that were addressed.
+
+
+
+
+
+ Parse the output to identify unresolved threads. Match each thread's comment body and file path against the changes we just pushed to determine which threads were addressed.
+
+
+
+ Resolve each addressed review thread using the GraphQL mutation.
+
+
+
+
+
+ Repeat for each thread that was addressed. Only resolve threads where the feedback was acted on. Leave threads unresolved if they are open questions or were intentionally not addressed.
+
Always gather all information before proposing a solution.
Use the GitHub CLI to get a complete picture of the PR's status.
The --watch flag on gh pr checks provides real-time monitoring of CI status.
+ After addressing review feedback, resolve the corresponding review threads on GitHub using the GraphQL API instead of just checking off checkboxes.