create presubmit_guard for non flutter repos in unified check run flow (#5055)

fix: https://github.com/flutter/flutter/issues/186485
diff --git a/app_dart/lib/src/model/firestore/base.dart b/app_dart/lib/src/model/firestore/base.dart
index 39444bc..712da42 100644
--- a/app_dart/lib/src/model/firestore/base.dart
+++ b/app_dart/lib/src/model/firestore/base.dart
@@ -13,7 +13,10 @@
   fusionEngineBuild('engine'),
 
   /// All non-engine artifact tests (engine & framework)
-  fusionTests('fusion');
+  fusionTests('fusion'),
+
+  /// All tests artifacts from non-flutter repositories
+  genericTests('generic');
 
   const CiStage(this.name);
 
diff --git a/app_dart/lib/src/service/luci_build_service.dart b/app_dart/lib/src/service/luci_build_service.dart
index b230d80..ea18469 100644
--- a/app_dart/lib/src/service/luci_build_service.dart
+++ b/app_dart/lib/src/service/luci_build_service.dart
@@ -295,6 +295,9 @@
       // We need to store PR to checkrun mapping in order to get PR later in
       // [Scheduler.proceedUnifiedCheckRunToTestingStage] method
       checkRuns.add(checkRunGuard);
+      log.info(
+        'Created unified check run ${checkRunGuard.id} for PR# ${pullRequest.number}',
+      );
     }
 
     for (final MapEntry(key: target, value: attemptNumber) in targets.entries) {
diff --git a/app_dart/lib/src/service/luci_build_service/user_data.g.dart b/app_dart/lib/src/service/luci_build_service/user_data.g.dart
index c6f4412..f67563c 100644
--- a/app_dart/lib/src/service/luci_build_service/user_data.g.dart
+++ b/app_dart/lib/src/service/luci_build_service/user_data.g.dart
@@ -69,6 +69,7 @@
 const _$CiStageEnumMap = {
   CiStage.fusionEngineBuild: 'fusionEngineBuild',
   CiStage.fusionTests: 'fusionTests',
+  CiStage.genericTests: 'genericTests',
 };
 
 PostsubmitUserData _$PostsubmitUserDataFromJson(Map<String, dynamic> json) =>
diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart
index 18fcdb7..b0a157d 100644
--- a/app_dart/lib/src/service/scheduler.dart
+++ b/app_dart/lib/src/service/scheduler.dart
@@ -453,6 +453,20 @@
           // See https://github.com/flutter/flutter/issues/165810.
           engineArtifacts = EngineArtifacts.usingExistingEngine(commitSha: sha);
         } else {
+          // For non-flutter repos, if unified check run flow is enabled, create
+          // a staging document to track presubmit tests.
+          if (isUnifiedCheckRun) {
+            await UnifiedCheckRun.initializeCiStagingDocument(
+              firestoreService: _firestore,
+              slug: slug,
+              sha: sha,
+              stage: CiStage.genericTests,
+              tasks: [...presubmitTriggerTargets.map((t) => t.name)],
+              pullRequest: pullRequest,
+              config: _config,
+              checkRun: lock,
+            );
+          }
           engineArtifacts = const EngineArtifacts.noFrameworkTests(
             reason: 'This is not the flutter/flutter repository',
           );
@@ -781,6 +795,7 @@
           (Target target) => switch (stage) {
             CiStage.fusionEngineBuild => target.isReleaseBuild,
             CiStage.fusionTests => !target.isReleaseBuild,
+            _ => true, // Include all targets for non-flutter repositories
           },
         );
 
@@ -1261,6 +1276,11 @@
           sha: check.sha,
           logCrumb: logCrumb,
         );
+      case CiStage.genericTests:
+        // generic tests do not have a staging document nor are associated
+        // with a merge group - they are only used to collect commit stats.
+        log.warn('$logCrumb: generic tests have no merge queue guard.');
+        break;
     }
     return true;
   }
@@ -1337,6 +1357,7 @@
           (Target target) => switch (stage) {
             CiStage.fusionEngineBuild => target.isReleaseBuild,
             CiStage.fusionTests => !target.isReleaseBuild,
+            _ => true, // Include all targets for non-flutter repositories
           },
         );
     return [...presubmitTargets];