docs: public boolean preValidateRelationships(final ContentSpec contentSpec) {
          boolean error = false;
  
          // Create the map of unique ids to spec topics
          final Map<String, List<ITopicNode>> specTopicMap = ContentSpecUtilities.getIdTopicNodeMap(contentSpec);
  
          final Map<SpecNodeWithRelationships, List<Relationship>> relationships = contentSpec.getRelationships();
          for (final Entry<SpecNodeWithRelationships, List<Relationship>> relationshipEntry : relationships.entrySet()) {
              final SpecNodeWithRelationships specNode = relationshipEntry.getKey();
  
              // Check if the app should be shutdown
              if (isShuttingDown.get()) {
                  shutdown.set(true);
                  return false;
              }
  
              for (final Relationship relationship : relationshipEntry.getValue()) {
                  // Check if the app should be shutdown
                  if (isShuttingDown.get()) {
                      shutdown.set(true);
                      return false;
                  }
  
                  final String relatedId = relationship.getSecondaryRelationshipId();
                  // The relationship points to a target so it must be a level or topic
                  if (relationship instanceof TargetRelationship) {
                      final SpecNode node = ((TargetRelationship) relationship).getSecondaryRelationship();
                      if (node instanceof SpecTopic) {
                          final SpecTopic targetTopic = (SpecTopic) node;
                          if (!validateRelationshipToTopic(relationship, specNode, relatedId, targetTopic, specTopicMap)) {
                              error = true;
                          }
                      } else if (node instanceof Level) {
                          final Level targetLevel = (Level) node;
                          if (!validateRelationshipToLevel(relationship, specNode, targetLevel)) {
                              error = true;
                          }
                      }
                  } else if (relationship instanceof TopicRelationship) {
                      final SpecTopic relatedTopic = ((TopicRelationship) relationship).getSecondaryRelationship();
                      if (!validateRelationshipToTopic(relationship, specNode, relatedId, relatedTopic, specTopicMap)) {
                          error = true;
                      }
                  }
              }
          }
          return !error;
      }