It seems that the text of the command-line arguments is always required when requesting provenance, even when providing preparsed arguments, and even though setup_provenance will happily skip them if absent. Why is this a hard requirement?
One can invoke cwltoo.main with optional parameters args for preprocessed arguments and argsl for command-line arguments to be parsed. Both of these are Optional, and if empty, are assigned from sys.argv. However, cwltool.main insists that argsl not be empty.
Concretely, this means that if we invoke cwltool only with preparsed arguments, we must also provide an unparsed list of text arguments if we want to request provenance.
Note that the only use of this list is in cwltool.setup_provenance where if nonempty it is logged in the provenance, and ignored otherwise. Regardless, the parsed arguments are then logged in the provenance.