pub fn expand_patterns_in_dir(base_dir: &Path, patterns: &[String]) -> anyhow::Result<Vec<PathBuf>> {
fn hash_path_contents(root: &Path, path: &Path, hasher: &mut DefaultHasher) -> anyhow::Result<()> {
let first = compute_fingerprint("build", "task", &[], &[], &[], std::slice::from_ref(&output))?;
let first = compute_fingerprint("build", "task", &[], std::slice::from_ref(&input_dir), &[], &[])?;