すべてのプルリクエストを本番環境と照らし合わせてレビュー

Mapleは差分を、それが触れるトレース・エラー・CI実行と並べて読み、マージ前にコメントし、リリース後にもう一度確認します。

画面

本番を知っているレビュアー

プッシュごとにサマリーコメント、インラインレビュー、チェックランが1つずつ届きます。指摘は変更行の背後にあるトラフィック・エラー・アラートを根拠にし、Code Reviewはすべてのリポジトリで何を見つけたかを記録します。

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

動き

プルリクエストに届くもの

Maple自身のリポジトリでの実際のレビュー。理由付きの信頼度スコア、差分から見つかったデプロイ手順、ファイルと行付きの指摘、変更コードの本番トラフィック。

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オブザーバビリティ

すべてのワークフロー実行がトレースに

CIトレースを有効にすると、GitHub Actionsの各実行がランナー待ち時間を含むジョブとステップのウォーターフォールとして届きます。CIが赤い理由、失敗し続けるワークフロー、ビルドが遅くなっているかがわかります。

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 失敗したステップを、実行のトレースで
A pull request's review sheet: outcome, confidence, quality, summary, key changes and before-merge steps
/code-review/pull-requests 1つのプルリクエストのレビューとCI実行
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.

マージ後

レビューはマージで終わらない

デプロイの1時間後、Mapleは前後1時間を比較してプルリクエストにコメントを返します。問題なくリリースされたか、届かなくなったもの、新しいエラーは何か。

すべてのトレースにコミットの文脈
スパン上のコミットSHAが、メッセージ・作成者・GitHubリンクに解決されます。
デプロイマーカー
メトリクスの変化が、原因となったデプロイとリリースされたコミットに結び付きます。
プルリクエストでIssueをクローズ
PRをエラーIssueにリンクすると、マージ後にエラーが止まった時点でMapleがIssueをクローズします。

できること

1つのGitHub Appで、ループ全体を

github.app
1回のインストールで全リポジトリ
インストール後、履歴はバックグラウンドで取り込まれます。リポジトリごとに追跡するブランチを1つ選べます。
pull_request
プッシュごとにレビュー
サマリーコメント、インラインレビュー、チェックラン。「won't fix」と返信すれば指摘を却下でき、ボットにメンションすれば質問できます。
before_merge
差分から見つかるデプロイ手順
シークレット、環境変数、マイグレーション、インフラの変更がチェックリストになります。未チェックのままマージするとMapleが通知します。
telemetry.contract
テレメトリを壊すとチェックが失敗
アラートやダッシュボードが読むスパン・属性・メトリクスを削除する変更は、リリース前に指摘されます。
workflow_run
CI実行をトレースとして
ジョブとステップを1つのウォーターフォールに。ランナー待ち時間、失敗率、ワークフローごとの連続失敗も表示します。
ci_runs()
エージェントもCIを読める
MCPツールが「なぜCIが赤いのか」「このコミットでCIは通ったか」「ビルドは遅くなっているか」に答えます。
read_source_file()
デプロイ済みコミットのソース
エージェントは、今日のmainではなく本番で動いているコードを読みます。
review.rules
組織の既定値とリポジトリごとの上書き
観点、ドラフト、インラインコメント、日次上限をリポジトリごとに設定できます。チームが却下した指摘から学習します。

次は

このデータを共有する画面

OTLPをMapleに向ける。

エンドポイントとキーが1つずつ。トレース、ログ、メトリクス、セッションが、最初のリクエストから同じトレースIDに集まります。