`fluksio run --param lr=0.002` died with a bare JSONDecodeError: `--param` is not a `run` flag, so it became an input named `param` whose value `lr=0.002` was json-decoded. The name check ran after the coercion, so the decode error always won. Names are now checked first, and a coercion error is a SyncError naming the input and its type, the way `_ask_params` has always done it.