docs: def tree_to_nodes(tree, context=None, metadata=None):
      """Assembles ``tree`` nodes into object models.
      If ``context`` is supplied, it will be used to contextualize
      the contents of the nodes. Metadata will pass non-node identifying
      values down to child nodes, if not overridden (license, timestamps, etc)
      """
      nodes = []
      for item in tree['contents']:
          if 'contents' in item:
              sub_nodes = tree_to_nodes(item, context=context, metadata=metadata)
              if metadata is None:
                  metadata = {}
              else:
                  metadata = metadata.copy()
                  for key in ('title', 'id', 'shortid',
                              'cnx-archive-uri', 'cnx-archive-shortid'):
                      if key in metadata:
                          metadata.pop(key)
  
              for key in ('title', 'id', 'shortId'):
                  if item.get(key):
                      metadata[key] = item[key]
                      if item[key] != 'subcol':
                          if key == 'id':
                              metadata['cnx-archive-uri'] = item[key]
                          elif key == 'shortId':
                              metadata['cnx-archive-shortid'] = item[key]
  
              titles = _title_overrides_from_tree(item)
              if item.get('id') is not None:
                  tbinder = cnxepub.Binder(item.get('id'),
                                           sub_nodes,
                                           metadata=metadata,
                                           title_overrides=titles)
              else:
                  tbinder = cnxepub.TranslucentBinder(sub_nodes,
                                                      metadata=metadata,
                                                      title_overrides=titles)
              nodes.append(tbinder)
          else:
              doc = document_factory(item['id'], context=context)
              for key in ('title', 'id', 'shortId'):
                  if item.get(key):
                      doc.metadata[key] = item[key]
                      if key == 'id':
                          doc.metadata['cnx-archive-uri'] = item[key]
                      elif key == 'shortId':
                          doc.metadata['cnx-archive-shortid'] = item[key]
              nodes.append(doc)
      return nodes