{"abstract":"Photos with a corrupt tag of 0 are flagged as mis-rotated even when they display normally.","category":"Image orientation metadata","checks":8,"contract":"Predict what a browser shows for a photo that went through an upload pipeline. Input {tag, baked, reset, stripped, css, cross_origin}. Baking applies the tag to the pixels; the remaining tag is 1 if metadata was stripped or if baking also reset the tag, else the original tag. The renderer applies the remaining tag when css is \"from-image\" or the image is cross-origin (image-orientation: none is ignored cross-origin). Finally the viewer applies its own extra orientation (default 1). Orientations are (k clockwise quarter turns after m mirrors), with applying B after A giving k = k2 + (-k1 if m2 else k1). Invalid tags count as 1. Return [shown_tag, shown == tag].","contract_signature":"p","evaluation_group":"w2-image-orientation-metadata-render-pipeline-composition","failed_approach":"Comparing the baked pixels ignores what the renderer does afterwards.","family":"w2-image-orientation-metadata-render-pipeline-composition-upright-reference","id":"FA-79256","implementations":{"attempt":{"sha256":"53cba604ebf86f1222aac1394e3ce83af33c9b33d1b021aacc4a6a4e29f75ac2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(p):\n    to_km = {1: (0, 0), 2: (0, 1), 3: (2, 0), 4: (2, 1), 5: (3, 1), 6: (1, 0), 7: (1, 1), 8: (3, 0)}\n    from_km = {v: t for t, v in to_km.items()}\n    def compose(first, second):\n        k1, m1 = to_km[first]\n        k2, m2 = to_km[second]\n        k = (k2 + (-k1 if m2 else k1)) % 4\n        return from_km[(k, m1 ^ m2)]\n    tag = p['tag'] if p['tag'] in to_km else 1\n    pixels = tag if p['baked'] else 1\n    if p['stripped']:\n        meta = 1\n    elif p['baked'] and p['reset']:\n        meta = 1\n    else:\n        meta = tag\n    honored = p['css'] == 'from-image' or p['cross_origin']\n    shown = compose(compose(pixels, meta if honored else 1), p.get('extra', 1))\n    return [shown, pixels == tag]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[{'tag': 0, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]], [{'tag': 7, 'baked': True, 'reset': True, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 3}, [5, False]], [{'tag': 2, 'baked': True, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [2, True]], [{'tag': 5, 'baked': True, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [5, True]], [{'tag': 8, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 2}, [7, False]], [{'tag': 2, 'baked': False, 'reset': False, 'stripped': True, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [4, False]], [{'tag': 0, 'baked': True, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [1, True]], [{'tag': 8, 'baked': True, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 7}, [4, False]], [{'tag': 6, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 8}, [1, False]], [{'tag': 4, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [3, False]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 7}, [5, False]], [{'tag': 7, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 8}, [8, False]], [{'tag': 4, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 7}, [7, False]], [{'tag': 0, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]], [{'tag': 3, 'baked': True, 'reset': True, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 8}, [6, False]], [{'tag': 6, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 3}, [3, False]], [{'tag': 2, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [2, True]], [{'tag': 8, 'baked': True, 'reset': True, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 1}, [8, True]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 7}, [5, False]], [{'tag': 4, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 6}, [5, False]], [{'tag': 6, 'baked': True, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [5, False]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [1, True]], [{'tag': 6, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 5}, [7, False]], [{'tag': 8, 'baked': True, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [8, True]], [{'tag': 5, 'baked': False, 'reset': True, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 7, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 7}, [7, True]], [{'tag': 8, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 1, 'baked': True, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [1, True]], [{'tag': 0, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, True]], [{'tag': 5, 'baked': True, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 6}, [2, False]], [{'tag': 5, 'baked': False, 'reset': False, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 8, 'baked': False, 'reset': False, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 5}, [5, False]], [{'tag': 6, 'baked': True, 'reset': True, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 1}, [6, True]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': True, 'extra': 3}, [1, False]], [{'tag': 5, 'baked': False, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 3}, [3, False]], [{'tag': 0, 'baked': True, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]]]\nlabels = [\"regression: upright comparison reference\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), 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":"8912e337d99613a540481d11870d1cce72f39da4d04d0a87e7f0894ca69efff5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(p):\n    to_km = {1: (0, 0), 2: (0, 1), 3: (2, 0), 4: (2, 1), 5: (3, 1), 6: (1, 0), 7: (1, 1), 8: (3, 0)}\n    from_km = {v: t for t, v in to_km.items()}\n    def compose(first, second):\n        k1, m1 = to_km[first]\n        k2, m2 = to_km[second]\n        k = (k2 + (-k1 if m2 else k1)) % 4\n        return from_km[(k, m1 ^ m2)]\n    tag = p['tag'] if p['tag'] in to_km else 1\n    pixels = tag if p['baked'] else 1\n    if p['stripped']:\n        meta = 1\n    elif p['baked'] and p['reset']:\n        meta = 1\n    else:\n        meta = tag\n    honored = p['css'] == 'from-image' or p['cross_origin']\n    shown = compose(compose(pixels, meta if honored else 1), p.get('extra', 1))\n    return [shown, shown == p['tag']]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[{'tag': 0, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]], [{'tag': 7, 'baked': True, 'reset': True, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 3}, [5, False]], [{'tag': 2, 'baked': True, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [2, True]], [{'tag': 5, 'baked': True, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [5, True]], [{'tag': 8, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 2}, [7, False]], [{'tag': 2, 'baked': False, 'reset': False, 'stripped': True, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [4, False]], [{'tag': 0, 'baked': True, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [1, True]], [{'tag': 8, 'baked': True, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 7}, [4, False]], [{'tag': 6, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 8}, [1, False]], [{'tag': 4, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [3, False]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 7}, [5, False]], [{'tag': 7, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 8}, [8, False]], [{'tag': 4, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 7}, [7, False]], [{'tag': 0, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]], [{'tag': 3, 'baked': True, 'reset': True, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 8}, [6, False]], [{'tag': 6, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 3}, [3, False]], [{'tag': 2, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [2, True]], [{'tag': 8, 'baked': True, 'reset': True, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 1}, [8, True]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 7}, [5, False]], [{'tag': 4, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 6}, [5, False]], [{'tag': 6, 'baked': True, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 2}, [5, False]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [1, True]], [{'tag': 6, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 5}, [7, False]], [{'tag': 8, 'baked': True, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [8, True]], [{'tag': 5, 'baked': False, 'reset': True, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 7, 'baked': True, 'reset': False, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 7}, [7, True]], [{'tag': 8, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 1, 'baked': True, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': True, 'extra': 1}, [1, True]], [{'tag': 0, 'baked': False, 'reset': True, 'stripped': False, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]], [[{'tag': 0, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, True]], [{'tag': 5, 'baked': True, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': False, 'extra': 6}, [2, False]], [{'tag': 5, 'baked': False, 'reset': False, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 1}, [1, False]], [{'tag': 8, 'baked': False, 'reset': False, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 5}, [5, False]], [{'tag': 6, 'baked': True, 'reset': True, 'stripped': True, 'css': 'none', 'cross_origin': False, 'extra': 1}, [6, True]], [{'tag': 3, 'baked': False, 'reset': False, 'stripped': False, 'css': 'none', 'cross_origin': True, 'extra': 3}, [1, False]], [{'tag': 5, 'baked': False, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': True, 'extra': 3}, [3, False]], [{'tag': 0, 'baked': True, 'reset': True, 'stripped': True, 'css': 'from-image', 'cross_origin': False, 'extra': 1}, [1, True]]]]\nlabels = [\"regression: upright comparison reference\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), 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":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-image-orientation-metadata-render-pipeline-composition-upright-reference","generated_at":"2026-09-29T14:49:43.043684+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","root_cause":"The upright check compares with the raw tag instead of the normalised one.","sha256":"f75508950ef37c8b7a8a16aa3dea6db3960cbb4ed8861b6b137308d2d843c724","title":"Upright check compares against an invalid raw tag · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.003,"exit_code":1,"observations":[{"actual":[1,true],"check":"regression: upright comparison reference 0","expected":[1,true],"passed":true},{"actual":[5,true],"check":"repair trap 1","expected":[5,false],"passed":false},{"actual":[2,true],"check":"combined fault 2","expected":[2,true],"passed":true},{"actual":[5,true],"check":"control 3","expected":[5,true],"passed":true},{"actual":[7,false],"check":"control 4","expected":[7,false],"passed":true},{"actual":[1,false],"check":"boundary 5","expected":[1,false],"passed":true},{"actual":[4,false],"check":"boundary 6","expected":[4,false],"passed":true},{"actual":[1,true],"check":"control 7","expected":[1,true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: upright comparison reference 0\", \"actual\": [1, true], \"expected\": [1, true], \"passed\": true}, {\"check\": \"repair trap 1\", \"actual\": [5, true], \"expected\": [5, false], \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": [2, true], \"expected\": [2, true], \"passed\": true}, {\"check\": \"control 3\", \"actual\": [5, true], \"expected\": [5, true], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [7, false], \"expected\": [7, false], \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": [4, false], \"expected\": [4, false], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [1, true], \"expected\": [1, true], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.805,"exit_code":1,"observations":[{"actual":[1,false],"check":"regression: upright comparison reference 0","expected":[1,true],"passed":false},{"actual":[5,false],"check":"repair trap 1","expected":[5,false],"passed":true},{"actual":[2,true],"check":"combined fault 2","expected":[2,true],"passed":true},{"actual":[5,true],"check":"control 3","expected":[5,true],"passed":true},{"actual":[7,false],"check":"control 4","expected":[7,false],"passed":true},{"actual":[1,false],"check":"boundary 5","expected":[1,false],"passed":true},{"actual":[4,false],"check":"boundary 6","expected":[4,false],"passed":true},{"actual":[1,false],"check":"control 7","expected":[1,true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: upright comparison reference 0\", \"actual\": [1, false], \"expected\": [1, true], \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": [5, false], \"expected\": [5, false], \"passed\": true}, {\"check\": \"combined fault 2\", \"actual\": [2, true], \"expected\": [2, true], \"passed\": true}, {\"check\": \"control 3\", \"actual\": [5, true], \"expected\": [5, true], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [7, false], \"expected\": [7, false], \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": [1, false], \"expected\": [1, false], \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": [4, false], \"expected\": [4, false], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [1, false], \"expected\": [1, true], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}