{"abstract":"The table source protection result violates the stipulated table fill handle repetition contract.","category":"Table interactions","checks":6,"contract":"Fill repeats the source rectangle modulo its original row/column origin, excludes the source itself, respects axis constraints and individual readonly cells, clips targets to table bounds, and emits patches in row-major order.","evaluation_group":"s3-table-interactions-fill-handle","failed_approach":"The attempted repair 'if sr0<=r<=sr1 or sc0<=c<=sc1:' still loses a required part of the table contract.","family":"s3-table-interactions-fill-handle-source-protection","id":"FA-37351","implementations":{"attempt":{"sha256":"76fa3ced195fca4e7b77145a5fb4b378ea1e7a9d3534fd3fe30efa21f66a52ad","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, cols, source, target, grid, locked, axis):\n    sr0,sr1,sc0,sc1=source\n    tr0,tr1,tc0,tc1=target\n    patches=[]\n    for r in range(tr0,tr1+1):\n        for c in range(tc0,tc1+1):\n            if sr0<=r<=sr1 or sc0<=c<=sc1: continue\n            if not (0<=r<len(rows) and 0<=c<len(cols)): continue\n            if (rows[r],cols[c]) in locked: continue\n            rr=sr0+(r-sr0)%(sr1-sr0+1)\n            cc=sc0+(c-sc0)%(sc1-sc0+1)\n            if axis=='vertical' and not sc0<=c<=sc1: continue\n            if axis=='horizontal' and not sr0<=r<=sr1: continue\n            patches.append((rows[r],cols[c],grid[rr][cc]))\n    return patches\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,1+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 7), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 2:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,2+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 8), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 3:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,3+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 9), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 4:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,4+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 10), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 5:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,5+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 11), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\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":"d05f2954c75f40ad9aaaaba3ee5981d3baa321cf603d99488fbfd022c836af2d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, cols, source, target, grid, locked, axis):\n    sr0,sr1,sc0,sc1=source\n    tr0,tr1,tc0,tc1=target\n    patches=[]\n    for r in range(tr0,tr1+1):\n        for c in range(tc0,tc1+1):\n            if False: continue\n            if not (0<=r<len(rows) and 0<=c<len(cols)): continue\n            if (rows[r],cols[c]) in locked: continue\n            rr=sr0+(r-sr0)%(sr1-sr0+1)\n            cc=sc0+(c-sc0)%(sc1-sc0+1)\n            if axis=='vertical' and not sc0<=c<=sc1: continue\n            if axis=='horizontal' and not sr0<=r<=sr1: continue\n            patches.append((rows[r],cols[c],grid[rr][cc]))\n    return patches\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,1+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 7), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 2:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,2+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 8), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 3:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,3+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 9), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 4:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,4+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 10), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 5:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,5+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 11), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\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":"a3797d064a7aa65ea464c4c12eaaf568bbeb30c0b96da20f9360dd9f2fd357d3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, cols, source, target, grid, locked, axis):\n    sr0,sr1,sc0,sc1=source\n    tr0,tr1,tc0,tc1=target\n    patches=[]\n    for r in range(tr0,tr1+1):\n        for c in range(tc0,tc1+1):\n            if sr0<=r<=sr1 and sc0<=c<=sc1: continue\n            if not (0<=r<len(rows) and 0<=c<len(cols)): continue\n            if (rows[r],cols[c]) in locked: continue\n            rr=sr0+(r-sr0)%(sr1-sr0+1)\n            cc=sc0+(c-sc0)%(sc1-sc0+1)\n            if axis=='vertical' and not sc0<=c<=sc1: continue\n            if axis=='horizontal' and not sr0<=r<=sr1: continue\n            patches.append((rows[r],cols[c],grid[rr][cc]))\n    return patches\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,1+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 7), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 2:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,2+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 8), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 3:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,3+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 9), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 4:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,4+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 10), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\nif N == 5:\n    check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,5+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 11), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])\n    check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])\n    check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])\n    check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])\n    check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])\n    check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])\n\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":"The source rectangle is nonempty and within the rectangular grid; target coordinates and lock pairs are integral/stable. Deterministic offline table UI model; no browser, DOM, framework, or standards conformance is claimed. 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":"s3-table-interactions-fill-handle-source-protection","generated_at":"2026-09-29T14:43:00.346286+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline table UI model isolates table fill handle repetition, including adversarial row/column relationships.","repair":"Apply the complete source protection rule: if sr0<=r<=sr1 and sc0<=c<=sc1:.","root_cause":"The source protection decision uses 'if False:' instead of 'if sr0<=r<=sr1 and sc0<=c<=sc1:'.","sha256":"ed9476f2adcac6fa91b9dde5d40d225248d5f7d947b7f2210dc4a7a07b469ad8","title":"Table fill handle repetition: source protection · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.515,"exit_code":1,"observations":[{"actual":[],"check":"vertical pattern","expected":[["r0","b",10],["r0","c",11],["r3","b",7],["r3","c",7],["r4","b",10],["r4","c",11]],"passed":false},{"actual":[],"check":"horizontal pattern","expected":[["r1","a",8],["r1","d",7],["r1","e",8],["r2","a",13],["r2","d",12],["r2","e",13]],"passed":false},{"actual":[],"check":"locked cell","expected":[["r1","b",2],["r2","a",1],["r2","b",2]],"passed":false},{"actual":[],"check":"source only","expected":[],"passed":true},{"actual":[["r1","b",1]],"check":"negative viewport","expected":[["r0","b",1],["r1","a",1],["r1","b",1]],"passed":false},{"actual":[["r1","b",7]],"check":"single seed","expected":[["r0","b",7],["r1","a",7],["r1","b",7]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"vertical pattern\", \"actual\": [], \"expected\": [[\"r0\", \"b\", 10], [\"r0\", \"c\", 11], [\"r3\", \"b\", 7], [\"r3\", \"c\", 7], [\"r4\", \"b\", 10], [\"r4\", \"c\", 11]], \"passed\": false}, {\"check\": \"horizontal pattern\", \"actual\": [], \"expected\": [[\"r1\", \"a\", 8], [\"r1\", \"d\", 7], [\"r1\", \"e\", 8], [\"r2\", \"a\", 13], [\"r2\", \"d\", 12], [\"r2\", \"e\", 13]], \"passed\": false}, {\"check\": \"locked cell\", \"actual\": [], \"expected\": [[\"r1\", \"b\", 2], [\"r2\", \"a\", 1], [\"r2\", \"b\", 2]], \"passed\": false}, {\"check\": \"source only\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"negative viewport\", \"actual\": [[\"r1\", \"b\", 1]], \"expected\": [[\"r0\", \"b\", 1], [\"r1\", \"a\", 1], [\"r1\", \"b\", 1]], \"passed\": false}, {\"check\": \"single seed\", \"actual\": [[\"r1\", \"b\", 7]], \"expected\": [[\"r0\", \"b\", 7], [\"r1\", \"a\", 7], [\"r1\", \"b\", 7]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.967,"exit_code":1,"observations":[{"actual":[["r0","b",10],["r0","c",11],["r1","b",7],["r1","c",7],["r2","b",10],["r2","c",11],["r3","b",7],["r3","c",7],["r4","b",10],["r4","c",11]],"check":"vertical pattern","expected":[["r0","b",10],["r0","c",11],["r3","b",7],["r3","c",7],["r4","b",10],["r4","c",11]],"passed":false},{"actual":[["r1","a",8],["r1","b",7],["r1","c",8],["r1","d",7],["r1","e",8],["r2","a",13],["r2","b",12],["r2","c",13],["r2","d",12],["r2","e",13]],"check":"horizontal pattern","expected":[["r1","a",8],["r1","d",7],["r1","e",8],["r2","a",13],["r2","d",12],["r2","e",13]],"passed":false},{"actual":[["r0","a",1],["r0","b",2],["r1","b",2],["r2","a",1],["r2","b",2]],"check":"locked cell","expected":[["r1","b",2],["r2","a",1],["r2","b",2]],"passed":false},{"actual":[["r0","a",1]],"check":"source only","expected":[],"passed":false},{"actual":[["r0","a",1],["r0","b",1],["r1","a",1],["r1","b",1]],"check":"negative viewport","expected":[["r0","b",1],["r1","a",1],["r1","b",1]],"passed":false},{"actual":[["r0","a",7],["r0","b",7],["r1","a",7],["r1","b",7]],"check":"single seed","expected":[["r0","b",7],["r1","a",7],["r1","b",7]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"vertical pattern\", \"actual\": [[\"r0\", \"b\", 10], [\"r0\", \"c\", 11], [\"r1\", \"b\", 7], [\"r1\", \"c\", 7], [\"r2\", \"b\", 10], [\"r2\", \"c\", 11], [\"r3\", \"b\", 7], [\"r3\", \"c\", 7], [\"r4\", \"b\", 10], [\"r4\", \"c\", 11]], \"expected\": [[\"r0\", \"b\", 10], [\"r0\", \"c\", 11], [\"r3\", \"b\", 7], [\"r3\", \"c\", 7], [\"r4\", \"b\", 10], [\"r4\", \"c\", 11]], \"passed\": false}, {\"check\": \"horizontal pattern\", \"actual\": [[\"r1\", \"a\", 8], [\"r1\", \"b\", 7], [\"r1\", \"c\", 8], [\"r1\", \"d\", 7], [\"r1\", \"e\", 8], [\"r2\", \"a\", 13], [\"r2\", \"b\", 12], [\"r2\", \"c\", 13], [\"r2\", \"d\", 12], [\"r2\", \"e\", 13]], \"expected\": [[\"r1\", \"a\", 8], [\"r1\", \"d\", 7], [\"r1\", \"e\", 8], [\"r2\", \"a\", 13], [\"r2\", \"d\", 12], [\"r2\", \"e\", 13]], \"passed\": false}, {\"check\": \"locked cell\", \"actual\": [[\"r0\", \"a\", 1], [\"r0\", \"b\", 2], [\"r1\", \"b\", 2], [\"r2\", \"a\", 1], [\"r2\", \"b\", 2]], \"expected\": [[\"r1\", \"b\", 2], [\"r2\", \"a\", 1], [\"r2\", \"b\", 2]], \"passed\": false}, {\"check\": \"source only\", \"actual\": [[\"r0\", \"a\", 1]], \"expected\": [], \"passed\": false}, {\"check\": \"negative viewport\", \"actual\": [[\"r0\", \"a\", 1], [\"r0\", \"b\", 1], [\"r1\", \"a\", 1], [\"r1\", \"b\", 1]], \"expected\": [[\"r0\", \"b\", 1], [\"r1\", \"a\", 1], [\"r1\", \"b\", 1]], \"passed\": false}, {\"check\": \"single seed\", \"actual\": [[\"r0\", \"a\", 7], [\"r0\", \"b\", 7], [\"r1\", \"a\", 7], [\"r1\", \"b\", 7]], \"expected\": [[\"r0\", \"b\", 7], [\"r1\", \"a\", 7], [\"r1\", \"b\", 7]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.864,"exit_code":0,"observations":[{"actual":[["r0","b",10],["r0","c",11],["r3","b",7],["r3","c",7],["r4","b",10],["r4","c",11]],"check":"vertical pattern","expected":[["r0","b",10],["r0","c",11],["r3","b",7],["r3","c",7],["r4","b",10],["r4","c",11]],"passed":true},{"actual":[["r1","a",8],["r1","d",7],["r1","e",8],["r2","a",13],["r2","d",12],["r2","e",13]],"check":"horizontal pattern","expected":[["r1","a",8],["r1","d",7],["r1","e",8],["r2","a",13],["r2","d",12],["r2","e",13]],"passed":true},{"actual":[["r1","b",2],["r2","a",1],["r2","b",2]],"check":"locked cell","expected":[["r1","b",2],["r2","a",1],["r2","b",2]],"passed":true},{"actual":[],"check":"source only","expected":[],"passed":true},{"actual":[["r0","b",1],["r1","a",1],["r1","b",1]],"check":"negative viewport","expected":[["r0","b",1],["r1","a",1],["r1","b",1]],"passed":true},{"actual":[["r0","b",7],["r1","a",7],["r1","b",7]],"check":"single seed","expected":[["r0","b",7],["r1","a",7],["r1","b",7]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"vertical pattern\", \"actual\": [[\"r0\", \"b\", 10], [\"r0\", \"c\", 11], [\"r3\", \"b\", 7], [\"r3\", \"c\", 7], [\"r4\", \"b\", 10], [\"r4\", \"c\", 11]], \"expected\": [[\"r0\", \"b\", 10], [\"r0\", \"c\", 11], [\"r3\", \"b\", 7], [\"r3\", \"c\", 7], [\"r4\", \"b\", 10], [\"r4\", \"c\", 11]], \"passed\": true}, {\"check\": \"horizontal pattern\", \"actual\": [[\"r1\", \"a\", 8], [\"r1\", \"d\", 7], [\"r1\", \"e\", 8], [\"r2\", \"a\", 13], [\"r2\", \"d\", 12], [\"r2\", \"e\", 13]], \"expected\": [[\"r1\", \"a\", 8], [\"r1\", \"d\", 7], [\"r1\", \"e\", 8], [\"r2\", \"a\", 13], [\"r2\", \"d\", 12], [\"r2\", \"e\", 13]], \"passed\": true}, {\"check\": \"locked cell\", \"actual\": [[\"r1\", \"b\", 2], [\"r2\", \"a\", 1], [\"r2\", \"b\", 2]], \"expected\": [[\"r1\", \"b\", 2], [\"r2\", \"a\", 1], [\"r2\", \"b\", 2]], \"passed\": true}, {\"check\": \"source only\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"negative viewport\", \"actual\": [[\"r0\", \"b\", 1], [\"r1\", \"a\", 1], [\"r1\", \"b\", 1]], \"expected\": [[\"r0\", \"b\", 1], [\"r1\", \"a\", 1], [\"r1\", \"b\", 1]], \"passed\": true}, {\"check\": \"single seed\", \"actual\": [[\"r0\", \"b\", 7], [\"r1\", \"a\", 7], [\"r1\", \"b\", 7]], \"expected\": [[\"r0\", \"b\", 7], [\"r1\", \"a\", 7], [\"r1\", \"b\", 7]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}