{"abstract":"Serialize a redirect response under an explicit server-side response policy: the head body suppression branch emits an incorrect decision.","category":"HTTP redirects","checks":7,"contract":"Serialize a redirect response under an explicit server-side response policy. The explicit fixture inputs and outputs define a bounded offline policy; request identity must accompany the decision.","evaluation_group":"s3-http-redirects-response-writer","failed_approach":"The partial repair uses \"'' if method == 'HEAD' else body\" and still fails an explicit boundary or control.","family":"s3-http-redirects-response-writer-head-body-suppression","id":"FA-28846","implementations":{"attempt":{"sha256":"762504035da776b4664e0dd0647d36b2b6013800a1969a50d79f52b7ca2a329f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom urllib.parse import urlsplit, unquote, quote\nimport posixpath\nimport re\nN = 1\nobservations = []\ndef solve(request, status, target, method, body, head, custom_headers):\n    return {'request': request, 'decision': [dict(custom_headers, Location=target), '' if method == 'HEAD' else body, len(body.encode('utf-8')), status, target.replace('&','&amp;'), target.replace(chr(34),'&quot;'), target, custom_headers, body == \"\", status == 303]} \ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve('/requests/' + str(N) + '/0', 302, '/a?x=1&y=2', 'GET', 'move', False, {'X': 'v'}), {'request': '/requests/' + str(N) + '/0', 'decision': [{'X': 'v', 'Location': '/a?x=1&y=2'}, 'move', 4, 302, '/a?x=1&amp;y=2', '/a?x=1&y=2', '/a?x=1&y=2', {'X': 'v'}, False, False]})\ncheck('fixture 2', solve('/requests/' + str(N) + '/1', 303, '/a#part', 'POST', 'next', False, {}), {'request': '/requests/' + str(N) + '/1', 'decision': [{'Location': '/a#part'}, 'next', 4, 303, '/a#part', '/a#part', '/a#part', {}, False, True]})\ncheck('fixture 3', solve('/requests/' + str(N) + '/2', 307, '/unicode/é', 'PUT', 'café', True, {'Content-Length': '999'}), {'request': '/requests/' + str(N) + '/2', 'decision': [{'Content-Length': '999', 'Location': '/unicode/é'}, '', 5, 307, '/unicode/é', '/unicode/é', '/unicode/é', {'Content-Length': '999'}, False, False]})\ncheck('fixture 4', solve('/requests/' + str(N) + '/3', 308, '/', 'HEAD', 'moved', True, {}), {'request': '/requests/' + str(N) + '/3', 'decision': [{'Location': '/'}, '', 5, 308, '/', '/', '/', {}, False, False]})\ncheck('fixture 5', solve('/requests/' + str(N) + '/4', 301, '/b', 'GET', '', False, {'Location': '/stale'}), {'request': '/requests/' + str(N) + '/4', 'decision': [{'Location': '/b'}, '', 0, 301, '/b', '/b', '/b', {'Location': '/stale'}, True, False]})\ncheck('fixture 6', solve('/requests/' + str(N) + '/5', 302, '/a\"b', 'GET', 'x', False, {'Content-Type': 'custom'}), {'request': '/requests/' + str(N) + '/5', 'decision': [{'Content-Type': 'custom', 'Location': '/a\"b'}, 'x', 1, 302, '/a\"b', '/a&quot;b', '/a\"b', {'Content-Type': 'custom'}, False, False]})\ncheck('fixture 7', solve('/requests/' + str(N) + '/6', 303, '/e', 'GET', 'abc', False, {}), {'request': '/requests/' + str(N) + '/6', 'decision': [{'Location': '/e'}, 'abc', 3, 303, '/e', '/e', '/e', {}, False, True]})\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":"042fecb63fda9f1d3fa0d35e40e012f3720fafa292b126603c83143cd842c0d5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom urllib.parse import urlsplit, unquote, quote\nimport posixpath\nimport re\nN = 1\nobservations = []\ndef solve(request, status, target, method, body, head, custom_headers):\n    return {'request': request, 'decision': [dict(custom_headers, Location=target), body, len(body.encode('utf-8')), status, target.replace('&','&amp;'), target.replace(chr(34),'&quot;'), target, custom_headers, body == \"\", status == 303]} \ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve('/requests/' + str(N) + '/0', 302, '/a?x=1&y=2', 'GET', 'move', False, {'X': 'v'}), {'request': '/requests/' + str(N) + '/0', 'decision': [{'X': 'v', 'Location': '/a?x=1&y=2'}, 'move', 4, 302, '/a?x=1&amp;y=2', '/a?x=1&y=2', '/a?x=1&y=2', {'X': 'v'}, False, False]})\ncheck('fixture 2', solve('/requests/' + str(N) + '/1', 303, '/a#part', 'POST', 'next', False, {}), {'request': '/requests/' + str(N) + '/1', 'decision': [{'Location': '/a#part'}, 'next', 4, 303, '/a#part', '/a#part', '/a#part', {}, False, True]})\ncheck('fixture 3', solve('/requests/' + str(N) + '/2', 307, '/unicode/é', 'PUT', 'café', True, {'Content-Length': '999'}), {'request': '/requests/' + str(N) + '/2', 'decision': [{'Content-Length': '999', 'Location': '/unicode/é'}, '', 5, 307, '/unicode/é', '/unicode/é', '/unicode/é', {'Content-Length': '999'}, False, False]})\ncheck('fixture 4', solve('/requests/' + str(N) + '/3', 308, '/', 'HEAD', 'moved', True, {}), {'request': '/requests/' + str(N) + '/3', 'decision': [{'Location': '/'}, '', 5, 308, '/', '/', '/', {}, False, False]})\ncheck('fixture 5', solve('/requests/' + str(N) + '/4', 301, '/b', 'GET', '', False, {'Location': '/stale'}), {'request': '/requests/' + str(N) + '/4', 'decision': [{'Location': '/b'}, '', 0, 301, '/b', '/b', '/b', {'Location': '/stale'}, True, False]})\ncheck('fixture 6', solve('/requests/' + str(N) + '/5', 302, '/a\"b', 'GET', 'x', False, {'Content-Type': 'custom'}), {'request': '/requests/' + str(N) + '/5', 'decision': [{'Content-Type': 'custom', 'Location': '/a\"b'}, 'x', 1, 302, '/a\"b', '/a&quot;b', '/a\"b', {'Content-Type': 'custom'}, False, False]})\ncheck('fixture 7', solve('/requests/' + str(N) + '/6', 303, '/e', 'GET', 'abc', False, {}), {'request': '/requests/' + str(N) + '/6', 'decision': [{'Location': '/e'}, 'abc', 3, 303, '/e', '/e', '/e', {}, False, True]})\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":"1af2af73c80c818158ef122cb0b5f77edbcbd0e68fd7ce143594a2897497d447","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom urllib.parse import urlsplit, unquote, quote\nimport posixpath\nimport re\nN = 1\nobservations = []\ndef solve(request, status, target, method, body, head, custom_headers):\n    return {'request': request, 'decision': [dict(custom_headers, Location=target), '' if head else body, len(body.encode('utf-8')), status, target.replace('&','&amp;'), target.replace(chr(34),'&quot;'), target, custom_headers, body == \"\", status == 303]} \ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve('/requests/' + str(N) + '/0', 302, '/a?x=1&y=2', 'GET', 'move', False, {'X': 'v'}), {'request': '/requests/' + str(N) + '/0', 'decision': [{'X': 'v', 'Location': '/a?x=1&y=2'}, 'move', 4, 302, '/a?x=1&amp;y=2', '/a?x=1&y=2', '/a?x=1&y=2', {'X': 'v'}, False, False]})\ncheck('fixture 2', solve('/requests/' + str(N) + '/1', 303, '/a#part', 'POST', 'next', False, {}), {'request': '/requests/' + str(N) + '/1', 'decision': [{'Location': '/a#part'}, 'next', 4, 303, '/a#part', '/a#part', '/a#part', {}, False, True]})\ncheck('fixture 3', solve('/requests/' + str(N) + '/2', 307, '/unicode/é', 'PUT', 'café', True, {'Content-Length': '999'}), {'request': '/requests/' + str(N) + '/2', 'decision': [{'Content-Length': '999', 'Location': '/unicode/é'}, '', 5, 307, '/unicode/é', '/unicode/é', '/unicode/é', {'Content-Length': '999'}, False, False]})\ncheck('fixture 4', solve('/requests/' + str(N) + '/3', 308, '/', 'HEAD', 'moved', True, {}), {'request': '/requests/' + str(N) + '/3', 'decision': [{'Location': '/'}, '', 5, 308, '/', '/', '/', {}, False, False]})\ncheck('fixture 5', solve('/requests/' + str(N) + '/4', 301, '/b', 'GET', '', False, {'Location': '/stale'}), {'request': '/requests/' + str(N) + '/4', 'decision': [{'Location': '/b'}, '', 0, 301, '/b', '/b', '/b', {'Location': '/stale'}, True, False]})\ncheck('fixture 6', solve('/requests/' + str(N) + '/5', 302, '/a\"b', 'GET', 'x', False, {'Content-Type': 'custom'}), {'request': '/requests/' + str(N) + '/5', 'decision': [{'Content-Type': 'custom', 'Location': '/a\"b'}, 'x', 1, 302, '/a\"b', '/a&quot;b', '/a\"b', {'Content-Type': 'custom'}, False, False]})\ncheck('fixture 7', solve('/requests/' + str(N) + '/6', 303, '/e', 'GET', 'abc', False, {}), {'request': '/requests/' + str(N) + '/6', 'decision': [{'Location': '/e'}, 'abc', 3, 303, '/e', '/e', '/e', {}, False, True]})\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":"Stipulated offline redirect policy, not a complete HTTP, browser, URL, cache, or security implementation. Numbered variants vary request correlation identity. 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-http-redirects-response-writer-head-body-suppression","generated_at":"2026-09-29T14:41:37.591207+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Models a redirect controller decision before following a target or exposing a redirect result.","repair":"At this decision use \"'' if head else body\", preserving the other controller outputs.","root_cause":"The head-body-suppression decision uses 'body'; this violates the stipulated controller policy.","sha256":"638334f0d4377b464f3ab553a16c3b4db4e27ec0ccbec213ab95a4e465e06b8b","title":"Serialize a redirect response under an explicit server-side response policy: head body suppression · case 01","variant":1,"variant_policy":"N changes request correlation identity. Policy boundary fixtures are reused; numbered variants are not independent examples.","verification":{"attempt":{"elapsed_ms":41.427,"exit_code":1,"observations":[{"actual":{"decision":[{"Location":"/a?x=1&y=2","X":"v"},"move",4,302,"/a?x=1&amp;y=2","/a?x=1&y=2","/a?x=1&y=2",{"X":"v"},false,false],"request":"/requests/1/0"},"check":"fixture 1","expected":{"decision":[{"Location":"/a?x=1&y=2","X":"v"},"move",4,302,"/a?x=1&amp;y=2","/a?x=1&y=2","/a?x=1&y=2",{"X":"v"},false,false],"request":"/requests/1/0"},"passed":true},{"actual":{"decision":[{"Location":"/a#part"},"next",4,303,"/a#part","/a#part","/a#part",{},false,true],"request":"/requests/1/1"},"check":"fixture 2","expected":{"decision":[{"Location":"/a#part"},"next",4,303,"/a#part","/a#part","/a#part",{},false,true],"request":"/requests/1/1"},"passed":true},{"actual":{"decision":[{"Content-Length":"999","Location":"/unicode/é"},"café",5,307,"/unicode/é","/unicode/é","/unicode/é",{"Content-Length":"999"},false,false],"request":"/requests/1/2"},"check":"fixture 3","expected":{"decision":[{"Content-Length":"999","Location":"/unicode/é"},"",5,307,"/unicode/é","/unicode/é","/unicode/é",{"Content-Length":"999"},false,false],"request":"/requests/1/2"},"passed":false},{"actual":{"decision":[{"Location":"/"},"",5,308,"/","/","/",{},false,false],"request":"/requests/1/3"},"check":"fixture 4","expected":{"decision":[{"Location":"/"},"",5,308,"/","/","/",{},false,false],"request":"/requests/1/3"},"passed":true},{"actual":{"decision":[{"Location":"/b"},"",0,301,"/b","/b","/b",{"Location":"/stale"},true,false],"request":"/requests/1/4"},"check":"fixture 5","expected":{"decision":[{"Location":"/b"},"",0,301,"/b","/b","/b",{"Location":"/stale"},true,false],"request":"/requests/1/4"},"passed":true},{"actual":{"decision":[{"Content-Type":"custom","Location":"/a\"b"},"x",1,302,"/a\"b","/a&quot;b","/a\"b",{"Content-Type":"custom"},false,false],"request":"/requests/1/5"},"check":"fixture 6","expected":{"decision":[{"Content-Type":"custom","Location":"/a\"b"},"x",1,302,"/a\"b","/a&quot;b","/a\"b",{"Content-Type":"custom"},false,false],"request":"/requests/1/5"},"passed":true},{"actual":{"decision":[{"Location":"/e"},"abc",3,303,"/e","/e","/e",{},false,true],"request":"/requests/1/6"},"check":"fixture 7","expected":{"decision":[{"Location":"/e"},"abc",3,303,"/e","/e","/e",{},false,true],"request":"/requests/1/6"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"request\": \"/requests/1/0\", \"decision\": [{\"X\": \"v\", \"Location\": \"/a?x=1&y=2\"}, \"move\", 4, 302, \"/a?x=1&amp;y=2\", \"/a?x=1&y=2\", \"/a?x=1&y=2\", {\"X\": \"v\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/0\", \"decision\": [{\"X\": \"v\", \"Location\": \"/a?x=1&y=2\"}, \"move\", 4, 302, \"/a?x=1&amp;y=2\", \"/a?x=1&y=2\", \"/a?x=1&y=2\", {\"X\": \"v\"}, false, false]}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"request\": \"/requests/1/1\", \"decision\": [{\"Location\": \"/a#part\"}, \"next\", 4, 303, \"/a#part\", \"/a#part\", \"/a#part\", {}, false, true]}, \"expected\": {\"request\": \"/requests/1/1\", \"decision\": [{\"Location\": \"/a#part\"}, \"next\", 4, 303, \"/a#part\", \"/a#part\", \"/a#part\", {}, false, true]}, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": {\"request\": \"/requests/1/2\", \"decision\": [{\"Content-Length\": \"999\", \"Location\": \"/unicode/é\"}, \"café\", 5, 307, \"/unicode/é\", \"/unicode/é\", \"/unicode/é\", {\"Content-Length\": \"999\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/2\", \"decision\": [{\"Content-Length\": \"999\", \"Location\": \"/unicode/é\"}, \"\", 5, 307, \"/unicode/é\", \"/unicode/é\", \"/unicode/é\", {\"Content-Length\": \"999\"}, false, false]}, \"passed\": false}, {\"check\": \"fixture 4\", \"actual\": {\"request\": \"/requests/1/3\", \"decision\": [{\"Location\": \"/\"}, \"\", 5, 308, \"/\", \"/\", \"/\", {}, false, false]}, \"expected\": {\"request\": \"/requests/1/3\", \"decision\": [{\"Location\": \"/\"}, \"\", 5, 308, \"/\", \"/\", \"/\", {}, false, false]}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"request\": \"/requests/1/4\", \"decision\": [{\"Location\": \"/b\"}, \"\", 0, 301, \"/b\", \"/b\", \"/b\", {\"Location\": \"/stale\"}, true, false]}, \"expected\": {\"request\": \"/requests/1/4\", \"decision\": [{\"Location\": \"/b\"}, \"\", 0, 301, \"/b\", \"/b\", \"/b\", {\"Location\": \"/stale\"}, true, false]}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"request\": \"/requests/1/5\", \"decision\": [{\"Content-Type\": \"custom\", \"Location\": \"/a\\\"b\"}, \"x\", 1, 302, \"/a\\\"b\", \"/a&quot;b\", \"/a\\\"b\", {\"Content-Type\": \"custom\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/5\", \"decision\": [{\"Content-Type\": \"custom\", \"Location\": \"/a\\\"b\"}, \"x\", 1, 302, \"/a\\\"b\", \"/a&quot;b\", \"/a\\\"b\", {\"Content-Type\": \"custom\"}, false, false]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"request\": \"/requests/1/6\", \"decision\": [{\"Location\": \"/e\"}, \"abc\", 3, 303, \"/e\", \"/e\", \"/e\", {}, false, true]}, \"expected\": {\"request\": \"/requests/1/6\", \"decision\": [{\"Location\": \"/e\"}, \"abc\", 3, 303, \"/e\", \"/e\", \"/e\", {}, false, true]}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.324,"exit_code":1,"observations":[{"actual":{"decision":[{"Location":"/a?x=1&y=2","X":"v"},"move",4,302,"/a?x=1&amp;y=2","/a?x=1&y=2","/a?x=1&y=2",{"X":"v"},false,false],"request":"/requests/1/0"},"check":"fixture 1","expected":{"decision":[{"Location":"/a?x=1&y=2","X":"v"},"move",4,302,"/a?x=1&amp;y=2","/a?x=1&y=2","/a?x=1&y=2",{"X":"v"},false,false],"request":"/requests/1/0"},"passed":true},{"actual":{"decision":[{"Location":"/a#part"},"next",4,303,"/a#part","/a#part","/a#part",{},false,true],"request":"/requests/1/1"},"check":"fixture 2","expected":{"decision":[{"Location":"/a#part"},"next",4,303,"/a#part","/a#part","/a#part",{},false,true],"request":"/requests/1/1"},"passed":true},{"actual":{"decision":[{"Content-Length":"999","Location":"/unicode/é"},"café",5,307,"/unicode/é","/unicode/é","/unicode/é",{"Content-Length":"999"},false,false],"request":"/requests/1/2"},"check":"fixture 3","expected":{"decision":[{"Content-Length":"999","Location":"/unicode/é"},"",5,307,"/unicode/é","/unicode/é","/unicode/é",{"Content-Length":"999"},false,false],"request":"/requests/1/2"},"passed":false},{"actual":{"decision":[{"Location":"/"},"moved",5,308,"/","/","/",{},false,false],"request":"/requests/1/3"},"check":"fixture 4","expected":{"decision":[{"Location":"/"},"",5,308,"/","/","/",{},false,false],"request":"/requests/1/3"},"passed":false},{"actual":{"decision":[{"Location":"/b"},"",0,301,"/b","/b","/b",{"Location":"/stale"},true,false],"request":"/requests/1/4"},"check":"fixture 5","expected":{"decision":[{"Location":"/b"},"",0,301,"/b","/b","/b",{"Location":"/stale"},true,false],"request":"/requests/1/4"},"passed":true},{"actual":{"decision":[{"Content-Type":"custom","Location":"/a\"b"},"x",1,302,"/a\"b","/a&quot;b","/a\"b",{"Content-Type":"custom"},false,false],"request":"/requests/1/5"},"check":"fixture 6","expected":{"decision":[{"Content-Type":"custom","Location":"/a\"b"},"x",1,302,"/a\"b","/a&quot;b","/a\"b",{"Content-Type":"custom"},false,false],"request":"/requests/1/5"},"passed":true},{"actual":{"decision":[{"Location":"/e"},"abc",3,303,"/e","/e","/e",{},false,true],"request":"/requests/1/6"},"check":"fixture 7","expected":{"decision":[{"Location":"/e"},"abc",3,303,"/e","/e","/e",{},false,true],"request":"/requests/1/6"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"request\": \"/requests/1/0\", \"decision\": [{\"X\": \"v\", \"Location\": \"/a?x=1&y=2\"}, \"move\", 4, 302, \"/a?x=1&amp;y=2\", \"/a?x=1&y=2\", \"/a?x=1&y=2\", {\"X\": \"v\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/0\", \"decision\": [{\"X\": \"v\", \"Location\": \"/a?x=1&y=2\"}, \"move\", 4, 302, \"/a?x=1&amp;y=2\", \"/a?x=1&y=2\", \"/a?x=1&y=2\", {\"X\": \"v\"}, false, false]}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"request\": \"/requests/1/1\", \"decision\": [{\"Location\": \"/a#part\"}, \"next\", 4, 303, \"/a#part\", \"/a#part\", \"/a#part\", {}, false, true]}, \"expected\": {\"request\": \"/requests/1/1\", \"decision\": [{\"Location\": \"/a#part\"}, \"next\", 4, 303, \"/a#part\", \"/a#part\", \"/a#part\", {}, false, true]}, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": {\"request\": \"/requests/1/2\", \"decision\": [{\"Content-Length\": \"999\", \"Location\": \"/unicode/é\"}, \"café\", 5, 307, \"/unicode/é\", \"/unicode/é\", \"/unicode/é\", {\"Content-Length\": \"999\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/2\", \"decision\": [{\"Content-Length\": \"999\", \"Location\": \"/unicode/é\"}, \"\", 5, 307, \"/unicode/é\", \"/unicode/é\", \"/unicode/é\", {\"Content-Length\": \"999\"}, false, false]}, \"passed\": false}, {\"check\": \"fixture 4\", \"actual\": {\"request\": \"/requests/1/3\", \"decision\": [{\"Location\": \"/\"}, \"moved\", 5, 308, \"/\", \"/\", \"/\", {}, false, false]}, \"expected\": {\"request\": \"/requests/1/3\", \"decision\": [{\"Location\": \"/\"}, \"\", 5, 308, \"/\", \"/\", \"/\", {}, false, false]}, \"passed\": false}, {\"check\": \"fixture 5\", \"actual\": {\"request\": \"/requests/1/4\", \"decision\": [{\"Location\": \"/b\"}, \"\", 0, 301, \"/b\", \"/b\", \"/b\", {\"Location\": \"/stale\"}, true, false]}, \"expected\": {\"request\": \"/requests/1/4\", \"decision\": [{\"Location\": \"/b\"}, \"\", 0, 301, \"/b\", \"/b\", \"/b\", {\"Location\": \"/stale\"}, true, false]}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"request\": \"/requests/1/5\", \"decision\": [{\"Content-Type\": \"custom\", \"Location\": \"/a\\\"b\"}, \"x\", 1, 302, \"/a\\\"b\", \"/a&quot;b\", \"/a\\\"b\", {\"Content-Type\": \"custom\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/5\", \"decision\": [{\"Content-Type\": \"custom\", \"Location\": \"/a\\\"b\"}, \"x\", 1, 302, \"/a\\\"b\", \"/a&quot;b\", \"/a\\\"b\", {\"Content-Type\": \"custom\"}, false, false]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"request\": \"/requests/1/6\", \"decision\": [{\"Location\": \"/e\"}, \"abc\", 3, 303, \"/e\", \"/e\", \"/e\", {}, false, true]}, \"expected\": {\"request\": \"/requests/1/6\", \"decision\": [{\"Location\": \"/e\"}, \"abc\", 3, 303, \"/e\", \"/e\", \"/e\", {}, false, true]}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.166,"exit_code":0,"observations":[{"actual":{"decision":[{"Location":"/a?x=1&y=2","X":"v"},"move",4,302,"/a?x=1&amp;y=2","/a?x=1&y=2","/a?x=1&y=2",{"X":"v"},false,false],"request":"/requests/1/0"},"check":"fixture 1","expected":{"decision":[{"Location":"/a?x=1&y=2","X":"v"},"move",4,302,"/a?x=1&amp;y=2","/a?x=1&y=2","/a?x=1&y=2",{"X":"v"},false,false],"request":"/requests/1/0"},"passed":true},{"actual":{"decision":[{"Location":"/a#part"},"next",4,303,"/a#part","/a#part","/a#part",{},false,true],"request":"/requests/1/1"},"check":"fixture 2","expected":{"decision":[{"Location":"/a#part"},"next",4,303,"/a#part","/a#part","/a#part",{},false,true],"request":"/requests/1/1"},"passed":true},{"actual":{"decision":[{"Content-Length":"999","Location":"/unicode/é"},"",5,307,"/unicode/é","/unicode/é","/unicode/é",{"Content-Length":"999"},false,false],"request":"/requests/1/2"},"check":"fixture 3","expected":{"decision":[{"Content-Length":"999","Location":"/unicode/é"},"",5,307,"/unicode/é","/unicode/é","/unicode/é",{"Content-Length":"999"},false,false],"request":"/requests/1/2"},"passed":true},{"actual":{"decision":[{"Location":"/"},"",5,308,"/","/","/",{},false,false],"request":"/requests/1/3"},"check":"fixture 4","expected":{"decision":[{"Location":"/"},"",5,308,"/","/","/",{},false,false],"request":"/requests/1/3"},"passed":true},{"actual":{"decision":[{"Location":"/b"},"",0,301,"/b","/b","/b",{"Location":"/stale"},true,false],"request":"/requests/1/4"},"check":"fixture 5","expected":{"decision":[{"Location":"/b"},"",0,301,"/b","/b","/b",{"Location":"/stale"},true,false],"request":"/requests/1/4"},"passed":true},{"actual":{"decision":[{"Content-Type":"custom","Location":"/a\"b"},"x",1,302,"/a\"b","/a&quot;b","/a\"b",{"Content-Type":"custom"},false,false],"request":"/requests/1/5"},"check":"fixture 6","expected":{"decision":[{"Content-Type":"custom","Location":"/a\"b"},"x",1,302,"/a\"b","/a&quot;b","/a\"b",{"Content-Type":"custom"},false,false],"request":"/requests/1/5"},"passed":true},{"actual":{"decision":[{"Location":"/e"},"abc",3,303,"/e","/e","/e",{},false,true],"request":"/requests/1/6"},"check":"fixture 7","expected":{"decision":[{"Location":"/e"},"abc",3,303,"/e","/e","/e",{},false,true],"request":"/requests/1/6"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"request\": \"/requests/1/0\", \"decision\": [{\"X\": \"v\", \"Location\": \"/a?x=1&y=2\"}, \"move\", 4, 302, \"/a?x=1&amp;y=2\", \"/a?x=1&y=2\", \"/a?x=1&y=2\", {\"X\": \"v\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/0\", \"decision\": [{\"X\": \"v\", \"Location\": \"/a?x=1&y=2\"}, \"move\", 4, 302, \"/a?x=1&amp;y=2\", \"/a?x=1&y=2\", \"/a?x=1&y=2\", {\"X\": \"v\"}, false, false]}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"request\": \"/requests/1/1\", \"decision\": [{\"Location\": \"/a#part\"}, \"next\", 4, 303, \"/a#part\", \"/a#part\", \"/a#part\", {}, false, true]}, \"expected\": {\"request\": \"/requests/1/1\", \"decision\": [{\"Location\": \"/a#part\"}, \"next\", 4, 303, \"/a#part\", \"/a#part\", \"/a#part\", {}, false, true]}, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": {\"request\": \"/requests/1/2\", \"decision\": [{\"Content-Length\": \"999\", \"Location\": \"/unicode/é\"}, \"\", 5, 307, \"/unicode/é\", \"/unicode/é\", \"/unicode/é\", {\"Content-Length\": \"999\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/2\", \"decision\": [{\"Content-Length\": \"999\", \"Location\": \"/unicode/é\"}, \"\", 5, 307, \"/unicode/é\", \"/unicode/é\", \"/unicode/é\", {\"Content-Length\": \"999\"}, false, false]}, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": {\"request\": \"/requests/1/3\", \"decision\": [{\"Location\": \"/\"}, \"\", 5, 308, \"/\", \"/\", \"/\", {}, false, false]}, \"expected\": {\"request\": \"/requests/1/3\", \"decision\": [{\"Location\": \"/\"}, \"\", 5, 308, \"/\", \"/\", \"/\", {}, false, false]}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"request\": \"/requests/1/4\", \"decision\": [{\"Location\": \"/b\"}, \"\", 0, 301, \"/b\", \"/b\", \"/b\", {\"Location\": \"/stale\"}, true, false]}, \"expected\": {\"request\": \"/requests/1/4\", \"decision\": [{\"Location\": \"/b\"}, \"\", 0, 301, \"/b\", \"/b\", \"/b\", {\"Location\": \"/stale\"}, true, false]}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"request\": \"/requests/1/5\", \"decision\": [{\"Content-Type\": \"custom\", \"Location\": \"/a\\\"b\"}, \"x\", 1, 302, \"/a\\\"b\", \"/a&quot;b\", \"/a\\\"b\", {\"Content-Type\": \"custom\"}, false, false]}, \"expected\": {\"request\": \"/requests/1/5\", \"decision\": [{\"Content-Type\": \"custom\", \"Location\": \"/a\\\"b\"}, \"x\", 1, 302, \"/a\\\"b\", \"/a&quot;b\", \"/a\\\"b\", {\"Content-Type\": \"custom\"}, false, false]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"request\": \"/requests/1/6\", \"decision\": [{\"Location\": \"/e\"}, \"abc\", 3, 303, \"/e\", \"/e\", \"/e\", {}, false, true]}, \"expected\": {\"request\": \"/requests/1/6\", \"decision\": [{\"Location\": \"/e\"}, \"abc\", 3, 303, \"/e\", \"/e\", \"/e\", {}, false, true]}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}