{"abstract":"Open-edge maps grow walls along the boundary.","category":"Procedural level generation constraints","checks":8,"contract":"One synchronous step over '#'/'.' rows. For each cell count wall cells among its 8 neighbours (the cell itself excluded); out-of-bounds neighbours count as walls when border_wall. A wall stays a wall when the count is in survive; a floor becomes a wall when the count is in birth. All counts use the input grid.","evaluation_group":"w2-procedural-level-generation-constraints-cave-automaton","failed_approach":"Inverting the flag applies walls exactly when the policy says open.","family":"w2-procedural-level-generation-constraints-cave-automaton-border-policy","id":"FA-86391","implementations":{"attempt":{"sha256":"46c7021daa0a3dc5f98e4eb84d6d1b55ff9b9ff87e1dc2d86dde2637a98e677d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(grid, birth, survive, border_wall):\n    h = len(grid)\n    w = len(grid[0])\n    out = []\n    for r in range(h):\n        row = []\n        for c in range(w):\n            n = 0\n            for dr in (-1, 0, 1):\n                for dc in (-1, 0, 1):\n                    if dr == 0 and dc == 0:\n                        continue\n                    rr, cc = r + dr, c + dc\n                    if 0 <= rr < h and 0 <= cc < w:\n                        n += grid[rr][cc] == '#'\n                    elif not border_wall:\n                        n += 1\n            wall = grid[r][c] == '#'\n            row.append('#' if (n in survive if wall else n in birth) else '.')\n        out.append(''.join(row))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('partial repair boundary #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('partial repair boundary #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('regression border policy #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression border policy #2', [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.##.', '.##.']),\n  ('partial repair boundary #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('partial repair boundary #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('control #1', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('control #2', [['..##'], [3], [2, 3], False], ['....'])],\n [('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression border policy #2',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('partial repair boundary #1',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('partial repair boundary #2', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......']),\n  ('control #1', [['.#'], [3], [2, 3], True], ['..']),\n  ('control #2', [['..'], [3], [2, 3], True], ['..'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression border policy #1',\n   [['##', '..', '.#', '##', '..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..', '..', '..']),\n  ('regression border policy #2',\n   [['..#', '.#.', '..#', '..#', '##.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['...', '...', '...', '...', '...']),\n  ('partial repair boundary #1',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('partial repair boundary #2', [['#', '#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True], ['#', '#']),\n  ('control #1', [['#.#.#.'], [3], [2, 3], False], ['......']),\n  ('control #2', [['.', '.'], [3], [2, 3], True], ['.', '.'])],\n [('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#.#.#', '..#..#', '##..#.', '##..#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['......', '..#...', '##....', '##....']),\n  ('regression border policy #2',\n   [['...', '##.', '.##', '...', '#.#'], [3], [2, 3], False],\n   ['...', '###', '###', '..#', '...']),\n  ('partial repair boundary #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['##', '##', '##', '##', '##', '##']),\n  ('partial repair boundary #2',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('control #1', [['#', '.'], [3], [2, 3], True], ['.', '.']),\n  ('control #2', [['..#.#.'], [3], [2, 3], True], ['......'])]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"8679232a5b338d8b3e620810dcc3fad598cde3ebf3475f44dada71190a4336c3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(grid, birth, survive, border_wall):\n    h = len(grid)\n    w = len(grid[0])\n    out = []\n    for r in range(h):\n        row = []\n        for c in range(w):\n            n = 0\n            for dr in (-1, 0, 1):\n                for dc in (-1, 0, 1):\n                    if dr == 0 and dc == 0:\n                        continue\n                    rr, cc = r + dr, c + dc\n                    if 0 <= rr < h and 0 <= cc < w:\n                        n += grid[rr][cc] == '#'\n                    else:\n                        n += 1\n            wall = grid[r][c] == '#'\n            row.append('#' if (n in survive if wall else n in birth) else '.')\n        out.append(''.join(row))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('partial repair boundary #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('partial repair boundary #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('regression border policy #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression border policy #2', [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.##.', '.##.']),\n  ('partial repair boundary #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('partial repair boundary #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('control #1', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('control #2', [['..##'], [3], [2, 3], False], ['....'])],\n [('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression border policy #2',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('partial repair boundary #1',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('partial repair boundary #2', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......']),\n  ('control #1', [['.#'], [3], [2, 3], True], ['..']),\n  ('control #2', [['..'], [3], [2, 3], True], ['..'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression border policy #1',\n   [['##', '..', '.#', '##', '..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..', '..', '..']),\n  ('regression border policy #2',\n   [['..#', '.#.', '..#', '..#', '##.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['...', '...', '...', '...', '...']),\n  ('partial repair boundary #1',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('partial repair boundary #2', [['#', '#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True], ['#', '#']),\n  ('control #1', [['#.#.#.'], [3], [2, 3], False], ['......']),\n  ('control #2', [['.', '.'], [3], [2, 3], True], ['.', '.'])],\n [('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#.#.#', '..#..#', '##..#.', '##..#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['......', '..#...', '##....', '##....']),\n  ('regression border policy #2',\n   [['...', '##.', '.##', '...', '#.#'], [3], [2, 3], False],\n   ['...', '###', '###', '..#', '...']),\n  ('partial repair boundary #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['##', '##', '##', '##', '##', '##']),\n  ('partial repair boundary #2',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('control #1', [['#', '.'], [3], [2, 3], True], ['.', '.']),\n  ('control #2', [['..#.#.'], [3], [2, 3], True], ['......'])]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"0ab1ce5cefc368f2ec0784644165d2dc3e3812f000ab266855e8a125232001c2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(grid, birth, survive, border_wall):\n    h = len(grid)\n    w = len(grid[0])\n    out = []\n    for r in range(h):\n        row = []\n        for c in range(w):\n            n = 0\n            for dr in (-1, 0, 1):\n                for dc in (-1, 0, 1):\n                    if dr == 0 and dc == 0:\n                        continue\n                    rr, cc = r + dr, c + dc\n                    if 0 <= rr < h and 0 <= cc < w:\n                        n += grid[rr][cc] == '#'\n                    elif border_wall:\n                        n += 1\n            wall = grid[r][c] == '#'\n            row.append('#' if (n in survive if wall else n in birth) else '.')\n        out.append(''.join(row))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('partial repair boundary #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('partial repair boundary #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('regression border policy #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression border policy #2', [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.##.', '.##.']),\n  ('partial repair boundary #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('partial repair boundary #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('control #1', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('control #2', [['..##'], [3], [2, 3], False], ['....'])],\n [('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression border policy #2',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('partial repair boundary #1',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('partial repair boundary #2', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......']),\n  ('control #1', [['.#'], [3], [2, 3], True], ['..']),\n  ('control #2', [['..'], [3], [2, 3], True], ['..'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression border policy #1',\n   [['##', '..', '.#', '##', '..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..', '..', '..']),\n  ('regression border policy #2',\n   [['..#', '.#.', '..#', '..#', '##.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['...', '...', '...', '...', '...']),\n  ('partial repair boundary #1',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('partial repair boundary #2', [['#', '#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True], ['#', '#']),\n  ('control #1', [['#.#.#.'], [3], [2, 3], False], ['......']),\n  ('control #2', [['.', '.'], [3], [2, 3], True], ['.', '.'])],\n [('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression border policy #1',\n   [['.#.#.#', '..#..#', '##..#.', '##..#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['......', '..#...', '##....', '##....']),\n  ('regression border policy #2',\n   [['...', '##.', '.##', '...', '#.#'], [3], [2, 3], False],\n   ['...', '###', '###', '..#', '...']),\n  ('partial repair boundary #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['##', '##', '##', '##', '##', '##']),\n  ('partial repair boundary #2',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('control #1', [['#', '.'], [3], [2, 3], True], ['.', '.']),\n  ('control #2', [['..#.#.'], [3], [2, 3], True], ['......'])]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Deterministic toy contract stipulated for this model; integer or exact arithmetic only, not a reproduction of any specific game engine. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-procedural-level-generation-constraints-cave-automaton-border-policy","generated_at":"2026-09-29T14:50:49.210687+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Procedural generators silently emit unplayable or unfair levels when a single constraint check uses the wrong boundary, axis, neighborhood or update order; the defect is visible in exact generated geometry.","repair":"Restore `elif border_wall:` at the border policy step.","root_cause":"Out-of-bounds neighbours count as walls regardless of the border policy.","sha256":"a1a26d6bde23315c8f015892255ba402b7ea00effad4260179de02c3e46ff488","title":"Cave smoothing automaton: Borders always count as walls · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.572,"exit_code":1,"observations":[{"actual":["#.#","...","#.#"],"check":"lone pillar #1","expected":["...","...","..."],"passed":false},{"actual":["...","...","..."],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":false},{"actual":["###","###","###"],"check":"dense block #1","expected":[".#.","###",".#."],"passed":false},{"actual":["##","##","##","##"],"check":"regression border policy #1","expected":["..","..","..",".."],"passed":false},{"actual":["##..","#..."],"check":"partial repair boundary #1","expected":["....","...."],"passed":false},{"actual":["....",".#..",".#..","....","...."],"check":"partial repair boundary #2","expected":["####","##.#","##.#","#..#","#.##"],"passed":false},{"actual":["..",".."],"check":"control #1","expected":["..",".."],"passed":true},{"actual":["......"],"check":"control #2","expected":["......"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"lone pillar #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": false}, {\"check\": \"open field corner #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": false}, {\"check\": \"dense block #1\", \"actual\": [\"###\", \"###\", \"###\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": false}, {\"check\": \"regression border policy #1\", \"actual\": [\"##\", \"##\", \"##\", \"##\"], \"expected\": [\"..\", \"..\", \"..\", \"..\"], \"passed\": false}, {\"check\": \"partial repair boundary #1\", \"actual\": [\"##..\", \"#...\"], \"expected\": [\"....\", \"....\"], \"passed\": false}, {\"check\": \"partial repair boundary #2\", \"actual\": [\"....\", \".#..\", \".#..\", \"....\", \"....\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": false}, {\"check\": \"control #1\", \"actual\": [\"..\", \"..\"], \"expected\": [\"..\", \"..\"], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [\"......\"], \"expected\": [\"......\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.721,"exit_code":1,"observations":[{"actual":["#.#","...","#.#"],"check":"lone pillar #1","expected":["...","...","..."],"passed":false},{"actual":["#.#","...","#.#"],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":true},{"actual":["###","###","###"],"check":"dense block #1","expected":[".#.","###",".#."],"passed":false},{"actual":["##","##","##","##"],"check":"regression border policy #1","expected":["..","..","..",".."],"passed":false},{"actual":["....","...."],"check":"partial repair boundary #1","expected":["....","...."],"passed":true},{"actual":["####","##.#","##.#","#..#","#.##"],"check":"partial repair boundary #2","expected":["####","##.#","##.#","#..#","#.##"],"passed":true},{"actual":["..",".."],"check":"control #1","expected":["..",".."],"passed":true},{"actual":["......"],"check":"control #2","expected":["......"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"lone pillar #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": false}, {\"check\": \"open field corner #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": true}, {\"check\": \"dense block #1\", \"actual\": [\"###\", \"###\", \"###\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": false}, {\"check\": \"regression border policy #1\", \"actual\": [\"##\", \"##\", \"##\", \"##\"], \"expected\": [\"..\", \"..\", \"..\", \"..\"], \"passed\": false}, {\"check\": \"partial repair boundary #1\", \"actual\": [\"....\", \"....\"], \"expected\": [\"....\", \"....\"], \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"..\", \"..\"], \"expected\": [\"..\", \"..\"], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [\"......\"], \"expected\": [\"......\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.643,"exit_code":0,"observations":[{"actual":["...","...","..."],"check":"lone pillar #1","expected":["...","...","..."],"passed":true},{"actual":["#.#","...","#.#"],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":true},{"actual":[".#.","###",".#."],"check":"dense block #1","expected":[".#.","###",".#."],"passed":true},{"actual":["..","..","..",".."],"check":"regression border policy #1","expected":["..","..","..",".."],"passed":true},{"actual":["....","...."],"check":"partial repair boundary #1","expected":["....","...."],"passed":true},{"actual":["####","##.#","##.#","#..#","#.##"],"check":"partial repair boundary #2","expected":["####","##.#","##.#","#..#","#.##"],"passed":true},{"actual":["..",".."],"check":"control #1","expected":["..",".."],"passed":true},{"actual":["......"],"check":"control #2","expected":["......"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"lone pillar #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": true}, {\"check\": \"open field corner #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": true}, {\"check\": \"dense block #1\", \"actual\": [\".#.\", \"###\", \".#.\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": true}, {\"check\": \"regression border policy #1\", \"actual\": [\"..\", \"..\", \"..\", \"..\"], \"expected\": [\"..\", \"..\", \"..\", \"..\"], \"passed\": true}, {\"check\": \"partial repair boundary #1\", \"actual\": [\"....\", \"....\"], \"expected\": [\"....\", \"....\"], \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"..\", \"..\"], \"expected\": [\"..\", \"..\"], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [\"......\"], \"expected\": [\"......\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}