message: Include error case in try again loop.
  Very occasionally there will be a race and the server will
  error on older versions of lean. So this just safeguards against that.
diff: @@ -63,10 +63,10 @@ export function infoEvents(sb: SignalBuilder, onProps: Signal<InfoProps>): Signa
  const {result, isRunning} = sb.throttleTask<any, Partial<InfoState>>(async () => {
  const loc = onLoc.value;
  - let maxTries = 2;
  + let maxTries = 1;
  if (!loc) {return {widget: null, goalState: null, error: null};}
  - try {
  while (true) {
  + try {
  // [todo] if the location has not changed keep the widget and goal state?
  const info = await global_dispatcher.run(() => global_server.info(loc.file_name, loc.line, loc.column));
  const record = info.record;
  @@ -82,10 +82,15 @@ export function infoEvents(sb: SignalBuilder, onProps: Signal<InfoProps>): Signa
  } else {
  return { widget, goalState, error: null };
  }
  - }
  } catch (error) {
  + if (maxTries > 0) {
  + await new Promise((res) => setTimeout(res, 100));
  + maxTries--;
  + } else {
  return {error};
  }
  + }
  + }
  }, updateTrigger);
  const r: Signal<Partial<InfoState>> = sb.merge(
  