diff --git a/crates/skills/tests/drift_ports_tests.rs b/crates/skills/tests/drift_ports_tests.rs index a53637cc8..70a58ae87 100644 --- a/crates/skills/tests/drift_ports_tests.rs +++ b/crates/skills/tests/drift_ports_tests.rs @@ -134,7 +134,10 @@ fn run_cli(args: &[&str], cwd: &str, env: &HashMap) -> Run { fn base_env(home: &str, tmp: &str, bundle: &str) -> HashMap { let mut env = HashMap::new(); + // `os.homedir()` reads USERPROFILE on Windows and HOME on posix, so a + // fixture home has to name both or the verb writes into the real profile. env.insert("HOME".to_string(), home.to_string()); + env.insert("USERPROFILE".to_string(), home.to_string()); env.insert("TMPDIR".to_string(), tmp.to_string()); env.insert("TEMP".to_string(), tmp.to_string()); env.insert("IMPECCABLE_BUNDLE_PATH".to_string(), bundle.to_string()); @@ -348,7 +351,10 @@ fn claude_project_and_user_scopes_use_claude_agents_dir() { let bundle_dir = create_fake_universal_bundle(&root, &[".claude"]); write(&format!("{home}/.claude/agents/impeccable-finish-reviewer.md"), "stale copy\n"); - let env: HashMap = HashMap::from([("HOME".to_string(), home.clone())]); + let env: HashMap = HashMap::from([ + ("HOME".to_string(), home.clone()), + ("USERPROFILE".to_string(), home.clone()), + ]); let sys = sys_for(&tmp, &env); let project_results = bundle::copy_provider_agents(&sys, &bundle_dir, &tmp, &[".claude"], Some(Scope::Project)).unwrap(); diff --git a/crates/skills/tests/hook_manifest_tests.rs b/crates/skills/tests/hook_manifest_tests.rs index 6e0fafa60..81aef3c90 100644 --- a/crates/skills/tests/hook_manifest_tests.rs +++ b/crates/skills/tests/hook_manifest_tests.rs @@ -99,7 +99,10 @@ fn windows_form_keeps_double_quoted_absolute_path() { let out = rewrite_hook_commands_for_platform(&claude_bundle_manifest(), ".claude", root, true, true); for c in commands(&out) { let p = skill_launcher(root, ".claude"); - assert_eq!(c, format!("command=[ ! -f \"{p}\" ] || \"{p}\" hook")); + // The Windows form is the JSON-quoted path, so a host path's + // backslashes arrive escaped inside the command string. + let q = serde_json::to_string(&p).unwrap(); + assert_eq!(c, format!("command=[ ! -f {q} ] || {q} hook")); assert!(!c.contains(&format!("'{p}"))); } }