GitHub: a pull request waits for a code owner's review
A branch protection rule or a ruleset can require review from code owners. Then a pull request that changes a file with a code owner in the repository's CODEOWNERS file must be approved by one of that file's owners before it can be merged into the protected branch, however many other approvals it has (GitHub's about code owners and about protected branches). Until then GraphQL's reviewDecision for the pull request is REVIEW_REQUIRED ("A review is required before the pull request can be merged"), and the REST mergeable_state is blocked (checked October 26, 2026).
GET /repos/OWNER/REPO/rules/branches/BRANCH → rule "pull_request": parameters.require_code_owner_review
GET /repos/OWNER/REPO/codeowners/errors?ref=BRANCH → errors[].line, kind, message, path
POST /graphql pullRequest(number: N) { reviewDecision
reviewRequests(first: 100) { nodes { asCodeOwner requestedReviewer { ... on User { login } ... on Team { combinedSlug } } } } }
Who the code owner is
- Which file: GitHub looks for
CODEOWNERSin.github/, then the repository root, thendocs/, and uses the first one it finds. - The base branch: each
CODEOWNERSfile assigns the owners for its own branch, and a pull request uses the file on its base branch, the branch it would modify when merged. A change toCODEOWNERSinside the pull request is not the version it uses. - The last match: patterns follow most of the rules of gitignore files, and the last matching pattern takes precedence. In GitHub's example, after
* @global-owner1 @global-owner2, a line*.js @js-ownermakes@js-ownerthe only owner of JavaScript files. - Several owners: all the owners of one pattern must be on the same line; on separate lines the pattern matches only the last owner mentioned. When code owner review is required, an approval from any one of a file's owners is enough.
- No owner: a pattern with no owner after it leaves those paths without one, and changes there can be approved by anyone with write access.
Why the owner was not asked, or does not count
- Write access: code owners must have write permission for the repository. A team must be visible and have write permission itself, even if all of its members already have write access directly, through the organization or through another team. A user or team that does not exist or has insufficient access is not assigned as a code owner.
- A skipped line: a line with invalid syntax is skipped. Three gitignore rules do not work in
CODEOWNERS: escaping a pattern that starts with#with\, negating with!, and character ranges with[ ]. Paths are case sensitive, even on a case-insensitive system such as macOS. - Too large: a
CODEOWNERSfile over 3 MB is not loaded: no code owners are shown, and none are asked to review. - An email address: an owner can be named by an email address added to their account, but a managed user account cannot be named that way.
- A draft: code owners are not automatically asked to review a draft pull request; they are notified when it is marked ready for review (see why a review request is not shown).
- A fork: a pull request from a fork into the upstream repository uses the
CODEOWNERSfile of the upstream base branch. With a base branch in the fork, it uses the fork's file, and asks for reviews only if the code owners have write access to the fork.
The owner approved, and it is still blocked
- Approved before a push: with "Dismiss stale pull request approvals when new commits are pushed", a change to the diff dismisses the approval and someone must approve again; with "Require approval of the most recent reviewable push", the last person to push cannot be the one who approves it (see why an approval does not count).
- Another pull request on the same commit: even after all required reviewers have approved, collaborators cannot merge if another open pull request has a head branch pointing to the same commit with pending or rejected reviews. Someone with write permissions must approve or dismiss the blocking review there first.
- Another rule: code owner review is one requirement among others: required checks (see a required check stuck at "Expected"), a branch that must be up to date, resolved conversations.
What to do
- Read the errors:
GET /repos/OWNER/REPO/codeowners/errorslists the syntax errors in theCODEOWNERSfile (line, column, kind, message, a suggestion), for the branch named inrefor by default the default branch (GitHub's REST reference). Opening the file on GitHub also highlights them. - See a file's owner: browse to the file on the base branch and hover over the shield icon, which names the owner and the
CODEOWNERSline. - Give write access: add the user or team to the repository with write permission, and make the team visible.
- Protect the file itself: GitHub recommends a
CODEOWNERSfile in.github/owned by the repository owner (/.github/CODEOWNERS @owner_username), so the rule cannot change without their review. - Where the rule is: in a ruleset,
require_code_owner_reviewin the pull request rule (available rules for rulesets), which "Get rules for a branch" returns among the active rules for the branch; in a branch protection rule, "Require review from Code Owners". - Admins: by default the restrictions of a branch protection rule do not apply to people with admin permissions or roles with the "bypass branch protections" permission, unless "Do not allow bypassing the above settings" is on.
In IntelliJ IDEA: code owners are not read
How the GitHub support built into IntelliJ IDEA deals with code owner reviews, in its source (checked October 31, 2026; IntelliJ IDEA: pullRequestMergeability.graphql, refUpdateRule.graphql, pullRequestInfo.graphql, GraphQL files, GithubApiRequests.kt):
- Not the rule: for the rule on the base branch it asks for the number of required approving reviews, the required status checks, signatures, linear history, force pushes, deletions and whether the account can push, but not
requiresCodeOwnerReviews. - Not the owners: none of its 78 GraphQL files asks
asCodeOwner, which marks a review request made for a code owner, and its list of REST requests (GithubApiRequests.kt) has none for code owners, so nothing it requests says which reviewer is a code owner. - The decision: it does ask for the pull request's
reviewDecision, GitHub's code review status for it (approved, changes requested or review required).
GitHub pull requests in IntelliJ IDEA
Pull Request Inbox for GitHub, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists everyone asked to review and where each one's review stands (approved, changes requested, asked to review, on an earlier commit). When GitHub calls the pull request blocked, its merge checks say the rules of the target branch are not met yet (required reviews or required checks). When GitHub says a review is still required (reviewDecision is REVIEW_REQUIRED), it says so there and names those asked to review as code owners who have not reviewed yet; read with GraphQL, so not without a token, and team names need the organization's read permission. The review inbox, diffs and conversations are free; approving, commenting and merging are Pro (US$1.50 a month, with a 30-day trial).
GitHub is a trademark of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with or endorsed by GitHub, Inc. or JetBrains.
More: GitHub merge refused (405, 409) · GitHub review refused (422) · GitHub search 422 "Validation Failed" · "Resource not accessible by personal access token" · 401 "Bad credentials" · "Resource protected by organization SAML enforcement" · "API rate limit exceeded" · GitHub diff 406 "too_large", 3,000 files · GitHub line comment 422 "must be part of the diff" · GitHub branch update refused (422) · GitHub pull request not created (422, 403) · GitHub auto-merge refused · GitHub draft, ready for review or close refused · GitHub conversation not resolved · GitHub checks not shown (check runs 403) · GitHub file contents not read · GitHub compare refused (404, 422) · GitHub comment or reply refused (403 locked, archived) · GitHub merge method not allowed (405) · GitHub branch not found (404, 301) · GitHub Enterprise Server not reached · GitHub review request not shown · GitHub pull request list incomplete · GitHub 404 Not Found, renamed repositories (301, 307) · GitHub line comment outdated or not on the diff · GitHub pull requests not updating, notifications late · GitHub suggested change cannot be applied · GitHub required check stuck at "Expected" · GitHub merge blocked by unresolved conversations · GitHub merge blocked by unsigned commits · GitHub branch that merges through a merge queue · GitHub merge waiting for an approval of the most recent push · GitHub merge waiting for code scanning results · GitHub merge waiting for code quality results · GitHub merge blocked by a code coverage threshold · GitHub merge blocked by license compliance results · GitHub branch locked or its updates restricted · GitHub branch not deleted after merging · GitHub merge waiting for a team's approval (Required reviewers) · GitHub merge blocked by secret scanning alerts · GitHub stacked pull request not merging · GitHub push blocked by push rules · GitHub merge blocked by commit metadata rules · GitHub force push blocked · GitHub issue not closed by a merged pull request · GitHub pull request not checked out locally · GitHub pull request has merge conflicts · GitHub changes requested and dismissing a review · GitHub co-author not credited for a commit · GitHub dependency review check failed · GitHub Dependabot not rebasing its pull request · GitHub fork not syncing with upstream · GitHub pull request base branch not changing · GitHub pull request not reverting · GitHub pull request template not showing · GitHub pull request labels or assignees not added · GitHub pull request not closing or reopening · GitHub push blocked by push protection · GitHub pull request comment hidden · GitHub pull request blocked until deployments succeed · GitHub team review request replaced by members · GitHub pull request file no longer marked Viewed · GitHub pull request marked merged without being merged · GitHub Copilot review does not count as an approval · GitHub checks not running on a pull request a workflow created · GitHub Update branch button not shown on a pull request · GitHub checks failing on a Dependabot pull request · GitHub checks failing on a pull request from a fork · GitHub checks skipped by [skip ci] in a commit message · GitHub checks gone after the retention period · GitHub code review limits in a public repository · GitHub pull requests turned off or limited in a repository · GitHub checks run on every pull request in a stack · GitHub pull request showing commits already squash merged · GitHub pull request not showing a file diff · GitHub push to a pull request branch from a fork refused · GitHub check cancelled on a pull request · GitHub Rebase and merge not available · GitHub merge commit message not what you expected · GitHub pull request shows every line changed · GitHub API request timed out · GitHub pull request image or document diff not shown · GitHub review request refused (422) · GitHub pull request from Copilot: checks not running, approval not counted · GitHub push refused: GH006 and GH013 on a protected branch · GitHub "At least 1 approving review is required", approvals that do not count · GitHub pull request plugins for IntelliJ IDEA, compared · 日本語