pub fn collect(seeds: &[PathBuf]) -> Vec<Cache>
Walk every seed and concatenate, de-duplicating by canonicalised absolute path. Order is preserved (first occurrence wins).