Some of these ideas are written up in the late Joe Armstrong's dissertation about Erlang and OTP "Making reliable distributed systems in the presence of software errors". It's a few hundred pages but quite readable to a programming audience -- it isn't filled with acres of formal proofs or highly specialised jargon.
See chapter 4 "Programming Techniques" section 4.1 "Abstracting out concurrency" and chapter 6 "Building an Application" section 6.2 "Generic server principles"
https://erlang.org/download/armstrong_thesis_2003.pdf
> supervision tree
See chapter 5 "Programming Fault Tolerant Systems" & section 5.2 "supervision hierarchies"
> genserver / generic server
See chapter 4 "Programming Techniques" section 4.1 "Abstracting out concurrency" and chapter 6 "Building an Application" section 6.2 "Generic server principles"