Program: 82620
Project: 82620
Buggy source:
private void buildGraph(Voronoi v){
  final Map<Vector2d,Region> pointCenterMap=new HashMap<>();
  final List<Vector2d> points=v.siteCoords();
  for (  Vector2d p : points) {
    Region c=new Region(p);
    regions.add(c);
    pointCenterMap.put(p,c);
  }
  for (  Region c : regions) {
    v.region(c.getCenter());
  }
  final List<org.terasology.math.delaunay.Edge> libedges=v.edges();
  final Map<Integer,Corner> pointCornerMap=new HashMap<>();
  for (  org.terasology.math.delaunay.Edge libedge : libedges) {
    final LineSegment vEdge=libedge.voronoiEdge();
    final LineSegment dEdge=libedge.delaunayLine();
    if (vEdge.getP0() == null || vEdge.getP1() == null)     continue;
    Corner c0=makeCorner(pointCornerMap,vEdge.getP0());
    Corner c1=makeCorner(pointCornerMap,vEdge.getP1());
    Region r0=pointCenterMap.get(dEdge.getP0());
    Region r1=pointCenterMap.get(dEdge.getP1());
    final Edge edge=new Edge(c0,c1,r0,r1);
    edges.add(edge);
    r0.addBorder(edge);
    r1.addBorder(edge);
    c0.addEdge(edge);
    c1.addEdge(edge);
    r0.addNeigbor(r1);
    r1.addNeigbor(r0);
    c0.addAdjacent(c1);
    c1.addAdjacent(c0);
    r0.addCorner(c0);
    r0.addCorner(c1);
    r1.addCorner(c0);
    r1.addCorner(c1);
    c0.addTouches(r0);
    c0.addTouches(r1);
    c1.addTouches(r0);
    c1.addTouches(r1);
  }
  for (  Region region : regions) {
    boolean onLeft=false;
    boolean onRight=false;
    boolean onTop=false;
    boolean onBottom=false;
    int diff=1;
    for (    Corner corner : region.getCorners()) {
      Vector2d p=corner.getLocation();
      onLeft|=closeEnough(p.getX(),bounds.minX(),diff);
      onTop|=closeEnough(p.getY(),bounds.minY(),diff);
      onRight|=closeEnough(p.getX(),bounds.maxX(),diff);
      onBottom|=closeEnough(p.getY(),bounds.maxY(),diff);
    }
    if (onLeft && onTop) {
      Corner c=new Corner(new Vector2d(bounds.minX(),bounds.minY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
    if (onLeft && onBottom) {
      Corner c=new Corner(new Vector2d(bounds.minX(),bounds.maxY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
    if (onRight && onTop) {
      Corner c=new Corner(new Vector2d(bounds.maxX(),bounds.minY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
    if (onRight && onBottom) {
      Corner c=new Corner(new Vector2d(bounds.maxX(),bounds.maxY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
  }
}

Fixed version (ground truth):
private void buildGraph(Voronoi v){
  final Map<Vector2d,Region> pointCenterMap=new HashMap<>();
  final List<Vector2d> points=v.siteCoords();
  for (  Vector2d p : points) {
    Region c=new Region(p);
    regions.add(c);
    pointCenterMap.put(p,c);
  }
  for (  Region c : regions) {
    v.region(c.getCenter());
  }
  final List<org.terasology.math.delaunay.Edge> libedges=v.edges();
  final Map<Integer,Corner> pointCornerMap=new HashMap<>();
  for (  org.terasology.math.delaunay.Edge libedge : libedges) {
    final LineSegment vEdge=libedge.voronoiEdge();
    final LineSegment dEdge=libedge.delaunayLine();
    if (vEdge.getP0() == null || vEdge.getP1() == null) {
      continue;
    }
    Corner c0=makeCorner(pointCornerMap,vEdge.getP0());
    Corner c1=makeCorner(pointCornerMap,vEdge.getP1());
    Region r0=pointCenterMap.get(dEdge.getP0());
    Region r1=pointCenterMap.get(dEdge.getP1());
    final Edge edge=new Edge(c0,c1,r0,r1);
    edges.add(edge);
    r0.addBorder(edge);
    r1.addBorder(edge);
    c0.addEdge(edge);
    c1.addEdge(edge);
    r0.addNeigbor(r1);
    r1.addNeigbor(r0);
    c0.addAdjacent(c1);
    c1.addAdjacent(c0);
    r0.addCorner(c0);
    r0.addCorner(c1);
    r1.addCorner(c0);
    r1.addCorner(c1);
    c0.addTouches(r0);
    c0.addTouches(r1);
    c1.addTouches(r0);
    c1.addTouches(r1);
  }
  for (  Region region : regions) {
    boolean onLeft=false;
    boolean onRight=false;
    boolean onTop=false;
    boolean onBottom=false;
    int diff=1;
    for (    Corner corner : region.getCorners()) {
      Vector2d p=corner.getLocation();
      onLeft|=closeEnough(p.getX(),bounds.minX(),diff);
      onTop|=closeEnough(p.getY(),bounds.minY(),diff);
      onRight|=closeEnough(p.getX(),bounds.maxX(),diff);
      onBottom|=closeEnough(p.getY(),bounds.maxY(),diff);
    }
    if (onLeft && onTop) {
      Corner c=new Corner(new Vector2d(bounds.minX(),bounds.minY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
    if (onLeft && onBottom) {
      Corner c=new Corner(new Vector2d(bounds.minX(),bounds.maxY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
    if (onRight && onTop) {
      Corner c=new Corner(new Vector2d(bounds.maxX(),bounds.minY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
    if (onRight && onBottom) {
      Corner c=new Corner(new Vector2d(bounds.maxX(),bounds.maxY()));
      c.setBorder(true);
      corners.add(c);
      region.addCorner(c);
    }
  }
}