Improve description of what must be Fast or Stable

For arti#1100 (closed), I need to know which circuits require Fast or Stable relays. But the information in path-spec about Stable is a little outdated, and the information about Fast is basically non-existent.

I have tried to reverse-engineer stuff in tor a bit, and here is what I came up with:


  1. Only pick a node as a possible guard if it is Stable and Fast, in addition to having the Guard flag.

  2. A circuit must have only Stable nodes...

  • If it's for an introduction or rendezvous circuit.
    • (Actually, it seems that we don't enforce this for rendezvous circuits from onion services to the RP if none of our virtual ports is long-lived. This seems like a mistake to me, since re-creating a rendezvous circuit is somewhat expensive.)
  • If we're going to use it for a long-lived port.

Notably, the following do not need to be stable:

  • Ciruits used only for traffic on non-longlived-ports
  • One-hop directory circuits
  • Circuits built to HsDirs for uploading and downloading
  • Self-testing circuits
  • ...
  1. A circuit must have only Fast nodes, unless...
  • (I can't find any circuits like this.)

@mikeperry, do you have any ideas here? Am I on the right track?