'` bypasses it, which is why manual * testing can look fine while cron does nothing. * * A plain `Job` can never acquire that stamp: `JobList::add()` leaves the * column at its `TIME_SENSITIVE` default, and the one place that ever * downgrades it, `JobList::setLastRun()`, is guarded by * `$job instanceof TimedJob && !$job->isTimeSensitive()` — with no `else`. * Rows written by an older version of this app keep whatever they were * stamped with, though, so an instance that ran the `TIME_INSENSITIVE` * version still needs the one-off `UPDATE oc_jobs SET time_sensitive = 0` * documented in the README. */ class RunWorkflowsJob extends Job { public function __construct( ITimeFactory $time, private WorkflowRunner $runner, ) { parent::__construct($time); $this->setAllowParallelRuns(false); } protected function run($argument): void { $this->runner->run(); } }