Problem
base_dir defaults to empty string via #[serde(default)], and resolve_worktree_dir checks .filter(|d| !d.is_empty()) to treat empty as absent. This "empty string means unset" pattern is fragile — a user setting base_dir = "" gets silent default behavior instead of a validation error.
Solution
Use Option<String> with #[serde(default, skip_serializing_if = "Option::is_none")] to make "unset" explicit.
Problem
base_dirdefaults to empty string via#[serde(default)], andresolve_worktree_dirchecks.filter(|d| !d.is_empty())to treat empty as absent. This "empty string means unset" pattern is fragile — a user settingbase_dir = ""gets silent default behavior instead of a validation error.Solution
Use
Option<String>with#[serde(default, skip_serializing_if = "Option::is_none")]to make "unset" explicit.