Merge commit 'c91cc055c8ad81afd8f055b71c74af6819020637' into fix/headless-import-refusals

# Conflicts:
#	context/test-evidence/cli.md
#	context/test-evidence/formula-and-io.md
#	crates/improvise-io/src/import/wizard.rs
#	src/main.rs
#	tests/folder_import_views.rs
#	tests/headless_cli.rs
This commit is contained in:
Claude (agent-headless-import)
2026-09-24 22:08:36 -07:00
committed by Edward Langley
10 changed files with 374 additions and 28 deletions
+31
View File
@@ -822,3 +822,34 @@ fn an_import_that_skips_some_records_warns_with_a_count_and_still_writes() {
let doc = std::fs::read_to_string(&out_path).unwrap();
assert!(doc.contains("_Measure=x, a=m = 4"), "{doc}");
}
/// improvise-lpzu, the user's ruling: a folder always merges, so even one CSV
/// keeps its file identity. Evidence: `context/test-evidence/cli.md`.
#[test]
fn a_folder_of_one_csv_still_gets_a_file_category_and_its_view_but_a_lone_file_does_not() {
let scratch = Scratch::new("folder_single");
let dir = scratch.path("one");
std::fs::create_dir_all(&dir).unwrap();
let csv = dir.join("age.csv");
std::fs::write(&csv, "entity,age-months\nsrc/a.rs,2\n").unwrap();
let from_folder = scratch.path("folder.improv");
let out = run_import(&dir, &from_folder, &[]);
assert!(out.status.success(), "{}", stderr_of(&out));
let doc = std::fs::read_to_string(&from_folder).unwrap();
assert!(doc.contains("## Category: File\n- age\n"), "{doc}");
assert!(doc.lines().any(|l| l == "File: filter, age"), "{doc}");
assert!(
doc.contains("File=age, _Measure=age-months, entity=|src/a.rs| = 2"),
"{doc}"
);
let from_file = scratch.path("file.improv");
let out = run_import(&csv, &from_file, &[]);
assert!(out.status.success(), "{}", stderr_of(&out));
let doc = std::fs::read_to_string(&from_file).unwrap();
assert!(
!doc.contains("File"),
"a lone file keeps today's shape: {doc}"
);
}