Repository: mozilla/cargo-vet
Pull request #383 (2023-01-20 20:23:14)

Remove the --shallow CLI option from cargo-vet
With dependency-criteria now removed, we should be able to accurately predict the required criteria for every dependency in the dependency graph, removing the need for uncertainty or the --shallow option.

This patch doesn't implement accurate guessing, only removing the shallow option and updating test snapshots to reflect the new expected behaviour.


Patch:
diff --git a/src/cli.rs b/src/cli.rs
index fdb7c07..c67909b 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -396,16 +396,7 @@ pub enum RegenerateSubcommands {
 }
 
 #[derive(clap::Args)]
-pub struct CheckArgs {
-    /// Avoid suggesting audits for dependencies of unaudited dependencies.
-    ///
-    /// By default, if a dependency doesn't have sufficient audits for *itself*
-    /// then we try to speculate that its dependencies require the criteria.
-    /// This flag disables that behaviour, causing only suggestions which we're
-    /// certain of the requirements for to be emitted.
-    #[clap(long, action)]
-    pub shallow: bool,
-}
+pub struct CheckArgs {}
 
 #[derive(clap::Args)]
 pub struct InitArgs {}
@@ -542,16 +533,7 @@ pub struct AddExemptionArgs {
 }
 
 #[derive(clap::Args)]
-pub struct SuggestArgs {
-    /// Avoid suggesting audits for dependencies of unaudited dependencies.
-    ///
-    /// By default, if a dependency doesn't have sufficient audits for *itself*
-    /// then we try to speculate that its dependencies require the criteria.
-    /// This flag disables that behaviour, causing only suggestions which we're
-    /// certain of the requirements for to be emitted.
-    #[clap(long, action)]
-    pub shallow: bool,
-}
+pub struct SuggestArgs {}
 
 #[derive(clap::Args)]
 pub struct FmtArgs {}
diff --git a/src/main.rs b/src/main.rs
index 143287c..818265a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -41,7 +41,7 @@ use crate::format::{
 };
 use crate::git_tool::Pager;
 use crate::out::{indeterminate_spinner, Out, StderrLogWriter, MULTIPROGRESS};
-use crate::resolver::{CriteriaMapper, CriteriaNamespace, DepGraph, ResolveDepth};
+use crate::resolver::{CriteriaMapper, CriteriaNamespace, DepGraph};
 use crate::storage::{Cache, Store};
 
 mod cli;
@@ -997,13 +997,8 @@ fn guess_audit_criteria(
 ) -> Vec<String> {
     // Attempt to resolve a normal `cargo vet`, and try to find criteria which
     // would heal some errors in that result if it fails.
-    let criteria = resolver::resolve(
-        &cfg.metadata,
-        cfg.cli.filter_graph.as_ref(),
-        store,
-        ResolveDepth::Deep,
-    )
-    .compute_suggested_criteria(package, from, to);
+    let criteria = resolver::resolve(&cfg.metadata, cfg.cli.filter_graph.as_ref(), store)
+        .compute_suggested_criteria(package, from, to);
     if !criteria.is_empty() {
         return criteria;
     }
@@ -1017,7 +1012,6 @@ fn guess_audit_criteria(
         &cfg.metadata,
         cfg.cli.filter_graph.as_ref(),
         &store.clone_for_suggest(),
-        ResolveDepth::Deep,
     )
     .compute_suggested_criteria(package, from, to)
 }
@@ -1254,7 +1248,7 @@ fn cmd_add_exemption(
 fn cmd_suggest(
     out: &Arc<dyn Out>,
     cfg: &Config,
-    sub_args: &SuggestArgs,
+    _sub_args: &SuggestArgs,
 ) -> Result<(), miette::Report> {
     // Run the checker to validate that the current set of deps is covered by the current cargo vet store
     trace!("suggesting...");
@@ -1262,16 +1256,7 @@ fn cmd_suggest(
     let suggest_store = Store::acquire(cfg, network.as_ref(), false)?.clone_for_suggest();
 
     // DO THE THING!!!!
-    let report = resolver::resolve(
-        &cfg.metadata,
-        cfg.cli.filter_graph.as_ref(),
-        &suggest_store,
-        if sub_args.shallow {
-            ResolveDepth::Shallow
-        } else {
-            ResolveDepth::Deep
-        },
-    );
+    let report = resolver::resolve(&cfg.metadata, cfg.cli.filter_graph.as_ref(), &suggest_store);
     let suggest = report.compute_suggest(cfg, network.as_ref(), true)?;
     match cfg.cli.output_format {
         OutputFormat::Human => report
@@ -1511,7 +1496,11 @@ fn cmd_diff(out: &Arc<dyn Out>, cfg: &Config, sub_args: &DiffArgs) -> Result<(),
     Ok(())
 }
 
-fn cmd_check(out: &Arc<dyn Out>, cfg: &Config, sub_args: &CheckArgs) -> Result<(), miette::Report> {
+fn cmd_check(
+    out: &Arc<dyn Out>,
+    cfg: &Config,
+    _sub_args: &CheckArgs,
+) -> Result<(), miette::Report> {
     // Run the checker to validate that the current set of deps is covered by the current cargo vet store
     trace!("vetting...");
 
@@ -1525,16 +1514,7 @@ fn cmd_check(out: &Arc<dyn Out>, cfg: &Config, sub_args: &CheckArgs) -> Result<(
     }
 
     // DO THE THING!!!!
-    let report = resolver::resolve(
-        &cfg.metadata,
-        cfg.cli.filter_graph.as_ref(),
-        &store,
-        if sub_args.shallow {
-            ResolveDepth::Shallow
-        } else {
-            ResolveDepth::Deep
-        },
-    );
+    let report = resolver::resolve(&cfg.metadata, cfg.cli.filter_graph.as_ref(), &store);
 
     // Bare `cargo vet` shouldn't suggest in CI
     let suggest = if !cfg.cli.locked {
diff --git a/src/resolver.rs b/src/resolver.rs
index b2d8f9d..104bc36 100644
--- a/src/resolver.rs
+++ b/src/resolver.rs
@@ -1307,17 +1307,10 @@ impl<'a> DepGraph<'a> {
     }
 }
 
-#[derive(Copy, Clone, Eq, PartialEq, Debug)]
-pub enum ResolveDepth {
-    Deep,
-    Shallow,
-}
-
 pub fn resolve<'a>(
     metadata: &'a Metadata,
     filter_graph: Option<&Vec<GraphFilter>>,
     store: &'a Store,
-    resolve_depth: ResolveDepth,
 ) -> ResolveReport<'a> {
     // A large part of our algorithm is unioning and intersecting criteria, so we map all
     // the criteria into indexed boolean sets (*whispers* an integer with lots of bits).
@@ -1332,7 +1325,7 @@ pub fn resolve<'a>(
     );
     trace!("built CriteriaMapper!");
 
-    let (results, conclusion) = resolve_core(&graph, store, &criteria_mapper, resolve_depth);
+    let (results, conclusion) = resolve_core(&graph, store, &criteria_mapper);
 
     ResolveReport {
         graph,
@@ -1346,7 +1339,6 @@ fn resolve_core(
     graph: &DepGraph<'_>,
     store: &Store,
     criteria_mapper: &CriteriaMapper,
-    resolve_depth: ResolveDepth,
 ) -> (Vec<ResolveResult>, Conclusion) {
     let _resolve_span = trace_span!("validate").entered();
 
@@ -1466,7 +1458,6 @@ fn resolve_core(
         criteria_mapper,
         &results,
         &root_failures,
-        resolve_depth,
         |failure, depth, own_failure| {
             if let Some(criteria_failures) = own_failure {
                 trace!(
@@ -2338,7 +2329,6 @@ fn visit_failures<T>(
     criteria_mapper: &CriteriaMapper,
     results: &[ResolveResult],
     root_failures: &RootFailures,
-    resolve_depth: ResolveDepth,
     mut callback: impl FnMut(PackageIdx, usize, Option<&CriteriaFailureSet>) -> Result<(), T>,
 ) -> Result<(), T> {
     trace!(" traversing blame tree");
@@ -2468,22 +2458,20 @@ fn visit_failures<T>(
                         // Oh dang ok we *are* to blame, our bad
                         own_fault.set_criteria(criteria_idx, confident);
 
-                        if resolve_depth != ResolveDepth::Shallow {
-                            // Try to Guess Deeper by blaming our children for all |self| failures
-                            // by assuming we would need them to conform to our own criteria too.
-                            //
-                            // Dev-deps should never be chased here because any issues with those show
-                            // up as root_failures and have already been pushed into the search-stack.
-                            // All recursive blaming is about deps for a "normal" build, which requires
-                            // only these two kinds of deps.
-                            for &dep_idx in &package.normal_and_build_deps {
-                                let dep_result = &results[dep_idx];
-                                if !dep_result.validated_criteria.has_criteria(criteria_idx) {
-                                    dep_faults
-                                        .entry(dep_idx)
-                                        .or_insert_with(|| no_criteria.clone())
-                                        .set_criteria(criteria_idx, false);
-                                }
+                        // Try to Guess Deeper by blaming our children for all |self| failures
+                        // by assuming we would need them to conform to our own criteria too.
+                        //
+                        // Dev-deps should never be chased here because any issues with those show
+                        // up as root_failures and have already been pushed into the search-stack.
+                        // All recursive blaming is about deps for a "normal" build, which requires
+                        // only these two kinds of deps.
+                        for &dep_idx in &package.normal_and_build_deps {
+                            let dep_result = &results[dep_idx];
+                            if !dep_result.validated_criteria.has_criteria(criteria_idx) {
+                                dep_faults
+                                    .entry(dep_idx)
+                                    .or_insert_with(|| no_criteria.clone())
+                                    .set_criteria(criteria_idx, false);
                             }
                         }
                     }
@@ -3236,7 +3224,7 @@ pub fn regenerate_exemptions(
     // immediately. We'll also do this if automatic exemption minimization is
     // disabled through the CLI.
     if !allow_new_exemptions {
-        let (_, conclusion) = resolve_core(&graph, store, &criteria_mapper, ResolveDepth::Shallow);
+        let (_, conclusion) = resolve_core(&graph, store, &criteria_mapper);
         if !matches!(conclusion, Conclusion::Success(_)) || cfg.cli.no_minimize_exemptions {
             store.imports =
                 store.get_updated_imports_file(&graph, &conclusion, force_update_imports);
@@ -3286,11 +3274,8 @@ pub fn regenerate_exemptions(
     let mut potential_exemptions = SortedMap::<PackageStr<'_>, Vec<PotentialExemption<'_>>>::new();
 
     loop {
-        // Try to vet. We only probe shallowly as we only want to add exemptions
-        // which we're certain of the requirements for. We'll loop around again
-        // to add more audits until we successfully vet.
-        let (results, conclusion) =
-            resolve_core(&graph, store, &criteria_mapper, ResolveDepth::Shallow);
+        // Try to vet.
+        let (results, conclusion) = resolve_core(&graph, store, &criteria_mapper);
 
         // We only need to do more work here if we have any failures which we
         // can work with.
@@ -3401,6 +3386,9 @@ pub fn regenerate_exemptions(
                     potentials
                 });
 
+            // We only want to add exemptions which we're certain of the
+            // requirements for. We'll loop around again to add more audits
+            // until we successfully vet.
             'min_criteria: for criteria_idx in
                 criteria_mapper.minimal_indices(failure.criteria_failures.confident())
             {


Test patch:
diff --git a/src/tests/certify.rs b/src/tests/certify.rs
index e2b06d1..0762cb8 100644
--- a/src/tests/certify.rs
+++ b/src/tests/certify.rs
@@ -38,7 +38,7 @@ fn mock_simple_suggested_criteria() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Deep);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     let mut output = String::new();
     for (from, to, descr) in [
diff --git a/src/tests/import.rs b/src/tests/import.rs
index 044b5bb..7b25f09 100644
--- a/src/tests/import.rs
+++ b/src/tests/import.rs
@@ -5,7 +5,7 @@ use super::*;
 fn get_imports_file_changes(metadata: &Metadata, store: &Store, force_updates: bool) -> String {
     // Run the resolver before calling `get_imports_file` to compute the new
     // imports file.
-    let report = crate::resolver::resolve(metadata, None, store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(metadata, None, store);
     let new_imports =
         store.get_updated_imports_file(&report.graph, &report.conclusion, force_updates);
 
diff --git a/src/tests/mod.rs b/src/tests/mod.rs
index f1c9e84..c2a1200 100644
--- a/src/tests/mod.rs
+++ b/src/tests/mod.rs
@@ -18,7 +18,7 @@ use crate::{
     git_tool::Editor,
     init_files,
     out::Out,
-    resolver::{ResolveDepth, ResolveReport},
+    resolver::ResolveReport,
     AuditEntry, AuditsFile, Config, ConfigFile, CriteriaEntry, ExemptedDependency, ImportsFile,
     PackageExt, PartialConfig, SortedMap, Store,
 };
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.json.snap
index c631d15..298c760 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.json.snap
@@ -19,6 +19,13 @@ expression: json
         "safe-to-run"
       ]
     },
+    {
+      "name": "dev-cycle-indirect",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "safe-to-run"
+      ]
+    },
     {
       "name": "normal",
       "version": "10.0.0",
@@ -32,6 +39,13 @@ expression: json
       "missing_criteria": [
         "safe-to-run"
       ]
+    },
+    {
+      "name": "simple-dev-indirect",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "safe-to-run"
+      ]
     }
   ],
   "suggest": {
@@ -99,6 +113,38 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "dev-cycle-indirect",
+        "notable_parents": "dev-cycle-direct",
+        "suggested_criteria": [
+          "safe-to-run"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
+      },
+      {
+        "name": "simple-dev-indirect",
+        "notable_parents": "simple-dev",
+        "suggested_criteria": [
+          "safe-to-run"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -168,9 +214,41 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "dev-cycle-indirect",
+          "notable_parents": "dev-cycle-direct",
+          "suggested_criteria": [
+            "safe-to-run"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
+        },
+        {
+          "name": "simple-dev-indirect",
+          "notable_parents": "simple-dev",
+          "suggested_criteria": [
+            "safe-to-run"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 400
+    "total_lines": 600
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.snap b/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.snap
index 583c826..9134e35 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__builtin-dev-detection-empty.snap
@@ -1,24 +1,28 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-4 unvetted dependencies:
+6 unvetted dependencies:
   both:10.0.0 missing ["safe-to-deploy"]
   dev-cycle-direct:10.0.0 missing ["safe-to-run"]
   normal:10.0.0 missing ["safe-to-deploy"]
   simple-dev:10.0.0 missing ["safe-to-run"]
+  dev-cycle-indirect:10.0.0 likely missing ["safe-to-run"]
+  simple-dev-indirect:10.0.0 likely missing ["safe-to-run"]
 
 recommended audits for safe-to-deploy:
     cargo vet inspect both 10.0.0    (used by root)  (100 lines)
     cargo vet inspect normal 10.0.0  (used by root)  (100 lines)
 
 recommended audits for safe-to-run:
-    cargo vet inspect dev-cycle-direct 10.0.0  (used by root)  (100 lines)
-    cargo vet inspect simple-dev 10.0.0        (used by root)  (100 lines)
+    cargo vet inspect dev-cycle-direct 10.0.0     (used by root)              (100 lines)
+    cargo vet inspect simple-dev 10.0.0           (used by root)              (100 lines)
+    cargo vet inspect dev-cycle-indirect 10.0.0   (used by dev-cycle-direct)  (100 lines)
+    cargo vet inspect simple-dev-indirect 10.0.0  (used by simple-dev)        (100 lines)
 
-estimated audit backlog: 400 lines
+estimated audit backlog: 600 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.json.snap
index b9dc567..a25557a 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.json.snap
@@ -18,6 +18,13 @@ expression: json
       "missing_criteria": [
         "safe-to-deploy"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "safe-to-deploy"
+      ]
     }
   ],
   "suggest": {
@@ -53,6 +60,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "safe-to-deploy"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -88,9 +111,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "safe-to-deploy"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 200
+    "total_lines": 300
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.snap b/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.snap
index 24b17f7..12cde7a 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__builtin-simple-no-unaudited.snap
@@ -1,18 +1,20 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-2 unvetted dependencies:
+3 unvetted dependencies:
   third-party1:10.0.0 missing ["safe-to-deploy"]
   third-party2:10.0.0 missing ["safe-to-deploy"]
+  transitive-third-party1:10.0.0 likely missing ["safe-to-deploy"]
 
 recommended audits for safe-to-deploy:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
-    cargo vet inspect third-party2 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect third-party2 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 200 lines
+estimated audit backlog: 300 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.json.snap
index 6b2249f..8cc2124 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.json.snap
@@ -18,6 +18,13 @@ expression: json
       "missing_criteria": [
         "reviewed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "reviewed"
+      ]
     }
   ],
   "suggest": {
@@ -53,6 +60,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "reviewed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -88,9 +111,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "reviewed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 200
+    "total_lines": 300
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.snap b/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.snap
index b717b9b..471ff55 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__mock-simple-no-unaudited.snap
@@ -1,18 +1,20 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-2 unvetted dependencies:
+3 unvetted dependencies:
   third-party1:10.0.0 missing ["reviewed"]
   third-party2:10.0.0 missing ["reviewed"]
+  transitive-third-party1:10.0.0 likely missing ["reviewed"]
 
 recommended audits for reviewed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
-    cargo vet inspect third-party2 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect third-party2 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 200 lines
+estimated audit backlog: 300 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.json.snap
index 6b2249f..8cc2124 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.json.snap
@@ -18,6 +18,13 @@ expression: json
       "missing_criteria": [
         "reviewed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "reviewed"
+      ]
     }
   ],
   "suggest": {
@@ -53,6 +60,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "reviewed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -88,9 +111,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "reviewed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 200
+    "total_lines": 300
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.snap b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.snap
index b717b9b..471ff55 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_no_mapping.snap
@@ -1,18 +1,20 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-2 unvetted dependencies:
+3 unvetted dependencies:
   third-party1:10.0.0 missing ["reviewed"]
   third-party2:10.0.0 missing ["reviewed"]
+  transitive-third-party1:10.0.0 likely missing ["reviewed"]
 
 recommended audits for reviewed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
-    cargo vet inspect third-party2 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect third-party2 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 200 lines
+estimated audit backlog: 300 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.json.snap
index 6b2249f..8cc2124 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.json.snap
@@ -18,6 +18,13 @@ expression: json
       "missing_criteria": [
         "reviewed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "reviewed"
+      ]
     }
   ],
   "suggest": {
@@ -53,6 +60,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "reviewed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -88,9 +111,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "reviewed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 200
+    "total_lines": 300
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.snap b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.snap
index b717b9b..471ff55 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__mock_simple_foreign_audited_pun_wrong_mapped.snap
@@ -1,18 +1,20 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-2 unvetted dependencies:
+3 unvetted dependencies:
   third-party1:10.0.0 missing ["reviewed"]
   third-party2:10.0.0 missing ["reviewed"]
+  transitive-third-party1:10.0.0 likely missing ["reviewed"]
 
 recommended audits for reviewed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
-    cargo vet inspect third-party2 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect third-party2 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 200 lines
+estimated audit backlog: 300 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.json.snap
index c6fdf07..5462d9f 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.json.snap
@@ -11,6 +11,13 @@ expression: json
       "missing_criteria": [
         "strong-reviewed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "strong-reviewed"
+      ]
     }
   ],
   "suggest": {
@@ -30,6 +37,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "strong-reviewed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -49,9 +72,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "strong-reviewed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 100
+    "total_lines": 200
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.snap
index 00392c8..0a3f4bd 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-dep-too-strong.snap
@@ -1,16 +1,18 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-1 unvetted dependencies:
+2 unvetted dependencies:
   third-party1:10.0.0 missing ["strong-reviewed"]
+  transitive-third-party1:10.0.0 likely missing ["strong-reviewed"]
 
 recommended audits for strong-reviewed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 100 lines
+estimated audit backlog: 200 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.json.snap
index 209d146..11cd6e5 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.json.snap
@@ -11,6 +11,13 @@ expression: json
       "missing_criteria": [
         "fuzzed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "fuzzed"
+      ]
     }
   ],
   "suggest": {
@@ -30,6 +37,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "fuzzed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -49,9 +72,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "fuzzed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 100
+    "total_lines": 200
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.snap
index f9064b2..a5bd182 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-extra-partially-missing.snap
@@ -1,16 +1,18 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-1 unvetted dependencies:
+2 unvetted dependencies:
   third-party1:10.0.0 missing ["fuzzed"]
+  transitive-third-party1:10.0.0 likely missing ["fuzzed"]
 
 recommended audits for fuzzed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 100 lines
+estimated audit backlog: 200 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.json.snap
index a5650b4..ca45438 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.json.snap
@@ -18,6 +18,13 @@ expression: json
       "missing_criteria": [
         "strong-reviewed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "strong-reviewed"
+      ]
     }
   ],
   "suggest": {
@@ -53,6 +60,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "strong-reviewed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -88,9 +111,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "strong-reviewed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 200
+    "total_lines": 300
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.snap
index b573049..c3df2e9 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-first-too-strong.snap
@@ -1,18 +1,20 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-2 unvetted dependencies:
+3 unvetted dependencies:
   third-party1:10.0.0 missing ["strong-reviewed"]
   third-party2:10.0.0 missing ["strong-reviewed"]
+  transitive-third-party1:10.0.0 likely missing ["strong-reviewed"]
 
 recommended audits for strong-reviewed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
-    cargo vet inspect third-party2 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect third-party2 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 200 lines
+estimated audit backlog: 300 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.json.snap
index a5650b4..ca45438 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.json.snap
@@ -18,6 +18,13 @@ expression: json
       "missing_criteria": [
         "strong-reviewed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "strong-reviewed"
+      ]
     }
   ],
   "suggest": {
@@ -53,6 +60,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "strong-reviewed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -88,9 +111,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "strong-reviewed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 200
+    "total_lines": 300
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.snap
index b573049..c3df2e9 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-dep-too-strong.snap
@@ -1,18 +1,20 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-2 unvetted dependencies:
+3 unvetted dependencies:
   third-party1:10.0.0 missing ["strong-reviewed"]
   third-party2:10.0.0 missing ["strong-reviewed"]
+  transitive-third-party1:10.0.0 likely missing ["strong-reviewed"]
 
 recommended audits for strong-reviewed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
-    cargo vet inspect third-party2 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect third-party2 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 200 lines
+estimated audit backlog: 300 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.json.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.json.snap
index a5650b4..ca45438 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.json.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.json.snap
@@ -18,6 +18,13 @@ expression: json
       "missing_criteria": [
         "strong-reviewed"
       ]
+    },
+    {
+      "name": "transitive-third-party1",
+      "version": "10.0.0",
+      "missing_criteria": [
+        "strong-reviewed"
+      ]
     }
   ],
   "suggest": {
@@ -53,6 +60,22 @@ expression: json
             "files_changed": 1
           }
         }
+      },
+      {
+        "name": "transitive-third-party1",
+        "notable_parents": "third-party1",
+        "suggested_criteria": [
+          "strong-reviewed"
+        ],
+        "suggested_diff": {
+          "from": null,
+          "to": "10.0.0",
+          "diffstat": {
+            "insertions": 100,
+            "deletions": 0,
+            "files_changed": 1
+          }
+        }
       }
     ],
     "suggest_by_criteria": {
@@ -88,9 +111,25 @@ expression: json
               "files_changed": 1
             }
           }
+        },
+        {
+          "name": "transitive-third-party1",
+          "notable_parents": "third-party1",
+          "suggested_criteria": [
+            "strong-reviewed"
+          ],
+          "suggested_diff": {
+            "from": null,
+            "to": "10.0.0",
+            "diffstat": {
+              "insertions": 100,
+              "deletions": 0,
+              "files_changed": 1
+            }
+          }
         }
       ]
     },
-    "total_lines": 200
+    "total_lines": 300
   }
 }
diff --git a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.snap b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.snap
index b573049..c3df2e9 100644
--- a/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.snap
+++ b/src/tests/snapshots/cargo_vet__tests__vet__simple-policy-root-too-strong.snap
@@ -1,18 +1,20 @@
 ---
 source: src/tests/vet.rs
-expression: output
+expression: human
 ---
 Vetting Failed!
 
-2 unvetted dependencies:
+3 unvetted dependencies:
   third-party1:10.0.0 missing ["strong-reviewed"]
   third-party2:10.0.0 missing ["strong-reviewed"]
+  transitive-third-party1:10.0.0 likely missing ["strong-reviewed"]
 
 recommended audits for strong-reviewed:
-    cargo vet inspect third-party1 10.0.0  (used by first-party)  (100 lines)
-    cargo vet inspect third-party2 10.0.0  (used by first-party)  (100 lines)
+    cargo vet inspect third-party1 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect third-party2 10.0.0             (used by first-party)   (100 lines)
+    cargo vet inspect transitive-third-party1 10.0.0  (used by third-party1)  (100 lines)
 
-estimated audit backlog: 200 lines
+estimated audit backlog: 300 lines
 
 Use |cargo vet certify| to record the audits.
 
diff --git a/src/tests/vet.rs b/src/tests/vet.rs
index 262bef0..98a4adf 100644
--- a/src/tests/vet.rs
+++ b/src/tests/vet.rs
@@ -13,7 +13,7 @@ fn mock_simple_init() {
     let (config, audits, imports) = files_inited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-simple-init", &metadata, report);
 }
 
@@ -28,7 +28,7 @@ fn mock_simple_no_exemptions() {
     let (config, audits, imports) = files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-no-unaudited", &metadata, report);
 }
@@ -44,7 +44,7 @@ fn mock_simple_full_audited() {
     let (config, audits, imports) = files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-full-audited", &metadata, report);
 }
@@ -60,7 +60,7 @@ fn builtin_simple_init() {
     let (config, audits, imports) = builtin_files_inited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-simple-init", &metadata, report);
 }
 
@@ -75,7 +75,7 @@ fn builtin_simple_no_exemptions() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-no-unaudited", &metadata, report);
 }
@@ -91,7 +91,7 @@ fn builtin_simple_full_audited() {
     let (config, audits, imports) = builtin_files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-full-audited", &metadata, report);
 }
@@ -113,7 +113,7 @@ fn mock_simple_missing_transitive() {
         .clear();
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-missing-transitive", &metadata, report);
 }
@@ -131,7 +131,7 @@ fn mock_simple_missing_direct_internal() {
     audits.audits.get_mut("third-party1").unwrap().clear();
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-missing-direct-internal", &metadata, report);
 }
@@ -149,7 +149,7 @@ fn mock_simple_missing_direct_leaf() {
     audits.audits.get_mut("third-party2").unwrap().clear();
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-missing-direct-leaf", &metadata, report);
 }
@@ -172,7 +172,7 @@ fn mock_simple_missing_leaves() {
         .clear();
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-missing-leaves", &metadata, report);
 }
@@ -201,7 +201,7 @@ fn mock_simple_weaker_transitive_req() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-weaker-transitive-req", &metadata, report);
 }
@@ -231,7 +231,7 @@ fn mock_simple_weaker_transitive_req_using_implies() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-weaker-transitive-req-using-implies",
@@ -255,7 +255,7 @@ fn mock_simple_lower_version_review() {
     direct_audits.push(full_audit(ver(DEFAULT_VER - 1), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-lower-version-review", &metadata, report);
 }
@@ -275,7 +275,7 @@ fn mock_simple_higher_version_review() {
     direct_audits.push(full_audit(ver(DEFAULT_VER + 1), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-higher-version-review", &metadata, report);
 }
@@ -298,7 +298,7 @@ fn mock_simple_higher_and_lower_version_review() {
     direct_audits.push(full_audit(ver(DEFAULT_VER + 1), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-higher-and-lower-version-review",
@@ -322,7 +322,7 @@ fn mock_simple_reviewed_too_weakly() {
     trans_audits.push(full_audit(ver(DEFAULT_VER), "weak-reviewed"));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-reviewed-too-weakly", &metadata, report);
 }
@@ -352,7 +352,7 @@ fn mock_simple_delta_to_exemptions() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-delta-to-unaudited", &metadata, report);
 }
@@ -382,7 +382,7 @@ fn mock_simple_delta_to_exemptions_overshoot() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-delta-to-unaudited-overshoot",
@@ -416,7 +416,7 @@ fn mock_simple_delta_to_exemptions_undershoot() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-delta-to-unaudited-undershoot",
@@ -445,7 +445,7 @@ fn mock_simple_delta_to_full_audit() {
     direct_audits.push(full_audit(ver(DEFAULT_VER - 5), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-delta-to-full-audit", &metadata, report);
 }
@@ -470,7 +470,7 @@ fn mock_simple_delta_to_full_audit_overshoot() {
     direct_audits.push(full_audit(ver(DEFAULT_VER - 5), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-delta-to-full-audit-overshoot",
@@ -499,7 +499,7 @@ fn mock_simple_delta_to_full_audit_undershoot() {
     direct_audits.push(full_audit(ver(DEFAULT_VER - 5), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-delta-to-full-audit-undershoot",
@@ -528,7 +528,7 @@ fn mock_simple_reverse_delta_to_full_audit() {
     direct_audits.push(full_audit(ver(DEFAULT_VER + 5), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-reverse-delta-to-full-audit", &metadata, report);
 }
@@ -558,7 +558,7 @@ fn mock_simple_reverse_delta_to_exemptions() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-reverse-delta-to-unaudited", &metadata, report);
 }
@@ -588,7 +588,7 @@ fn mock_simple_wrongly_reversed_delta_to_exemptions() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-wrongly-reversed-delta-to-unaudited",
@@ -617,7 +617,7 @@ fn mock_simple_wrongly_reversed_delta_to_full_audit() {
     direct_audits.push(full_audit(ver(DEFAULT_VER - 5), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-wrongly-reversed-delta-to-full-audit",
@@ -651,7 +651,7 @@ fn mock_simple_needed_reversed_delta_to_exemptions() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-needed-reversed-delta-to-unaudited",
@@ -685,7 +685,7 @@ fn mock_simple_delta_to_exemptions_too_weak() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-delta-to-unaudited-too-weak", &metadata, report);
 }
@@ -710,7 +710,7 @@ fn mock_simple_delta_to_full_audit_too_weak() {
     direct_audits.push(full_audit(ver(DEFAULT_VER - 5), DEFAULT_CRIT));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-delta-to-full-audit-too-weak",
@@ -739,7 +739,7 @@ fn mock_simple_delta_to_too_weak_full_audit() {
     direct_audits.push(full_audit(ver(DEFAULT_VER - 5), "weak-reviewed"));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-delta-to-too-weak-full-audit",
@@ -758,7 +758,7 @@ fn mock_complex_inited() {
     let (config, audits, imports) = files_inited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-complex-inited", &metadata, report);
 }
 
@@ -772,7 +772,7 @@ fn mock_complex_no_exemptions() {
     let (config, audits, imports) = files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-complex-no-unaudited", &metadata, report);
 }
 
@@ -786,7 +786,7 @@ fn mock_complex_full_audited() {
     let (config, audits, imports) = files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-complex-full-audited", &metadata, report);
 }
 
@@ -800,7 +800,7 @@ fn builtin_complex_inited() {
     let (config, audits, imports) = builtin_files_inited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-complex-inited", &metadata, report);
 }
 
@@ -814,7 +814,7 @@ fn builtin_complex_no_exemptions() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-complex-no-unaudited", &metadata, report);
 }
 
@@ -828,7 +828,7 @@ fn builtin_complex_full_audited() {
     let (config, audits, imports) = builtin_files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-complex-full-audited", &metadata, report);
 }
 
@@ -842,7 +842,7 @@ fn builtin_complex_minimal_audited() {
     let (config, audits, imports) = builtin_files_minimal_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-complex-minimal-audited", &metadata, report);
 }
 
@@ -861,7 +861,7 @@ fn mock_complex_missing_core5() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-complex-missing-core5", &metadata, report);
 }
 
@@ -880,7 +880,7 @@ fn mock_complex_missing_core10() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-complex-missing-core10", &metadata, report);
 }
 
@@ -902,7 +902,7 @@ fn mock_complex_core10_too_weak() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-complex-core10-too-weak", &metadata, report);
 }
 
@@ -941,7 +941,7 @@ fn mock_complex_core10_partially_too_weak() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("mock-complex-core10-partially-too-weak", &metadata, report);
 }
 
@@ -980,7 +980,7 @@ fn mock_complex_core10_partially_too_weak_via_weak_delta() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!(
         "mock-complex-core10-partially-too-weak-via-weak-delta",
         &metadata,
@@ -1028,7 +1028,7 @@ fn mock_complex_core10_partially_too_weak_via_strong_delta() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!(
         "mock-complex-core10-partially-too-weak-via-strong-delta",
         &metadata,
@@ -1050,7 +1050,7 @@ fn mock_simple_policy_root_too_strong() {
         .insert("root-package".to_string(), self_policy(["strong-reviewed"]));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-root-too-strong", &metadata, report);
 }
 
@@ -1068,7 +1068,7 @@ fn mock_simple_policy_root_weaker() {
         .insert("root-package".to_string(), self_policy(["weak-reviewed"]));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-root-weaker", &metadata, report);
 }
 
@@ -1086,7 +1086,7 @@ fn mock_simple_policy_first_too_strong() {
         .insert("first-party".to_string(), self_policy(["strong-reviewed"]));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-too-strong", &metadata, report);
 }
 
@@ -1104,7 +1104,7 @@ fn mock_simple_policy_first_weaker() {
         .insert("first-party".to_string(), self_policy(["weak-reviewed"]));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-weaker", &metadata, report);
 }
 
@@ -1123,7 +1123,7 @@ fn mock_simple_policy_root_dep_weaker() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-root-dep-weaker", &metadata, report);
 }
 
@@ -1142,7 +1142,7 @@ fn mock_simple_policy_root_dep_too_strong() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-root-dep-too-strong", &metadata, report);
 }
 
@@ -1161,7 +1161,7 @@ fn mock_simple_policy_first_dep_weaker() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-dep-weaker", &metadata, report);
 }
 
@@ -1180,7 +1180,7 @@ fn mock_simple_policy_first_dep_too_strong() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-dep-too-strong", &metadata, report);
 }
 
@@ -1204,7 +1204,7 @@ fn mock_simple_policy_first_dep_stronger() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-dep-stronger", &metadata, report);
 }
 
@@ -1228,7 +1228,7 @@ fn mock_simple_policy_first_dep_weaker_needed() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-dep-weaker-needed", &metadata, report);
 }
 
@@ -1255,7 +1255,7 @@ fn mock_simple_policy_first_dep_extra() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-dep-extra", &metadata, report);
 }
 
@@ -1279,7 +1279,7 @@ fn mock_simple_policy_first_dep_extra_missing() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-dep-extra-missing", &metadata, report);
 }
 
@@ -1306,7 +1306,7 @@ fn mock_simple_policy_first_extra_partially_missing() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!(
         "simple-policy-first-extra-partially-missing",
         &metadata,
@@ -1329,7 +1329,7 @@ fn mock_simple_first_policy_redundant() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("simple-policy-first-policy-redundant", &metadata, report);
 }
 
@@ -1343,7 +1343,7 @@ fn builtin_simple_deps_inited() {
     let (config, audits, imports) = builtin_files_inited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-simple-deps-init", &metadata, report);
 }
 
@@ -1358,7 +1358,7 @@ fn builtin_simple_deps_no_exemptions() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-deps-no-unaudited", &metadata, report);
 }
@@ -1374,7 +1374,7 @@ fn builtin_simple_deps_full_audited() {
     let (config, audits, imports) = builtin_files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-deps-full-audited", &metadata, report);
 }
@@ -1390,7 +1390,7 @@ fn builtin_simple_deps_minimal_audited() {
     let (config, audits, imports) = builtin_files_minimal_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-deps-minimal-audited", &metadata, report);
 }
@@ -1411,7 +1411,7 @@ fn builtin_no_deps() {
     let (config, audits, imports) = builtin_files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-no-deps", &metadata, report);
 }
@@ -1440,7 +1440,7 @@ fn builtin_only_first_deps() {
     let (config, audits, imports) = builtin_files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-only-first-deps", &metadata, report);
 }
@@ -1455,7 +1455,7 @@ fn builtin_cycle_inited() {
     let (config, audits, imports) = builtin_files_inited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-cycle-inited", &metadata, report);
 }
 
@@ -1470,7 +1470,7 @@ fn builtin_cycle_exemptions() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-cycle-unaudited", &metadata, report);
 }
@@ -1486,7 +1486,7 @@ fn builtin_cycle_full_audited() {
     let (config, audits, imports) = builtin_files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-cycle-full-audited", &metadata, report);
 }
@@ -1502,7 +1502,7 @@ fn builtin_cycle_minimal_audited() {
     let (config, audits, imports) = builtin_files_minimal_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-cycle-minimal-audited", &metadata, report);
 }
@@ -1543,7 +1543,7 @@ fn builtin_dev_detection() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-dev-detection", &metadata, report);
 }
@@ -1559,7 +1559,7 @@ fn builtin_dev_detection_empty() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-dev-detection-empty", &metadata, report);
 }
@@ -1575,7 +1575,7 @@ fn builtin_dev_detection_empty_deeper() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Deep);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-dev-detection-empty-deeper", &metadata, report);
 }
@@ -1602,7 +1602,7 @@ fn builtin_simple_exemptions_extra() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-unaudited-extra", &metadata, report);
 }
@@ -1624,7 +1624,7 @@ fn builtin_simple_exemptions_not_a_real_dep() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-not-a-real-dep", &metadata, report);
 }
@@ -1648,7 +1648,7 @@ fn builtin_simple_deps_exemptions_overbroad() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-unaudited-overbroad", &metadata, report);
 }
@@ -1674,7 +1674,7 @@ fn builtin_complex_exemptions_twins() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-unaudited-twins", &metadata, report);
 }
@@ -1700,7 +1700,7 @@ fn builtin_complex_exemptions_partial_twins() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-unaudited-partial-twins", &metadata, report);
 }
@@ -1731,7 +1731,7 @@ fn builtin_simple_exemptions_in_delta() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-unaudited-in-delta", &metadata, report);
 }
@@ -1762,7 +1762,7 @@ fn builtin_simple_exemptions_in_full() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-unaudited-in-full", &metadata, report);
 }
@@ -1789,7 +1789,7 @@ fn builtin_simple_exemptions_in_direct_full() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-unaudited-in-direct-full", &metadata, report);
 }
@@ -1835,7 +1835,7 @@ fn builtin_simple_exemptions_nested_weaker_req() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-simple-unaudited-nested-weaker-req",
@@ -1889,7 +1889,7 @@ fn builtin_simple_exemptions_nested_stronger_req() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-simple-unaudited-nested-stronger-req",
@@ -1922,7 +1922,7 @@ fn builtin_simple_deps_exemptions_adds_uneeded_criteria() {
         .insert("dev".to_string(), vec![exemptions(ver(5), SAFE_TO_DEPLOY)]);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-simple-deps-unaudited-adds-uneeded-criteria",
@@ -1956,7 +1956,7 @@ fn builtin_dev_detection_exemptions_adds_uneeded_criteria_indirect() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-dev-detection-unaudited-adds-uneeded-criteria-indirect",
@@ -1990,7 +1990,7 @@ fn builtin_dev_detection_cursed_full() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-dev-detection-cursed-full", &metadata, report);
 }
@@ -2015,7 +2015,7 @@ fn builtin_dev_detection_cursed_minimal() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-dev-detection-cursed-minimal", &metadata, report);
 }
@@ -2042,7 +2042,7 @@ fn builtin_simple_delta_cycle() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-delta-cycle", &metadata, report);
 }
@@ -2070,7 +2070,7 @@ fn builtin_simple_noop_delta() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-noop-delta", &metadata, report);
 }
@@ -2101,7 +2101,7 @@ fn builtin_simple_delta_double_cycle() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-delta-double-cycle", &metadata, report);
 }
@@ -2132,7 +2132,7 @@ fn builtin_simple_delta_broken_double_cycle() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-simple-delta-broken-double-cycle",
@@ -2164,7 +2164,7 @@ fn builtin_simple_delta_broken_cycle() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-delta-broken-cycle", &metadata, report);
 }
@@ -2192,7 +2192,7 @@ fn builtin_simple_long_cycle() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-long-cycle", &metadata, report);
 }
@@ -2220,7 +2220,7 @@ fn builtin_simple_useless_long_cycle() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-useless-long-cycle", &metadata, report);
 }
@@ -2236,7 +2236,7 @@ fn builtin_haunted_init() {
     let (config, audits, imports) = builtin_files_inited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
     assert_report_snapshot!("builtin-haunted-init", &metadata, report);
 }
 
@@ -2251,7 +2251,7 @@ fn builtin_haunted_no_exemptions() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-haunted-no-unaudited", &metadata, report);
 }
@@ -2267,7 +2267,7 @@ fn builtin_haunted_no_exemptions_deeper() {
     let (config, audits, imports) = builtin_files_no_exemptions(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Deep);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-haunted-no-unaudited-deeper", &metadata, report);
 }
@@ -2283,7 +2283,7 @@ fn builtin_haunted_full_audited() {
     let (config, audits, imports) = builtin_files_full_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-haunted-full-audited", &metadata, report);
 }
@@ -2299,7 +2299,7 @@ fn builtin_haunted_minimal_audited() {
     let (config, audits, imports) = builtin_files_minimal_audited(&metadata);
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-haunted-minimal-audited", &metadata, report);
 }
@@ -2319,7 +2319,7 @@ fn builtin_simple_audit_as_default_root_no_audit() {
         .insert("root-package".to_string(), audit_as_policy(Some(true)));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-simple-audit-as-default-root-no-audit",
@@ -2347,7 +2347,7 @@ fn builtin_simple_audit_as_default_root() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-audit-as-default-root", &metadata, report);
 }
@@ -2371,7 +2371,7 @@ fn builtin_simple_audit_as_default_root_too_weak() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-simple-audit-as-default-root-too-weak",
@@ -2403,7 +2403,7 @@ fn builtin_simple_audit_as_weaker_root() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-audit-as-weaker-root", &metadata, report);
 }
@@ -2428,7 +2428,7 @@ fn builtin_simple_foreign_audited() {
     audits.audits.clear();
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin_simple_foreign_audited", &metadata, report);
 }
@@ -2454,7 +2454,7 @@ fn mock_simple_foreign_audited_pun_no_mapping() {
     audits.audits.clear();
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock_simple_foreign_audited_pun_no_mapping",
@@ -2487,7 +2487,7 @@ fn mock_simple_foreign_audited_pun_mapped() {
     audits.audits.clear();
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock_simple_foreign_audited_pun_mapped", &metadata, report);
 }
@@ -2527,7 +2527,7 @@ fn mock_simple_foreign_audited_pun_wrong_mapped() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock_simple_foreign_audited_pun_wrong_mapped",
@@ -2570,7 +2570,7 @@ fn builtin_simple_foreign_tag_team() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin_simple_foreign_tag_team", &metadata, report);
 }
@@ -2628,7 +2628,7 @@ fn builtin_simple_mega_foreign_tag_team() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin_simple_mega_foreign_tag_team", &metadata, report);
 }
diff --git a/src/tests/violations.rs b/src/tests/violations.rs
index 355673a..31c8dd1 100644
--- a/src/tests/violations.rs
+++ b/src/tests/violations.rs
@@ -18,7 +18,7 @@ fn mock_simple_violation_cur_exemptions() {
         .push(violation(violation_ver, "weak-reviewed"));
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-violation-cur-unaudited", &metadata, report);
 }
@@ -43,7 +43,7 @@ fn mock_simple_violation_cur_full_audit() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-violation-cur-full-audit", &metadata, report);
 }
@@ -70,7 +70,7 @@ fn mock_simple_violation_delta() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-violation-delta", &metadata, report);
 }
@@ -97,7 +97,7 @@ fn mock_simple_violation_full_audit() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-violation-full-audit", &metadata, report);
 }
@@ -122,7 +122,7 @@ fn mock_simple_violation_wildcard() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("mock-simple-violation-wildcard", &metadata, report);
 }
@@ -146,7 +146,7 @@ fn builtin_simple_deps_violation_dodged() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-deps-violation-dodged", &metadata, report);
 }
@@ -170,7 +170,7 @@ fn builtin_simple_deps_violation_low_hit() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-deps-violation-low-hit", &metadata, report);
 }
@@ -194,7 +194,7 @@ fn builtin_simple_deps_violation_high_hit() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-deps-violation-high-hit", &metadata, report);
 }
@@ -218,7 +218,7 @@ fn builtin_simple_deps_violation_imply_hit() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!("builtin-simple-deps-violation-imply-hit", &metadata, report);
 }
@@ -242,7 +242,7 @@ fn builtin_simple_deps_violation_redundant_low_hit() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "builtin-simple-deps-violation-redundant-low-hit",
@@ -270,7 +270,7 @@ fn mock_simple_violation_hit_with_extra_junk() {
     );
 
     let store = Store::mock(config, audits, imports);
-    let report = crate::resolver::resolve(&metadata, None, &store, ResolveDepth::Shallow);
+    let report = crate::resolver::resolve(&metadata, None, &store);
 
     assert_report_snapshot!(
         "mock-simple-violation-hit-with-extra-junk",
diff --git a/tests/snapshots/test_cli__long-help.snap b/tests/snapshots/test_cli__long-help.snap
index ac55a50..40f1a23 100644
--- a/tests/snapshots/test_cli__long-help.snap
+++ b/tests/snapshots/test_cli__long-help.snap
@@ -14,13 +14,6 @@ USAGE:
     cargo vet <SUBCOMMAND>
 
 OPTIONS:
-        --shallow
-            Avoid suggesting audits for dependencies of unaudited dependencies.
-            
-            By default, if a dependency doesn't have sufficient audits for *itself* then we try to
-            speculate that its dependencies require the criteria. This flag disables that behaviour,
-            causing only suggestions which we're certain of the requirements for to be emitted.
-
     -h, --help
             Print help information
 
diff --git a/tests/snapshots/test_cli__markdown-help.snap b/tests/snapshots/test_cli__markdown-help.snap
index 4b8e967..be487c0 100644
--- a/tests/snapshots/test_cli__markdown-help.snap
+++ b/tests/snapshots/test_cli__markdown-help.snap
@@ -23,13 +23,6 @@ cargo vet <SUBCOMMAND>
 ```
 
 ### OPTIONS
-#### `--shallow`
-Avoid suggesting audits for dependencies of unaudited dependencies.
-
-By default, if a dependency doesn't have sufficient audits for *itself* then we try to
-speculate that its dependencies require the criteria. This flag disables that behaviour,
-causing only suggestions which we're certain of the requirements for to be emitted.
-
 #### `-h, --help`
 Print help information
 
@@ -190,13 +183,6 @@ cargo vet check [OPTIONS]
 ```
 
 ### OPTIONS
-#### `--shallow`
-Avoid suggesting audits for dependencies of unaudited dependencies.
-
-By default, if a dependency doesn't have sufficient audits for *itself* then we try to
-speculate that its dependencies require the criteria. This flag disables that behaviour,
-causing only suggestions which we're certain of the requirements for to be emitted.
-
 #### `-h, --help`
 Print help information
 
@@ -223,13 +209,6 @@ cargo vet suggest [OPTIONS]
 ```
 
 ### OPTIONS
-#### `--shallow`
-Avoid suggesting audits for dependencies of unaudited dependencies.
-
-By default, if a dependency doesn't have sufficient audits for *itself* then we try to
-speculate that its dependencies require the criteria. This flag disables that behaviour,
-causing only suggestions which we're certain of the requirements for to be emitted.
-
 #### `-h, --help`
 Print help information
 
diff --git a/tests/snapshots/test_cli__short-help.snap b/tests/snapshots/test_cli__short-help.snap
index de03094..3cfea0f 100644
--- a/tests/snapshots/test_cli__short-help.snap
+++ b/tests/snapshots/test_cli__short-help.snap
@@ -11,7 +11,6 @@ USAGE:
     cargo vet <SUBCOMMAND>
 
 OPTIONS:
-        --shallow    Avoid suggesting audits for dependencies of unaudited dependencies
     -h, --help       Print help information
     -V, --version    Print version information
 
diff --git a/tests/snapshots/test_cli__test-project-suggest-shallow-json.snap b/tests/snapshots/test_cli__test-project-suggest-shallow-json.snap
deleted file mode 100644
index 3e264e7..0000000
--- a/tests/snapshots/test_cli__test-project-suggest-shallow-json.snap
+++ /dev/null
@@ -1,452 +0,0 @@
----
-source: tests/test-cli.rs
-expression: format_outputs(&output)
----
-stdout:
-{
-  "conclusion": "fail (vetting)",
-  "failures": [
-    {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "missing_criteria": [
-        "safe-to-run"
-      ]
-    },
-    {
-      "name": "indexmap",
-      "version": "1.8.1",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "libc",
-      "version": "0.2.123",
-      "missing_criteria": [
-        "safe-to-run"
-      ]
-    },
-    {
-      "name": "os_str_bytes",
-      "version": "6.0.0",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "proc-macro2",
-      "version": "1.0.37@git:4445659b0f753a928059244c875a58bb12f791e9",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "reqwest",
-      "version": "0.11.10",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "serde_json",
-      "version": "1.0.79",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "termcolor",
-      "version": "1.1.3",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "textwrap",
-      "version": "0.15.0",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "tokio",
-      "version": "1.17.0",
-      "missing_criteria": [
-        "safe-to-deploy"
-      ]
-    },
-    {
-      "name": "winapi",
-      "version": "0.3.9",
-      "missing_criteria": [
-        "safe-to-run"
-      ]
-    }
-  ],
-  "suggest": {
-    "suggestions": [
-      {
-        "name": "hermit-abi",
-        "notable_parents": "atty",
-        "suggested_criteria": [
-          "safe-to-run"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "0.1.19",
-          "diffstat": {
-            "insertions": 932,
-            "deletions": 0,
-            "files_changed": 9
-          }
-        }
-      },
-      {
-        "name": "termcolor",
-        "notable_parents": "clap",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "1.1.3",
-          "diffstat": {
-            "insertions": 2578,
-            "deletions": 0,
-            "files_changed": 10
-          }
-        }
-      },
-      {
-        "name": "os_str_bytes",
-        "notable_parents": "clap",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "6.0.0",
-          "diffstat": {
-            "insertions": 2911,
-            "deletions": 0,
-            "files_changed": 21
-          }
-        }
-      },
-      {
-        "name": "textwrap",
-        "notable_parents": "clap",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "0.15.0",
-          "diffstat": {
-            "insertions": 5196,
-            "deletions": 0,
-            "files_changed": 15
-          }
-        }
-      },
-      {
-        "name": "proc-macro2",
-        "notable_parents": "test-project",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "1.0.37@git:4445659b0f753a928059244c875a58bb12f791e9",
-          "diffstat": {
-            "insertions": 5691,
-            "deletions": 0,
-            "files_changed": 19
-          }
-        }
-      },
-      {
-        "name": "indexmap",
-        "notable_parents": "h2, clap",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "1.8.1",
-          "diffstat": {
-            "insertions": 9445,
-            "deletions": 0,
-            "files_changed": 31
-          }
-        }
-      },
-      {
-        "name": "reqwest",
-        "notable_parents": "test-project",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "0.11.10",
-          "diffstat": {
-            "insertions": 19797,
-            "deletions": 0,
-            "files_changed": 60
-          }
-        }
-      },
-      {
-        "name": "serde_json",
-        "notable_parents": "reqwest, test-project",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "1.0.79",
-          "diffstat": {
-            "insertions": 22848,
-            "deletions": 0,
-            "files_changed": 86
-          }
-        }
-      },
-      {
-        "name": "tokio",
-        "notable_parents": "h2, hyper, reqwest, and 4 others",
-        "suggested_criteria": [
-          "safe-to-deploy"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "1.17.0",
-          "diffstat": {
-            "insertions": 91271,
-            "deletions": 0,
-            "files_changed": 403
-          }
-        }
-      },
-      {
-        "name": "libc",
-        "notable_parents": "mio, atty, tokio, openssl, and 8 others",
-        "suggested_criteria": [
-          "safe-to-run"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "0.2.123",
-          "diffstat": {
-            "insertions": 94060,
-            "deletions": 0,
-            "files_changed": 215
-          }
-        }
-      },
-      {
-        "name": "winapi",
-        "notable_parents": "mio, atty, miow, ntapi, and 7 others",
-        "suggested_criteria": [
-          "safe-to-run"
-        ],
-        "suggested_diff": {
-          "from": null,
-          "to": "0.3.9",
-          "diffstat": {
-            "insertions": 181323,
-            "deletions": 0,
-            "files_changed": 410
-          }
-        }
-      }
-    ],
-    "suggest_by_criteria": {
-      "safe-to-deploy": [
-        {
-          "name": "termcolor",
-          "notable_parents": "clap",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "1.1.3",
-            "diffstat": {
-              "insertions": 2578,
-              "deletions": 0,
-              "files_changed": 10
-            }
-          }
-        },
-        {
-          "name": "os_str_bytes",
-          "notable_parents": "clap",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "6.0.0",
-            "diffstat": {
-              "insertions": 2911,
-              "deletions": 0,
-              "files_changed": 21
-            }
-          }
-        },
-        {
-          "name": "textwrap",
-          "notable_parents": "clap",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "0.15.0",
-            "diffstat": {
-              "insertions": 5196,
-              "deletions": 0,
-              "files_changed": 15
-            }
-          }
-        },
-        {
-          "name": "proc-macro2",
-          "notable_parents": "test-project",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "1.0.37@git:4445659b0f753a928059244c875a58bb12f791e9",
-            "diffstat": {
-              "insertions": 5691,
-              "deletions": 0,
-              "files_changed": 19
-            }
-          }
-        },
-        {
-          "name": "indexmap",
-          "notable_parents": "h2, clap",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "1.8.1",
-            "diffstat": {
-              "insertions": 9445,
-              "deletions": 0,
-              "files_changed": 31
-            }
-          }
-        },
-        {
-          "name": "reqwest",
-          "notable_parents": "test-project",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "0.11.10",
-            "diffstat": {
-              "insertions": 19797,
-              "deletions": 0,
-              "files_changed": 60
-            }
-          }
-        },
-        {
-          "name": "serde_json",
-          "notable_parents": "reqwest, test-project",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "1.0.79",
-            "diffstat": {
-              "insertions": 22848,
-              "deletions": 0,
-              "files_changed": 86
-            }
-          }
-        },
-        {
-          "name": "tokio",
-          "notable_parents": "h2, hyper, reqwest, and 4 others",
-          "suggested_criteria": [
-            "safe-to-deploy"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "1.17.0",
-            "diffstat": {
-              "insertions": 91271,
-              "deletions": 0,
-              "files_changed": 403
-            }
-          }
-        }
-      ],
-      "safe-to-run": [
-        {
-          "name": "hermit-abi",
-          "notable_parents": "atty",
-          "suggested_criteria": [
-            "safe-to-run"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "0.1.19",
-            "diffstat": {
-              "insertions": 932,
-              "deletions": 0,
-              "files_changed": 9
-            }
-          }
-        },
-        {
-          "name": "libc",
-          "notable_parents": "mio, atty, tokio, openssl, and 8 others",
-          "suggested_criteria": [
-            "safe-to-run"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "0.2.123",
-            "diffstat": {
-              "insertions": 94060,
-              "deletions": 0,
-              "files_changed": 215
-            }
-          }
-        },
-        {
-          "name": "winapi",
-          "notable_parents": "mio, atty, miow, ntapi, and 7 others",
-          "suggested_criteria": [
-            "safe-to-run"
-          ],
-          "suggested_diff": {
-            "from": null,
-            "to": "0.3.9",
-            "diffstat": {
-              "insertions": 181323,
-              "deletions": 0,
-              "files_changed": 410
-            }
-          }
-        }
-      ]
-    },
-    "total_lines": 436052
-  }
-}
-stderr:
-
diff --git a/tests/snapshots/test_cli__test-project-suggest-shallow.snap b/tests/snapshots/test_cli__test-project-suggest-shallow.snap
deleted file mode 100644
index d393ca5..0000000
--- a/tests/snapshots/test_cli__test-project-suggest-shallow.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/test-cli.rs
-expression: format_outputs(&output)
----
-stdout:
-recommended audits for safe-to-deploy:
-    cargo vet inspect termcolor 1.1.3                                                  (used by clap)                              (2578 lines)
-    cargo vet inspect os_str_bytes 6.0.0                                               (used by clap)                              (2911 lines)
-    cargo vet inspect textwrap 0.15.0                                                  (used by clap)                              (5196 lines)
-    cargo vet inspect proc-macro2 1.0.37@git:4445659b0f753a928059244c875a58bb12f791e9  (used by test-project)                      (5691 lines)
-    cargo vet inspect indexmap 1.8.1                                                   (used by h2, clap)                          (9445 lines)
-    cargo vet inspect reqwest 0.11.10                                                  (used by test-project)                      (19797 lines)
-    cargo vet inspect serde_json 1.0.79                                                (used by reqwest, test-project)             (22848 lines)
-    cargo vet inspect tokio 1.17.0                                                     (used by h2, hyper, reqwest, and 4 others)  (91271 lines)
-
-recommended audits for safe-to-run:
-    cargo vet inspect hermit-abi 0.1.19  (used by atty)                                     (932 lines)
-    cargo vet inspect libc 0.2.123       (used by mio, atty, tokio, openssl, and 8 others)  (94060 lines)
-    cargo vet inspect winapi 0.3.9       (used by mio, atty, miow, ntapi, and 7 others)     (181323 lines)
-
-estimated audit backlog: 436052 lines
-
-Use |cargo vet certify| to record the audits.
-
-stderr:
-
diff --git a/tests/test-cli.rs b/tests/test-cli.rs
index fbd609c..2c6c6c8 100644
--- a/tests/test-cli.rs
+++ b/tests/test-cli.rs
@@ -232,55 +232,6 @@ fn test_project_suggest_json() {
     assert!(output.status.success(), "{}", output.status);
 }
 
-#[test]
-fn test_project_suggest_shallow() {
-    let project = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
-        .join("tests")
-        .join("test-project");
-    let bin = env!("CARGO_BIN_EXE_cargo-vet");
-    let output = Command::new(bin)
-        .current_dir(&project)
-        .arg("vet")
-        .arg("suggest")
-        .arg("--diff-cache")
-        .arg("../diff-cache.toml")
-        .arg("--manifest-path")
-        .arg("Cargo.toml")
-        .arg("--shallow")
-        .stdout(Stdio::piped())
-        .stderr(Stdio::piped())
-        .output()
-        .unwrap();
-
-    insta::assert_snapshot!("test-project-suggest-shallow", format_outputs(&output));
-    assert!(output.status.success(), "{}", output.status);
-}
-
-#[test]
-fn test_project_suggest_shallow_json() {
-    let project = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
-        .join("tests")
-        .join("test-project");
-    let bin = env!("CARGO_BIN_EXE_cargo-vet");
-    let output = Command::new(bin)
-        .current_dir(&project)
-        .arg("vet")
-        .arg("suggest")
-        .arg("--diff-cache")
-        .arg("../diff-cache.toml")
-        .arg("--manifest-path")
-        .arg("Cargo.toml")
-        .arg("--output-format=json")
-        .arg("--shallow")
-        .stdout(Stdio::piped())
-        .stderr(Stdio::piped())
-        .output()
-        .unwrap();
-
-    insta::assert_snapshot!("test-project-suggest-shallow-json", format_outputs(&output));
-    assert!(output.status.success(), "{}", output.status);
-}
-
 #[test]
 fn test_project_dump_graph_full_json() {
     let project = PathBuf::from(env!("CARGO_MANIFEST_DIR"))