code: private void removeSTV(String source,
                             String target,
                             String variant) {
          // assert(source.length() > 0);
          // assert(target.length() > 0);
          CaseInsensitiveString cisrc = new CaseInsensitiveString(source);
          CaseInsensitiveString citrg = new CaseInsensitiveString(target);
          CaseInsensitiveString civar = new CaseInsensitiveString(variant);
          Map<CaseInsensitiveString, List<CaseInsensitiveString>> targets = specDAG.get(cisrc);
          if (targets == null) {
              return; // should never happen for valid s-t/v
          }
          List<CaseInsensitiveString> variants = targets.get(citrg);
          if (variants == null) {
              return; // should never happen for valid s-t/v
          }
          variants.remove(civar);
          if (variants.size() == 0) {
              targets.remove(citrg); // should delete variants
              if (targets.size() == 0) {
                  specDAG.remove(cisrc); // should delete targets
              }
          }
      }
docs: Remove a source-target/variant from the specDAG.