FAILURE MAP
← Case archive

FA-79191 / Image orientation metadata / Open access

Canvas keeps stored size for transpose tags · case 01

Tag 5 and 7 images are clipped into a canvas with the stored aspect ratio.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The canvas is resized only for the pure rotations.

VERIFIED REPAIR

Use an [h, w] canvas for tags 5 through 8.

Unsuccessful approach: A strict > 5 test still gives tag 5 the wrong canvas.

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, 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 in (6, 8) 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 = [[[[1105, 1652, 7], {'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}], [[3867, 2058, 5], {'canvas': [2058, 3867], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2427, 2642, 5], {'canvas': [2642, 2427], 'matrix': [0, 1, 1, 0, 0, 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]}], [[2907, 3052, 7], {'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}]], [[[704, 1878, 5], {'canvas': [1878, 704], 'matrix': [0, 1, 1, 0, 0, 0]}], [[985, 209, 5], {'canvas': [209, 985], 'matrix': [0, 1, 1, 0, 0, 0]}], [[3732, 1579, 5], {'canvas': [1579, 3732], 'matrix': [0, 1, 1, 0, 0, 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]}], [[497, 2889, 6], {'canvas': [2889, 497], 'matrix': [0, 1, -1, 0, 2889, 0]}], [[1679, 3857, 0], {'canvas': [1679, 3857], 'matrix': [1, 0, 0, 1, 0, 0]}], [[3503, 2694, 7], {'canvas': [2694, 3503], 'matrix': [0, -1, -1, 0, 2694, 3503]}]], [[[1512, 3919, 5], {'canvas': [3919, 1512], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2650, 517, 5], {'canvas': [517, 2650], 'matrix': [0, 1, 1, 0, 0, 0]}], [[107, 2903, 5], {'canvas': [2903, 107], 'matrix': [0, 1, 1, 0, 0, 0]}], [[1742, 3974, 6], {'canvas': [3974, 1742], 'matrix': [0, 1, -1, 0, 3974, 0]}], [[2878, 1614, 0], {'canvas': [2878, 1614], 'matrix': [1, 0, 0, 1, 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]}], [[1553, 978, 5], {'canvas': [978, 1553], 'matrix': [0, 1, 1, 0, 0, 0]}]], [[[3691, 1925, 7], {'canvas': [1925, 3691], 'matrix': [0, -1, -1, 0, 1925, 3691]}], [[23, 863, 5], {'canvas': [863, 23], 'matrix': [0, 1, 1, 0, 0, 0]}], [[274, 1272, 5], {'canvas': [1272, 274], 'matrix': [0, 1, 1, 0, 0, 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]}], [[1888, 3423, 4], {'canvas': [1888, 3423], 'matrix': [1, 0, 0, -1, 0, 3423]}], [[3842, 908, 7], {'canvas': [908, 3842], 'matrix': [0, -1, -1, 0, 908, 3842]}]], [[[3098, 2016, 5], {'canvas': [2016, 3098], 'matrix': [0, 1, 1, 0, 0, 0]}], [[552, 6, 5], {'canvas': [6, 552], 'matrix': [0, 1, 1, 0, 0, 0]}], [[81, 1151, 5], {'canvas': [1151, 81], 'matrix': [0, 1, 1, 0, 0, 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]}], [[663, 894, 6], {'canvas': [894, 663], 'matrix': [0, 1, -1, 0, 894, 0]}], [[439, 1611, 8], {'canvas': [1611, 439], 'matrix': [0, -1, 1, 0, 0, 439]}], [[2637, 3642, 5], {'canvas': [3642, 2637], 'matrix': [0, 1, 1, 0, 0, 0]}]]]
labels = ["regression: canvas dimension swap", "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 fixtureActualExpectedOutcome
regression: canvas dimension swap 0{'canvas': [1105, 1652], 'matrix': [0, -1, -1, 0, 1652, 1105]}{'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}Failed
repair trap 1{'canvas': [3867, 2058], 'matrix': [0, 1, 1, 0, 0, 0]}{'canvas': [2058, 3867], 'matrix': [0, 1, 1, 0, 0, 0]}Failed
combined fault 2{'canvas': [2427, 2642], 'matrix': [0, 1, 1, 0, 0, 0]}{'canvas': [2642, 2427], 'matrix': [0, 1, 1, 0, 0, 0]}Failed
control 3{'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}{'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}Passed
control 4{'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}{'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}Passed
boundary 5{'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}{'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}Passed
boundary 6{'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}{'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}Passed
control 7{'canvas': [2907, 3052], 'matrix': [0, -1, -1, 0, 3052, 2907]}{'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}Failed

SHA-256 / 1c2ee39e8559799f582bc17e42ff5031986a2521af3ef3d0f93cbc8dc48812a0

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, 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 = [[[[1105, 1652, 7], {'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}], [[3867, 2058, 5], {'canvas': [2058, 3867], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2427, 2642, 5], {'canvas': [2642, 2427], 'matrix': [0, 1, 1, 0, 0, 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]}], [[2907, 3052, 7], {'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}]], [[[704, 1878, 5], {'canvas': [1878, 704], 'matrix': [0, 1, 1, 0, 0, 0]}], [[985, 209, 5], {'canvas': [209, 985], 'matrix': [0, 1, 1, 0, 0, 0]}], [[3732, 1579, 5], {'canvas': [1579, 3732], 'matrix': [0, 1, 1, 0, 0, 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]}], [[497, 2889, 6], {'canvas': [2889, 497], 'matrix': [0, 1, -1, 0, 2889, 0]}], [[1679, 3857, 0], {'canvas': [1679, 3857], 'matrix': [1, 0, 0, 1, 0, 0]}], [[3503, 2694, 7], {'canvas': [2694, 3503], 'matrix': [0, -1, -1, 0, 2694, 3503]}]], [[[1512, 3919, 5], {'canvas': [3919, 1512], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2650, 517, 5], {'canvas': [517, 2650], 'matrix': [0, 1, 1, 0, 0, 0]}], [[107, 2903, 5], {'canvas': [2903, 107], 'matrix': [0, 1, 1, 0, 0, 0]}], [[1742, 3974, 6], {'canvas': [3974, 1742], 'matrix': [0, 1, -1, 0, 3974, 0]}], [[2878, 1614, 0], {'canvas': [2878, 1614], 'matrix': [1, 0, 0, 1, 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]}], [[1553, 978, 5], {'canvas': [978, 1553], 'matrix': [0, 1, 1, 0, 0, 0]}]], [[[3691, 1925, 7], {'canvas': [1925, 3691], 'matrix': [0, -1, -1, 0, 1925, 3691]}], [[23, 863, 5], {'canvas': [863, 23], 'matrix': [0, 1, 1, 0, 0, 0]}], [[274, 1272, 5], {'canvas': [1272, 274], 'matrix': [0, 1, 1, 0, 0, 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]}], [[1888, 3423, 4], {'canvas': [1888, 3423], 'matrix': [1, 0, 0, -1, 0, 3423]}], [[3842, 908, 7], {'canvas': [908, 3842], 'matrix': [0, -1, -1, 0, 908, 3842]}]], [[[3098, 2016, 5], {'canvas': [2016, 3098], 'matrix': [0, 1, 1, 0, 0, 0]}], [[552, 6, 5], {'canvas': [6, 552], 'matrix': [0, 1, 1, 0, 0, 0]}], [[81, 1151, 5], {'canvas': [1151, 81], 'matrix': [0, 1, 1, 0, 0, 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]}], [[663, 894, 6], {'canvas': [894, 663], 'matrix': [0, 1, -1, 0, 894, 0]}], [[439, 1611, 8], {'canvas': [1611, 439], 'matrix': [0, -1, 1, 0, 0, 439]}], [[2637, 3642, 5], {'canvas': [3642, 2637], 'matrix': [0, 1, 1, 0, 0, 0]}]]]
labels = ["regression: canvas dimension swap", "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 fixtureActualExpectedOutcome
regression: canvas dimension swap 0{'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}{'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}Passed
repair trap 1{'canvas': [3867, 2058], 'matrix': [0, 1, 1, 0, 0, 0]}{'canvas': [2058, 3867], 'matrix': [0, 1, 1, 0, 0, 0]}Failed
combined fault 2{'canvas': [2427, 2642], 'matrix': [0, 1, 1, 0, 0, 0]}{'canvas': [2642, 2427], 'matrix': [0, 1, 1, 0, 0, 0]}Failed
control 3{'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}{'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}Passed
control 4{'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}{'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}Passed
boundary 5{'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}{'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}Passed
boundary 6{'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}{'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}Passed
control 7{'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}{'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}Passed

SHA-256 / 4f432bfc0c4eaabccce0742b01bedc5d99958385e94954e43b479f4985a9270c

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 = [[[[1105, 1652, 7], {'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}], [[3867, 2058, 5], {'canvas': [2058, 3867], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2427, 2642, 5], {'canvas': [2642, 2427], 'matrix': [0, 1, 1, 0, 0, 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]}], [[2907, 3052, 7], {'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}]], [[[704, 1878, 5], {'canvas': [1878, 704], 'matrix': [0, 1, 1, 0, 0, 0]}], [[985, 209, 5], {'canvas': [209, 985], 'matrix': [0, 1, 1, 0, 0, 0]}], [[3732, 1579, 5], {'canvas': [1579, 3732], 'matrix': [0, 1, 1, 0, 0, 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]}], [[497, 2889, 6], {'canvas': [2889, 497], 'matrix': [0, 1, -1, 0, 2889, 0]}], [[1679, 3857, 0], {'canvas': [1679, 3857], 'matrix': [1, 0, 0, 1, 0, 0]}], [[3503, 2694, 7], {'canvas': [2694, 3503], 'matrix': [0, -1, -1, 0, 2694, 3503]}]], [[[1512, 3919, 5], {'canvas': [3919, 1512], 'matrix': [0, 1, 1, 0, 0, 0]}], [[2650, 517, 5], {'canvas': [517, 2650], 'matrix': [0, 1, 1, 0, 0, 0]}], [[107, 2903, 5], {'canvas': [2903, 107], 'matrix': [0, 1, 1, 0, 0, 0]}], [[1742, 3974, 6], {'canvas': [3974, 1742], 'matrix': [0, 1, -1, 0, 3974, 0]}], [[2878, 1614, 0], {'canvas': [2878, 1614], 'matrix': [1, 0, 0, 1, 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]}], [[1553, 978, 5], {'canvas': [978, 1553], 'matrix': [0, 1, 1, 0, 0, 0]}]], [[[3691, 1925, 7], {'canvas': [1925, 3691], 'matrix': [0, -1, -1, 0, 1925, 3691]}], [[23, 863, 5], {'canvas': [863, 23], 'matrix': [0, 1, 1, 0, 0, 0]}], [[274, 1272, 5], {'canvas': [1272, 274], 'matrix': [0, 1, 1, 0, 0, 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]}], [[1888, 3423, 4], {'canvas': [1888, 3423], 'matrix': [1, 0, 0, -1, 0, 3423]}], [[3842, 908, 7], {'canvas': [908, 3842], 'matrix': [0, -1, -1, 0, 908, 3842]}]], [[[3098, 2016, 5], {'canvas': [2016, 3098], 'matrix': [0, 1, 1, 0, 0, 0]}], [[552, 6, 5], {'canvas': [6, 552], 'matrix': [0, 1, 1, 0, 0, 0]}], [[81, 1151, 5], {'canvas': [1151, 81], 'matrix': [0, 1, 1, 0, 0, 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]}], [[663, 894, 6], {'canvas': [894, 663], 'matrix': [0, 1, -1, 0, 894, 0]}], [[439, 1611, 8], {'canvas': [1611, 439], 'matrix': [0, -1, 1, 0, 0, 439]}], [[2637, 3642, 5], {'canvas': [3642, 2637], 'matrix': [0, 1, 1, 0, 0, 0]}]]]
labels = ["regression: canvas dimension swap", "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 fixtureActualExpectedOutcome
regression: canvas dimension swap 0{'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}{'canvas': [1652, 1105], 'matrix': [0, -1, -1, 0, 1652, 1105]}Passed
repair trap 1{'canvas': [2058, 3867], 'matrix': [0, 1, 1, 0, 0, 0]}{'canvas': [2058, 3867], 'matrix': [0, 1, 1, 0, 0, 0]}Passed
combined fault 2{'canvas': [2642, 2427], 'matrix': [0, 1, 1, 0, 0, 0]}{'canvas': [2642, 2427], 'matrix': [0, 1, 1, 0, 0, 0]}Passed
control 3{'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}{'canvas': [3307, 2787], 'matrix': [-1, 0, 0, -1, 3307, 2787]}Passed
control 4{'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}{'canvas': [2954, 1709], 'matrix': [1, 0, 0, 1, 0, 0]}Passed
boundary 5{'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}{'canvas': [58, 1879], 'matrix': [-1, 0, 0, -1, 58, 1879]}Passed
boundary 6{'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}{'canvas': [2834, 740], 'matrix': [1, 0, 0, 1, 0, 0]}Passed
control 7{'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}{'canvas': [3052, 2907], 'matrix': [0, -1, -1, 0, 3052, 2907]}Passed

SHA-256 / d1b8fe0e0faf4026ca3fb7b509ce549f73e74fb3e4fbdbfc38aa970d0acc0e3e

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:42.404329+00:00.

Case digest / 48cef5fe1d9d2b8b5083f156339405dd936ed383e038020b5ff95ee4f780a6f4