public function initAfterModulesAvailable(StoryTeller $st, CliEngine $engine, Injectables $injectables)
 {
     // shorthand
     $output = $injectables->output;
     // are we keeping the test environment hanging around afterwards?
     if (isset($engine->options->persistTarget) && $engine->options->persistTarget) {
         $injectables->activeConfig->setData('storyplayer.phases.testEnvShutdown.TestEnvironmentDestruction', false);
         $injectables->activeConfig->unsetData('storyplayer.phases.userAbort.TestEnvironmentDestruction');
         $st->setPersistTestEnvironment();
     }
     // are we trying to use a test environment that has previously
     // been persisted?
     if (isset($engine->options->reuseTarget) && $engine->options->reuseTarget) {
         // does the target exist to be reused?
         $output->setSilentMode();
         $hasTarget = $st->fromTargetsTable()->hasCurrentTestEnvironment();
         $output->resetSilentMode();
         if (!$hasTarget) {
             $output->logCliWarning("target environment '" . $st->getTestEnvironmentName() . "' does not exist; ignoring --reuse-target switch");
             return;
         }
         // okay, so we have the test environment in the targets table,
         // but has the test environment been changed at all?
         $output->setSilentMode();
         $origSig = $st->fromTargetsTable()->getCurrentTestEnvironmentSignature();
         $currentSig = $st->getTestEnvironmentSignature();
         $output->resetSilentMode();
         if ($origSig != $currentSig) {
             // our test environment entry isn't valid, so remove it
             $output->setSilentMode();
             $st->usingTargetsTable()->removeCurrentTestEnvironment();
             $output->resetSilentMode();
             $output->logCliWarning("target environment '" . $st->getTestEnvironmentName() . "' has changed; ignoring --reuse-target switch");
             return;
         }
         // if we get here, then we do not need to create the test environment
         $injectables->activeConfig->setData('storyplayer.phases.testEnvStartup.TestEnvironmentConstruction', false);
     } else {
         // do we already have this target?
         //
         // this can happen when the test environment was previously
         // persisted, and this time we're being run without the
         // --reuse-target flag
         // does the target exist to be reused?
         $output->setSilentMode();
         $hasTarget = $st->fromTargetsTable()->hasCurrentTestEnvironment();
         $output->resetSilentMode();
         if ($hasTarget) {
             // remove this target from the table
             $output->setSilentMode();
             $st->usingTargetsTable()->removeCurrentTestEnvironment();
             $output->resetSilentMode();
         }
     }
 }