Review every pull request against production

Maple reads your diff next to the traces, errors and CI runs it touches, comments before you merge, and checks back once it ships.

The surface

A reviewer that has seen production

Every push gets one summary comment, an inline review and a check run. Findings cite the traffic, errors and alerts behind the lines you changed, and Code Review tracks what they caught across every repository.

Code Review analytics: pull requests reviewed and issues caught per day, with the repositories that had the most issues
/code-review acme · 41 PRs reviewed · 30d
writes
summary comment · inline review · check run
lenses
correctness · security · performance · observability · tests
reads
traces · open errors · alerts · dashboards
blocks
telemetry an alert or dashboard reads
after
production, an hour after the deploy
rules
org defaults · repo overrides

In motion

What lands on the pull request

A real review from Maple's own repository: a confidence score with its reason, the deploy steps found in the diff, findings with the file and line, and the production traffic of the changed code.

MapleTechLabs/maple #1531 AI tab and email preferences with a local send schedule
maple-review-bot bot updated on push a05c12f
6/10 needs attention quality 88/100

Digest scheduling is pure, read end to end and well tested; the AI key panel now loses its only Remove path for a lapsed add-on.

tests partialrisk medium2/2 new units observable
  • Digest subscribers gain send_hour plus day/hour/timezone scheduling
  • isDigestDue claims a row only inside the subscriber’s local send window
  • AI provider and auto-triage merge into one AI settings tab

Before merge

Migration · Check it is safe on production data and with the code still deployed packages/db/drizzle/20261017080931_digest_send_hour/migration.sql

Findings

Warning F2 correctness
Lapsed add-on leaves the saved OpenRouter key with no way to remove it apps/web/src/components/settings/ai-provider-section.tsx:179-181

OpenRouterKeyPanel returns AddOnUpsell before the saved-key branch whenever the add-on lapses, so the only Remove call site is unreachable. Pass onRemove down and keep the saved-key row next to the add-on button.

Note F1 Save is a silent no-op for a user with no primary email still open

Production impact · last 7 days

changed file calls/day
services/digest/WebAnalyticsDigestService.ts 235

Observability coverage: 2 of 2 changes observable

a05c12f Reply “won’t fix” to dismiss a finding, or mention @maple-review-bot to ask about one.

CI observability

Every workflow run is a trace

Turn on CI traces and each GitHub Actions run lands as a job and step waterfall, runner queue time included. See why CI is red, which workflow keeps failing and whether builds are getting slower.

The Code Review CI tab: runs, success rate, run time and runner wait against the previous week, with the failing workflow and its last green commit
A failed CI run as a trace: runner waits, jobs and steps, with the failing test shard marked
/traces/:id The failing step, in the run's trace
A pull request's review sheet: outcome, confidence, quality, summary, key changes and before-merge steps
/code-review/pull-requests Reviews and CI runs on one pull request
MapleTechLabs/maple #1524 merged Address audit findings across settings and billing
maple-review-bot bot an hour after the deploy

After this shipped

Shipped clean Nothing this change touches got worse in the hour after it deployed.
service maple-api env production sha d6a5ade at Oct 17, 00:23 UTC window 60 min before vs after
operation calls/h errors p95
POST /mcp 207 → 218 0.0% → 0.0% 648 → 547 ms
GET /mcp 5 → 11 0.0% → 0.0% 112 → 85 ms

Maple looks once, an hour after the first deploy that carries the merge.

After merge

The review doesn't end at merge

An hour after the deploy, Maple compares the hour before with the hour after and comments back on the pull request: shipped clean, or what stopped arriving and which errors are new.

Commit context on every trace
Commit SHAs on spans resolve to the message, author and a GitHub link.
Deploy markers
Metric shifts line up with the deploy that caused them, down to the commits that shipped.
Pull requests close issues
Link a PR to an error issue. Once it merges, Maple closes the issue if the error stops.

What it does

One GitHub App, the whole loop

github.app
One install, every repository
History backfills in the background after install. Pick one tracked branch per repository.
pull_request
A review on every push
Summary comment, inline review and check run. Reply “won't fix” to dismiss a finding, or mention the bot to ask about one.
before_merge
Deploy steps found in the diff
Secrets, env vars, migrations and infra changes become a checklist. Merge with one unticked and Maple reminds you.
telemetry.contract
Broken telemetry fails the check
Removing a span, attribute or metric that an alert or dashboard reads is flagged before it ships.
workflow_run
CI runs as traces
Jobs and steps on one waterfall with runner queue time, fail rate and red streaks per workflow.
ci_runs()
Your agent reads CI too
The MCP tool answers “why is CI red”, “did CI pass on this commit” and “are builds getting slower”.
read_source_file()
Source at the deployed commit
Agents read the code that is running in production, not whatever is on main today.
review.rules
Org defaults, repo overrides
Lenses, drafts, inline comments and daily limits per repository. Learns from the findings your team dismisses.

Keep going

Related features

Point OTLP at Maple.

One endpoint, one key. Traces, logs, metrics and sessions, linked from the first request.