message: Add try again and multiple tries for invalidated error.
  Ultimately I believe this is a problem with the server though.
diff: @@ -34,13 +34,24 @@ export function Info(props: InfoProps) {
  setGoalState(null);
  return;
  }
  + const maxTries = 2;
  + let tryCount = 0;
  + while (tryCount < maxTries) {
  + tryCount++;
  try {
  const info = await global_server.info(loc.file_name, loc.line, loc.column);
  const record: any = info.record;
  setWidget(record && record.widget);
  setGoalState(record && record.state);
  + return;
  } catch (e) {
  + if (tryCount >= maxTries) {
  setUpdateError(e);
  + } else {
  + // wait a second and try again.
  + await new Promise(r => setTimeout(r, 1000));
  + }
  + }
  }
  }
  @@ -111,7 +122,7 @@ export function Info(props: InfoProps) {
  </span>
  </summary>
  <div className="ml1">
  - {updateError && <div className="error">Error updating: {updateError.message || updateError}</div> }
  + {updateError && <div className="error">Error updating: {updateError.message || updateError}. <a className="link pointer dim" onClick={e => updateInfo(true)}>Try again.</a></div> }
  <details open className={widget ? '' : 'dn'}>
  <summary className="mv2 pointer">Widget</summary>
  <div className={'ml1 ' + (paused ? 'o-60' : '')} >
  