Awesome Reviewers

Distinguish between programmer errors and runtime/user-facing behavior changes when deciding how to handle failures, and make error messages easy to localize and act on.

Example:

// Fail fast on programmer misuse
if (parent && command._passThroughOptions && !parent._enablePositionalOptions) {
  throw new Error(`passThroughOptions cannot be used for '${command._name}' without turning on enablePositionalOptions for parent command(s)`);
}

// Prefer warning over breaking change for ambiguous behavior changes
if (isThenable(result) && !this._asyncParsing) {
  console.warn('Warning: .parse() used with an async handler; consider .parseAsync()');
}