# Changelog Release notes for the self-hosted PullApprove5 distribution. Each release is distributed as a Docker image and a downloadable tarball — see [Deployment](/docs/self-hosted/deploy/) and [Upgrading](/docs/self-hosted/operations/#upgrading). ## [5.4.0] - 2026-09-18 ### Upgrade - **Database migrations:** four new migrations. One updates every pull request that has processing results in a single transaction, so on a large database `migrate` takes longer than usual, and writes to those pull requests (webhooks, processing) wait until it finishes. Reads are unaffected. - **GitHub App:** add the **Checks: Read** permission, accept it on the installation, and subscribe the App to the **`check_run`** event. Only needed for the new `unless` scope setting; everything else works without it. - **Rollback:** processing results written by this version cannot be read by the previous one. After rolling back, a pull request shows a results error until its next event reprocesses it. ### Added - **`unless`** on a scope: the review requirement is waived while the listed check runs pass on the head commit, for example `unless = ["producer/check-name"]`. See the `unless` docs page. - **Busy reviewers are skipped:** a reviewer whose GitHub profile status is set to "Busy" is passed over when auto-requesting, as long as someone else in the scope is available. Per-repository setting **Skip busy reviewers when requesting**, on by default. - Search on the repository and pull request lists. - Name-based URLs, such as `/gh/acme/api/pulls/123/`. Old URLs redirect. ### Changed - **Auto-requesting reviewers (`request`) now counts who is already asked.** A scope asks only for as many people as it is still short, counting requests made by hand, by scopes above it in the config, and by earlier passes. Previously every scope asked for `request` people regardless, so overlapping scopes over-requested. `require` greater than `request` now keeps asking one batch at a time until `require` approvals are in. A request removed on the git host frees the place for the next person in the scope's order, and the removed person is never auto-requested again. See the `request` docs page. - Every processing pass re-reads the pull request from the git host first. This is one extra API read per pass. ### Fixed - Transient git host failures (rate limits, 5xx, timeouts) retry the job instead of recording an error on the pull request. - A stale webhook or API response can no longer overwrite newer pull request data. - A reviewer whose name is spelled with different casing in `CODEREVIEW.toml` than on the git host is now requested. ### Security - List pages and admin-only actions for organizations and repositories now enforce seat and admin checks consistently. Previously a disabled seat could read a public repository's configs. ## [5.3.0] - 2026-07-20 ### Upgrade - No database migrations — roll back by redeploying the previous image. - **`CODEREVIEW.toml`:** action required only if a config uses a negative `require`, `request`, or `author_value` — those become config errors after upgrade. Delete them — see Changed. ### Added - Trust labels in the review workspace: trivial diff hunks — lockfiles, whitespace-only changes, comment-only changes, import reordering, formatting, and pure file renames — are automatically classified and labeled so they can be filtered out during review. See the new "Reviewing" page in the docs. - The review workspace shows more pull request context: the PR description and submitted reviews open directly in the workspace, the header shows the PR's state (open, merged, closed), reviews show their submitted time and scope impact, and the sidebar explains why a pull request has no review verdict. - The diff's file-by-file mode gains a minimap showing each hunk's review status, and opens each file at its first unreviewed hunk instead of the top. ### Changed - A pull request author's own approval no longer counts toward a scope's `require` count (some hosts, like GitLab Free, allow self-approval by default). Authors contribute review credit only through `author_value`, and the author's approval is no longer displayed as an approval on the pull request. An author's "changes requested" still blocks. - Negative values for `require`, `request`, and `author_value` are now rejected as config errors. They never worked as documented: a negative `require` silently always passed and a negative `request` requested nobody. - A scope that no possible set of reviews can satisfy (for example, requiring more reviewers than the scope has) now shows a clear error on the pull request instead of leaving the review pending forever. - Organization syncs use fewer git-host API calls: bursts of member and repository sync triggers collapse into a single sync, large member lists sync in bulk instead of one request per member, and a GitHub App permission change no longer triggers a full member re-sync across every installation. ### Fixed - The pull request page, checklists, and review status no longer go blank while a pull request is being reprocessed. - Insights first-review metrics now count reviews from accounts that no longer exist on the git host instead of skipping them — only known bots are excluded. ## [5.2.1] - 2026-07-12 ### Upgrade - **Database migrations:** one fast data migration that relabels existing review records (no schema changes, no locking concerns). One-way — roll back by restoring the pre-upgrade snapshot. - **`CODEREVIEW.toml`:** action required only if a config uses the `"*"` wildcard outside `reviewers` — those become config errors after upgrade (see Changed). To fix: in `alternates`, move the `"*"` to `reviewers` (wildcard reviewers are never auto-requested, so approval behavior is the same); in `authors` or `cc`, delete it — a scope with no `authors` already applies to every author. ### Changed - The `"*"` wildcard is now rejected as a config error anywhere outside `reviewers`. It was never matched in `authors`, `alternates`, or `cc` — a scope relying on it silently didn't work (in `authors` the scope never applied at all; in `alternates` it could never be satisfied). Any config containing it — even one that was passing via its named reviewers — errors after upgrade. See Upgrade above for how to fix affected configs. ### Fixed - The pull request page no longer lists reviewers with a pending review request as having "commented" — the Reviews section only shows submitted reviews. - Dismissed reviews (and GitLab revoked approvals) now show as "dismissed" instead of "commented", and comment-only reviews are labeled "commented" consistently. Review gating is unchanged — a dismissed reviewer still counts as pending. Existing review records are relabeled by the migration in this release; a pull request page picks up the new labels the next time that PR is processed (open PRs update automatically, already-closed PRs show a still-accurate "pending" until manually re-checked). ## [5.2.0] - 2026-07-10 ### Upgrade - **Database migrations:** adds the team sync tables and drops the user-level insights summary table (raw insight events are retained, so the data is rebuildable if the feature returns). One-way — roll back by restoring the pre-upgrade snapshot. - **Git host apps:** recommended, for instant team sync (optional — team membership refreshes on a 1-hour staleness window without it): - GitHub: subscribe your GitHub App to the **Membership** and **Team** webhook events. In your GitHub organization: Settings → Developer settings → GitHub Apps → your PullApprove app → **Permissions & events** → Subscribe to events → check **Membership** and **Team** → Save changes. No permission changes are needed. - GitLab (Group webhook mode only): re-save the webhook mode on the organization settings page in PullApprove to subscribe to member events. Project webhook mode has no instant-sync option. ### Added - Team references in `CODEREVIEW.toml`: reference GitHub Teams or GitLab groups with `@org/team-slug` anywhere a list of users is expected — `reviewers`, `alternates`, `authors`, `cc`, and alias values. Team membership is synced from the git host, and synced teams are listed on the organization settings page. See the new "Teams" page in the docs, and Upgrade above for the webhook events that enable instant team sync. - This changelog is now published as a page in the self-hosted docs. ### Changed - A scope whose `reviewers` reference an alias or team that resolves to no actual users now shows a config error on the pull request instead of leaving the review pending forever. - Recurring GitHub syncs (branch tips, organization and team membership) consume less of the GitHub API rate limit — lookups whose data hasn't changed no longer count against it. - Settings pages are now responsive on mobile. ### Removed - User-level insights rollups (including the weekly rollup job). Repo-level insights and the insights dashboard are unchanged. The upgrade drops the user-level insights summary table — see Upgrade above. ### Fixed - Saving an organization's insights settings raised an error instead of triggering the insights resync. - Disabled repositories no longer run background jobs or make git-host API calls. - Repository and pull request sync buttons now show a clear message during their cooldown instead of a raw "HTTP 429" alert, and confirm successful syncs with a toast. ## [5.1.0] - 2026-07-07 ### Upgrade - No database migrations — roll back by redeploying the previous image. - **`CODEREVIEW.toml`:** action required only if a config uses the `branches` or `reviewed_for` settings — remove them; they are no longer valid config options (see Removed). ### Changed - Rebuilt the pull request diff and review view for smoother handling of large pull requests. ### Removed - The `branches` config setting (both top-level and scope-level) and the scope-level `reviewed_for` setting. Remove them from your `CODEREVIEW.toml` if you use them — they are no longer valid config options. ### Fixed - Content-Security-Policy errors that blocked the organization-delete confirmation and the repository branch dropdown. ## [5.0.0] - 2026-06-22 ### Added - Initial self-hosted release of PullApprove5 — automated code-review assignment and approval enforcement as an alternative to CODEOWNERS. Reviewers and required approvals are configured per repository with a `CODEREVIEW.toml` file of path- and code-based scopes, scaling across many repositories and large monorepos. - Support for GitHub and GitLab, connected through a self-hosted GitHub App or GitLab integration. - Distributed as a Docker image running the web and worker services, backed by PostgreSQL. See the self-hosted documentation for deployment, git-host setup, security, and operations.