optimize guaranteed policy logic (#2514)

Guarantee schedule packages repo and optimize guaranteed policy logic
diff --git a/app_dart/lib/src/model/ci_yaml/target.dart b/app_dart/lib/src/model/ci_yaml/target.dart
index 69bc9f2..bbf017d 100644
--- a/app_dart/lib/src/model/ci_yaml/target.dart
+++ b/app_dart/lib/src/model/ci_yaml/target.dart
@@ -7,6 +7,7 @@
 import 'package:cocoon_service/src/service/scheduler/policy.dart';
 import 'package:github/github.dart';
 
+import '../../service/config.dart';
 import '../luci/buildbucket.dart';
 import '../proto/internal/scheduler.pb.dart' as pb;
 
@@ -80,12 +81,14 @@
   ///
   /// Targets not triggered by Cocoon will not be triggered.
   ///
-  /// All targets run with [BatchPolicy] to reduce queue time.
+  /// All targets except from [Config.guaranteedSchedulingRepos] run with [BatchPolicy] to reduce queue time.
   SchedulerPolicy get schedulerPolicy {
     if (value.scheduler != pb.SchedulerSystem.cocoon) {
       return OmitPolicy();
     }
-
+    if (Config.guaranteedSchedulingRepos.contains(slug)) {
+      return GuaranteedPolicy();
+    }
     return BatchPolicy();
   }
 
diff --git a/app_dart/lib/src/service/config.dart b/app_dart/lib/src/service/config.dart
index 64553b2..749be04 100644
--- a/app_dart/lib/src/service/config.dart
+++ b/app_dart/lib/src/service/config.dart
@@ -49,6 +49,12 @@
         pluginsSlug,
       };
 
+  /// List of guaranteed scheduling Github repos.
+  static Set<gh.RepositorySlug> get guaranteedSchedulingRepos => <gh.RepositorySlug>{
+        engineSlug,
+        packagesSlug,
+      };
+
   /// List of Github postsubmit supported repos.
   ///
   /// This adds support for check runs to the repo.
diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart
index 07dfe33..1d0d635 100644
--- a/app_dart/lib/src/service/scheduler.dart
+++ b/app_dart/lib/src/service/scheduler.dart
@@ -135,8 +135,8 @@
     for (Target target in initialTargets) {
       final Task task = tasks.singleWhere((Task task) => task.name == target.value.name);
       SchedulerPolicy policy = target.schedulerPolicy;
-      // Engine repo and release branches should run every task
-      if (commit.slug == Config.engineSlug || Config.defaultBranch(commit.slug) != commit.branch) {
+      // Release branches should run every task
+      if (Config.defaultBranch(commit.slug) != commit.branch) {
         policy = GuaranteedPolicy();
       }
       final int? priority = await policy.triggerPriority(task: task, datastore: datastore);
diff --git a/app_dart/test/model/ci_yaml/target_test.dart b/app_dart/test/model/ci_yaml/target_test.dart
index 9306439..fa7e99d 100644
--- a/app_dart/test/model/ci_yaml/target_test.dart
+++ b/app_dart/test/model/ci_yaml/target_test.dart
@@ -6,6 +6,7 @@
 import 'package:cocoon_service/src/model/luci/buildbucket.dart';
 import 'package:cocoon_service/src/model/proto/protos.dart' as pb;
 import 'package:cocoon_service/src/service/scheduler/policy.dart';
+import 'package:github/github.dart' as github;
 import 'package:test/test.dart';
 
 import '../../src/utilities/entity_generators.dart';
@@ -379,6 +380,11 @@
       test('vm cocoon targets return batch policy', () {
         expect(generateTarget(1, platform: 'Linux').schedulerPolicy, isA<BatchPolicy>());
       });
+
+      test('packages targets use guaranteed policy', () {
+        expect(generateTarget(1, platform: 'Mac', slug: github.RepositorySlug('flutter', 'packages')).schedulerPolicy,
+            isA<GuaranteedPolicy>());
+      });
     });
   });
 }
diff --git a/app_dart/test/service/scheduler_test.dart b/app_dart/test/service/scheduler_test.dart
index 40d2030..77a2c40 100644
--- a/app_dart/test/service/scheduler_test.dart
+++ b/app_dart/test/service/scheduler_test.dart
@@ -349,8 +349,8 @@
 
         expect(db.values.values.whereType<Commit>().length, 1);
         expect(db.values.values.whereType<Task>().length, 3);
-        // Ensure all tasks have been marked in progress
-        expect(db.values.values.whereType<Task>().where((Task task) => task.status == Task.statusNew), isEmpty);
+        // Ensure all tasks under cocoon scheduler have been marked in progress
+        expect(db.values.values.whereType<Task>().where((Task task) => task.status == Task.statusInProgress).length, 2);
       });
 
       test('does not schedule tasks against non-merged PRs', () async {