@Override
 protected Context makeContext(ExperimentStep step, boolean hasFailed, int workerTimeout) {
   ExperimentStep descriptorStep = experimentDescriptor.getStep();
   if (!step.equals(descriptorStep)) {
     log.shout("Event has step " + step + " but descriptor has step " + descriptorStep);
     // FIXME: should force a failure
   }
   Properties props = experimentDescriptor.getProperties();
   return new ContextBase(workerTimeout, hasFailed, props);
 }
 @Override
 @Cougaar.Execute(on = Subscribe.ModType.ADD)
 public void executeSocietyCompletion(SocietyCompletionEvent<ExperimentStep, R> event) {
   // Sanity check
   ExperimentStep eventStep = event.getStep();
   ExperimentStep descriptorStep = experimentDescriptor.getStep();
   if (!eventStep.equals(descriptorStep)) {
     log.error("Event has step " + eventStep + " but descriptor has step " + descriptorStep);
     sequenceFailed(event);
     return;
   }
   if (!event.isSuccessful()) {
     sequenceFailed(event);
     return;
   }
   experimentDescriptor.doWork(event);
   long deferMillis = experimentDescriptor.getDeferMillis();
   if (deferMillis > 0) {
     deferSocietyCompletion(event, deferMillis);
   } else {
     resumeSocietyCompletion(event);
   }
 }