Jake Vanderwerf
2026-02-04 2127b1bdd73ecd2423e443992da4b442f5a3c1a3
inc/managers/queue/Processor.php
@@ -21,12 +21,13 @@
      $ops = $this->storage->fetchRunnable(3);
      $lastOpId = null;
      foreach ($ops as $op) {
         if (!$this->dependenciesSatisfied($op)) {
            continue;
         }
         if (!$this->storage->markProcessing($op->id)) {
            continue;
         }
         $lastOpId = $op->id;
         $this->processOne($op);
         usleep(10000);
      }
@@ -329,4 +330,31 @@
      return true;
   }
   private function dependenciesSatisfied(Operation $op): bool
   {
      if (empty($op->dependencies)) {
         return true;
      }
      foreach ($op->dependencies as $depId) {
         $dep = $this->storage->find($depId);
         // Missing dependency = block (or decide to ignore; your call)
         if (!$dep) {
            return false;
         }
         if ($dep->state !== 'completed') {
            return false;
         }
         if (!in_array($dep->outcome, ['success', 'partial'], true)) {
            return false;
         }
      }
      return true;
   }
}