docs: function Job(job, provider, plugins, config) {
    var jobId = job._id.toString();
  
    debug(`Creating new job "${jobId}" for project "${job.project.display_name}" using provider "${provider.id}".`);
  
    this.config = _.extend({
      spawn: spawnNormal,
      pty: false,
      env: {}
    }, config);
  
    // Setup default ENVs to be used in plugin contexts
    this.config.env = _.extend(this.config.env, {
      STRIDER: true,
      STRIDER_TRIGGER: job.trigger.type || 'manual',
      STRIDER_COMMIT: '',
      STRIDER_PR: '',
      STRIDER_BRANCH: job.ref.branch,
      STRIDER_SLUG: job.project.name,
      STRIDER_BUILD: jobId,
      STRIDER_BUILD_URL: `${job.project.display_url}/job/${jobId}`
    });
  
    if (this.config.pty) {
      debug('PTY has been disabled due to a bug in node core');
      this.config.pty = false;
    }
  
    this.io = config.io;
    this.job = job;
    this.id = job._id;
    this.provider = provider;
    this.plugins = plugins;
    this.logPrefix = colorize.job(this.id);
    this.phase = null;
    this.testcode = null;
    this.cancelled = false;
    this.commands = [];
    this.listen();
  }