Reland "cq_deps: Process deps of unsubmitted parents"

This is a reland of 4d75afbb8c0b2344df68ad888515611e376acaa6

Original change's description:
> cq_deps: Process deps of unsubmitted parents
>
> Process dependencies of unsubmitted parent CLs. If CL A has parent B and
> B is unsubmitted and depends on C in another repository, cq_deps will
> list C as a dependency of A.
>
> There are a couple corner cases. If A depends an B and B depends on C
> which is an unsubmitted parent of A, then C is not listed as a
> dependency of A—that dependency is already implicit when patching in A.
>
> Another corner case is that in the same case as above (A depends on B
> depends on C which is an unsubmitted parent of A) except A is based on
> an out-of-date version of C. In this case tryjobs for B and C will
> check out code successfully but tryjobs for A will fail because it's not
> based on a current version of its parent.
>
> Change-Id: I21e4ad9ee44f8a0354c026db6daa2f8e66c118bf
> Bug: 233
> Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/22182
> Commit-Queue: Rob Mohr <mohrr@google.com>
> Reviewed-by: Marc-Antoine Ruel <maruel@google.com>

Bug: 233
Change-Id: I312ce80598fa87263947a03b4b480ca576d3e3ee
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/22151
Commit-Queue: Rob Mohr <mohrr@google.com>
Reviewed-by: Marc-Antoine Ruel <maruel@google.com>
diff --git a/recipe_modules/checkout/tests/git.expected/try.json b/recipe_modules/checkout/tests/git.expected/try.json
index 3813ac9..40ef3cc 100644
--- a/recipe_modules/checkout/tests/git.expected/try.json
+++ b/recipe_modules/checkout/tests/git.expected/try.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/feature_branches_try.json b/recipe_modules/checkout/tests/repo.expected/feature_branches_try.json
index 1deb778..ac6db95 100644
--- a/recipe_modules/checkout/tests/repo.expected/feature_branches_try.json
+++ b/recipe_modules/checkout/tests/repo.expected/feature_branches_try.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_features.json b/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_features.json
index ba083a8..9fc7cb9 100644
--- a/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_features.json
+++ b/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_features.json
@@ -154,7 +154,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -164,10 +169,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details default:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents default:2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for default:2345",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_matches.json b/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_matches.json
index fcabfe9..fb0d9d8 100644
--- a/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_matches.json
+++ b/recipe_modules/checkout/tests/repo.expected/feature_branches_try_multiple_matches.json
@@ -157,7 +157,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -167,10 +172,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details default:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents default:2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for default:2345",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/try-multiple-cqdeps.json b/recipe_modules/checkout/tests/repo.expected/try-multiple-cqdeps.json
index e17df77..b9c79cf 100644
--- a/recipe_modules/checkout/tests/repo.expected/try-multiple-cqdeps.json
+++ b/recipe_modules/checkout/tests/repo.expected/try-multiple-cqdeps.json
@@ -103,8 +103,7 @@
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LINK@default:2345@https://default-review.googlesource.com/2345@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
@@ -129,7 +128,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: default:2345\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: default:2345\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1234\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -139,6 +143,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1234\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-1234",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 897@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"897\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:897",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:1234",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:1234",
     "~followup_annotations": [
@@ -168,7 +237,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2345\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -178,10 +252,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2345\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 901@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"901\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details default:901",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents default:2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for default:2345",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/try-multiple-onenotapplied.json b/recipe_modules/checkout/tests/repo.expected/try-multiple-onenotapplied.json
index b139c09..3838648 100644
--- a/recipe_modules/checkout/tests/repo.expected/try-multiple-onenotapplied.json
+++ b/recipe_modules/checkout/tests/repo.expected/try-multiple-onenotapplied.json
@@ -186,7 +186,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -196,10 +201,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:3456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:3456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/try-multiple.json b/recipe_modules/checkout/tests/repo.expected/try-multiple.json
index d03a0f2..8a5130c 100644
--- a/recipe_modules/checkout/tests/repo.expected/try-multiple.json
+++ b/recipe_modules/checkout/tests/repo.expected/try-multiple.json
@@ -154,7 +154,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -164,10 +169,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://default-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details default:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents default:2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for default:2345",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/try.json b/recipe_modules/checkout/tests/repo.expected/try.json
index a30a200..0af035d 100644
--- a/recipe_modules/checkout/tests/repo.expected/try.json
+++ b/recipe_modules/checkout/tests/repo.expected/try.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/try_manifest.json b/recipe_modules/checkout/tests/repo.expected/try_manifest.json
index 533f3f2..b447d8a 100644
--- a/recipe_modules/checkout/tests/repo.expected/try_manifest.json
+++ b/recipe_modules/checkout/tests/repo.expected/try_manifest.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/repo.expected/try_repo_not_in_manifest.json b/recipe_modules/checkout/tests/repo.expected/try_repo_not_in_manifest.json
index f843dbf..77f3b52 100644
--- a/recipe_modules/checkout/tests/repo.expected/try_repo_not_in_manifest.json
+++ b/recipe_modules/checkout/tests/repo.expected/try_repo_not_in_manifest.json
@@ -130,7 +130,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -140,10 +145,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://foo-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://foo-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details foo:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents foo:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for foo:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/submodule.expected/submodule-try-gibberish.json b/recipe_modules/checkout/tests/submodule.expected/submodule-try-gibberish.json
index 31a8c3f..c4fc717 100644
--- a/recipe_modules/checkout/tests/submodule.expected/submodule-try-gibberish.json
+++ b/recipe_modules/checkout/tests/submodule.expected/submodule-try-gibberish.json
@@ -130,7 +130,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -140,10 +145,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details x:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents x:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for x:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-cqdeps.json b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-cqdeps.json
index af20b03..59778ef 100644
--- a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-cqdeps.json
+++ b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-cqdeps.json
@@ -103,9 +103,7 @@
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LINK@x:2345@https://x-review.googlesource.com/2345@@@",
-      "@@@STEP_LINK@pigweed:3456@https://pigweed-review.googlesource.com/3456@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
@@ -130,7 +128,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: x:2345,pigweed:3456\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: x:2345,pigweed:3456\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1234\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -140,6 +143,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1234\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-1234",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 897@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"897\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details x:897",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents x:1234",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for x:1234",
     "~followup_annotations": [
@@ -170,7 +238,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2345\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -182,6 +255,63 @@
   {
     "cmd": [
       "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2345\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 901@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"901\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details x:901",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
       "change-detail",
       "-host",
       "https://pigweed-review.googlesource.com",
@@ -201,7 +331,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-3456\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -211,17 +346,92 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-3456\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-3456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 905@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"905\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:905",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:3456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:3456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents x:2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
     ]
   },
   {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for x:2345",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing-one-forbidden-cqdeps.json b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing-one-forbidden-cqdeps.json
index 7e060c5..93a5b9b 100644
--- a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing-one-forbidden-cqdeps.json
+++ b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing-one-forbidden-cqdeps.json
@@ -109,9 +109,7 @@
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@3@@@",
-      "@@@STEP_LINK@x:2345@https://x-review.googlesource.com/2345@@@",
-      "@@@STEP_LINK@pigweed:3456@https://pigweed-review.googlesource.com/3456@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
@@ -136,7 +134,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: x:2345,pigweed:3456,forbidden:9999\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: x:2345,pigweed:3456,forbidden:9999\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1234\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -146,6 +149,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1234\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-1234",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 897@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"897\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details x:897",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents x:1234",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for x:1234",
     "~followup_annotations": [
@@ -177,7 +245,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2345\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -189,6 +262,63 @@
   {
     "cmd": [
       "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2345\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 901@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"901\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details x:901",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
       "change-detail",
       "-host",
       "https://pigweed-review.googlesource.com",
@@ -208,7 +338,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-3456\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -220,6 +355,63 @@
   {
     "cmd": [
       "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-3456\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number parent-3456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 905@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"905\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:905",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
       "change-detail",
       "-host",
       "https://forbidden-review.googlesource.com",
@@ -238,16 +430,34 @@
   },
   {
     "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:3456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
+    "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:3456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents x:2345",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
     ]
   },
   {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for x:2345",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing.json b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing.json
index 9d3052b..53ca1e1 100644
--- a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing.json
+++ b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple-one-missing.json
@@ -186,7 +186,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -196,10 +201,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:3456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:3456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple.json b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple.json
index 7765e6b..9c284e2 100644
--- a/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple.json
+++ b/recipe_modules/checkout/tests/submodule.expected/submodule-try-multiple.json
@@ -181,7 +181,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -191,10 +196,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:3456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:3456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/submodule.expected/submodule-try-not-found.json b/recipe_modules/checkout/tests/submodule.expected/submodule-try-not-found.json
index 0419ed4..d3a6817 100644
--- a/recipe_modules/checkout/tests/submodule.expected/submodule-try-not-found.json
+++ b/recipe_modules/checkout/tests/submodule.expected/submodule-try-not-found.json
@@ -130,7 +130,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -140,10 +145,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details x:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents x:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for x:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/checkout/tests/submodule.expected/submodule-try.json b/recipe_modules/checkout/tests/submodule.expected/submodule-try.json
index b8687c4..65d6f68 100644
--- a/recipe_modules/checkout/tests/submodule.expected/submodule-try.json
+++ b/recipe_modules/checkout/tests/submodule.expected/submodule-try.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://x-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details x:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents x:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for x:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/api.py b/recipe_modules/cq_deps/api.py
index 53f361a..0ca3b50 100644
--- a/recipe_modules/cq_deps/api.py
+++ b/recipe_modules/cq_deps/api.py
@@ -30,10 +30,12 @@
     """
 
     gerrit_name = attr.ib(type=str)
-    change = attr.ib(type=int)
+    change = attr.ib(converter=int)
     project = attr.ib(type=str, default=None)
     patchset = attr.ib(type=int, default=None)
     status = attr.ib(type=str, default=None)
+    commit = attr.ib(type=str, default=None)
+    parents = attr.ib(type=list, default=attr.Factory(list))
 
     @property
     def host(self):
@@ -58,6 +60,20 @@
         super(CqDepsApi, self).__init__(*args, **kwargs)
         self._details = {}
 
+    def _lookup_cl(self, gerrit_name, commit):
+        query_results = self.m.gerrit.change_query(
+            'number {}'.format(commit),
+            'commit:{}'.format(commit),
+            host='{}-review.googlesource.com'.format(gerrit_name),
+            # The strange value for _number is to ensure different hashes result
+            # in different CL numbers by default. This way we don't accidentally
+            # create a cycle by specifying a fixed default value.
+            test_data=self.m.json.test_api.output(
+                [{'_number': sum(ord(x) for x in commit),}]
+            ),
+        ).json.output
+        return query_results[0]
+
     def resolve(self, gerrit_name, number, statuses=('NEW',)):
         """Recursively resolve dependencies of a CL.
 
@@ -76,23 +92,21 @@
 
         Returns a tuple of resolved Change objects (excluding the given change)
         and unresolved Change objects (which are not completely populated).
+        This includes dependencies of parent changes with 'NEW' status but not
+        the parent changes themselves.
         """
 
         with self.m.step.nest('resolve CL deps', status='last') as pres:
             if isinstance(number, str):
-                query_results = self.m.gerrit.change_query(
-                    'number',
-                    dict(commit=number),
-                    host='{}-review.googlesource.com'.format(gerrit_name),
-                    test_data=self.m.json.test_api.output([{'_number': 1}]),
-                ).json.output
-                number = query_results[0]['_number']
+                number = self._lookup_cl(gerrit_name, number)['_number']
 
+            seen = set()
             deps = {}
+            parents = []
             unresolved = []
             initial_change = Change(gerrit_name, number)
-            to_process = [initial_change]
-            # Want all initial details calls to come from this function so
+            to_process = [initial_change] + initial_change.parents
+            # Want all initial details calls to come from this step level so
             # their step names are predictable. Further calls can be made
             # anywhere and will hit the cache.
             _ = self._change_details(initial_change)
@@ -100,6 +114,20 @@
             while to_process:
                 current = to_process.pop()
                 deps[current.name] = current
+                seen.add(current.name)
+
+                parents.extend(current.parents)
+                to_process.extend(
+                    x for x in current.parents if x.name not in seen
+                )
+
+                with self.m.step.nest('parents {}'.format(current.name)) as pres:
+                    if current.parents:
+                        pres.step_summary_text = ', '.join(
+                            x.name for x in current.parents
+                        )
+                    else:
+                        pres.step_summary_text = 'all parents already submitted'
 
                 for dep in self._resolve(current):
                     if dep.name not in deps:
@@ -110,10 +138,19 @@
                         if details['status'] not in statuses:
                             continue
 
-                        to_process.append(dep)
+                        if dep.name not in seen:
+                            to_process.append(dep)
                         deps[dep.name] = dep
 
+            # If any dependency is a parent of another dependency remove the
+            # parent since it's already being accounted for by patching in its
+            # child.
+            for parent in parents:
+                if parent.name in deps:
+                    del deps[parent.name]
+
             del deps[initial_change.name]
+
             for dep in deps.itervalues():
                 pres.links[dep.name] = dep.link
 
@@ -124,6 +161,51 @@
 
             return deps.values(), unresolved
 
+    def _parse_commit_message(self, change):
+        """Convert a commit message into a dependency list.
+
+        For example,
+
+            Requires: gerritname:1, commas-supported:2
+            Requires: name:4,spaces-not-required:3
+            Requires: 5,,,,extra-commas-ignored:6,,,,
+
+        becomes
+
+            [
+                Change("gerritname", 1),
+                Change("commas-supported", 2),
+                Change("spaces-not-required", 3),
+                Change("name", 4),
+                Change(change.gerrit_name, 5),
+                Change("extra-commas-ignored", 6),
+            ]
+        """
+
+        details = self._change_details(change)
+        current_revision = details['revisions'][details['current_revision']]
+        commit_message = current_revision['commit']['message']
+        last_paragraph = commit_message.split('\n\n')[-1]
+
+        for line in last_paragraph.split('\n'):
+            if ':' not in line:
+                continue
+            name, value = line.split(':', 1)
+
+            if name != 'Requires':
+                continue
+
+            values = value.split(',')
+            for val in values:
+                val = val.strip()
+                if not val:
+                    continue
+                try:
+                    gerrit_name, number = val.split(':', 1)
+                    yield Change(gerrit_name, number)
+                except ValueError:
+                    yield Change(change.gerrit_name, val)
+
     def _resolve(self, change):
         """Resolve dependencies of the given change.
 
@@ -135,42 +217,22 @@
         Args:
             change (Change): Change to resolve dependencies for.
 
-        Returns a list of changes on which the given change depends.
+        Returns a list of changes on which the given change depends. This
+        includes dependencies of parent changes with 'NEW' status but not the
+        parent changes themselves.
         """
 
         with self.m.step.nest('resolve deps for {}'.format(change)) as pres:
-            result = self._change_details(change)
             deps = []
-
-            current_revision = result['revisions'][result['current_revision']]
-            commit_message = current_revision['commit']['message']
-            last_paragraph = commit_message.split('\n\n')[-1]
-
-            for line in last_paragraph.split('\n'):
-                if ':' not in line:
-                    continue
-                name, value = line.split(':', 1)
-
-                if name != 'Requires':
-                    continue
-
-                values = value.split(',')
-                for val in values:
-                    val = val.strip()
-                    if not val:
-                        continue
-                    try:
-                        gerrit_name, number = val.split(':', 1)
-                    except ValueError:
-                        gerrit_name = change.gerrit_name
-                        number = val
-                    deps.append(Change(gerrit_name, int(number)))
-
-            for dep in deps:
+            for dep in self._parse_commit_message(change):
+                deps.append(dep)
                 pres.links[dep.name] = dep.link
+            if not deps:
+                pres.step_summary_text = 'no dependencies'
             return deps
 
-    def _change_details(self, change):
+    def _change_details(self, change, _kw_only=(), test_status='NEW'):
+        assert not _kw_only
         if change.name in self._details:
             return self._details[change.name]
 
@@ -185,10 +247,16 @@
                     {
                         'current_revision': 'HASH',
                         'revisions': {
-                            'HASH': {'_number': 1, 'commit': {'message': ''}}
+                            'HASH': {
+                                '_number': 1,
+                                'commit': {
+                                    'message': '',
+                                    'parents': [{'commit': 'PARENT',}],
+                                },
+                            }
                         },
                         'project': 'project',
-                        'status': 'NEW',
+                        'status': test_status,
                     }
                 ),
             )
@@ -200,9 +268,35 @@
         self._details[change.name] = details
         if details:
             change.project = details['project']
-            change.patchset = details['revisions'][details['current_revision']][
-                '_number'
-            ]
+            current_revision = details['revisions'][details['current_revision']]
+            change.patchset = current_revision['_number']
             change.status = details['status']
+            change.commit = details['current_revision']
+
+            # If this CL is unsubmitted grab its parent and put it in the
+            # cache. We could have several submitted parents in self._details,
+            # but that's ok.
+            if details['status'] == 'NEW':
+                for parent in current_revision['commit']['parents']:
+                    parent_change = Change(
+                        gerrit_name=change.gerrit_name,
+                        change=self._lookup_cl(
+                            change.gerrit_name, parent['commit'],
+                        )['_number'],
+                    )
+                    self._change_details(parent_change, test_status='SUBMITTED')
+                    if parent_change.status == 'NEW':
+                        if parent_change.commit != parent['commit']:
+                            raise self.m.step.StepFailure(
+                                '{} has parent {} which is not the current '
+                                'revision of its parent, {} ({})'.format(
+                                    change.name,
+                                    parent['commit'],
+                                    parent_change.name,
+                                    parent_change.commit,
+                                )
+                            )
+
+                        change.parents.append(parent_change)
 
         return self._details[change.name]
diff --git a/recipe_modules/cq_deps/test_api.py b/recipe_modules/cq_deps/test_api.py
index a90c1e6..e57a884 100644
--- a/recipe_modules/cq_deps/test_api.py
+++ b/recipe_modules/cq_deps/test_api.py
@@ -17,6 +17,12 @@
 
 
 class CqDepsTestApi(recipe_test_api.RecipeTestApi):
+    def lookup_cl(self, hash, number, prefix=''):
+        return self.override_step_data(
+            '{}resolve CL deps.number {}'.format(prefix, hash),
+            self.m.json.output([{'_number': number}]),
+        )
+
     def _step_name(self, prefix, name, n):
         return '{}resolve CL deps.details {}{}'.format(
             prefix, name, ' ({})'.format(n) if n else '',
@@ -31,19 +37,29 @@
         patchset=1,
         prefix='',
         retcode=0,
+        hash='HASH',
+        parent=None,
         n=None,
     ):
+        number = int(name.split(':')[1])
+
+        if not parent:
+            parent = 'parent-{}'.format(number)
+
         return self.override_step_data(
             self._step_name(prefix, name, n),
             self.m.json.output(
                 {
-                    '_number': int(name.split(':')[1]),
-                    'current_revision': 'HASH',
+                    '_number': number,
+                    'current_revision': hash,
                     'project': project,
                     'revisions': {
-                        'HASH': {
+                        hash: {
                             '_number': patchset,
-                            'commit': {'message': message},
+                            'commit': {
+                                'message': message,
+                                'parents': [{'commit': parent,}],
+                            },
                         }
                     },
                     'status': status,
diff --git a/recipe_modules/cq_deps/tests/full.expected/abandoned.json b/recipe_modules/cq_deps/tests/full.expected/abandoned.json
index 08921f9..a861b64 100644
--- a/recipe_modules/cq_deps/tests/full.expected/abandoned.json
+++ b/recipe_modules/cq_deps/tests/full.expected/abandoned.json
@@ -80,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -90,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -119,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
diff --git a/recipe_modules/cq_deps/tests/full.expected/bad_field_name.json b/recipe_modules/cq_deps/tests/full.expected/bad_field_name.json
index 10c85b9..e02b58d 100644
--- a/recipe_modules/cq_deps/tests/full.expected/bad_field_name.json
+++ b/recipe_modules/cq_deps/tests/full.expected/bad_field_name.json
@@ -80,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Depends: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Depends: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -90,10 +95,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/commas.json b/recipe_modules/cq_deps/tests/full.expected/commas.json
index aec82a6..6fde172 100644
--- a/recipe_modules/cq_deps/tests/full.expected/commas.json
+++ b/recipe_modules/cq_deps/tests/full.expected/commas.json
@@ -1,10 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -83,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: ,,pigweed:2,\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: ,,pigweed:2,\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -93,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -121,7 +188,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -131,10 +203,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/dependency-requires-parent.json b/recipe_modules/cq_deps/tests/full.expected/dependency-requires-parent.json
new file mode 100644
index 0000000..34f75e6
--- /dev/null
+++ b/recipe_modules/cq_deps/tests/full.expected/dependency-requires-parent.json
@@ -0,0 +1,300 @@
+[
+  {
+    "cmd": [],
+    "name": "resolve CL deps"
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.install infra/tools/luci/gerrit",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest"
+    ],
+    "infra_step": true,
+    "name": "resolve CL deps.install infra/tools/luci/gerrit.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest",
+      "-ensure-file",
+      "infra/tools/luci/gerrit/${platform} latest",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "infra_step": true,
+    "name": "resolve CL deps.install infra/tools/luci/gerrit.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"1\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PIGWEED2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"NEW\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PIGWEED2\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PIGWEED2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 2@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"2\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.resolve deps for pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@pigweed:3@https://pigweed-review.googlesource.com/3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"3\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 3, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"NEW\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-3\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 746@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"746\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:746",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.resolve deps for pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.pass",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "final deps"
+  },
+  {
+    "cmd": [],
+    "name": "final deps.pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/cq_deps/tests/full.expected/error.json b/recipe_modules/cq_deps/tests/full.expected/error.json
index 175aaed..a768304 100644
--- a/recipe_modules/cq_deps/tests/full.expected/error.json
+++ b/recipe_modules/cq_deps/tests/full.expected/error.json
@@ -80,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -90,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
diff --git a/recipe_modules/cq_deps/tests/full.expected/error_recovery.json b/recipe_modules/cq_deps/tests/full.expected/error_recovery.json
index fcb0a98..e642491 100644
--- a/recipe_modules/cq_deps/tests/full.expected/error_recovery.json
+++ b/recipe_modules/cq_deps/tests/full.expected/error_recovery.json
@@ -1,10 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -83,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -93,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -185,7 +252,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -195,10 +267,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 745@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"745\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:745",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/forbidden.json b/recipe_modules/cq_deps/tests/full.expected/forbidden.json
index bf81dc9..d0e696f 100644
--- a/recipe_modules/cq_deps/tests/full.expected/forbidden.json
+++ b/recipe_modules/cq_deps/tests/full.expected/forbidden.json
@@ -80,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: forbidden:1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: forbidden:1\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -90,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
diff --git a/recipe_modules/cq_deps/tests/full.expected/hash.json b/recipe_modules/cq_deps/tests/full.expected/hash.json
index ed2003f..058f51f 100644
--- a/recipe_modules/cq_deps/tests/full.expected/hash.json
+++ b/recipe_modules/cq_deps/tests/full.expected/hash.json
@@ -65,11 +65,11 @@
       "-host",
       "https://pigweed-review.googlesource.com",
       "-input",
-      "{\"params\": {\"q\": {\"commit\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"}}}",
+      "{\"params\": {\"q\": \"commit:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"}}",
       "-output",
       "/path/to/tmp/json"
     ],
-    "name": "resolve CL deps.number",
+    "name": "resolve CL deps.number bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
       "@@@STEP_LOG_LINE@json.output@[@@@",
@@ -102,7 +102,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -112,10 +117,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/loop_three.json b/recipe_modules/cq_deps/tests/full.expected/loop_three.json
index 964f67d..9c44e91 100644
--- a/recipe_modules/cq_deps/tests/full.expected/loop_three.json
+++ b/recipe_modules/cq_deps/tests/full.expected/loop_three.json
@@ -1,11 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@",
-      "@@@STEP_LINK@pigweed:3@https://pigweed-review.googlesource.com/3@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -84,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -94,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -123,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -133,6 +204,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 745@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"745\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:745",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
@@ -162,7 +298,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:1\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -172,6 +313,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-3\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 746@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"746\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:746",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:3",
     "~followup_annotations": [
diff --git a/recipe_modules/cq_deps/tests/full.expected/loop_two.json b/recipe_modules/cq_deps/tests/full.expected/loop_two.json
index be4bde6..a0e1e4c 100644
--- a/recipe_modules/cq_deps/tests/full.expected/loop_two.json
+++ b/recipe_modules/cq_deps/tests/full.expected/loop_two.json
@@ -1,10 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -83,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -93,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -122,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:1\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -132,6 +204,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 745@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"745\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:745",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
diff --git a/recipe_modules/cq_deps/tests/full.expected/merged_ok.json b/recipe_modules/cq_deps/tests/full.expected/merged_ok.json
index 985b67e..3d5765c 100644
--- a/recipe_modules/cq_deps/tests/full.expected/merged_ok.json
+++ b/recipe_modules/cq_deps/tests/full.expected/merged_ok.json
@@ -1,11 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@",
-      "@@@STEP_LINK@pigweed:3@https://pigweed-review.googlesource.com/3@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -84,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -94,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -123,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -134,6 +205,14 @@
   },
   {
     "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
+    "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
@@ -161,7 +240,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -171,10 +255,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:3",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/merged_skipped.json b/recipe_modules/cq_deps/tests/full.expected/merged_skipped.json
index 806604f..7d3e1be 100644
--- a/recipe_modules/cq_deps/tests/full.expected/merged_skipped.json
+++ b/recipe_modules/cq_deps/tests/full.expected/merged_skipped.json
@@ -80,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -90,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -119,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
diff --git a/recipe_modules/cq_deps/tests/full.expected/multiline.json b/recipe_modules/cq_deps/tests/full.expected/multiline.json
index 7d4c9c8..53efddd 100644
--- a/recipe_modules/cq_deps/tests/full.expected/multiline.json
+++ b/recipe_modules/cq_deps/tests/full.expected/multiline.json
@@ -1,11 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@",
-      "@@@STEP_LINK@pigweed:3@https://pigweed-review.googlesource.com/3@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -84,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\\nRequires: pigweed:3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\\nRequires: pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -94,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -123,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -135,6 +206,63 @@
   {
     "cmd": [
       "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
       "change-detail",
       "-host",
       "https://pigweed-review.googlesource.com",
@@ -153,7 +281,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -163,17 +296,57 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:3",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
     ]
   },
   {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/no_gerrit_name.json b/recipe_modules/cq_deps/tests/full.expected/no_gerrit_name.json
index 5910c31..259f0b6 100644
--- a/recipe_modules/cq_deps/tests/full.expected/no_gerrit_name.json
+++ b/recipe_modules/cq_deps/tests/full.expected/no_gerrit_name.json
@@ -1,10 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -83,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: 2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: 2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -93,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -121,7 +188,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -131,10 +203,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/no_space.json b/recipe_modules/cq_deps/tests/full.expected/no_space.json
index a235543..564ce01 100644
--- a/recipe_modules/cq_deps/tests/full.expected/no_space.json
+++ b/recipe_modules/cq_deps/tests/full.expected/no_space.json
@@ -1,11 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@",
-      "@@@STEP_LINK@pigweed:3@https://pigweed-review.googlesource.com/3@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -84,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2,pigweed:3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2,pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -94,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -123,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -135,6 +206,63 @@
   {
     "cmd": [
       "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
       "change-detail",
       "-host",
       "https://pigweed-review.googlesource.com",
@@ -153,7 +281,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -163,17 +296,57 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:3",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
     ]
   },
   {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/one.json b/recipe_modules/cq_deps/tests/full.expected/one.json
index 7360990..47bb865 100644
--- a/recipe_modules/cq_deps/tests/full.expected/one.json
+++ b/recipe_modules/cq_deps/tests/full.expected/one.json
@@ -1,10 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -83,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -93,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -121,7 +188,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -131,10 +203,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/out-of-date-parent.json b/recipe_modules/cq_deps/tests/full.expected/out-of-date-parent.json
new file mode 100644
index 0000000..d86c076
--- /dev/null
+++ b/recipe_modules/cq_deps/tests/full.expected/out-of-date-parent.json
@@ -0,0 +1,222 @@
+[
+  {
+    "cmd": [],
+    "name": "resolve CL deps",
+    "~followup_annotations": [
+      "@@@STEP_FAILURE@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.install infra/tools/luci/gerrit",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest"
+    ],
+    "infra_step": true,
+    "name": "resolve CL deps.install infra/tools/luci/gerrit.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest",
+      "-ensure-file",
+      "infra/tools/luci/gerrit/${platform} latest",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "infra_step": true,
+    "name": "resolve CL deps.install infra/tools/luci/gerrit.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"1\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"OUTOFDATE\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"NEW\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:OUTOFDATE\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number OUTOFDATE",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 2@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"2\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 2, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"CURRENT\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"CURRENT\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"NEW\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 745@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"745\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:745",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "failure": {
+      "failure": {},
+      "humanReason": "pigweed:1 has parent OUTOFDATE which is not the current revision of its parent, pigweed:2 (CURRENT)"
+    },
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/cq_deps/tests/full.expected/two.json b/recipe_modules/cq_deps/tests/full.expected/two.json
index 7a4724d..ddcdee0 100644
--- a/recipe_modules/cq_deps/tests/full.expected/two.json
+++ b/recipe_modules/cq_deps/tests/full.expected/two.json
@@ -1,11 +1,7 @@
 [
   {
     "cmd": [],
-    "name": "resolve CL deps",
-    "~followup_annotations": [
-      "@@@STEP_LINK@pigweed:2@https://pigweed-review.googlesource.com/2@@@",
-      "@@@STEP_LINK@pigweed:3@https://pigweed-review.googlesource.com/3@@@"
-    ]
+    "name": "resolve CL deps"
   },
   {
     "cmd": [],
@@ -84,7 +80,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2, pigweed:3\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:2, pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-1\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -94,6 +95,71 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-1\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 744@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"744\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:744",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:1",
     "~followup_annotations": [
@@ -123,7 +189,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -135,6 +206,63 @@
   {
     "cmd": [
       "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
       "change-detail",
       "-host",
       "https://pigweed-review.googlesource.com",
@@ -153,7 +281,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -163,17 +296,57 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:3",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
     ]
   },
   {
     "cmd": [],
     "name": "resolve CL deps.resolve deps for pigweed:2",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipe_modules/cq_deps/tests/full.expected/unsubmitted-parent-dependencies.json b/recipe_modules/cq_deps/tests/full.expected/unsubmitted-parent-dependencies.json
new file mode 100644
index 0000000..fd58bd4
--- /dev/null
+++ b/recipe_modules/cq_deps/tests/full.expected/unsubmitted-parent-dependencies.json
@@ -0,0 +1,373 @@
+[
+  {
+    "cmd": [],
+    "name": "resolve CL deps"
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.install infra/tools/luci/gerrit",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest"
+    ],
+    "infra_step": true,
+    "name": "resolve CL deps.install infra/tools/luci/gerrit.ensure package directory",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "cipd",
+      "ensure",
+      "-root",
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest",
+      "-ensure-file",
+      "infra/tools/luci/gerrit/${platform} latest",
+      "-max-threads",
+      "0",
+      "-json-output",
+      "/path/to/tmp/json"
+    ],
+    "infra_step": true,
+    "name": "resolve CL deps.install infra/tools/luci/gerrit.ensure_installed",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"1\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PIGWEED2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"NEW\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PIGWEED2\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PIGWEED2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 2@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"2\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 2, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"PIGWEED2\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"PIGWEED2\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"Requires: pigweed:3\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"parent-2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"NEW\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:parent-2\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number parent-2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 745@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"745\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:745",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@pigweed:2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.resolve deps for pigweed:1",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.resolve deps for pigweed:2",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@pigweed:3@https://pigweed-review.googlesource.com/3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"3\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"NEW\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.parents pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.resolve deps for pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "resolve CL deps.pass",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "final deps"
+  },
+  {
+    "cmd": [],
+    "name": "final deps.pigweed:3",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/cq_deps/tests/full.py b/recipe_modules/cq_deps/tests/full.py
index 3b940f2..502ec76 100644
--- a/recipe_modules/cq_deps/tests/full.py
+++ b/recipe_modules/cq_deps/tests/full.py
@@ -50,6 +50,7 @@
     yield (
         api.status_check.test('hash')
         + api.properties(revision='b' * 40)
+        + api.cq_deps.lookup_cl('b' * 40, 1)
         + api.cq_deps.details('pigweed:1', '')
     )
 
@@ -169,3 +170,31 @@
         )
         + api.cq_deps.has_deps('pigweed:2', 'pigweed:3')
     )
+
+    yield (
+        api.status_check.test('unsubmitted-parent-dependencies')
+        + api.cq_deps.details('pigweed:1', '', parent='PIGWEED2')
+        + api.cq_deps.lookup_cl('PIGWEED2', 2)
+        + api.cq_deps.details(
+            'pigweed:2', 'Requires: pigweed:3', hash='PIGWEED2',
+        )
+        + api.cq_deps.has_deps('pigweed:3')
+    )
+
+    yield (
+        api.status_check.test('dependency-requires-parent')
+        + api.cq_deps.details(
+            'pigweed:1', 'Requires: pigweed:3', parent='PIGWEED2',
+        )
+        + api.cq_deps.lookup_cl('PIGWEED2', 2)
+        + api.cq_deps.details('pigweed:3', 'Requires: pigweed:2',)
+        + api.cq_deps.lacks_deps('pigweed:2')
+        + api.cq_deps.has_deps('pigweed:3')
+    )
+
+    yield (
+        api.status_check.test('out-of-date-parent', status='failure')
+        + api.cq_deps.details('pigweed:1', '', parent='OUTOFDATE')
+        + api.cq_deps.lookup_cl('OUTOFDATE', 2)
+        + api.cq_deps.details('pigweed:2', hash='CURRENT')
+    )
diff --git a/recipes/luci_config.expected/starlark.json b/recipes/luci_config.expected/starlark.json
index f51f91d..081da53 100644
--- a/recipes/luci_config.expected/starlark.json
+++ b/recipes/luci_config.expected/starlark.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipes/pw_presubmit.expected/step.json b/recipes/pw_presubmit.expected/step.json
index edeed79..9c5800c 100644
--- a/recipes/pw_presubmit.expected/step.json
+++ b/recipes/pw_presubmit.expected/step.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipes/pw_presubmit_container.expected/step.json b/recipes/pw_presubmit_container.expected/step.json
index b692246..b17d9af 100644
--- a/recipes/pw_presubmit_container.expected/step.json
+++ b/recipes/pw_presubmit_container.expected/step.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipes/recipes.expected/cq_try.json b/recipes/recipes.expected/cq_try.json
index 288c536..2438e96 100644
--- a/recipes/recipes.expected/cq_try.json
+++ b/recipes/recipes.expected/cq_try.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {
diff --git a/recipes/xrefs.expected/tryjob.json b/recipes/xrefs.expected/tryjob.json
index c150916..0e9e295 100644
--- a/recipes/xrefs.expected/tryjob.json
+++ b/recipes/xrefs.expected/tryjob.json
@@ -127,7 +127,12 @@
       "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
       "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
       "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\"@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    }@@@",
       "@@@STEP_LOG_LINE@json.output@  }, @@@",
@@ -137,10 +142,76 @@
     ]
   },
   {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-query",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"params\": {\"q\": \"commit:PARENT\"}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.number PARENT",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"_number\": 458@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/cipd/infra/tools/luci/gerrit/latest/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"458\", \"params\": {\"o\": [\"CURRENT_COMMIT\", \"CURRENT_REVISION\"]}}",
+      "-output",
+      "/path/to/tmp/json"
+    ],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.details pigweed:458",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"current_revision\": \"HASH\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"project\": \"project\", @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"revisions\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"HASH\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"_number\": 1, @@@",
+      "@@@STEP_LOG_LINE@json.output@      \"commit\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"message\": \"\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@          {@@@",
+      "@@@STEP_LOG_LINE@json.output@            \"commit\": \"PARENT\"@@@",
+      "@@@STEP_LOG_LINE@json.output@          }@@@",
+      "@@@STEP_LOG_LINE@json.output@        ]@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    }@@@",
+      "@@@STEP_LOG_LINE@json.output@  }, @@@",
+      "@@@STEP_LOG_LINE@json.output@  \"status\": \"SUBMITTED\"@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.parents pigweed:123456",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@all parents already submitted@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout pigweed.change data.process gerrit changes.resolve CL deps.resolve deps for pigweed:123456",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@4@@@"
+      "@@@STEP_NEST_LEVEL@4@@@",
+      "@@@STEP_SUMMARY_TEXT@no dependencies@@@"
     ]
   },
   {