AI Code Review Agents in 2026: What Works, What Annoys Seniors, and What It Costs
Sources
- GitHub changelog: Copilot code review improved review experience (Sep 18, 2026)
- GitHub changelog: Auto-resolution and analysis updates in Copilot code review (Sep 11, 2026)
- GitHub changelog: Copilot code review can now approve pull requests (Sep 1, 2026)
- GitHub changelog: Copilot code review consumes Actions minutes from June 1, 2026 (Apr 27, 2026)
- GitHub docs: About GitHub Copilot code review
- GitHub docs: Configuring code review by GitHub Copilot
- GitHub docs: Using custom instructions with Copilot code review
- GitHub docs: Copilot licenses ($19/user/month Business)
- CodeRabbit pricing (Essentials/Team/Advanced)
- CodeRabbit configuration reference (.coderabbit.yaml)
- CodeRabbit FAQ (free for open-source)
- Greptile pricing (Pro $30/seat, $1 per extra credit)
- Greptile docs: .greptile/ configuration
- Cactus Needle 3: 8-29MB automation foundation model (Sep 18, 2026)
- cactus-compute/needle (Apache-2.0, GitHub)
- Hacker News: Show HN Cactus Needle 3 discussion (hands-on reports)
- Qodo pricing (Pro $30, ~18 reviews/mo tier)
GitHub shipped three Copilot code review changelogs in eighteen days — PR approvals on September 1, auto-resolution plus an agent ensemble on September 11, and a reworked review experience on September 18. That cadence tells you what the vendor already knows: the AI reviewer is no longer a novelty toggle. It is platform infrastructure with a meter, a governance surface, and — since June 1 — a line item that touches two separate bills (AI credits and Actions minutes).
The same week, the second data point landed from the opposite direction: Cactus Compute released Needle 3, an 8–29 MB model that does tool calls, structured extraction, and embeddings on microcontrollers (Show HN, 181 points, September 18). The argument embedded in that release — that a large fraction of “AI” work in a pipeline never needed a frontier model — is the same argument this guide applies to code review: some review-adjacent tasks are classification problems wearing a review costume.
This guide covers what actually runs in production today: the three architectures (Copilot, CodeRabbit, Greptile), the September 2026 changes fact by fact, a cost model computed from list prices, the configuration files that genuinely change review quality, where a Needle-class small model fits in a review pipeline — and the failure modes that make senior engineers reach for the disable switch.
What Actually Reviews Your Pull Request
Three architectures dominate production deployments, and they differ in where the model runs, what context it sees, and who pays for the compute:
AI CODE REVIEW: THREE PRODUCTION ARCHITECTURES
[GitHub Copilot code review] [CodeRabbit] [Greptile]
agentic, in your Actions SaaS, multi-model, SaaS, whole-repo
runners on every PR graph index
PR opened ──► GitHub-hosted PR opened ──► CodeRabbit Repo indexed ──►
(or self-hosted) runner cloud reviews diff knowledge graph
│ │ │ │
▼ ▼ ▼ ▼
Agent reads whole repo, Walkthrough + Learnings Review agent walks
runs shell tools (build, line comments (feedback the graph: cross-
tests, scripts) behind on diff you gave file reasoning,
the Copilot agent firewall │ it before) blast radius
│ │
▼ ▼
Overview comment: findings Comments + PR summary,
grouped Open / Resolved / path-based instructions
Previously missed from .coderabbit.yaml
BILLING: AI credits per review BILLING: per contributing BILLING: $/seat +
+ Actions minutes (private developer who opens PRs credits per review
repos, since Jun 1 2026) ($24-$72/dev/mo) ($30/seat, 50cr,
$1/extra credit)
The architectural differences that matter to an operator:
- Copilot runs in your runners, not on your PR page. The agentic capabilities — full project context gathering, tool use — execute on GitHub Actions runners (standard GitHub-hosted by default, larger hosted runners at a higher rate, or your own self-hosted runners). If Actions is disabled or the workflows fail, you still get a review — but a degraded one without the agentic capabilities. That fallback behavior is a real availability story: your reviewer has a brownout mode, and you should know which mode you are in.
- CodeRabbit and Greptile are SaaS with your code as the input. Both ingest your repository (diff for every PR; Greptile additionally maintains a full codebase graph index). For regulated or source-sensitive shops, that is the whole evaluation: the review quality is moot if the data-perimeter answer is no. Both offer enterprise self-hosting tiers (CodeRabbit Enterprise; Greptile Enterprise self-host), and CodeRabbit is free forever on public repositories.
- Context strategy is the differentiator, not model quality. Copilot’s September 11 update explicitly moved the reviewer toward verification (running builds and tests during review) rather than pattern-matching on the diff. Greptile’s pitch is cross-file reasoning from a graph index. CodeRabbit’s differentiators are accumulation: Learnings (feedback you gave on past reviews, applied automatically) and path-based instructions. None of these are “bigger model” features — they are memory features.
The September Blitz, Fact by Fact
Verified against GitHub’s own changelog entries — these are the exact claims, not the marketing summary:
September 1 — Copilot can approve pull requests (public preview). Off by default. Every review now includes an approval assessment in the overview comment (“ready to approve” or not), which alone does not count toward merge requirements. Admins can authorize Copilot to submit a real approval that does count, configured at three levels: enterprise (leave off, or delegate to orgs), organization (org-wide, per-repo, or specific repos), and repository (on/off plus file-path globs limiting which PRs the approval applies to — up to 15 globs). Two governance details worth noting: a new push after approval dismisses Copilot’s approval exactly like a human reviewer’s, and the feature is limited to Copilot Pro, Pro+, Max, Business, and Enterprise plans.
The auto-approval trap: an approving AI reviewer is a merge-queue participant. Before enabling it, answer the audit question your security team will ask: who approved this, and on what evidence? Copilot’s assessment is surfaced but not explained to merge-gate depth — there is no attached proof of test execution per approval. Path globs are a reasonable damage-limit (auto-approve documentation and test fixtures; never touch payment or auth code), but the honest posture is: approval authority stays with humans until you have measured the reviewer’s false-negative rate on your codebase specifically.
September 11 — auto-resolution, shell tools, and an agent ensemble. Three changes shipped together:
- Comments auto-resolve when addressed. Push a commit that fixes a Copilot finding, and the rereview resolves the comment instead of leaving resolved threads polluting the PR. The September 18 refinement added resolution reasons (Won’t Fix / Incorrect) and honors explicit human replies that leave an issue open — the reviewer now distinguishes “fixed” from “overruled.”
- Shell tools behind the agent firewall. The reviewer gained the Copilot SDK’s full shell toolset — it can run build commands, run tests, execute scripts, and query tools and APIs during review. GitHub’s own experiment numbers: more positive developer feedback, more high-severity findings, fewer nits. This is the single most consequential change in the set: a reviewer that executes your test suite makes a different class of claim than one pattern-matching a diff.
- The Lite effort level became an agent ensemble. Instead of one agent, Lite reviews now run multiple agents whose findings merge into one review. GitHub reports addressed-comments-per-review up 47% for high-severity findings, 31% medium, 11% low — while review cost dropped about 8%. Ensembling is the same trick as n-version programming: independent agents make independent mistakes, and the union of their findings beats any single agent.
September 18 — the review experience rework (GA). The overview comment now carries the reviewer’s current assessment, the effort level used, and findings grouped into Open (with a “new commit” label when a fresh commit introduced them), Resolved since last review (validated fixes), and Previously missed (issues found on rereview that were not introduced by a new commit). Each comment gained a title. Batch-accepted suggestions now generate a smart commit message. Progressively trivial-sounding — until you have lived with the alternative, which is re-reading the same 40-comment thread across four pushes trying to figure out what is still real.
The Cost Model Nobody Quotes You
Since June 1, 2026, a Copilot code review on a private repository bills twice: AI credits for the model interaction, and GitHub Actions minutes for the agentic runner time, drawn from your plan’s included minutes with overage at standard Actions rates. Public repositories still get free Actions minutes. GitHub’s own consumption estimates:
- Lite effort: $0.05–$1.00 of AI credits per review.
- Balanced effort: $0.25–$5.00 of AI credits per review (routes to a higher-reasoning model for complex logic, security-sensitive code, and cross-service changes).
- Consumption scales with PR size and repository custom instructions; the estimates exclude Actions minutes.
- Attribution matters for chargeback: automatic reviews bill the PR author; a review another user requests bills that user; PRs authored by bots (including Copilot cloud agent itself) bill the organization directly — an agentic-loop multiplier, because agent-authored PRs are reviewed like any other.
- On Copilot Business and Enterprise, reviews are gated by budget: exhaust a user-level or org budget and reviews are blocked along with every other credit-consuming feature.
The competing list prices: Copilot Business is $19/user/month (seat, which includes other Copilot features). CodeRabbit charges per contributing developer — $24 Essentials / $48 Team / $72 Advanced per developer per month, billed annually — and is free on open-source repos. Greptile Pro is $30/seat/month with 50 credits per seat and $1 per extra credit. Qodo’s Pro tier starts at $30 (roughly 18 reviews/month at the entry block).
Model it: a 25-developer platform team with 25 active PR authors and 400 PRs/month, computed from the list prices above:
| Reviewer | Model | 25 devs, 400 PRs/mo | What changes the number |
|---|---|---|---|
| Copilot Lite | $19/user/mo seats + $0.05–$1 per review | $495–$875/mo | PR size, custom-instruction length, rereviews |
| Copilot Balanced | $19/user/mo seats + $0.25–$5 per review | $575–$2,475/mo | Same, plus Actions minutes on private repos |
| CodeRabbit Essentials | $24 per contributing dev/mo (annual billing) | $600/mo flat | Contributor count only; reviews unmetered |
| CodeRabbit Team | $48 per contributing dev/mo | $1,200/mo flat | Contributor count only |
| Greptile Pro | $30/seat/mo, 50 credits/seat, $1/extra credit | $750/mo (1,250 credits included > 400 PRs) | Seats until PRs exceed 50/seat, then $1/PR |
| Qodo Pro | $30 entry, ~18 reviews/mo per block | ~$660/mo equivalent (22 blocks) | Review count only |
Three structural readings fall out of the arithmetic:
- Seat-billed tools are predictable; per-review billing is a PR-size derivative. CodeRabbit’s number is a step function of headcount. Copilot’s spread is 5x wide at Lite effort and 20x wide at Balanced ($100–$2,000/month on credits alone for 400 reviews) — the range is the PR-size distribution of your repo. A monorepo with 3,000-line PRs lands at the top of the range; a well-decomposed service repo lands at the bottom.
- Copilot’s included credits reframe the seat cost. Copilot Business includes $19/user/month of pooled AI credits — $475/month org-wide at 25 users, which covers roughly 95–9,500 Lite reviews or 95–1,900 Balanced reviews before overage. For moderate PR volumes the reviews ride inside the seat price; the bill becomes adversarial only for high-PR-volume or heavy-Balanced shops.
- The sensitivity is asymmetric. Double the PRs to 800/month and Copilot Lite lands at $515–$1,275 while CodeRabbit Essentials stays at $600 and Greptile at $750. Double the contributors and CodeRabbit/Greptile double while Copilot’s credit line barely moves. Match the billing shape to your org’s shape: PR-heavy/few-authors favors seat billing; many-authors/few-PRs favors per-review.
Configuration That Actually Changes Review Quality
Out-of-the-box AI reviewers are mediocre everywhere, identically. The 80/20 of getting a useful one is configuration — and each tool has a real config format in the repo, version-controlled like everything else.
Copilot: instruction files plus rulesets. Copilot code review reads three instruction sources: repository-wide .github/copilot-instructions.md, path-specific *.instructions.md files selected by an applyTo glob in frontmatter, and AGENTS.md. GitHub’s tutorial is unusually honest about the failure modes: behavior is non-deterministic, long files get partially ignored (keep instruction files under ~1,000 lines), and specific directives beat vague ones. A workable split for a platform team:
.github/
├── copilot-instructions.md # repo-wide: error handling philosophy,
│ # security requirements, team standards
├── copilot/
│ └── (settings live in repo Settings > Copilot > Code review:
│ effort level Lite|Balanced, auto-approval + path globs)
├── k8s.instructions.md # path-specific, frontmatter:
│ # ---
│ # applyTo: "**/*.yaml"
│ # ---
│ # "No :latest tags. pinned digests only.
│ # Probes on every container."
└── AGENTS.md # agent-readable standards, shared with
# Claude Code / other coding agents
Automatic reviews are enabled through repository rulesets (Settings → Rulesets → New branch ruleset → “Automatically request Copilot code review”), with two toggles worth deliberating: Review new pushes (without it, Copilot reviews the PR exactly once — every subsequent push goes unreviewed) and Review draft pull requests (catches errors before human review, multiplies credit consumption).
CodeRabbit: one YAML, a real inheritance model. Behavior lives in .coderabbit.yaml at the repo root, with an 8-level priority chain (workspace global overrides > organization overrides > repository YAML > central YAML in a coderabbit repo > repository UI > organization UI > workspace defaults > schema defaults). Inheritance across levels is off by default — enable it explicitly:
# .coderabbit.yaml
inheritance: true # merge parent levels instead of highest-only
language: en-US
reviews:
profile: chill # review tone/verbosity preset
auto_review:
enabled: true
drafts: false # skip draft PRs (spend control)
path_instructions: # per-glob rules, like Copilot applyTo
- path: "charts/**"
instructions: |
Helm values only. Verify semver pins on image tags.
Flag any new resource without requests/limits set.
tools:
# gate the AI reviewer behind your deterministic gates
# (linters and SAST run first; the model reviews the residue)
The two CodeRabbit features that justify the seat cost over time are Learnings (corrections you give in chat are applied to future reviews automatically — the reviewer gets less annoying with supervision) and path-based instructions for polyglot monorepos. The new Triage beta (a cross-repo PR queue ranked by value and risk) is the first real attempt at making AI review output a prioritized work queue instead of a comment firehose.
Greptile: the graph reviewer, now folder-configured. Greptile deprecated single-file greptile.json in favor of a cascading .greptile/ folder you can place in any directory — each team owns its own config; children inherit and override parents:
.greptile/
├── config.json # settings + structured rules
├── rules.md # rules as plain markdown
└── files.json # context files: schemas, API specs, architecture docs
# config.json
{
"strictness": 2,
"commentTypes": ["logic", "syntax"],
"rules": [
{
"id": "no-raw-sql",
"rule": "Use parameterized queries, never string interpolation",
"severity": "high"
}
]
}
If both .greptile/ and a legacy greptile.json exist in the same directory, the folder wins. The files.json concept — pointing the reviewer at your DB schema and API spec so cross-file claims are checked against ground truth — is the most underused feature across all three tools.
The Needle 3 Lens: Not Every Review Task Needs a Frontier Model
Code review pipelines are about to inherit the same routing question LLM gateways face: which calls actually need the big model? Needle 3 is the sharpest data point yet on the small end. The facts, from the release and the Apache-2.0 repo (11.4k stars as of September 19): a 121M-parameter model at 2-bit precision, 8–29 MB on disk, built on a Laddered Simple Attention Network where every depth from 2 to 20 layers is a deployable subnetwork — slice the model to fit the device. It does three things: tool calls (picks the right function and fills arguments; returns an empty list rather than a guess when nothing fits), structured extraction (grammar-constrained output that parses by construction), and embeddings. It runs on phones, microcontrollers, and ESP32-class hardware, and installs with pip install cactus-needle.
Now the honest part. The HN hands-on reports puncture the marketing claim that 29 MB “matches DeepSeek V4 Flash” on general automation:
- A fine-tune benchmark by an independent developer (Scaevolus, testing against a Runescape database tool-calling target): FunctionGemma fine-tune hit 90.9% correct tool shape and 85.2% exact arguments; Needle 3 fine-tuned managed 32.2% and 20.4%. Better than Needle 2 (25.7%), nowhere near the fine-tuned competition.
- A household-automation test (viccis, ~8–12B local models as baseline): Needle 3 copied numbers instead of converting them (“25 minute timer” →
duration_seconds: 25, at 100% confidence), never declined anything with the full tool set (background chatter becamenote_save "blue one"at 0.99 confidence), and broke on follow-ups. - The founder’s own framing in the thread: reasoning is “more like grounding than true reasoning,” clean use cases involve direct language, and real deployments “absolutely need external guardrails.”
The pattern to steal: Needle’s best engineering decision is not the model — it is the contract. Grammar-constrained output that parses by construction, a calibrated confidence score on every response, and an empty list instead of a hallucinated tool call. That contract is exactly what a review pipeline wants from its triage tier, and it is implementable today: the classification and routing steps of review — is this PR risky, which files does it touch, is this comment a duplicate, does this PR need the expensive reviewer at all — are decision problems, not generation problems. The frontier model is only necessary for the step that actually writes findings.
A tiered review pipeline with the small-model contract applied where it fits:
TIERED AI REVIEW PIPELINE (small model triage, frontier review)
PR opened
│
▼
[Tier 0: deterministic] lint, SAST, policy checks (OPA/Kyverno), build
│ -- cheap, explainable, no model required
▼
[Tier 1: small-model triage] classify PR risk: touched paths x author
│ history x diff statistics. Grammar-constrained
│ output: {risk: high|med|low, reasons: [...]}
│ Empty/low-confidence result == escalate, never guess
├── low risk ──────────────► copilot @ Lite effort (or no AI review;
│ human reviewer + deterministic gates)
└── high risk ─────────────► copilot @ Balanced effort / Greptile /
CodeRabbit: full agentic review with
shell tools, graph context, blast radius
Everything the small tier touches is auditable: a JSON object with
confidence, not prose. The expensive tier only runs on the PRs that
deserve it -- which is also the billing win.
What should not be delegated down-model, based on every failure report above: anything involving numbers (unit conversion failures), anything requiring refusal judgment (the never-declines problem), and anything where a wrong answer at 0.99 confidence flows into automation. Confidence-gated escalation — act on high-confidence small-model output, escalate everything else — is the only safe routing rule.
What Annoys Senior Engineers
The queue title of this guide promised a verdict on what annoys seniors, so here it is, collected from the failure modes that recur in every AI reviewer deployment:
- The nit flood. The single most-cited reason teams disable review bots. Style-level findings from a model that has not read your conventions are noise with a confident tone. Mitigation is configuration (path instructions, Learnings, strictness settings) plus a hard rule: the reviewer gets a comment budget, and when it burns it on import-order findings, you fix the config, not the code.
- Confidence theater. viccis’s Needle report is the canonical exhibit:
note_save "blue one"at 0.99 confidence from background chatter. Frontier reviewers do the same thing with softer numbers — authoritative prose on a claim the model cannot verify. The September 11 shell-tools change is the industry’s first real answer: a reviewer that ran your tests earns a different trust class than one that pattern-matched the diff. Treat verification-backed findings and pattern-backed findings as different products. - Stale-context hallucination. “This function should handle null” — it does, three lines up. Every vendor’s fix is the same: more repo context (Copilot’s project gathering, Greptile’s graph, CodeRabbit’s knowledge base). Your fix is the
files.jsonpattern — feed the reviewer the schema/spec/architecture doc so cross-file claims have ground truth to check against. - The comment thread that never dies. Resolved findings resurfacing across pushes. The September 11/18 auto-resolution changes exist precisely because this annoyed everyone. If your reviewer does not track resolution state, your engineers are doing it by hand — count that time against the license cost.
- Auto-approval governance debt. Enabling Copilot approvals without a written answer to “who approved this, on what evidence” is how you get an audit finding later. The path-glob feature (15 globs, documentation and fixtures only) is the right first scope; auth, payments, and secrets paths stay human-gated — permanently, not provisionally.
- Budget surprise. The reviewer that bills per PR in a monorepo with 3,000-line diffs is a spend incident waiting for a Friday. Copilot’s budget enforcement blocks reviews at the limit — your merge queue stalling because the AI reviewer hit its budget is a failure mode you want to discover in a test org, not in production.
Operational Hardening Checklist
- Self-host the runners if you are on Copilot with private repos. Actions minutes are consumed from your entitlement for agentic review; self-hosted runners consume none, and larger hosted runners bill at a higher rate. The trade is fleet management against metered minutes — at high review volume, the fleet wins.
- Chargeback needs the attribution map. Auto-reviews bill the PR author; requested reviews bill the requester; bot-authored PRs bill the org. Tag Copilot usage metrics per team before the finance team asks why platform’s credit bill is 40% agent traffic.
- Eval your reviewer like a service. Seed a repo with PRs containing known defects (the ones your incident reviews actually produce) and measure catch rate and false-positive rate per effort level. Vendors do not publish false-positive rates; that number is yours to produce. Re-run when the vendor changes the model — which they do silently, continuously, and without a version bump you can pin.
- Decide the data-perimeter question first. SaaS reviewers (CodeRabbit, Greptile, and Copilot’s model calls) all send code off-prem. If that answer is no, the shortlist is self-hosted tiers (CodeRabbit Enterprise self-hosting, Greptile Enterprise) or Copilot with your network settings and content exclusions — and you should verify exclusions actually exclude, per path, before trusting them.
- Pin the reviewer’s scope with config-as-code. The reviewer is a platform component: its configuration (instruction files, YAML, rulesets) belongs in the repo, reviewed by humans, changed through PRs. The untracked “repository settings UI” drift path is how your reviewer’s behavior changes without anyone’s knowledge.
- Watch the agentic-loop multiplier. Copilot cloud agent authors a PR → the PR gets an automatic review → suggestions feed back into a new agent PR. Each cycle bills credits and minutes, and each cycle’s author is a bot. Budget per agent, not per human, or the loop runs at your expense until the budget gate trips.
Comparison at a Glance
| Dimension | Copilot code review | CodeRabbit | Greptile |
|---|---|---|---|
| Where it runs | Your Actions runners (or self-hosted) | Vendor SaaS | Vendor SaaS (graph index of repo) |
| Context strategy | Whole-repo gathering + shell tools (builds, tests) | Walkthrough + Learnings + multi-repo analysis | Codebase knowledge graph, cross-file reasoning |
| Config in repo | copilot-instructions.md + *.instructions.md + rulesets | .coderabbit.yaml (8-level inheritance chain) | .greptile/ folder (config.json, rules.md, files.json) |
| Auto-approve PRs | Yes (public preview, off by default, path globs) | No (request-changes workflow instead) | No |
| Billing shape | Seats + per-review credits + Actions minutes | Flat per contributing developer | Seats + credits per review |
| Effort control | Lite (ensemble) / Balanced (higher-reasoning model) | Profile presets, path instructions | Strictness levels, comment types |
| Free for OSS | Yes (Actions minutes free on public repos) | Yes, forever, per-repo | Starter tier, 50 credits/mo |
| Self-host option | Self-hosted runners (review logic still GitHub-side) | Enterprise plan | Enterprise plan |
Who Should Skip This
- Teams shipping fewer than ~10 PRs a week. At that volume the review bottleneck is your seniors’ calendar, and an AI reviewer mostly adds a second queue to babysit. Copilot’s included credits cover your reviews anyway — enable Lite on one repo, measure for a month, decide with data.
- Codebases under compliance regimes that forbid third-party model access to source — and “we’ll ask for an exception” is not a rollout plan. The self-hosted tiers exist; budget the quarter they take to procure, or skip the category.
- Teams without deterministic gates first. Lint, SAST, policy-as-code, and a build that fails loudly catch the defect classes AI reviewers are worst at (style, imports, obvious type errors) for free, deterministically, with zero false-positive risk of hallucinated reasoning. The AI reviewer’s value is the residue — semantic bugs, cross-file effects, missing test coverage — and only exists on top of the deterministic layer.
- Anyone who wanted the AI reviewer to replace human review. It does not. It front-loads the trivial findings, verifies builds and tests, and occasionally catches a real semantic bug the seniors missed. The merge decision, the security-sensitive paths, and the architectural judgment stay exactly where they were — and every vendor’s “40–60% faster reviews” claim quietly assumes the humans still show up.
Verdict
AI code review in late 2026 is defined by two opposite forces converging on the same conclusion. From the top: Copilot’s September blitz — approvals, auto-resolution, ensemble reviews, shell-tool verification — is the incumbent turning a novelty into governed, metered platform infrastructure. From the bottom: Needle 3 is the frontier arguing that half the pipeline’s intelligence can shrink to 29 MB, with a grammar-constrained, confidence-scored, refuse-when-unsure contract that the big vendors would do well to copy.
The through-line for platform teams: treat the AI reviewer as a component with a contract, not a magic service. Its behavior belongs in version-controlled config. Its spending belongs in budgets with chargeback attribution. Its trust belongs in measured catch rates on your codebase, not vendor benchmarks. And its scope belongs to a tiered pipeline where the frontier model handles only the findings-writing step — with approval authority on security-sensitive paths remaining a human job until your own evals say otherwise. The teams that internalize this get a reviewer that gets better every month as the vendors iterate. The teams that don’t get a confident comment bot, a surprise bill, and an audit question about which AI approved the payment-service PR.