Program: 175871
Project: 175871
Buggy source:
private static PlanSkeleton buildCamp(SuperFace sf,Double cap){
  Plan plan=new Plan();
  LoopL<Bar> loopl=new LoopL();
  Loop<Bar> loop=new Loop();
  loopl.add(loop);
  Cache<Point2d,Point2d> cache=new Cache<Point2d,Point2d>(){
    @Override public Point2d create(    Point2d i){
      return new Point2d(i.x,i.y);
    }
  }
;
  LoopL<HalfEdge> edges=sf.findHoles();
  LoopL<Point2d> lpd=new LoopL();
  for (  Loop<HalfEdge> loopHE : edges) {
    Map<Point2d,SuperEdge> ses=new HashMap();
    Loop<Point2d> lp=new Loop();
    lpd.add(lp);
    for (    HalfEdge he : loopHE) {
      SuperEdge se=(SuperEdge)he;
      lp.append(se.start);
      ses.put(se.start,se);
    }
    for (    Loopable<Point2d> lpb : lp.loopableIterator()) {
      Bar b=new Bar(cache.get(lpb.getNext().get()),cache.get(lpb.get()));
      SuperEdge se=ses.get(lpb.get());
      Profile profile=null;
      if (se.prof == null || se.prof.size() < 2) {
        List<Point2d> defpts=new ArrayList<>();
        defpts.add(new Point2d(0,0));
        defpts.add(new Point2d(0,-sf.height * 1.2));
        profile=new Profile(defpts);
      }
 else {
        profile=toProfile(se.prof);
      }
      tagWalls((SuperFace)se.face,profile,se,lpb.get(),lpb.getNext().get());
      plan.addLoop(profile.points.get(0),plan.root,profile);
      b.tags.add(new SETag(se));
      loop.prepend(b);
      plan.profiles.put(b,profile);
    }
  }
  plan.points=loopl;
  if (cap != null) {
    Ship s=new FlatRoofShip(cap,plan);
    for (    Profile prof : plan.profiles.values()) {
      for (      Loop<Bar> lb : prof.points) {
        boolean addedMarker=false;
        for (        Bar b : lb) {
          if (-b.start.y < cap && -b.end.y > cap || (!addedMarker && b == lb.start.getPrev().get())) {
            Marker m=new Marker();
            m.set(b.toLine().xAtY(-cap),-cap);
            m.bar=b;
            m.bar.mould.create(m,null);
            Instance i=s.newInstance();
            i.anchors[0].setProfileGen(m.generator);
            addedMarker=true;
          }
        }
      }
    }
    plan.ships.add(s);
  }
  PlanSkeleton skel=new PlanSkeleton(plan);
  skel.skeleton();
  return skel;
}

Fixed version (ground truth):
private static PlanSkeleton buildCamp(SuperFace sf,Double cap){
  Plan plan=new Plan();
  LoopL<Bar> loopl=new LoopL();
  Loop<Bar> loop=new Loop();
  loopl.add(loop);
  Cache<Point2d,Point2d> cache=new Cache<Point2d,Point2d>(){
    @Override public Point2d create(    Point2d i){
      return new Point2d(i.x,i.y);
    }
  }
;
  LoopL<HalfEdge> edges=sf.findHoles();
  LoopL<Point2d> lpd=new LoopL();
  for (  Loop<HalfEdge> loopHE : edges) {
    Map<Point2d,SuperEdge> ses=new HashMap();
    Loop<Point2d> lp=new Loop();
    lpd.add(lp);
    for (    HalfEdge he : loopHE) {
      SuperEdge se=(SuperEdge)he;
      lp.append(se.start);
      ses.put(se.start,se);
    }
    lp=Loopz.mergeAdjacentEdges2(lp,0.001);
    for (    Loopable<Point2d> lpb : lp.loopableIterator()) {
      Bar b=new Bar(cache.get(lpb.getNext().get()),cache.get(lpb.get()));
      SuperEdge se=ses.get(lpb.get());
      Profile profile=null;
      if (se.prof == null || se.prof.size() < 2) {
        List<Point2d> defpts=new ArrayList<>();
        defpts.add(new Point2d(0,0));
        defpts.add(new Point2d(0,-sf.height * 1.2));
        profile=new Profile(defpts);
      }
 else {
        profile=toProfile(se.prof);
      }
      tagWalls((SuperFace)se.face,profile,se,lpb.get(),lpb.getNext().get());
      plan.addLoop(profile.points.get(0),plan.root,profile);
      b.tags.add(new SETag(se));
      loop.prepend(b);
      plan.profiles.put(b,profile);
    }
  }
  plan.points=loopl;
  if (cap != null) {
    Ship s=new FlatRoofShip(cap,plan);
    for (    Profile prof : plan.profiles.values()) {
      for (      Loop<Bar> lb : prof.points) {
        boolean addedMarker=false;
        for (        Bar b : lb) {
          if (-b.start.y < cap && -b.end.y > cap || (!addedMarker && b == lb.start.getPrev().get())) {
            Marker m=new Marker();
            m.set(b.toLine().xAtY(-cap),-cap);
            m.bar=b;
            m.bar.mould.create(m,null);
            Instance i=s.newInstance();
            i.anchors[0].setProfileGen(m.generator);
            addedMarker=true;
          }
        }
      }
    }
    plan.ships.add(s);
  }
  PlanSkeleton skel=new PlanSkeleton(plan);
  skel.skeleton();
  return skel;
}