A second `command` node silently overwrote the first via a scalar Option<PathBuf>, and a second `args` node silently overwrote the first via a plain Vec, so duplicate keys last-won instead of tripping the exactly-one-condition rule. Track args as Option<Vec<String>> and error immediately on a repeated command or args key.