code: func (d *deps) WalkGraph(c context.Context, req *dm.WalkGraphReq) (rsp *dm.GraphData, err error) {
  	if req.Auth != nil {
  		logging.Fields{"execution": req.Auth.Id}.Debugf(c, "on behalf of")
  	} else {
  		if err = canRead(c); err != nil {
  			return
  		}
  	}
  	return doGraphWalk(c, req)
  }
docs: // WalkGraph does all the graph walking in parallel. Theoretically, the
  // goroutines look like:
  //
  //   main:
  //     WorkPool(MaxWorkers+1) as pool
  //       jobBuf.add(FanOutIn(Query1->nodeChan ... QueryN->nodeChan))
  //       runningWorkers = 0
  //       while runningWorkers > 0 or jobBuf is not empty:
  //         select {
  //           pool <- jobBuf.pop(): // only if jobBuf !empty, otherwise skip this send
  //             runningWorkers++
  //           node = <- nodeChan:
  //             if node == finishedJob {
  //               runningWorkers--
  //             } else {
  //               if node mentions new quest:
  //                 jobBuf.add(questDataLoader()->nodeChan)
  //               if node mentions new attempt:
  //                 if node.depth < MaxDepth:
  //                   jobBuf.add(attemptLoader(node.depth+1)->nodeChan)
  //             }
  //         }
  //
  //   attemptLoader:
  //     a = get_attempt()
  //     if a exists {
  //       FanOutIn(
  //         maybeLoadAttemptResult,
  //         maybeLoadExecutions,
  //         maybeLoadFwdDeps, // sends to nodeChan if walking direction Fwd|Both
  //         maybeLoadBackDeps // sends to nodeChan if walking direction Back|Both
  //       )
  //     }