FA-79171 / Image orientation metadata / Open access
Canvas rotation for tag 6 translates by the image width · case 01
Clockwise-rotated photos are drawn partly outside the canvas on non-square images.
ROOT CAUSE
After x' = -y the drawing must be shifted by the stored height, but the width is used.
VERIFIED REPAIR
Translate by h for tag 6 so x' = h - y.
Unsuccessful approach: The pixel-index offset h - 1 is wrong in continuous canvas coordinates and leaves a one-pixel seam.
Case contract
Input [w, h, tag]. Produce the canvas size and the 2D affine [a, b, c, d, e, f] (x' = a*x + c*y + e, y' = b*x + d*y + f, continuous coordinates, so mirroring an extent e maps x to e - x) that draws the stored image upright. Tags 5..8 use a [h, w] canvas; invalid tags are treated as 1.
Why this case matters
Camera, phone and scanner images carry an orientation hint separately from the stored pixels; galleries, thumbnailers, editors and upload pipelines must interpret it consistently or photos appear sideways, mirrored or doubly rotated.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
w, h, tag = x
if tag not in (1, 2, 3, 4, 5, 6, 7, 8):
tag = 1
if tag == 1:
mat = [1, 0, 0, 1, 0, 0]
elif tag == 2:
mat = [-1, 0, 0, 1, w, 0]
elif tag == 3:
mat = [-1, 0, 0, -1, w, h]
elif tag == 4:
mat = [1, 0, 0, -1, 0, h]
elif tag == 5:
mat = [0, 1, 1, 0, 0, 0]
elif tag == 6:
mat = [0, 1, -1, 0, w, 0]
elif tag == 7:
mat = [0, -1, -1, 0, h, w]
else:
mat = [0, -1, 1, 0, 0, w]
canvas = [h, w] if tag >= 5 else [w, h]
return {'canvas': canvas, 'matrix': mat}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[889, 2551, 6], {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2551, 0]}], [[3995, 1348, 6], {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1348, 0]}], [[3307, 2787, 3], {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}], [[2954, 1709, 1], {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}], [[58, 1879, 3], {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}], [[2834, 740, 9], {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1990, 1071, 4], {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]}], [[954, 2041, 6], {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2041, 0]}]], [[[1194, 3699, 6], {'canvas': [3699, 1194], 'matrix': [0, 1, -1, 0, 3699, 0]}], [[608, 1768, 6], {'canvas': [1768, 608], 'matrix': [0, 1, -1, 0, 1768, 0]}], [[2349, 3183, 4], {'canvas': [2349, 3183], 'matrix': [1, 0, 0, -1, 0, 3183]}], [[1404, 638, 8], {'canvas': [638, 1404], 'matrix': [0, -1, 1, 0, 0, 1404]}], [[3672, 2107, 7], {'canvas': [2107, 3672], 'matrix': [0, -1, -1, 0, 2107, 3672]}], [[1679, 3857, 0], {'canvas': [1679, 3857], 'matrix': [1, 0, 0, 1, 0, 0]}], [[2880, 3643, 3], {'canvas': [2880, 3643], 'matrix': [-1, 0, 0, -1, 2880, 3643]}], [[2257, 2995, 6], {'canvas': [2995, 2257], 'matrix': [0, 1, -1, 0, 2995, 0]}]], [[[2671, 433, 6], {'canvas': [433, 2671], 'matrix': [0, 1, -1, 0, 433, 0]}], [[1055, 2739, 6], {'canvas': [2739, 1055], 'matrix': [0, 1, -1, 0, 2739, 0]}], [[2580, 3384, 7], {'canvas': [3384, 2580], 'matrix': [0, -1, -1, 0, 3384, 2580]}], [[2878, 1614, 0], {'canvas': [2878, 1614], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1553, 978, 5], {'canvas': [978, 1553], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2394, 1311, 0], {'canvas': [2394, 1311], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1506, 1188, 8], {'canvas': [1188, 1506], 'matrix': [0, -1, 1, 0, 0, 1506]}], [[576, 1460, 6], {'canvas': [1460, 576], 'matrix': [0, 1, -1, 0, 1460, 0]}]], [[[2323, 1102, 6], {'canvas': [1102, 2323], 'matrix': [0, 1, -1, 0, 1102, 0]}], [[3065, 2806, 6], {'canvas': [2806, 3065], 'matrix': [0, 1, -1, 0, 2806, 0]}], [[2618, 2128, 9], {'canvas': [2618, 2128], 'matrix': [1, 0, 0, 1, 0, 0]}], [[2422, 1413, 3], {'canvas': [2422, 1413], 'matrix': [-1, 0, 0, -1, 2422, 1413]}], [[397, 3269, 8], {'canvas': [3269, 397], 'matrix': [0, -1, 1, 0, 0, 397]}], [[3842, 908, 7], {'canvas': [908, 3842], 'matrix': [0, -1, -1, 0, 908, 3842]}], [[1888, 3423, 4], {'canvas': [1888, 3423], 'matrix': [1, 0, 0, -1, 0, 3423]}], [[180, 3433, 6], {'canvas': [3433, 180], 'matrix': [0, 1, -1, 0, 3433, 0]}]], [[[3353, 2830, 6], {'canvas': [2830, 3353], 'matrix': [0, 1, -1, 0, 2830, 0]}], [[1744, 2845, 6], {'canvas': [2845, 1744], 'matrix': [0, 1, -1, 0, 2845, 0]}], [[3666, 647, 2], {'canvas': [3666, 647], 'matrix': [-1, 0, 0, 1, 3666, 0]}], [[3653, 369, 3], {'canvas': [3653, 369], 'matrix': [-1, 0, 0, -1, 3653, 369]}], [[439, 1611, 8], {'canvas': [1611, 439], 'matrix': [0, -1, 1, 0, 0, 439]}], [[2083, 1309, 2], {'canvas': [2083, 1309], 'matrix': [-1, 0, 0, 1, 2083, 0]}], [[318, 2513, 3], {'canvas': [318, 2513], 'matrix': [-1, 0, 0, -1, 318, 2513]}], [[3680, 1329, 6], {'canvas': [1329, 3680], 'matrix': [0, 1, -1, 0, 1329, 0]}]]]
labels = ["regression: tag 6 translation", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: tag 6 translation 0 | {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 889, 0]} | {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2551, 0]} | Failed |
| repair trap 1 | {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 3995, 0]} | {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1348, 0]} | Failed |
| combined fault 2 | {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]} | {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]} | Passed |
| control 3 | {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]} | {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]} | Passed |
| control 4 | {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]} | {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]} | Passed |
| boundary 5 | {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]} | {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]} | Passed |
| boundary 6 | {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]} | {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]} | Passed |
| control 7 | {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 954, 0]} | {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2041, 0]} | Failed |
SHA-256 / 9b3eb41e7bde31af5663b079b3bd51116c783469b37fd0d4cbec67335d29619e
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
w, h, tag = x
if tag not in (1, 2, 3, 4, 5, 6, 7, 8):
tag = 1
if tag == 1:
mat = [1, 0, 0, 1, 0, 0]
elif tag == 2:
mat = [-1, 0, 0, 1, w, 0]
elif tag == 3:
mat = [-1, 0, 0, -1, w, h]
elif tag == 4:
mat = [1, 0, 0, -1, 0, h]
elif tag == 5:
mat = [0, 1, 1, 0, 0, 0]
elif tag == 6:
mat = [0, 1, -1, 0, h - 1, 0]
elif tag == 7:
mat = [0, -1, -1, 0, h, w]
else:
mat = [0, -1, 1, 0, 0, w]
canvas = [h, w] if tag >= 5 else [w, h]
return {'canvas': canvas, 'matrix': mat}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[889, 2551, 6], {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2551, 0]}], [[3995, 1348, 6], {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1348, 0]}], [[3307, 2787, 3], {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}], [[2954, 1709, 1], {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}], [[58, 1879, 3], {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}], [[2834, 740, 9], {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1990, 1071, 4], {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]}], [[954, 2041, 6], {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2041, 0]}]], [[[1194, 3699, 6], {'canvas': [3699, 1194], 'matrix': [0, 1, -1, 0, 3699, 0]}], [[608, 1768, 6], {'canvas': [1768, 608], 'matrix': [0, 1, -1, 0, 1768, 0]}], [[2349, 3183, 4], {'canvas': [2349, 3183], 'matrix': [1, 0, 0, -1, 0, 3183]}], [[1404, 638, 8], {'canvas': [638, 1404], 'matrix': [0, -1, 1, 0, 0, 1404]}], [[3672, 2107, 7], {'canvas': [2107, 3672], 'matrix': [0, -1, -1, 0, 2107, 3672]}], [[1679, 3857, 0], {'canvas': [1679, 3857], 'matrix': [1, 0, 0, 1, 0, 0]}], [[2880, 3643, 3], {'canvas': [2880, 3643], 'matrix': [-1, 0, 0, -1, 2880, 3643]}], [[2257, 2995, 6], {'canvas': [2995, 2257], 'matrix': [0, 1, -1, 0, 2995, 0]}]], [[[2671, 433, 6], {'canvas': [433, 2671], 'matrix': [0, 1, -1, 0, 433, 0]}], [[1055, 2739, 6], {'canvas': [2739, 1055], 'matrix': [0, 1, -1, 0, 2739, 0]}], [[2580, 3384, 7], {'canvas': [3384, 2580], 'matrix': [0, -1, -1, 0, 3384, 2580]}], [[2878, 1614, 0], {'canvas': [2878, 1614], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1553, 978, 5], {'canvas': [978, 1553], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2394, 1311, 0], {'canvas': [2394, 1311], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1506, 1188, 8], {'canvas': [1188, 1506], 'matrix': [0, -1, 1, 0, 0, 1506]}], [[576, 1460, 6], {'canvas': [1460, 576], 'matrix': [0, 1, -1, 0, 1460, 0]}]], [[[2323, 1102, 6], {'canvas': [1102, 2323], 'matrix': [0, 1, -1, 0, 1102, 0]}], [[3065, 2806, 6], {'canvas': [2806, 3065], 'matrix': [0, 1, -1, 0, 2806, 0]}], [[2618, 2128, 9], {'canvas': [2618, 2128], 'matrix': [1, 0, 0, 1, 0, 0]}], [[2422, 1413, 3], {'canvas': [2422, 1413], 'matrix': [-1, 0, 0, -1, 2422, 1413]}], [[397, 3269, 8], {'canvas': [3269, 397], 'matrix': [0, -1, 1, 0, 0, 397]}], [[3842, 908, 7], {'canvas': [908, 3842], 'matrix': [0, -1, -1, 0, 908, 3842]}], [[1888, 3423, 4], {'canvas': [1888, 3423], 'matrix': [1, 0, 0, -1, 0, 3423]}], [[180, 3433, 6], {'canvas': [3433, 180], 'matrix': [0, 1, -1, 0, 3433, 0]}]], [[[3353, 2830, 6], {'canvas': [2830, 3353], 'matrix': [0, 1, -1, 0, 2830, 0]}], [[1744, 2845, 6], {'canvas': [2845, 1744], 'matrix': [0, 1, -1, 0, 2845, 0]}], [[3666, 647, 2], {'canvas': [3666, 647], 'matrix': [-1, 0, 0, 1, 3666, 0]}], [[3653, 369, 3], {'canvas': [3653, 369], 'matrix': [-1, 0, 0, -1, 3653, 369]}], [[439, 1611, 8], {'canvas': [1611, 439], 'matrix': [0, -1, 1, 0, 0, 439]}], [[2083, 1309, 2], {'canvas': [2083, 1309], 'matrix': [-1, 0, 0, 1, 2083, 0]}], [[318, 2513, 3], {'canvas': [318, 2513], 'matrix': [-1, 0, 0, -1, 318, 2513]}], [[3680, 1329, 6], {'canvas': [1329, 3680], 'matrix': [0, 1, -1, 0, 1329, 0]}]]]
labels = ["regression: tag 6 translation", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: tag 6 translation 0 | {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2550, 0]} | {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2551, 0]} | Failed |
| repair trap 1 | {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1347, 0]} | {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1348, 0]} | Failed |
| combined fault 2 | {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]} | {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]} | Passed |
| control 3 | {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]} | {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]} | Passed |
| control 4 | {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]} | {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]} | Passed |
| boundary 5 | {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]} | {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]} | Passed |
| boundary 6 | {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]} | {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]} | Passed |
| control 7 | {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2040, 0]} | {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2041, 0]} | Failed |
SHA-256 / 93beba4d0ee2ac8a4519de555daec027bceb7b1d4c625beac4978d3f351f1770
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
w, h, tag = x
if tag not in (1, 2, 3, 4, 5, 6, 7, 8):
tag = 1
if tag == 1:
mat = [1, 0, 0, 1, 0, 0]
elif tag == 2:
mat = [-1, 0, 0, 1, w, 0]
elif tag == 3:
mat = [-1, 0, 0, -1, w, h]
elif tag == 4:
mat = [1, 0, 0, -1, 0, h]
elif tag == 5:
mat = [0, 1, 1, 0, 0, 0]
elif tag == 6:
mat = [0, 1, -1, 0, h, 0]
elif tag == 7:
mat = [0, -1, -1, 0, h, w]
else:
mat = [0, -1, 1, 0, 0, w]
canvas = [h, w] if tag >= 5 else [w, h]
return {'canvas': canvas, 'matrix': mat}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[889, 2551, 6], {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2551, 0]}], [[3995, 1348, 6], {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1348, 0]}], [[3307, 2787, 3], {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}], [[2954, 1709, 1], {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}], [[58, 1879, 3], {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}], [[2834, 740, 9], {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1990, 1071, 4], {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]}], [[954, 2041, 6], {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2041, 0]}]], [[[1194, 3699, 6], {'canvas': [3699, 1194], 'matrix': [0, 1, -1, 0, 3699, 0]}], [[608, 1768, 6], {'canvas': [1768, 608], 'matrix': [0, 1, -1, 0, 1768, 0]}], [[2349, 3183, 4], {'canvas': [2349, 3183], 'matrix': [1, 0, 0, -1, 0, 3183]}], [[1404, 638, 8], {'canvas': [638, 1404], 'matrix': [0, -1, 1, 0, 0, 1404]}], [[3672, 2107, 7], {'canvas': [2107, 3672], 'matrix': [0, -1, -1, 0, 2107, 3672]}], [[1679, 3857, 0], {'canvas': [1679, 3857], 'matrix': [1, 0, 0, 1, 0, 0]}], [[2880, 3643, 3], {'canvas': [2880, 3643], 'matrix': [-1, 0, 0, -1, 2880, 3643]}], [[2257, 2995, 6], {'canvas': [2995, 2257], 'matrix': [0, 1, -1, 0, 2995, 0]}]], [[[2671, 433, 6], {'canvas': [433, 2671], 'matrix': [0, 1, -1, 0, 433, 0]}], [[1055, 2739, 6], {'canvas': [2739, 1055], 'matrix': [0, 1, -1, 0, 2739, 0]}], [[2580, 3384, 7], {'canvas': [3384, 2580], 'matrix': [0, -1, -1, 0, 3384, 2580]}], [[2878, 1614, 0], {'canvas': [2878, 1614], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1553, 978, 5], {'canvas': [978, 1553], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2394, 1311, 0], {'canvas': [2394, 1311], 'matrix': [1, 0, 0, 1, 0, 0]}], [[1506, 1188, 8], {'canvas': [1188, 1506], 'matrix': [0, -1, 1, 0, 0, 1506]}], [[576, 1460, 6], {'canvas': [1460, 576], 'matrix': [0, 1, -1, 0, 1460, 0]}]], [[[2323, 1102, 6], {'canvas': [1102, 2323], 'matrix': [0, 1, -1, 0, 1102, 0]}], [[3065, 2806, 6], {'canvas': [2806, 3065], 'matrix': [0, 1, -1, 0, 2806, 0]}], [[2618, 2128, 9], {'canvas': [2618, 2128], 'matrix': [1, 0, 0, 1, 0, 0]}], [[2422, 1413, 3], {'canvas': [2422, 1413], 'matrix': [-1, 0, 0, -1, 2422, 1413]}], [[397, 3269, 8], {'canvas': [3269, 397], 'matrix': [0, -1, 1, 0, 0, 397]}], [[3842, 908, 7], {'canvas': [908, 3842], 'matrix': [0, -1, -1, 0, 908, 3842]}], [[1888, 3423, 4], {'canvas': [1888, 3423], 'matrix': [1, 0, 0, -1, 0, 3423]}], [[180, 3433, 6], {'canvas': [3433, 180], 'matrix': [0, 1, -1, 0, 3433, 0]}]], [[[3353, 2830, 6], {'canvas': [2830, 3353], 'matrix': [0, 1, -1, 0, 2830, 0]}], [[1744, 2845, 6], {'canvas': [2845, 1744], 'matrix': [0, 1, -1, 0, 2845, 0]}], [[3666, 647, 2], {'canvas': [3666, 647], 'matrix': [-1, 0, 0, 1, 3666, 0]}], [[3653, 369, 3], {'canvas': [3653, 369], 'matrix': [-1, 0, 0, -1, 3653, 369]}], [[439, 1611, 8], {'canvas': [1611, 439], 'matrix': [0, -1, 1, 0, 0, 439]}], [[2083, 1309, 2], {'canvas': [2083, 1309], 'matrix': [-1, 0, 0, 1, 2083, 0]}], [[318, 2513, 3], {'canvas': [318, 2513], 'matrix': [-1, 0, 0, -1, 318, 2513]}], [[3680, 1329, 6], {'canvas': [1329, 3680], 'matrix': [0, 1, -1, 0, 1329, 0]}]]]
labels = ["regression: tag 6 translation", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: tag 6 translation 0 | {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2551, 0]} | {'canvas': [2551, 889], 'matrix': [0, 1, -1, 0, 2551, 0]} | Passed |
| repair trap 1 | {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1348, 0]} | {'canvas': [1348, 3995], 'matrix': [0, 1, -1, 0, 1348, 0]} | Passed |
| combined fault 2 | {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]} | {'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]} | Passed |
| control 3 | {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]} | {'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]} | Passed |
| control 4 | {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]} | {'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]} | Passed |
| boundary 5 | {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]} | {'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]} | Passed |
| boundary 6 | {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]} | {'canvas': [1990, 1071], 'matrix': [1, 0, 0, -1, 0, 1071]} | Passed |
| control 7 | {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2041, 0]} | {'canvas': [2041, 954], 'matrix': [0, 1, -1, 0, 2041, 0]} | Passed |
SHA-256 / eb43c056ab4834d5b326f1f9fe3675c680876a9faf565ca6d63ac49ddaa1318f
Verification & scope
A deterministic bounded teaching model with a stipulated contract; it makes no claim of conformance to any published specification. 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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:49:41.891152+00:00.
Case digest / f3ca59cd5cc7cc52ce747841c31bc53def8bab594127891a7e1610b107ae9bc8