Program: 8907
Project: 8907
Buggy source:
@Override protected void contructWall(Node root){
  Point start=roomInstance.getCoordinates().get(0);
  for (  WallSection section : roomInstance.getWallPoints()) {
    int i=0;
    resetWallIndex();
    for (    Point p : section.getCoordinates()) {
      int piece;
      if (section.getDirection() == WallSection.WallDirection.NORTH) {
        piece=(i == 1) ? 5 : 7;
        Spatial part=assetManager.loadModel(AssetsConverter.MODELS_FOLDER + "String_Node_Str" + roomInstance.getRoom().getCompleteResource().getName()+ piece+ "String_Node_Str");
        resetAndMoveSpatial(part,start,new Point(start.x + p.x,start.y + p.y));
        part.move(-0.5f,0,-0.5f);
        root.attachChild(part);
        i++;
      }
 else       if (section.getDirection() == WallSection.WallDirection.WEST) {
        piece=7;
        Spatial part=assetManager.loadModel(AssetsConverter.MODELS_FOLDER + "String_Node_Str" + roomInstance.getRoom().getCompleteResource().getName()+ piece+ "String_Node_Str");
        resetAndMoveSpatial(part,start,new Point(start.x + p.x,start.y + p.y));
        part.rotate(0,FastMath.HALF_PI,0);
        part.move(-0.5f,0,-0.5f);
        root.attachChild(part);
      }
 else       if (section.getDirection() == WallSection.WallDirection.EAST) {
        piece=7;
        Spatial part=assetManager.loadModel(AssetsConverter.MODELS_FOLDER + "String_Node_Str" + roomInstance.getRoom().getCompleteResource().getName()+ piece+ "String_Node_Str");
        resetAndMoveSpatial(part,start,new Point(start.x + p.x,start.y + p.y));
        part.rotate(0,-FastMath.HALF_PI,0);
        part.move(-0.5f,0,-0.5f);
        root.attachChild(part);
      }
 else       if (section.getDirection() == WallSection.WallDirection.SOUTH) {
        if (i == 0) {
          piece=4;
        }
 else         if (i == 1) {
          piece=5;
        }
 else {
          piece=8;
        }
        Spatial part=assetManager.loadModel(AssetsConverter.MODELS_FOLDER + "String_Node_Str" + roomInstance.getRoom().getCompleteResource().getName()+ piece+ "String_Node_Str");
        resetAndMoveSpatial(part,start,new Point(start.x + p.x,start.y + p.y));
        part.rotate(0,FastMath.PI,0);
        part.move(-0.5f,0,-0.5f);
        root.attachChild(part);
        i++;
      }
    }
  }
}

Fixed version (ground truth):
@Override protected void contructWall(Node root){
  Point start=roomInstance.getCoordinates().get(0);
  String modelName=roomInstance.getRoom().getCompleteResource().getName();
  int south=0;
  for (  WallSection section : roomInstance.getWallPoints()) {
    int i=0;
    for (    Point p : section.getCoordinates()) {
      int piece;
      Spatial part;
      float yAngle=0;
      if (section.getDirection() == WallSection.WallDirection.NORTH) {
        if (section.getCoordinates().size() == 1) {
          piece=6;
        }
 else {
          piece=(i == 1) ? 5 : 7;
        }
      }
 else       if (section.getDirection() == WallSection.WallDirection.WEST) {
        if (section.getCoordinates().size() == 1) {
          continue;
        }
        piece=7;
        yAngle=FastMath.HALF_PI;
      }
 else       if (section.getDirection() == WallSection.WallDirection.EAST) {
        if (section.getCoordinates().size() == 1) {
          continue;
        }
        piece=7;
        yAngle=-FastMath.HALF_PI;
      }
 else {
        if (south == 0) {
          piece=4;
        }
 else         if (south == 1) {
          piece=8;
        }
 else {
          piece=6;
        }
        south++;
        yAngle=FastMath.PI;
      }
      i++;
      part=assetManager.loadModel(AssetsConverter.MODELS_FOLDER + "String_Node_Str" + modelName+ piece+ "String_Node_Str");
      if (yAngle != 0) {
        part.rotate(0,yAngle,0);
      }
      resetAndMoveSpatial(part,start,new Point(start.x + p.x,start.y + p.y));
      part.move(-MapLoader.TILE_WIDTH / 2,0,-MapLoader.TILE_WIDTH / 2);
      root.attachChild(part);
    }
  }
}