a-b-street/abstreet · error
not in data/MANIFEST.txt
Error message
{} not in data/MANIFEST.txt What it means
During a dry-run comparison for a single file, the updater expects every local path to have an entry in data/MANIFEST.txt. If the path isn't listed in the manifest, it panics, since there is no known checksum to compare against.
Solutions
- Pass the exact path relative to the repo root as recorded in data/MANIFEST.txt
- Regenerate the manifest so the new file gets an entry, then rerun
- Check manifest entries (grep the path in data/MANIFEST.txt) to confirm the exact key
Example fix
// before ./target/release/updater dry-run --single-file=data/input/myfile.bin // after (regenerate manifest first, or use the exact manifest key) grep 'data/input/myfile.bin' data/MANIFEST.txt cargo run --bin updater -- dry-run --single-file=data/input/myfile.bin
Defensive patterns
Strategy: validation
Validate before calling
let manifest = Manifest::load();
assert!(manifest.entries.contains_key(path), "{} not in manifest; regenerate it", path); Prevention
- Regenerate MANIFEST.txt after adding data files
- Pass exact manifest-relative paths to --single-file
- Grep the manifest to confirm the key before dry-run
When it happens
Trigger: Running the updater's DryRun task with single_file set to a path that has no entry in data/MANIFEST.txt (path string must match the manifest keys exactly).
Common situations: Typos or wrong relative path passed to --single-file; a newly added data file whose manifest was never regenerated; manifest out of date after manual edits.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- A trip just walking from
- at has weird geom along
- Bad DistanceInterval
- Bad TimeInterval ..
- Can't delete ; it's not in the World
AI-assisted analysis of a-b-street/abstreet@0964f29315 (2026-09-13).
Data as JSON: /api/errors/0274633a9a2bb44c.
Report an issue: GitHub.
Appendix: source
Thrown at updater/src/main.rs:84
abstutil::logger::setup();
match Task::from_args() {
Task::Upload => {
upload("dev");
}
Task::IncrementalUpload { version } => {
// We DON'T want to override the main data immediately from the batch Docker jobs. If
// running locally, can temporarily disable this assertion.
assert_ne!(version, "dev");
incremental_upload(version);
}
Task::DryRun { single_file } => {
if let Some(path) = single_file {
let local = md5sum(&path);
let truth = Manifest::load()
.entries
.remove(&path)
.unwrap_or_else(|| panic!("{} not in data/MANIFEST.txt", path))
.checksum;
if local != truth {
println!("{} has changed", path);
}
} else {
just_compare();
}
}
Task::OptIntoAll => {
println!("{}", abstutil::to_json(&DataPacks::all_data_packs()));
}
Task::Download {
minimal,
dont_delete,
dl_from_local,
version,
} => {
download_updates(version, minimal, !dont_delete, dl_from_local).await;View on GitHub (pinned to 0964f29315)