---
name: input-mode-resolution
description: How to parse code-review arguments and resolve PR number, commit hash, pending changes, or default context into a reviewable diff
---

# Input Mode Resolution

Resolve `/mk:code-review` arguments into a diff for the review pipeline.

## Auto-Detection Rules

Parse arguments left-to-right. First match wins.

| Pattern | Mode | Example |
|---------|------|---------|
| `#\d+` | PR | `#123`, `#45` |
| GitHub PR URL | PR | `https://github.com/org/repo/pull/123` |
| `[0-9a-f]{7,40}` | Commit | `abc1234`, full SHA |
| `--pending` | Pending | explicit flag |
| `codebase` | Codebase | existing mode |
| *(none + context)* | Default | recent changes |
| *(none + no context)* | Prompt | ask user via `AskUserQuestion` |

## Resolution Commands

### PR Mode

```bash
# Extract PR number from argument
PR_NUM=$(echo "$ARG" | grep -oE '[0-9]+$')

# Fetch PR metadata
gh pr view "$PR_NUM" --json title,body,files,additions,deletions,baseRefName,headRefName

# Get the diff
gh pr diff "$PR_NUM"

# Get changed file list
gh pr diff "$PR_NUM" --name-only
```

**Context passed to reviewers:**
- PR title and description (intent)
- Base branch (what it merges into)
- Full diff
- Changed file list for scout

### Commit Mode

```bash
# Validate commit exists
git cat-file -t "$COMMIT_HASH"

# Get commit metadata
git log -1 --format="%H%n%s%n%b" "$COMMIT_HASH"

# Get the diff
git show "$COMMIT_HASH" --stat
git show "$COMMIT_HASH" -- # full diff

# Changed files
git show "$COMMIT_HASH" --name-only --format=""
```

**Context passed to reviewers:**
- Commit message (intent)
- Parent commit (what it changed from)
- Full diff
- Changed file list for scout

### Pending Mode

```bash
# Staged changes
git diff --cached

# Unstaged changes
git diff

# Combined (staged + unstaged vs HEAD)
git diff HEAD

# Changed files
git diff HEAD --name-only

# Status overview
git status --short
```

**Context passed to reviewers:**
- No commit message yet — ask user for brief intent description
- Combined diff (staged + unstaged)
- Changed file list for scout

### Default Mode

Use recent changes already in conversation context. If no changes apparent, fall back to Prompt mode.

### Prompt Mode

When no arguments and no recent context, use `AskUserQuestion`:
- Header: "Review Target"
- Question: "What would you like to review?"
- Options: Pending changes, Enter PR number, Enter commit hash, Full codebase scan, Parallel codebase audit

For PR/commit options, follow up with second `AskUserQuestion` to get the number/hash.

### Codebase Mode

Codebase modes bypass diff resolution — they scan the full codebase instead.
- `codebase` → hand off to `references/codebase-scan-workflow.md`
- `codebase parallel` → hand off to `references/parallel-review-workflow.md`

Both workflows include code quality review and final verification.

## Pipeline Handoff

After resolving the diff, pass to the review pipeline:

```
Resolved diff
  ├─ Changed files → Edge case scout
  ├─ Full diff → Stage 1 (Spec compliance, if plan exists)
  ├─ Full diff → Stage 2 (Code quality review)
  └─ Findings → Fix accepted issues and verify
```

## Error Handling

| Error | Action |
|-------|--------|
| PR not found | `gh pr view` fails → report "PR #N not found in this repo" |
| Commit not found | `git cat-file` fails → report "Commit not found — is it pushed?" |
| No pending changes | `git diff HEAD` empty → report "No pending changes to review" |
| Ambiguous input | Could be PR or commit → prefer PR (more common), note assumption |
