Problem with Game of Life

Setting dimensions to rectangle gave hint where the problem is. You had mixed rows and columns (x goes along horizontal axis so it matches columns). Once I replaced columns and rows things seem to work fine.

int spacer = 5;
int cols;
int rows;
int covid;
int initialCarrier = 100;
int chanceCured = 8;
int chanceSick = 4;
color fillCol = color(255, 255, 255);
boolean[][][] grid;

void setup() {
  size(1200, 800);
  rows = height/spacer;
  cols = width/spacer;
  covid = 2;
  grid = new boolean[cols][rows][covid];
  for (int y = 0; y < rows; y++) {
    for (int x = 0; x < cols; x++) {
      grid[x][y][1] = false;

      int rnd = floor(random(2));
      if (rnd == 1) {
        grid[x][y][0] = true;
      }

      if (grid[x][y][0] ) {
        int infect = floor(random(initialCarrier));
        if (infect == 1) {
          grid[x][y][1] = true;
        };
      }
    }
  }
}

void draw() {
  background(0);
  frameRate(5);
  noStroke();
  for (int y = 0; y < rows; y ++) {
    for (int x = 0; x < cols; x ++) {

      // cured
      if (grid[x][y][1]) {
        int cured = floor(random(chanceCured));
        if (cured == 1) {
          grid[x][y][1] = false;
        };
        if (cured == 2) {
          grid[x][y][1] = false;
          grid[x][y][0] = false;
        };
      }

      /// if contaminated
      if (grid[x][y][1] && grid[x][y][0]) {
        fillCol = color(0, 255, 0);
        fill(fillCol);
      }


      // not contaminated
      else if (grid[x][y][0] && !grid[x][y][1]) {

        int species = 0;
        // previous
        //for ( int i= -1; i<2; i++) {
        //  for ( int j= -1; j<2; j++) {
        //    int mody = (y + j + cols) % cols;
        //    int modx = (x + i + rows) % rows;
        //    if (grid[modx][mody][0]) {
        //      species +=1;
        //    }
        //  }
        //}


        // new basic calc
        for (int i = -1; i < 2; i++) {
          for (int j = -1; j < 2; j++) {
            int nX = x+j;
            int nY = y+i;

            if (nX <= 0) {
              nX = 0;
            }
            if (nY <= 0) {
              nY = 0;
            }
            if (nX >= cols-1) {
              nX = cols-1;
            }
            if (nY >= rows-1) {
              nY = rows-1;
            }
            if (grid[nX][nY][0]) {
              species += 1;
            }
          }
        }
        species -= 1;
        if (species > 6) {
          fillCol = color(255, 255, 255);
        } else if (species > 4) {
          fillCol = color(255, 0, 0);
        } else if (species > 2) {
          fillCol = color(0, 0, 255);
        } else {
          fillCol = color(0, 0, 100);
        }

        fill(fillCol);
      } else {
        fill(0, 0, 0);
      };

      rect(x*spacer, y*spacer, spacer, spacer);
    }
  }
  updateGrid();
}

void updateGrid() {
  boolean[][][] child = grid;

  for (int y = 0; y < rows; y++) {
    for (int x = 0; x < cols; x++) {
      if (!grid[x][y][1]) {
        boolean alive = grid[x][y][0];

        int species = 0;

        // check neighbour v2
        for (int i = -1; i < 2; i++) {
          for (int j = -1; j < 2; j++) {
            int nX = x+i;
            int nY = y+j;

            if (nX <= 0) {
              nX = 0;
            }
            if (nY <= 0) {
              nY = 0;
            }
            if (nX >= cols-1) {
              nX = cols-1;
            }
            if (nY >= rows-1) {
              nY = rows-1;
            }
            if (grid[nX][nY][0]) {
              species += 1;
            }

            //if neighbour contagious
            if (grid[nX][nY][1]) {
              int contagious = floor(random(chanceSick));
              if (contagious < 2 && alive) {
                child[x][y][1] = true;
              }
            }
          }
        }

        // check neighbour
        //for ( int i= -1; i<2; i++) {
        //  for ( int j= -1; j<2; j++) {
        //    int modi = (x + i + cols) % cols;
        //    int modj = (y + j + rows) % rows;

        //    // if neighbour contagious
        //    if (grid[modj][modi][1]) {
        //        int contagious = floor(random(chanceSick));
        //        if (contagious < 2 && alive) {
        //          child[x][y][1] = true;
        //        }
        //      }

        //      // add neighbour
        //      if (grid[modj][modi][0]) {
        //        species +=1;
        //      }
        //    }
        //  }

        if (alive) {
          species -= 1;
        }

        if (!alive && species == 3) {
          child[x][y][0] = true;
        } else if (alive && (species < 2 || species > 3)) {
          child[x][y][0] = false;
          child[x][y][1] = false;
        }
      }
    }
  }
  grid = child;
}