Swift ArgumentParser: why do top-level arguments clobber subcommand arguments?

That foo is the default value for u:String = "foo" in the XCommand struct, not the outer struct. I c hanged var u:String = "foo" in XCommand to var u:String = "XComandFoo" and ran your code:

release> ./LeafOnly x -u bar
x: u = XComandFoo

Your point is still valid: adding @Option to a command messes stuff up at its subcommand level.