docs: def _make_overlay(self):
          """ (Unstable) Create a new overlay that acts like a chained map: Values
              missing in the overlay are copied from the source map. Both maps
              share the same meta entries.
  
              Entries that were copied from the source are called 'virtual'. You
              can not delete virtual keys, but overwrite them, which turns them
              into non-virtual entries. Setting keys on an overlay never affects
              its source, but may affect any number of child overlays.
  
              Other than collections.ChainMap or most other implementations, this
              approach does not resolve missing keys on demand, but instead
              actively copies all values from the source to the overlay and keeps
              track of virtual and non-virtual keys internally. This removes any
              lookup-overhead. Read-access is as fast as a build-in dict for both
              virtual and non-virtual keys.
  
              Changes are propagated recursively and depth-first. A failing
              on-change handler in an overlay stops the propagation of virtual
              values and may result in an partly updated tree. Take extra care
              here and make sure that on-change handlers never fail.
  
              Used by Route.config
          """
          # Cleanup dead references
          self._overlays[:] = [ref for ref in self._overlays if ref() is not None]
  
          overlay = ConfigDict()
          overlay._meta = self._meta
          overlay._source = self
          self._overlays.append(weakref.ref(overlay))
          for key in self:
              overlay._set_virtual(key, self[key])
          return overlay