Program: 175873
Project: 175873
Buggy source:
public void createMesh(Output output){
  float[] roofColor=BLANK_ROOF, wallColor=BLANK_WALL;
  if (output.faces == null)   return;
  double bestWallArea=0, bestRoofArea=0;
  isTextured=false;
  Map<Object,Face> occluderIDs=new HashMap<>();
  for (  Face f : output.faces.values()) {
    double area=Loopz.area3(f.getLoopL());
    Tag t=GreebleHelper.getTag(f.profile,RoofTag.class);
    if (t != null && area > bestRoofArea && ((RoofTag)t).color != null) {
      roofColor=((RoofTag)t).color;
      bestRoofArea=area;
    }
    t=GreebleHelper.getTag(f.profile,WallTag.class);
    WallTag wt=((WallTag)t);
    if (t != null) {
      if (f.parent == null)       for (      Object o : wt.occlusions)       occluderIDs.put(wt.occlusionID,f);
      isTextured|=wt.miniFacade != null && wt.miniFacade.texture != null;
      wt.miniFacade.postState=null;
      if (area > bestWallArea && wt != null) {
        if (wt.color != null)         wallColor=wt.color;
        bestWallArea=area;
      }
    }
  }
  output.addNonSkeletonSharedEdges(new RoofTag(roofColor));
  List<List<Face>> chains=Campz.findChains(output);
  int count=0;
  for (  List<Face> chain : chains) {
    Set<WallTag> opt=chain.stream().flatMap(f -> f.profile.stream()).filter(tag -> tag instanceof WallTag).map(t -> (WallTag)t).collect(Collectors.toSet());
    for (    WallTag wt : opt) {
      MiniFacade mf=wt.miniFacade;
      mf.postState=new PostProcessState();
      Edge e=chain.get(0).edge;
      Line megafacade=new Line(e.end.x,e.end.y,e.start.x,e.start.y);
      double mfl=megafacade.length();
      Vector2d dir=megafacade.dir();
      LinearForm3D lf=new LinearForm3D(new Vector3d(-dir.y,dir.x,0),e.start);
      for (      Face f : chain)       if (GreebleHelper.getTag(f.profile,WallTag.class) != null)       for (      Loop<Point2d> face : projectTo(megafacade,mfl,lf,f))       mf.postState.skelFaces.add(face);
      for (      Object o : wt.occlusions) {
        Face f=occluderIDs.get(o);
        if (f != null) {
          count++;
          mf.postState.occluders.add(projectTo(megafacade,mfl,lf,f));
        }
      }
      mf.postState.outerFacadeRect=GreebleHelper.findRect(mf.postState.skelFaces);
      mf.featureGen.update();
    }
  }
  System.out.println("String_Node_Str" + count);
  greebleGrid=new GreebleGrid(tweed,new MMeshBuilderCache());
  edges(output,roofColor);
  for (  List<Face> chain : chains) {
    Optional<Tag> opt=chain.stream().flatMap(f -> f.profile.stream()).filter(tag -> tag instanceof WallTag).findAny();
    WallTag wt=null;
    MiniFacade mf2=null;
    Set<QuadF> features=new HashSet<>();
    Line megafacade=new Line();
    if (opt.isPresent() && (wt=(WallTag)opt.get()).miniFacade != null) {
      mf2=wt.miniFacade;
{
        Edge e=chain.get(0).edge;
        megafacade.set(e.end.x,e.end.y,e.start.x,e.start.y);
      }
      if (TweedSettings.settings.snapFacadeWidth) {
        mf2=new MiniFacade(wt.miniFacade);
        mf2.postState=wt.miniFacade.postState;
        double[] meshSE=findSE(wt.miniFacade,megafacade,chain);
        mf2.scaleX(meshSE[0],meshSE[1]);
      }
      mf2.featureGen.values().stream().flatMap(k -> k.stream()).map(r -> new QuadF(r,megafacade)).forEach(q -> features.add(q));
    }
    for (    Face f : chain) {
      face(f,mf2,features,roofColor,wallColor,megafacade);
    }
    for (    QuadF w : features)     if ((w.original.f == Feature.WINDOW || w.original.f == Feature.SHOP) && w.foundAll()) {
      greebleGrid.createDormerWindow(w,greebleGrid.mbs.WOOD,greebleGrid.mbs.GLASS,(float)wt.sillDepth,(float)wt.sillHeight,(float)wt.corniceHeight,0.6,0.9);
    }
    greebleGrid.attachAll(node,chain,output,new ClickMe(){
      @Override public void clicked(      Object data){
        try {
          SwingUtilities.invokeAndWait(new Runnable(){
            @Override public void run(){
              selected(output,node,findSuperEdge(output,chain));
            }
          }
);
        }
 catch (        Throwable th) {
          th.printStackTrace();
        }
      }
    }
);
  }
}

Fixed version (ground truth):
public void createMesh(Output output,java.util.Map<Object,Face> occluderLookup){
  float[] roofColor=BLANK_ROOF, wallColor=BLANK_WALL;
  if (output.faces == null)   return;
  double bestWallArea=0, bestRoofArea=0;
  isTextured=false;
  for (  Face f : output.faces.values()) {
    double area=Loopz.area3(f.getLoopL());
    Tag t=GreebleHelper.getTag(f.profile,RoofTag.class);
    if (t != null && area > bestRoofArea && ((RoofTag)t).color != null) {
      roofColor=((RoofTag)t).color;
      bestRoofArea=area;
    }
    t=GreebleHelper.getTag(f.profile,WallTag.class);
    WallTag wt=((WallTag)t);
    if (t != null) {
      isTextured|=wt.miniFacade != null && wt.miniFacade.texture != null;
      wt.miniFacade.postState=null;
      if (area > bestWallArea && wt != null) {
        if (wt.color != null)         wallColor=wt.color;
        bestWallArea=area;
      }
    }
  }
  output.addNonSkeletonSharedEdges(new RoofTag(roofColor));
  List<List<Face>> chains=Campz.findChains(output);
  for (  List<Face> chain : chains) {
    Set<WallTag> opt=chain.stream().flatMap(f -> f.profile.stream()).filter(tag -> tag instanceof WallTag).map(t -> (WallTag)t).collect(Collectors.toSet());
    for (    WallTag wt : opt) {
      MiniFacade mf=wt.miniFacade;
      mf.postState=new PostProcessState();
      Edge e=chain.get(0).edge;
      Line megafacade=new Line(e.end.x,e.end.y,e.start.x,e.start.y);
      double mfl=megafacade.length();
      Vector2d dir=megafacade.dir();
      LinearForm3D lf=new LinearForm3D(new Vector3d(-dir.y,dir.x,0),e.start);
      for (      Face f : chain)       if (GreebleHelper.getTag(f.profile,WallTag.class) != null)       for (      Loop<Point2d> face : projectTo(megafacade,mfl,lf,f))       mf.postState.skelFaces.add(face);
      if (occluderLookup != null)       for (      Object o : wt.occlusions) {
        Face f=occluderLookup.get(o);
        if (f != null)         mf.postState.occluders.add(projectTo(megafacade,mfl,lf,f));
      }
      mf.postState.outerFacadeRect=GreebleHelper.findRect(mf.postState.skelFaces);
      mf.featureGen.update();
    }
  }
  greebleGrid=new GreebleGrid(tweed,new MMeshBuilderCache());
  edges(output,roofColor);
  for (  List<Face> chain : chains) {
    Optional<Tag> opt=chain.stream().flatMap(f -> f.profile.stream()).filter(tag -> tag instanceof WallTag).findAny();
    WallTag wt=null;
    MiniFacade mf2=null;
    Set<QuadF> features=new HashSet<>();
    Line megafacade=new Line();
    if (opt.isPresent() && (wt=(WallTag)opt.get()).miniFacade != null) {
      mf2=wt.miniFacade;
{
        Edge e=chain.get(0).edge;
        megafacade.set(e.end.x,e.end.y,e.start.x,e.start.y);
      }
      if (TweedSettings.settings.snapFacadeWidth) {
        mf2=new MiniFacade(wt.miniFacade);
        mf2.postState=wt.miniFacade.postState;
        double[] meshSE=findSE(wt.miniFacade,megafacade,chain);
        mf2.scaleX(meshSE[0],meshSE[1]);
      }
      mf2.featureGen.values().stream().flatMap(k -> k.stream()).map(r -> new QuadF(r,megafacade)).forEach(q -> features.add(q));
    }
    for (    Face f : chain) {
      face(f,mf2,features,roofColor,wallColor,megafacade);
    }
    for (    QuadF w : features)     if ((w.original.f == Feature.WINDOW || w.original.f == Feature.SHOP) && w.foundAll()) {
      greebleGrid.createDormerWindow(w,greebleGrid.mbs.WOOD,greebleGrid.mbs.GLASS,(float)wt.sillDepth,(float)wt.sillHeight,(float)wt.corniceHeight,0.6,0.9);
    }
    greebleGrid.attachAll(node,chain,output,new ClickMe(){
      @Override public void clicked(      Object data){
        try {
          SwingUtilities.invokeAndWait(new Runnable(){
            @Override public void run(){
              selected(output,node,findSuperEdge(output,chain));
            }
          }
);
        }
 catch (        Throwable th) {
          th.printStackTrace();
        }
      }
    }
);
  }
}