Working with Pull Requests
Listen to Episode 6: Working with Pull Requests - a conversational audio overview of this chapter. Listen before reading to preview the concepts, or after to reinforce what you learned.
Creating, Reviewing, and Merging Pull Requests with a Screen Reader
Pull requests are where your work becomes a contribution. This guide takes you through the full pull request workflow - from opening one to participating in review - using only your keyboard and screen reader.
Screen reader note - New Files Changed Experience: This guide uses GitHub's improved Files Changed experience, which adds proper ARIA landmark structure to the Files Changed tab, including the file tree and diff navigation. This feature may already be active for your account - it has been broadly rolled out and may no longer appear as a Feature Preview toggle at all.
To verify: Activate the User Menu button (top-right of any GitHub page) → activate "Feature preview" → scan the list for "New Files Changed Experience":
- If listed and the toggle announces "Pressed" (or "Disable") - already enabled, no action needed
- If listed but not Pressed (or "Enable") - activate the toggle to enable it
- If not listed at all - the feature has graduated to the standard interface; it is active automatically
Full step-by-step instructions with per-screen-reader commands are in Pre-Workshop Setup, Step 4.
Browse vs Focus Mode (NVDA): Use Browse Mode (the default) for reading PR conversations, navigating headings, and reviewing diffs. Switch to Focus Mode (
NVDA+Space) only when you need to type in comment boxes or search fields. Switch back to Browse Mode to resume navigation. Maximize your browser window for consistent landmark layout.
Workshop Recommendation (Chapter 5)
Chapter 5 is the first PR-validated chapter where students convert issue work into merge-ready contributions.
- Challenge count: 3
- Time per challenge: under 10 minutes each
- Evidence: PR metadata, bot checks, and merged issue linkage
- Pattern: small change -> linked PR -> green checks
Chapter 5 Challenge Set
- Create one small branch change - edit the file specified in your claimed issue.
- Open a linked PR - use the PR template and include
Closes #XX. - Pass required checks - respond to bot feedback until all required checks pass.
Branch guidance for Chapter 5: This is the first chapter where you edit files and create branches. Use one of these two paths:
- Web editor (recommended for beginners): When you edit a file on GitHub.com and click "Propose changes," GitHub creates a branch for you automatically. Name it
fix/yourname-issueXX(for example,fix/maria-issue42).- Local Git (if you cloned in Block 0): Create a feature branch with
git checkout -b fix/yourname-issueXXfrommain. See the "Local Git Alternative" section below for the full command sequence.Do NOT use your
username-practicebranch yet. The practice branch is for Chapter 11 and beyond when you work locally with Git and VS Code. For Chapter 5, use a short-lived feature branch as described above.
Challenge 5.1 Step-by-Step: Create One Small Branch Change
Goal: Edit the file referenced in the issue you claimed in Chapter 4 (Challenge 4.2).
Where you are working: the learning-room repository on GitHub.com, using the web editor.
Before you start: Open the issue you claimed in Chapter 4.2 and note which file needs editing. The issue description tells you the file path and what to fix. The practice files are:
The following table summarizes the practice files in the learning-room, what each file contains, and the type of issues to look for.
| File | What it contains | What to fix |
|---|---|---|
docs/welcome.md |
Introduction to open source contribution | Three [TODO] sections where content is missing |
docs/keyboard-shortcuts.md |
Screen reader shortcut reference tables | Intentional errors in shortcut references |
docs/setup-guide.md |
Getting-started instructions | Broken links and incomplete steps |
Steps using the web editor:
- In the
learning-roomrepository, navigate to the file specified in your issue. Use the file tree or the "Go to file" button (Tkeyboard shortcut). - Open the file and activate the pencil icon (Edit this file) button.
- Screen reader users (NVDA/JAWS): Press
Bto navigate buttons, find "Edit this file," and pressEnter. - VoiceOver users: Press
VO+U, open Buttons rotor, find "Edit this file," and pressVO+Space.
- Screen reader users (NVDA/JAWS): Press
- The file opens in the web editor. Make your change. For example:
- If your issue is about a
[TODO]section: replace the[TODO]placeholder with the requested content (one to three sentences). - If your issue is about a broken link: find and correct the URL.
- If your issue is about a shortcut error: find and fix the incorrect value in the table.
- If your issue is about a
- Keep your change small and focused. Edit only what the issue asks for.
Proposing your changes (this creates your branch):
- After editing, activate the Commit changes button (green button above the editor).
- A dialog appears. In the Branch name field, type:
fix/yourname-issueXX(replaceyournamewith your GitHub username, andXXwith the issue number). - Select Create a new branch for this commit and start a pull request.
- Activate Propose changes.
You are done when: GitHub shows the "Open a pull request" page. Your file change is saved on a new branch. Continue to Challenge 5.2.
Challenge 5.2 Step-by-Step: Open a Linked PR
Goal: Open a pull request that links to your challenge issue so it closes automatically on merge.
Where you are working: the "Open a pull request" page that appeared after Challenge 5.1 (or navigate to Pull Requests tab and select "Compare and pull request").
- In the Title field, write a short description of your change. Examples:
- "Complete the Who Can Contribute section in welcome.md"
- "Fix broken accessibility settings link in setup-guide.md"
- "Correct NVDA modifier key in keyboard-shortcuts.md"
- In the Body field, use the PR template if one is provided. Make sure to include:
- A summary of what you changed and why (at least 50 characters).
- The line
Closes #XXwhereXXis the number of your assigned Chapter 5 challenge issue (not the issue you claimed in Chapter 4, unless they are the same). - If you are also closing the issue you claimed in Chapter 4, add that reference too:
Also addresses #YY.
- Verify the base branch is
mainand the compare branch is yourfix/yourname-issueXXbranch. - Activate the Create pull request button.
You are done when: Your PR appears in the Pull Requests list. The bot will begin running checks within about 30 seconds. Continue to Challenge 5.3.
Challenge 5.3 Step-by-Step: Pass Required Checks
Goal: Read bot feedback, fix any issues it finds, and get all required checks to pass.
Where you are working: the Conversation tab of your open pull request.
- Wait approximately 30 seconds after opening the PR. The bot posts a validation comment.
- Read the bot comment carefully. It checks:
- That your PR references an issue with
Closes #XX. - That your PR description is detailed enough (50+ characters).
- That your changed files are in the
learning-room/folder. - Accessibility checks: heading hierarchy, descriptive link text, valid alt text.
- That your PR references an issue with
- If the bot reports failures:
- Open the changed file from the Files changed tab.
- Activate the pencil icon to edit the file again (directly on your branch).
- Fix the issue the bot identified.
- Commit the fix to the same branch (the bot re-runs automatically on each push).
- Repeat step 3 until all required checks show a green checkmark.
- When all checks pass, request a review from a peer or the facilitator.
You are done when: The bot comment shows all required checks passed (green checkmarks). Your PR is ready for human review and merge.
Expected Outcomes
- Student opens a focused PR that maps to one issue.
- Student uses
Closes #XXcorrectly. - Student can interpret bot feedback and improve the PR.
If You Get Stuck
- Confirm your PR includes
Closes #XXin title or body. - Check that changed files are only in
learning-room/. - Open the bot validation comment and resolve one required check at a time.
- If checks still fail, ask for peer or facilitator review with the exact error message.
Learning Moment
A great PR is small, linked to an issue, and easy to review. Faster feedback builds confidence and momentum.
Why this feels achievable
- Scope is intentionally small.
- Feedback is immediate and specific.
- Success is visible (green checks + closed issue).
Local Git Alternative: The Full Branch-Edit-PR Workflow
If you cloned the learning-room in Block 0 and prefer working locally
The web editor workflow (pencil button, "Propose changes") is the primary path taught in this chapter. If you cloned the Learning Room in Block 0 and are comfortable in a terminal, here is the local equivalent. This is the same workflow covered in depth in Chapter 11: Git and Source Control.
Step 1 - Sync and create a feature branch:
cd ~/Documents/learning-room
git checkout main
git pull origin main
git checkout -b fix/welcome-todos
Step 2 - Edit the file in your editor:
Open the file in VS Code or your preferred editor:
code docs/welcome.md
Make your changes and save the file.
Step 3 - Stage, commit, and push:
git add docs/welcome.md
git commit -m "Complete TODO sections in welcome.md"
git push -u origin fix/welcome-todos
Step 4 - Open a pull request:
gh pr create --title "Complete TODO sections in welcome.md" \
--body "Closes #42" --base main
Or open interactively:
gh pr create
The GitHub CLI walks you through title, body, base branch, and reviewers.
What happens next is identical: the Learning Room bot validates your PR, posts feedback, and you request a human reviewer - the same as the web workflow.
Tip: You can also use your
username-practicebranch instead of creating a feature branch. Switch to it withgit checkout username-practice(replacingusernamewith your GitHub username, all lowercase).
What Is a Pull Request?
A pull request (PR) is a proposal to merge changes from one branch into another. When you have:
- Edited a file directly on GitHub (web editor)
- Made changes in your fork
- Made changes on a feature branch
...you open a PR to request that those changes be merged into the target branch (usually main).
A PR shows:
- What changed - a diff of every file
- Why it changed - your PR description
- Conversation - comments, reviews, and discussion
- Status - automated checks (CI/CD) and review status
Learning Room connection: In the Learning Room repository, every hands-on contribution follows this pattern. For example, when you complete Challenge 3 (filling the
[TODO]sections indocs/welcome.md), you open a PR that shows your added content as green+lines in the diff, your description explains which TODOs you completed and why, and the validation bot posts automated check results. The scenarios in this chapter use Learning Room files so you can follow along with real content.
Navigating to Pull Requests
Visual / mouse users
Click the Pull requests tab in the repository navigation bar. The tab shows the count of open PRs. Click any PR title to open it.
Screen reader users (NVDA / JAWS - Windows)
D→ "Repository navigation" landmarkKto navigate tabs → "Pull requests, [N] open"Enterto open
Screen reader users (VoiceOver - macOS)
VO+U→ Landmarks → navigate to "Repository navigation"- Quick Nav
KorVO+Rightto navigate tabs → "Pull requests" VO+Spaceto open
From a PR notification
If you received a notification about a PR, follow the notification link directly to the PR page.
GitHub CLI (gh) alternative
List and view pull requests from your terminal:
# List open PRs
gh pr list
# Filter by review status
gh pr list --search "review-requested:@me"
# View a specific PR in the terminal
gh pr view 42
# Open a PR in your browser
gh pr view 42 --web
Setup: Install the GitHub CLI from cli.github.com and authenticate with gh auth login. See Appendix D for details.
The Pull Request List Page
The PR list works identically to the Issues list:
3to navigate PR titles (they are h3 headings)Ito navigate list itemsForE/Shift+Eto reach the search/filter field- Filters work the same as Issues:
is:open,author:@me,review-requested:@me, etc.
Screen reader note - PR list semantics: The PR list does not have individual ARIA item containers with per-item semantics. To read a PR's full detail (title, author, labels, status), you must navigate sequentially with
Tabor arrow keys through the elements for each item. Starting from a PR title link,Tabforward to find the author, labels, and review status for that same PR before moving to the next title.Hovercards: Hovercards appear when you hover over usernames and links in the PR list, adding extra verbosity. To reduce this noise: go to your GitHub Profile → Accessibility settings → disable "Show link previews" and similar hover triggers. This makes sequential navigation significantly less cluttered.
Anatomy of a Pull Request Page
A PR page has three main tabs:
[PR title - h1]
[State badge: Open / Merged / Closed / Draft]
[Author, base ← compare, timestamp]
[ Conversation ] [ Commits ] [ Files changed ]
↑ tab bar landmark
─── Conversation Tab ────────────────────────────────────────
[PR description - authored by opener]
[Status checks summary]
[Activity / review thread]
[Review comment - h3]
[Line comments - nested]
[Merge controls (for maintainers)]
[Comment box]
─── Commits Tab ─────────────────────────────────────────────
[List of commits, grouped by date - h3 for dates]
[Each commit as a list item with SHA, message, author]
─── Files Changed Tab ────────────────────────────────────────
[File filter search]
[File tree (left panel)]
[Diff for each file - each file is a heading]
[Line-level comment threads within diffs]
Navigating the PR Tab Bar
The Conversation, Commits, and Files changed tabs are in a “Pull request navigation tabs” landmark.
Visual / mouse users
The three tabs - Conversation, Commits, and Files changed - appear just below the PR title. Click the tab you want. The active tab is underlined. The count on Files changed shows how many files were modified.
Screen reader users (NVDA / JAWS)
- Press
D→ navigate to “Pull request navigation tabs” - Press
←or→arrow keys to move between tab options - Press
Enterto activate a tab
Screen reader users (VoiceOver)
VO+U→ Landmarks → “Pull request navigation tabs”VO+Rightto move between tabsVO+Spaceto activate
Each tab link reads with its name and the count: "Files changed, 3 files changed."
Reading the Conversation Tab
PR Description
2→ navigate to "Description" h2 heading↓to read the description- Markdown renders as semantic HTML - headings, lists, code blocks are fully accessible
Status Checks Section
Below the description, the status checks summary shows whether automated tests passed. Look for:
- “All checks have passed” / “Some checks failed” / “Checks pending”
- A “Show all checks” button or link
Visual / mouse users
Status checks appear as a coloured banner below the PR description - green tick for passed, red X for failed, yellow spinner for running. Click Show all checks to expand the full list. Click a check name to go to its run log.
Screen reader users (NVDA / JAWS - Windows)
- Press
Hor2to find the "Checks" or "Status checks" heading - Press
Kto navigate links for individual check names - Press
Enteron a check to see its details
Screen reader users (VoiceOver - macOS)
- Quick Nav
HorVO+Cmd+Hto jump to the "Checks" or "Status checks" heading - Quick Nav
Kto navigate check name links VO+Spaceon a check to see its details
See GitHub Actions & Workflows for full guidance on reading status checks.
Review Comments
Each review comment thread is an h3. Navigate with 3:
- Hear the reviewer's username, timestamp, and their review verdict ("approved" or "requested changes")
- Then the body of their review comment
- Then any replies to that comment
To reply to a review comment:
Step 1: Navigate to the comment (3)
Step 2: Tab to "Reply…" link/button
Step 3: The reply text area appears - Focus Mode → type your reply
Step 4: Ctrl+Enter to submit
Reading the Commits Tab
Step 1: Navigate to Commits tab (D → PR tabs → Enter)
Step 2: 3 to navigate date group headings ("Commits on April 20")
Step 3: I to navigate individual commits within a date group
Step 4: Each commit: SHA link, message, author, [Verified] badge if signed
Step 5: Enter on a commit to open its diff
Reading the Files Changed Tab
This is the core of a code review. You will read diffs - the before/after state of every file that changed.
Note: This guide uses GitHub's improved Files Changed experience. If your Files Changed tab doesn't match these steps, refer to the screen reader verification steps in the prerequisite callout at the top of this chapter - the feature may need to be enabled in Feature Preview, or it may already be active for your account with no action required.
File Tree (left panel)
The file tree lists every changed file. Use it to jump directly to a specific file’s diff.
Visual / mouse users
The file tree panel is on the left side of the Files Changed tab. It lists every modified file. Click a filename to scroll the diff view to that file. You can collapse or expand folders by clicking the arrow. Type in the filter box at the top to narrow the file list.
Screen reader users (NVDA / JAWS - Windows)
D→ navigate to "File tree" region↑/↓to navigate the file listEnterto jump to that file's diff
Screen reader users (VoiceOver - macOS)
VO+U→ Landmarks → navigate to "File tree" regionVO+Downto move through the file listVO+Spaceto jump to that file's diff
The Diff for a File
Each changed file has:
- A file heading (its path, e.g., "src/index.html") - navigable with
3orH - A stats line ("24 additions, 6 deletions")
- The diff content - a table where each row is one line of code
Lines in a diff are read as
+ Added line- line that was added- Removed line- line that was removedContext line- unchanged line shown for context
Navigating the diff with a screen reader
Visual / mouse users
Each file’s diff shows added lines in green and removed lines in red. Scroll the page to read through changes. Unchanged context lines are shown in white/grey. Collapse a file’s diff by clicking the arrow next to its filename heading. Use Ctrl+F (browser Find) to search for specific text within visible diffs.
Screen reader users (NVDA / JAWS)
Tto jump to the next diff table- Switch to Focus Mode:
Insert+Space(NVDA) orInsert+Z(JAWS) ↓to move through lines one by oneCtrl+Alt+→to read across columns (line number | change type | content)- The screen reader reads: “+ Add accessible name to submit button”
Screen reader users (VoiceOver)
TorVO+U→ Tables → select the diff tableVO+Shift+Downto enter the tableVO+Right/Leftfor columns,VO+Up/Downfor rows
Placing an inline comment on a diff line
Visual / mouse users
Hover over any line in the diff - a blue + button appears on the left margin. Click it to open a comment box for that line. Type your comment, then click Add single comment (posts immediately) or Start a review (batches the comment with others). To select a range of lines, click and drag across the line numbers on the left.
Screen reader users (NVDA / JAWS - Windows)
- Navigate to the specific line in the diff (using the table navigation above)
- While focused on that line, a comment button appears - press
EnterorSpaceto activate it - A comment box opens below the line
- Focus Mode → type your comment
Tabto Add single comment button (instant comment) OR Start a review (to batch comments)
Multi-line comment (Windows)
- Focus the first line you want to comment on
- Press
Shift+↓to extend the selection to additional lines - A comment button appears - activate it
- The comment applies to the full range of selected lines
Screen reader users (VoiceOver - macOS)
- Navigate to the specific line in the diff (using the table navigation above)
- While focused on that line,
VO+Spaceon the comment button that appears - A comment box opens below the line
VO+Shift+Downto interact with the text area, then type your commentVO+Shift+Upto stop interacting, thenTabto Add single comment andVO+Space
Multi-line comment (macOS)
- Focus the first line and
Shift+↓to extend the selection VO+Spaceon the comment button that appears- The comment applies to the full range of selected lines
Viewing comments within the diff
Inline comments appear as expandable threads within the diff table. Navigate to them with 3 (they are h3 headings). Each thread shows the comment, any replies, and a "Reply" button.
Opening a Pull Request
From the web editor workflow (editing a file on GitHub)
- You edited a file → GitHub showed a "Propose changes" form
- You named your branch and activated "Propose changes"
- GitHub redirected you to the "Open a pull request" page
From a fork or feature branch
Visual / mouse users
- Navigate to the repository on GitHub
- If you recently pushed, a yellow banner “Compare & pull request” appears at the top - click it
- If no banner appears: click the Pull requests tab → click the green New pull request button
- Use the branch dropdowns to choose your base branch (what to merge into) and your compare branch (your changes)
- Click Create pull request
Screen reader users (NVDA / JAWS - Windows)
- Navigate to the repository
- A "Compare & pull request" banner may appear (if you recently pushed) - activate it
- OR: Navigate to Pull Requests tab → "New pull request"
- Choose your base branch (what to merge into) and compare branch (your changes)
Screen reader users (VoiceOver - macOS)
- Navigate to the repository
- Check for a "Compare & pull request" banner - Quick Nav
Bto find andVO+Spaceto activate it - OR: navigate to Pull Requests tab (
VO+U→ Landmarks → Repository navigation) → Quick NavBfor "New pull request" - Use the branch dropdowns (
VO+Spaceto open, arrow keys to select) to choose base and compare branches
Filling out the PR form
Title field
Step 1: F to navigate to the title field
Step 2: Focus Mode → type a descriptive title
Step 3: Good: "Add keyboard navigation for carousel component"
Step 4: Bad: "Fix bugs"
Description field
Step 1: Tab to the body text area
Step 2: Focus Mode → type using the PR template (if provided)
If no template, use this structure:
## Summary
What does this PR change and why?
## Changes
- Added `aria-label` to the search button
- Fixed keyboard trap in the modal dialog
- Replaced `<div>` with `<button>` for the dismiss control
## Related Issues
Closes #42
## Testing
- Tested with NVDA + Chrome on Windows 11
- Tested with VoiceOver + Safari on macOS Sonoma
- Keyboard-only navigation verified
## Screenshots / recordings
[Include if relevant - with descriptive alt text for any images]
Learning Room example: In the Learning Room repository, a PR template is provided for you. Here is what a completed PR looks like for Challenge 3 (Complete Welcome Guide):
## Description Completed three [TODO] sections in docs/welcome.md: - Added paragraph about contributors from all backgrounds - Added guidance on evaluating issues before starting - Added note about GitHub profile and portfolio impact ## Related Issue Closes #12 ## Type of change - [x] Documentation update ## Accessibility checklist - [x] Heading levels follow a logical hierarchy - [x] Link text is descriptive (no "click here") - [x] No images added (or alt text provided)The
Closes #12line tells GitHub to automatically close issue 12 when this PR merges. The validation bot checks that this line is present and that your description is at least 50 characters long.
Setting a Draft PR
If your work is not finished, open as a Draft:
- After filling in the form, find the dropdown arrow next to "Create pull request"
- Select "Create draft pull request"
- This signals to reviewers that it is not ready for formal review yet
Draft Pull Requests - Full Lifecycle
A draft pull request is a PR explicitly marked as a work in progress. It is visible to the team, can receive comments, and runs CI - but is blocked from being merged until you mark it ready.
When to use a draft
- You want to show your approach and get early feedback before finishing
- You need CI to run but don't want accidental merges
- You are working across multiple days and want your progress visible
- You want to pair with a collaborator on the work
What a draft PR does differently
- The merge button is disabled - even an authorized maintainer cannot merge a draft
- The PR header shows a grey "Draft" badge instead of the green "Open" badge
- Reviewers are not auto-notified (no review requests are sent until ready)
- CI workflows still run normally
Mark a draft ready for review
- Open the PR
- Navigate to the "Reviewers" sidebar or scroll to bottom of the Conversation tab
- Find and activate the "Ready for review" button
- The draft badge changes to "Open" and reviewers are notified
Screen reader path
Scroll to bottom of Conversation tab
→ B to navigate buttons
→ "Ready for review" button → Enter
→ Confirmation: PR status changes to Open
Convert an open PR to draft (after opening)
- In the right sidebar, find the "Reviewers" section
- Look for the "Convert to draft" link (below the review status)
- Confirm in the dialog - this removes merge eligibility until you mark it ready again
GitHub CLI (gh) alternative - draft PR lifecycle
Manage draft PRs from your terminal:
# Create a draft PR
gh pr create --draft --title "WIP: Add carousel keyboard nav"
# Mark a draft ready for review
gh pr ready 42
# Check PR status (shows draft state)
gh pr view 42
# List only draft PRs
gh pr list --draft
Requesting reviewers
From the sidebar Reviewers section:
- Navigate to "Reviewers" heading (
3orH) - Activate the gear button
- Type a username in the search field
- Select from the dropdown
- Escape to save
Why some reviews are requested automatically: A file called
CODEOWNERSin many repositories maps file paths to specific people or teams. When your PR touches a file covered by a CODEOWNERS rule, GitHub automatically adds those people as required reviewers - you'll see them appear in the Reviewers sidebar without you adding them. You cannot remove a CODEOWNERS-required reviewer. If a required reviewer hasn't responded, reach out to them directly or leave a comment on the PR.
Submitting a Review
When you are asked to review a PR, you have three options:
- Comment - leave feedback without a verdict; does not block merging
- Approve - signal you are satisfied; often required before merge
- Request changes - indicate changes must be addressed; blocks merge until resolved
Starting a review
On the Files Changed tab, when you add inline comments, choose "Start a review" instead of "Add single comment." This batches all your comments into one review submission.
Completing and submitting a review
After adding your inline comments via “Start a review,” you must submit the review to notify the PR author. The review is pending until you submit it.
Visual / mouse users
- Look for the Finish your review button in the top-right area of the Files Changed tab (it shows the number of pending comments)
- Click it - a popover appears with a summary text area and three radio buttons: Comment, Approve, Request changes
- Optionally type a summary comment
- Select your verdict by clicking the radio button
- Click Submit review
Screen reader users (NVDA / JAWS)
- Press
1to go to the h1 (PR title) - Press
B(orTab) to navigate to the “Submit review” button and activate it (Enter/Space) - A “Submit review” dialog/panel appears
- Switch to Focus Mode (
NVDA+Space) if prompted to type - Optionally type a summary comment in the “markdown value” textbox
Tabto the “Review Event” radio group- Use
↑/↓to select one of:- Comment - general feedback, does not block merge
- Approve - you are satisfied; signals merge readiness
- Request changes - must be addressed before merge
Tabto the “Submit review” button and pressEnter
Screen reader users (VoiceOver - macOS)
- Quick Nav
HorVO+Cmd+Hto navigate to the PR title (h1) - Quick Nav
BorTabto find the "Submit review" button →VO+Space - A "Submit review" dialog/panel appears
VO+Shift+Downto interact with the summary text area, type an optional commentVO+Shift+Upto stop interacting, thenTabto the "Review Event" radio groupVO+Left/Rightor arrow keys to select:- Comment - general feedback, does not block merge
- Approve - you are satisfied; signals merge readiness
- Request changes - must be addressed before merge
Tabto the "Submit review" button →VO+Space
GitHub CLI (gh) alternative - reviewing a PR
Review a pull request from your terminal:
# View the PR diff in your terminal
gh pr diff 42
# Approve a PR
gh pr review 42 --approve
# Approve with a comment
gh pr review 42 --approve --body "Looks good - heading hierarchy is correct."
# Request changes
gh pr review 42 --request-changes --body "The alt text on line 34 needs to describe the image content."
# Leave a comment-only review (no verdict)
gh pr review 42 --comment --body "A few suggestions - see inline comments."
Note: gh pr diff outputs the full diff to your terminal, which a screen reader can read line by line. For inline comments on specific lines, use the web interface or VS Code.
GitHub shortcuts for pull requests
These are the GitHub built-in shortcuts for PR pages. Enable Focus Mode first (NVDA: NVDA+Space, JAWS: Insert+Z) before using single-key shortcuts.
On the PR list page
| Shortcut | Action |
|---|---|
G P |
Jump to the Pull Requests tab from anywhere in the repo |
C |
Create a new pull request |
Ctrl+/ (Win) or Cmd+/ (Mac) |
Focus the PR search bar |
Shortcut note: For G P, press G, release it, then press P (two sequential key presses, not simultaneous).
On an open pull request
| Shortcut | Action |
|---|---|
? |
Show all shortcuts for this page |
Q |
Request a reviewer |
M |
Set a milestone |
L |
Apply a label |
A |
Set an assignee |
R |
Quote selected text in your reply |
Ctrl+Shift+P |
Toggle Write and Preview tabs in the comment box |
Ctrl+Enter |
Submit comment from inside the text area |
On the Files Changed tab
| Shortcut | Action |
|---|---|
T |
Jump to the "Filter changed files" field |
C |
Open the commits dropdown to filter which commits are shown |
Ctrl+G (Win) or Cmd+G (Mac) |
Insert a code suggestion block around selected code |
Ctrl+Shift+Enter (Win) or Cmd+Shift+Enter (Mac) |
Submit a review comment |
For the full shortcut system, see Screen Reader Cheat Sheet - GitHub Shortcuts section.
Suggested Changes
A suggested change is a special form of inline review comment where the reviewer proposes exact replacement text. The PR author can apply the suggestion directly from GitHub - no copy-paste or separate commit needed.
As a reviewer - inserting a suggestion
On the Files Changed tab, navigate to the line you want to propose a change for
Activate the line comment button for that line (the
+that appears on hover, or Tab to navigate to it)In the comment text area that opens, press
Ctrl+G(Windows) orCmd+G(Mac)GitHub wraps a suggestion block around the current line content:
```suggestion the current line content here ```Edit the text inside the suggestion block to show your proposed change
Add context above the block if helpful: "This makes the alt text more descriptive:"
Submit as part of your review ("Start a review" → batch with other comments)
Screen reader note: The suggestion block is plain Markdown text in the comment editor. Type it directly:
```suggestion
your proposed text here
```text
(Three backticks, the word suggestion, Enter, your text, Enter, three backticks.)
As an author - applying a suggestion
- Open the PR Conversation or Files Changed tab
- Navigate to the inline comment containing a suggestion (it shows a diff-style preview)
- Find and activate the "Apply suggestion" button below the suggestion block
- GitHub creates a commit automatically that applies the change - no file editing required
- The conversation thread is marked as resolved
Batching multiple suggestions into one commit
- For each suggestion you want to apply, activate "Add suggestion to batch" instead of "Apply suggestion"
- After selecting all suggestions, activate the "Commit suggestions" button that appears at the top
- GitHub applies all batched suggestions in a single commit
When to use suggestions vs. comments
- Use a suggestion when you know the exact text that would fix the issue
- Use a plain comment when the change requires judgment from the author (e.g., "this alt text isn't descriptive - can you describe what the image shows?")
- After adding all your inline comments, navigate to the review summary button
- On Files Changed tab: find the "Review changes" button (B to navigate buttons)
- Press Enter to open the review dialog
- A panel opens:
- A summary text area for overall comments
- Radio buttons for Comment / Approve / Request changes
- Switch to Focus Mode → type your summary comment
- Navigate to the radio buttons with arrow keys → select your verdict
- Tab to "Submit review" button → Enter
Understanding Merge Options (for Maintainers)
When a PR is approved and checks pass, a maintainer can merge it. The merge button section appears at the bottom of the Conversation tab.
Step 1: Navigate to the bottom of the Conversation tab
Step 2: Find "Merge pull request" button (or similar)
Step 3: A dropdown arrow next to the button offers strategy options:
- Create a merge commit
- Squash and merge
- Rebase and merge
Step 4: Choose strategy → activate the button
Step 5: Confirm in the dialog that appears
GitHub CLI (gh) alternative - merging a PR
Merge a pull request from your terminal:
# Merge with default strategy (merge commit)
gh pr merge 42
# Squash and merge
gh pr merge 42 --squash
# Rebase and merge
gh pr merge 42 --rebase
# Delete the branch after merging
gh pr merge 42 --squash --delete-branch
# Enable auto-merge (merges when checks pass)
gh pr merge 42 --auto --squash
After a PR is merged
- The PR status badge changes to "Merged" (purple)
- The source branch can be deleted - a "Delete branch" button appears
- Any linked issues with
Closes #Nin the description are automatically closed
Auto-Merge - Merging When You Can't Wait Around
Auto-merge lets you pre-authorize a PR to merge automatically the moment all branch protection requirements are satisfied - required reviews approved, all status checks passing, and the branch up to date.
This is especially useful when:
- You've addressed all review comments and are waiting for CI to finish
- A maintainer has approved the PR but a required check is still running
- You're in a different time zone from the reviewers
Enabling Auto-Merge on Your PR
1. Open your PR → scroll to the merge box at the bottom
2. Tab to the merge button dropdown arrow (next to "Merge pull request")
3. Select "Enable auto-merge"
4. Choose your merge strategy (squash, rebase, or merge commit)
5. Confirm in the dialog - the merge box now shows "Auto-merge enabled"
Screen reader path
Conversation tab → End key → merge box region
Tab → dropdown button (announced as "Select merge method" or similar)
Enter → arrow keys through options → "Enable auto-merge" → Enter
Dialog: Tab → confirm button → Enter
What happens next
- The PR merge box changes to show "Auto-merge enabled - merge will happen automatically"
- When the last required check passes (or last required review arrives), GitHub merges the PR silently
- You receive a notification: "Your PR was automatically merged"
- If a reviewer requests changes after auto-merge is enabled, auto-merge is automatically cancelled (a new approval is required before it re-enables)
Cancelling Auto-Merge
Merge box → Tab → "Disable auto-merge" button → Enter
Note: Auto-merge is only available if the repository administrator has enabled it in Settings → General. Many open source repos have it on; some do not.
Practical Scenarios
Scenario A: "I want to review an assigned PR"
Example: You are assigned to review a PR titled "Add missing NVDA shortcut to keyboard-shortcuts.md." The PR modifies docs/keyboard-shortcuts.md in the Learning Room repository and references Challenge 2.
1. Notifications → open the PR notification
2. D → PR tabs → Files changed tab
3. T → enter the first diff table → navigate lines with arrow keys
4. Check: does the new shortcut appear in the correct NVDA table? Is the table formatting preserved?
5. For each concern: activate the line comment button → type comment → Start a review
6. D → PR tabs → Conversation → scroll to bottom
7. B → "Review changes" button → type summary → select verdict → Submit review
Scenario B: "I want to respond to review feedback on my PR"
Example: Your PR for Challenge 3 (Complete Welcome Guide) received a review comment: "The [TODO] about evaluating issues is good, but the paragraph could mention checking if the issue is already assigned." The validation bot also flagged a link text issue.
1. Open your PR (Notifications → PR link, or find it in PR list)
2. 3 to navigate review comments
3. For the reviewer's comment: read it → Tab to "Reply" → Focus Mode → type "Good point - I will add a sentence about checking assignees. Pushing a fix now."
4. For the bot's link text flag: fix the link in docs/welcome.md, commit, and push
5. When all addressed: Tab to "Re-request review" button → Enter
Scenario C: "My PR has a merge conflict"
1. You will see a "This branch has conflicts that must be resolved" message near the bottom
2. Tab to "Resolve conflicts" button → GitHub opens a web conflict editor
3. The editor shows conflict markers - see Merge Conflicts guide (06-merge-conflicts.md)
4. Edit the file to resolve → Mark as resolved → Commit merge
Common PR Mistakes to Avoid
| Mistake | Better Approach |
|---|---|
| Opening a PR without an associated issue | Link to or create an issue first; comment "I'd like to work on this" |
| A vague title like "Fix things" | Be specific: "Fix missing alt text on homepage hero image" |
| Missing the PR template sections | Fill all sections - description, testing, related issues |
| Pushing many unrelated changes in one PR | One PR per logical change (smaller PRs get faster reviews) |
| Not testing your own changes | Test before requesting review |
| Not responding to reviewer comments | Acknowledge all comments, even if you disagree |
Try It: Read a Real Pull Request
Time: 3 minutes | What you need: Browser, signed in to GitHub
Go to the Learning Room repository's Pull Requests tab and find any open or recently closed PR:
- Navigate to Pull Requests (
GthenPin Focus Mode) - Open the first PR in the list (press
Enteron its title) - Read the description - press
2to jump to the first section heading, then arrow down to read. Look for: which file was changed (docs/welcome.md,docs/keyboard-shortcuts.md, ordocs/setup-guide.md)? Which challenge was this PR solving? Does the description referenceCloses #XX? - Check the conversation - press
3to jump between comments. Read what the validation bot reported - did the bot find any accessibility issues like broken headings or non-descriptive links? How did the author respond? - Look at the diff - press
Dto the "Pull request tabs" landmark, then navigate to "Files changed" and pressEnter. PressHto scan the changed file headings. If the PR toucheddocs/welcome.md, you should see+lines where the[TODO]sections were filled in. If it toucheddocs/keyboard-shortcuts.md, you should see new rows added to a shortcut table.
You're done. You just read a complete PR - description, conversation, and code changes.
What success feels like: You followed a PR from description to diff using only headings and landmarks. The next time you open a PR - yours or someone else's - you'll know exactly where everything is.
Day 2 Amplifier - Accessibility Agents:
@pr-reviewReview at least two pull requests manually before using any agent. A review generated by
@pr-reviewis only as useful as your ability to read, edit, and challenge it. The agent writes a first draft - you supply the context, the history, and the final judgment that no diff can contain.Once you have mastered manual pull request review:
- In VS Code -
@pr-review review PR #Ngenerates line-numbered diffs with change maps, risk assessment, before/after snapshots, CI results, and suggested inline comments - a documented starting point for your own review, not a replacement for it- In your repo - Accessibility Agents' review capabilities work across every repository you have access to by default; fork
accessibility-agentsand those capabilities travel with your project from day one- In the cloud - GitHub Agentic Workflows can auto-generate PR descriptions, verify linked issues, and post accessibility impact summaries on a
pull_requesttrigger - running the moment a PR is opened, whether or not anyone is watchingThe agent documents the diff. You bring the context that no diff can contain.
Next: Merge Conflicts Back: Working with Issues Related: Accessible Code Review | Screen Reader Cheat Sheet | Culture & Etiquette | GitHub Actions