diff --git a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart
index 2778e99..c514348 100644
--- a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart
+++ b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart
@@ -548,15 +548,21 @@
       return;
     }
 
-    // Assume this PR should be based against config.defaultBranch.
-    body = _getWrongBaseComment(base: baseName, defaultBranch: defaultBranchName);
-    if (!await _alreadyCommented(gitHubClient, pr, body)) {
-      await gitHubClient.pullRequests.edit(
-        slug,
-        pr.number!,
-        base: Config.defaultBranch(slug),
-      );
-      await gitHubClient.issues.createComment(slug, pr.number!, body);
+    // For repos migrated to main, close PRs opened against master.
+    final bool isMaster = pr.base?.ref == 'master';
+    final bool isMigrated = defaultBranchName == 'main';
+    // PRs should never be open to "beta" or "stable."
+    final bool isReleaseChannelBranch = releaseChannels.contains(pr.base?.ref);
+    if ((isMaster && isMigrated) || isReleaseChannelBranch) {
+      body = _getWrongBaseComment(base: baseName, defaultBranch: defaultBranchName);
+      if (!await _alreadyCommented(gitHubClient, pr, body)) {
+        await gitHubClient.pullRequests.edit(
+          slug,
+          pr.number!,
+          base: Config.defaultBranch(slug),
+        );
+        await gitHubClient.issues.createComment(slug, pr.number!, body);
+      }
     }
   }
 
diff --git a/app_dart/lib/src/service/config.dart b/app_dart/lib/src/service/config.dart
index 94fa1de..ff923b6 100644
--- a/app_dart/lib/src/service/config.dart
+++ b/app_dart/lib/src/service/config.dart
@@ -29,14 +29,6 @@
 /// Name of the default git branch.
 const String kDefaultBranchName = 'master';
 
-/// Name of an example release base branch name.
-// TODO(chillers): Delete this as it's only used for tests.
-const String kReleaseBaseRef = 'flutter-2.12-candidate.4';
-
-/// Name of an example release head branch name.
-// TODO(chillers): Delete this as it's only used for tests.
-const String kReleaseHeadRef = 'cherrypicks-flutter-2.12-candidate.4';
-
 class Config {
   Config(this._db, this._cache);
 
diff --git a/app_dart/test/request_handlers/github/webhook_subscription_test.dart b/app_dart/test/request_handlers/github/webhook_subscription_test.dart
index 50cc2e5..4186417 100644
--- a/app_dart/test/request_handlers/github/webhook_subscription_test.dart
+++ b/app_dart/test/request_handlers/github/webhook_subscription_test.dart
@@ -41,6 +41,12 @@
   late MockPullRequestsService pullRequestsService;
   late SubscriptionTester tester;
 
+  /// Name of an example release base branch name.
+  const String kReleaseBaseRef = 'flutter-2.12-candidate.4';
+
+  /// Name of an example release head branch name.
+  const String kReleaseHeadRef = 'cherrypicks-flutter-2.12-candidate.4';
+
   setUp(() {
     request = FakeHttpRequest();
     db = FakeDatastoreDB();
@@ -140,6 +146,42 @@
       )).called(1);
     });
 
+    test('No action against candidate branches', () async {
+      const int issueNumber = 123;
+
+      tester.message = generateGithubWebhookMessage(
+        action: 'opened',
+        number: issueNumber,
+        baseRef: 'flutter-2.13-candidate.0',
+      );
+
+      when(pullRequestsService.listFiles(Config.flutterSlug, issueNumber)).thenAnswer(
+        (_) => Stream<PullRequestFile>.value(
+          PullRequestFile()..filename = 'packages/flutter/blah.dart',
+        ),
+      );
+
+      when(issuesService.listCommentsByIssue(Config.flutterSlug, issueNumber)).thenAnswer(
+        (_) => Stream<IssueComment>.value(
+          IssueComment()..body = 'some other comment',
+        ),
+      );
+
+      await tester.post(webhook);
+
+      verifyNever(pullRequestsService.edit(
+        Config.flutterSlug,
+        issueNumber,
+        base: kDefaultBranchName,
+      ));
+
+      verifyNever(issuesService.createComment(
+        Config.flutterSlug,
+        issueNumber,
+        argThat(contains('-> master')),
+      ));
+    });
+
     test('Acts on opened against dev', () async {
       const int issueNumber = 123;
 
