1---2name: review-pr3description: Review a colleague's PR/MR with structured analysis - commit format, pipelines, Jira context, code analysis, optional local tests. Auto-approves or posts feedback. Use when user says "review this PR", "review MR X", "review merge request".4---56# Review PR/MR78## Inputs910| Input | Type | Default | Purpose |11|-------|------|---------|---------|12| `mr_id` | int | - | GitLab MR ID |13| `url` | string | - | Full GitLab MR URL |14| `issue_key` | string | - | Jira key; will search for MR |15| `repo_name` | string | - | Config repo name |16| `run_tests` | bool | false | Checkout branch and run local tests |17| `auto_merge` | bool | false | Auto-merge if approved |18| `slack_format` | bool | false | Slack link format |1920## Workflow2122### 1. Bootstrap23- `persona_load("developer")`24- Resolve repo from `mr_id`, `url`, `issue_key`, or `repo_name` via config25- If no `mr_id`: `gitlab_mr_list(project, state=opened)` and extract MR ID from results26- `check_known_issues("gitlab_mr_view")`2728### 2. Gather Context29- `gitlab_mr_view(project, mr_id)`30- `gitlab_commit_list(project, mr_id, limit=20)`31- `gitlab_mr_diff(project, mr_id)` — truncate if >3000 lines32- `gitlab_ci_status(project)` — pipeline status33- If pipeline failed: `gitlab_ci_trace(project, job_id)` for trace34- `gitlab_mr_approvers(project, mr_id)`35- `persona_load("release")` → `konflux_list_pipelines(namespace)` (optional)36- Extract Jira key from MR title; `jira_view_issue(jira_key)` if found3738### 3. Knowledge & Analysis39- `code_search(query=changed_file + " implementation pattern", project, limit=5)`40- `knowledge_query(project, section="architecture.key_modules")`41- `knowledge_query(project, section="patterns.coding")`42- `check_known_issues("", error_text=diff_preview)`4344### 4. Validate45- Commit format: validate against `config.json` commit_format via `validate_commit_message`46- Description: check for Jira link, adequate content47- Code analysis: security (eval, exec, hardcoded secrets, SQL injection), memory leaks, race conditions, missing tests, docs4849### 5. Local Tests (if run_tests)50- Extract branch from MR → `git_fetch`, `git_checkout` (or fetch MR ref)51- `docker_compose_status`, `docker_compose_up` if needed52- `make_target(repo, "migrations")`, `make_target(repo, "data")`53- Run pytest in container via `docker_exec`5455### 6. Decide & Act56- Blockers: security issues, test failures, pipeline failures, format issues, >3 code issues57- If blockers: `gitlab_mr_comment(project, mr_id, feedback_message)`58- If no blockers: `gitlab_mr_approve(project, mr_id)`5960### 7. Notify & Jira61- `persona_load("slack")` → `slack_dm_gitlab_user(gitlab_username, notification_type="approval"|"feedback", text=...)`62- `jira_add_comment(jira_key, "MR !X reviewed. Action: approve|request_changes. Reason: ...")`63- `jira_attach_session(issue_key, include_transcript=false)`6465### 8. Memory & Discovered Work66- `memory_session_log("Reviewed MR !X (approve|request_changes)", "Author: Y")`67- Track in `learned/teammate_preferences` — reviews_given, approvals, feedback_given68- If code issues: `add_discovered_work_safe` for tech debt, missing tests, etc.6970### 9. Failure Learning71- "no such host" → `learn_tool_fix("gitlab_mr_view", "no such host", "VPN", "vpn_connect()")`72- "unauthorized" → `learn_tool_fix("gitlab_mr_view", "unauthorized", "Token", "Check config.json")`7374## Key MCP Tools7576- `persona_load`, `gitlab_mr_view`, `gitlab_mr_list`, `gitlab_commit_list`, `gitlab_mr_diff`, `gitlab_ci_status`, `gitlab_ci_trace`, `gitlab_mr_approvers`, `gitlab_mr_comment`, `gitlab_mr_approve`77- `jira_view_issue`, `jira_add_comment`, `jira_attach_session`78- `git_fetch`, `git_checkout`, `docker_compose_status`, `docker_compose_up`, `make_target`, `docker_exec`79- `code_search`, `knowledge_query`, `check_known_issues`, `learn_tool_fix`80- `slack_dm_gitlab_user`, `memory_session_log`, `skill_run`