Files
gh-linus-mcmanamey-unify-2-…/commands/pr-fix-pr-review.md
2025-11-30 08:37:55 +08:00

9.0 KiB
Executable File

model, allowed-tools, argument-hint, description
model allowed-tools argument-hint description
claude-haiku-4-5-20251001 Bash(git:*), Read, Edit, Write, Task, mcp__*, mcp__ado__repo_get_pull_request_by_id, mcp__ado__repo_list_pull_request_threads, mcp__ado__repo_list_pull_request_thread_comments, mcp__ado__repo_reply_to_comment, mcp__ado__repo_resolve_comment, mcp__ado__repo_get_repo_by_name_or_id, mcp__ado__wit_add_work_item_comment
PR_ID
Address PR review feedback and update pull request

Fix PR Review Issues

Address feedback from PR review comments, make necessary code changes, and update the pull request.

Repository Configuration

  • Project: Program Unify
  • Repository ID: d3fa6f02-bfdf-428d-825c-7e7bd4e7f338
  • Repository Name: unify_2_1_dm_synapse_env_d10

What This Does

  1. Retrieves PR details and all active review comments
  2. Analyzes review feedback and identifies required changes
  3. Makes code changes to address each review comment
  4. Commits changes with descriptive message
  5. Pushes to feature branch (automatically updates PR)
  6. Replies to review threads confirming fixes
  7. Resolves review threads when appropriate

Implementation Logic

1. Get PR Information

  • Use `mcp__ado__repo_get_pull_request_by_id` with PR_ID from `$ARGUMENTS`
  • Extract source branch, target branch, and PR title
  • Validate PR is still active

2. Retrieve Review Comments

  • Use `mcp__ado__repo_list_pull_request_threads` to get all threads
  • Filter for active threads (status = "Active")
  • For each thread, use `mcp__ado__repo_list_pull_request_thread_comments` to get details
  • Display all review comments with:
    • File path and line number
    • Reviewer name
    • Comment content
    • Thread ID (for later replies)

3. Checkout Feature Branch

```bash git fetch origin git checkout git pull origin ```

4. Address Each Review Comment

Categorise review comments first:

Standard Code Quality Issues

Handle directly with Edit tool for:

  • Type hints
  • Line length violations
  • Formatting issues
  • Missing decorators
  • Import organization
  • Variable naming

Implementation:

  1. Read affected file using Read tool
  2. Analyze the feedback and determine required changes
  3. Make code changes using Edit tool
  4. Validate changes meet project standards

Complex PySpark Issues

Use pyspark-engineer agent for:

  • Performance optimisation requests
  • Partitioning strategy changes
  • Shuffle optimisation
  • Broadcast join refactoring
  • Memory management improvements
  • Medallion architecture violations
  • Complex transformation logic

Trigger criteria:

  • Review comment mentions: "performance", "optimisation", "partitioning", "shuffle", "memory", "medallion", "bronze/silver/gold layer"
  • Files affected in: `python_files/pipeline_operations/`, `python_files/silver/`, `python_files/gold/`, `python_files/utilities/session_optimiser.py`

Use Task tool to launch pyspark-engineer agent:

``` Task tool parameters:

  • subagent_type: "pyspark-engineer"

  • description: "Implement PySpark fixes for PR #[PR_ID]"

  • prompt: " Address PySpark review feedback for PR #[PR_ID]:

    Review Comment Details: [For each PySpark-related comment, include:]

    • File: [FILE_PATH]
    • Line: [LINE_NUMBER]
    • Reviewer Feedback: [COMMENT_TEXT]
    • Thread ID: [THREAD_ID]

    Implementation Requirements:

    1. Read all affected files
    2. Implement fixes following these standards:
      • Maximum line length: 240 characters
      • No blank lines inside functions
      • Proper type hints for all functions
      • Use @synapse_error_print_handler decorator
      • PySpark DataFrame operations (not SQL)
      • Suffix _sdf for all DataFrames
      • Follow medallion architecture patterns
    3. Optimize for:
      • Performance and cost-efficiency
      • Data skew handling
      • Memory management
      • Proper partitioning strategies
    4. Ensure production readiness:
      • Error handling
      • Logging with NotebookLogger
      • Idempotent operations
    5. Run quality gates:
      • Syntax validation: python3 -m py_compile
      • Linting: ruff check python_files/
      • Formatting: ruff format python_files/

    Return:

    1. List of files modified
    2. Summary of changes made
    3. Explanation of how each review comment was addressed
    4. Any additional optimisations implemented " ```

Integration:

  • pyspark-engineer will read, modify, and validate files
  • Agent will run quality gates automatically
  • You will receive summary of changes
  • Use summary for commit message and review replies

Validation for All Changes

Regardless of method (direct Edit or pyspark-engineer agent):

  • Maximum line length: 240 characters
  • No blank lines inside functions
  • Proper type hints
  • Use of `@synapse_error_print_handler` decorator
  • PySpark best practices from `.claude/rules/python_rules.md`
  • Document all fixes for commit message

5. Validate Changes

Run quality gates: ```bash

Syntax check

python3 -m py_compile

Linting

ruff check python_files/

Format

ruff format python_files/ ```

6. Commit and Push

```bash git add . git commit -m "♻️ refactor: address PR review feedback - " git push origin ```

Commit Message Format: ``` ♻️ refactor: address PR review feedback

Fixes applied:

  • :
  • :
  • ...

Review comments addressed in PR #<PR_ID> ```

7. Reply to Review Threads

For each addressed comment:

  • Use `mcp__ado__repo_reply_to_comment` to add reply: ``` Fixed in commit

    Changes made:

    ```

  • Use `mcp__ado__repo_resolve_comment` to mark thread as resolved (if appropriate)

8. Report Results

Provide summary: ``` PR Review Fixes Completed

PR: #<PR_ID> - <PR_Title> Branch: →

Review Comments Addressed: Files Modified: Commit SHA:

Quality Gates: ✓ Syntax validation passed ✓ Linting passed ✓ Code formatting applied

The PR has been updated and is ready for re-review. ```

Error Handling

No PR ID Provided

If `$ARGUMENTS` is empty:

  • Use `mcp__ado__repo_list_pull_requests_by_repo_or_project` to list open PRs
  • Display all PRs created by current user
  • Prompt user to specify PR ID

No Active Review Comments

If no active review threads found: ``` No active review comments found for PR #<PR_ID>.

The PR may already be approved or have no feedback requiring changes. Would you like me to re-run /pr-review to check current status? ```

Merge Conflicts

If `git pull` results in merge conflicts:

  1. Display conflict files
  2. Guide user through resolution:
    • Show conflicting sections
    • Suggest resolution based on context
    • Use Edit tool to resolve
  3. Complete merge commit
  4. Continue with review fixes

Quality Gate Failures

If syntax check or linting fails:

  1. Display specific errors
  2. Fix automatically if possible
  3. Re-run quality gates
  4. Only proceed to commit when all gates pass

Example Usage

Fix Review for Specific PR

```bash /pr-fix-pr-review 5642 ```

Fix Review for Latest PR

```bash /pr-fix-pr-review ``` (Will list your open PRs if ID not provided)

Best Practices

  1. Read all comments first - Understand full scope before making changes
  2. Make targeted fixes - Address each comment specifically
  3. Run quality gates - Ensure changes meet project standards
  4. Descriptive replies - Explain what was changed and why
  5. Resolve appropriately - Only resolve threads when fix is complete
  6. Test locally - Consider running relevant tests if available

Integration with /deploy-workflow

This command is automatically called by `/deploy-workflow` when:

  • `/pr-review` identifies issues requiring changes
  • The workflow needs to iterate on PR quality before merging

The workflow will loop:

  1. `/pr-review` → identifies issues (may include pyspark-engineer deep analysis)
  2. `/pr-fix-pr-review` → addresses issues
    • Standard fixes: Direct Edit tool usage
    • Complex PySpark fixes: pyspark-engineer agent handles implementation
  3. `/pr-review` → re-validates
  4. Repeat until PR is approved

PySpark-Engineer Integration:

  • Automatically triggered for performance and architecture issues
  • Ensures optimised, production-ready PySpark code
  • Maintains consistency with medallion architecture patterns
  • Validates test coverage and quality gates

Notes

  • Automatic PR Update: Pushing to source branch automatically updates the PR
  • No New PR Created: This updates the existing PR, doesn't create a new one
  • Preserves History: All review iterations are preserved in commit history
  • Thread Management: Replies and resolutions are tracked in Azure DevOps
  • Quality First: Will not commit changes that fail quality gates
  • Intelligent Delegation: Routes simple fixes to Edit tool, complex PySpark issues to specialist agent
  • Expert Optimisation: pyspark-engineer ensures performance and architecture best practices