On wikitech-l, @Dreamy_Jazz points out that sometimes maintenance scripts are run under the timeout command, in order to interrupt them after a set interval. With mwscript-k8s this technique doesn't work, since the maintenance script continues to run after mwscript-k8s terminates.
@CDanis suggests a new command-line flag for mwscript-k8s, which we pipe through the Helm chart to .spec.activeDeadlineSeconds in the Job configuration. (Of course the default will remain to leave activeDeadlineSeconds unset, so scripts run to completion.)
If the timeout is reached, Kubernetes will terminate the job, in state Failed. (That strikes me as correct, since the only option other than Failed is Complete. In this case the job could be called a "successful failure" in that it terminated on schedule, but never completed.) Script owners might have to inspect the job to differentiate between a failure due to timeout and a failure due to some unexpected error, but the rest of the mwscript-k8s apparatus, including cleanup, will work normally.