{"abstract":"Extract redirect route captures under an explicit segment-matching grammar: the suffix empty means no strip branch emits an incorrect decision.","category":"HTTP redirects","checks":7,"contract":"Extract redirect route captures under an explicit segment-matching grammar. The explicit fixture inputs and outputs define a bounded offline policy; request identity must accompany the decision.","evaluation_group":"s3-http-redirects-rule-path-captures","failed_approach":"The partial repair uses \"path.replace(suffix,'') if suffix else path\" and still fails an explicit boundary or control.","family":"s3-http-redirects-rule-path-captures-suffix-empty-means-no-strip","id":"FA-29166","implementations":{"attempt":{"sha256":"5808e38e6298a14fa00cab3a39c5184f64fe4a389c2edd319058841fe87be2ef","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, path, prefix, segments, greedy, case_sensitive, suffix):\n    return {'request': request, 'decision': [path[len(prefix):] if path.startswith(prefix) else None, segments[1] if len(segments)>1 else None, '/'.join(segments[1:]) if greedy else (segments[1] if len(segments)>1 else ''), path.startswith(prefix) if case_sensitive else path.lower().startswith(prefix.lower()), segments, path.replace(suffix,'') if suffix else path, '.' in path, segments[1:], len(segments), greedy and len(segments)>1]} \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', '/api/a/b', '/api', ['api', 'a', 'b'], True, True, '.json'), {'request': '/requests/' + str(N) + '/0', 'decision': ['/a/b', 'a', 'a/b', True, ['api', 'a', 'b'], '/api/a/b', False, ['a', 'b'], 3, True]})\ncheck('fixture 2', solve('/requests/' + str(N) + '/1', '/API/a', '/api', ['API', 'a'], False, False, ''), {'request': '/requests/' + str(N) + '/1', 'decision': [None, 'a', 'a', True, ['API', 'a'], '/API/a', False, ['a'], 2, False]})\ncheck('fixture 3', solve('/requests/' + str(N) + '/2', '/api', '/api', ['api'], True, True, ''), {'request': '/requests/' + str(N) + '/2', 'decision': ['', None, '', True, ['api'], '/api', False, [], 1, False]})\ncheck('fixture 4', solve('/requests/' + str(N) + '/3', '/apix/a', '/api', ['apix', 'a'], False, True, '.txt'), {'request': '/requests/' + str(N) + '/3', 'decision': ['x/a', 'a', 'a', True, ['apix', 'a'], '/apix/a', False, ['a'], 2, False]})\ncheck('fixture 5', solve('/requests/' + str(N) + '/4', '/api/a//b/', '/api', ['api', 'a', '', 'b', ''], True, True, '/'), {'request': '/requests/' + str(N) + '/4', 'decision': ['/a//b/', 'a', 'a//b/', True, ['api', 'a', '', 'b', ''], '/api/a//b', False, ['a', '', 'b', ''], 5, True]})\ncheck('fixture 6', solve('/requests/' + str(N) + '/5', '/api/a.json', '/api', ['api', 'a.json'], False, True, '.json'), {'request': '/requests/' + str(N) + '/5', 'decision': ['/a.json', 'a.json', 'a.json', True, ['api', 'a.json'], '/api/a', True, ['a.json'], 2, False]})\ncheck('fixture 7', solve('/requests/' + str(N) + '/6', '/API/a', '/api', ['API', 'a'], False, True, ''), {'request': '/requests/' + str(N) + '/6', 'decision': [None, 'a', 'a', False, ['API', 'a'], '/API/a', False, ['a'], 2, False]})\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":"d812a67b4c2df66009e041b35cab65df5481204d31dfe88d9731b2840d36c94c","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, path, prefix, segments, greedy, case_sensitive, suffix):\n    return {'request': request, 'decision': [path[len(prefix):] if path.startswith(prefix) else None, segments[1] if len(segments)>1 else None, '/'.join(segments[1:]) if greedy else (segments[1] if len(segments)>1 else ''), path.startswith(prefix) if case_sensitive else path.lower().startswith(prefix.lower()), segments, path[:-len(suffix)] if path.endswith(suffix) else path, '.' in path, segments[1:], len(segments), greedy and len(segments)>1]} \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', '/api/a/b', '/api', ['api', 'a', 'b'], True, True, '.json'), {'request': '/requests/' + str(N) + '/0', 'decision': ['/a/b', 'a', 'a/b', True, ['api', 'a', 'b'], '/api/a/b', False, ['a', 'b'], 3, True]})\ncheck('fixture 2', solve('/requests/' + str(N) + '/1', '/API/a', '/api', ['API', 'a'], False, False, ''), {'request': '/requests/' + str(N) + '/1', 'decision': [None, 'a', 'a', True, ['API', 'a'], '/API/a', False, ['a'], 2, False]})\ncheck('fixture 3', solve('/requests/' + str(N) + '/2', '/api', '/api', ['api'], True, True, ''), {'request': '/requests/' + str(N) + '/2', 'decision': ['', None, '', True, ['api'], '/api', False, [], 1, False]})\ncheck('fixture 4', solve('/requests/' + str(N) + '/3', '/apix/a', '/api', ['apix', 'a'], False, True, '.txt'), {'request': '/requests/' + str(N) + '/3', 'decision': ['x/a', 'a', 'a', True, ['apix', 'a'], '/apix/a', False, ['a'], 2, False]})\ncheck('fixture 5', solve('/requests/' + str(N) + '/4', '/api/a//b/', '/api', ['api', 'a', '', 'b', ''], True, True, '/'), {'request': '/requests/' + str(N) + '/4', 'decision': ['/a//b/', 'a', 'a//b/', True, ['api', 'a', '', 'b', ''], '/api/a//b', False, ['a', '', 'b', ''], 5, True]})\ncheck('fixture 6', solve('/requests/' + str(N) + '/5', '/api/a.json', '/api', ['api', 'a.json'], False, True, '.json'), {'request': '/requests/' + str(N) + '/5', 'decision': ['/a.json', 'a.json', 'a.json', True, ['api', 'a.json'], '/api/a', True, ['a.json'], 2, False]})\ncheck('fixture 7', solve('/requests/' + str(N) + '/6', '/API/a', '/api', ['API', 'a'], False, True, ''), {'request': '/requests/' + str(N) + '/6', 'decision': [None, 'a', 'a', False, ['API', 'a'], '/API/a', False, ['a'], 2, False]})\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":"465e4c59b54316d0d35460eaa77cab148ce48321e5041341c6e129e08398745e","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, path, prefix, segments, greedy, case_sensitive, suffix):\n    return {'request': request, 'decision': [path[len(prefix):] if path.startswith(prefix) else None, segments[1] if len(segments)>1 else None, '/'.join(segments[1:]) if greedy else (segments[1] if len(segments)>1 else ''), path.startswith(prefix) if case_sensitive else path.lower().startswith(prefix.lower()), segments, path[:-len(suffix)] if suffix and path.endswith(suffix) else path, '.' in path, segments[1:], len(segments), greedy and len(segments)>1]} \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', '/api/a/b', '/api', ['api', 'a', 'b'], True, True, '.json'), {'request': '/requests/' + str(N) + '/0', 'decision': ['/a/b', 'a', 'a/b', True, ['api', 'a', 'b'], '/api/a/b', False, ['a', 'b'], 3, True]})\ncheck('fixture 2', solve('/requests/' + str(N) + '/1', '/API/a', '/api', ['API', 'a'], False, False, ''), {'request': '/requests/' + str(N) + '/1', 'decision': [None, 'a', 'a', True, ['API', 'a'], '/API/a', False, ['a'], 2, False]})\ncheck('fixture 3', solve('/requests/' + str(N) + '/2', '/api', '/api', ['api'], True, True, ''), {'request': '/requests/' + str(N) + '/2', 'decision': ['', None, '', True, ['api'], '/api', False, [], 1, False]})\ncheck('fixture 4', solve('/requests/' + str(N) + '/3', '/apix/a', '/api', ['apix', 'a'], False, True, '.txt'), {'request': '/requests/' + str(N) + '/3', 'decision': ['x/a', 'a', 'a', True, ['apix', 'a'], '/apix/a', False, ['a'], 2, False]})\ncheck('fixture 5', solve('/requests/' + str(N) + '/4', '/api/a//b/', '/api', ['api', 'a', '', 'b', ''], True, True, '/'), {'request': '/requests/' + str(N) + '/4', 'decision': ['/a//b/', 'a', 'a//b/', True, ['api', 'a', '', 'b', ''], '/api/a//b', False, ['a', '', 'b', ''], 5, True]})\ncheck('fixture 6', solve('/requests/' + str(N) + '/5', '/api/a.json', '/api', ['api', 'a.json'], False, True, '.json'), {'request': '/requests/' + str(N) + '/5', 'decision': ['/a.json', 'a.json', 'a.json', True, ['api', 'a.json'], '/api/a', True, ['a.json'], 2, False]})\ncheck('fixture 7', solve('/requests/' + str(N) + '/6', '/API/a', '/api', ['API', 'a'], False, True, ''), {'request': '/requests/' + str(N) + '/6', 'decision': [None, 'a', 'a', False, ['API', 'a'], '/API/a', False, ['a'], 2, False]})\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-rule-path-captures-suffix-empty-means-no-strip","generated_at":"2026-09-29T14:41:40.580808+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 'path[:-len(suffix)] if suffix and path.endswith(suffix) else path', preserving the other controller outputs.","root_cause":"The suffix-empty-means-no-strip decision uses 'path[:-len(suffix)] if path.endswith(suffix) else path'; this violates the stipulated controller policy.","sha256":"1bd642afdd7a4d51441dba56821ce4cfad941cbc9fdcdde141b4e26b55ac919f","title":"Extract redirect route captures under an explicit segment-matching grammar: suffix empty means no strip · 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":44.345,"exit_code":1,"observations":[{"actual":{"decision":["/a/b","a","a/b",true,["api","a","b"],"/api/a/b",false,["a","b"],3,true],"request":"/requests/1/0"},"check":"fixture 1","expected":{"decision":["/a/b","a","a/b",true,["api","a","b"],"/api/a/b",false,["a","b"],3,true],"request":"/requests/1/0"},"passed":true},{"actual":{"decision":[null,"a","a",true,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/1"},"check":"fixture 2","expected":{"decision":[null,"a","a",true,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/1"},"passed":true},{"actual":{"decision":["",null,"",true,["api"],"/api",false,[],1,false],"request":"/requests/1/2"},"check":"fixture 3","expected":{"decision":["",null,"",true,["api"],"/api",false,[],1,false],"request":"/requests/1/2"},"passed":true},{"actual":{"decision":["x/a","a","a",true,["apix","a"],"/apix/a",false,["a"],2,false],"request":"/requests/1/3"},"check":"fixture 4","expected":{"decision":["x/a","a","a",true,["apix","a"],"/apix/a",false,["a"],2,false],"request":"/requests/1/3"},"passed":true},{"actual":{"decision":["/a//b/","a","a//b/",true,["api","a","","b",""],"apiab",false,["a","","b",""],5,true],"request":"/requests/1/4"},"check":"fixture 5","expected":{"decision":["/a//b/","a","a//b/",true,["api","a","","b",""],"/api/a//b",false,["a","","b",""],5,true],"request":"/requests/1/4"},"passed":false},{"actual":{"decision":["/a.json","a.json","a.json",true,["api","a.json"],"/api/a",true,["a.json"],2,false],"request":"/requests/1/5"},"check":"fixture 6","expected":{"decision":["/a.json","a.json","a.json",true,["api","a.json"],"/api/a",true,["a.json"],2,false],"request":"/requests/1/5"},"passed":true},{"actual":{"decision":[null,"a","a",false,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/6"},"check":"fixture 7","expected":{"decision":[null,"a","a",false,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/6"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"request\": \"/requests/1/0\", \"decision\": [\"/a/b\", \"a\", \"a/b\", true, [\"api\", \"a\", \"b\"], \"/api/a/b\", false, [\"a\", \"b\"], 3, true]}, \"expected\": {\"request\": \"/requests/1/0\", \"decision\": [\"/a/b\", \"a\", \"a/b\", true, [\"api\", \"a\", \"b\"], \"/api/a/b\", false, [\"a\", \"b\"], 3, true]}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"request\": \"/requests/1/1\", \"decision\": [null, \"a\", \"a\", true, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/1\", \"decision\": [null, \"a\", \"a\", true, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": {\"request\": \"/requests/1/2\", \"decision\": [\"\", null, \"\", true, [\"api\"], \"/api\", false, [], 1, false]}, \"expected\": {\"request\": \"/requests/1/2\", \"decision\": [\"\", null, \"\", true, [\"api\"], \"/api\", false, [], 1, false]}, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": {\"request\": \"/requests/1/3\", \"decision\": [\"x/a\", \"a\", \"a\", true, [\"apix\", \"a\"], \"/apix/a\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/3\", \"decision\": [\"x/a\", \"a\", \"a\", true, [\"apix\", \"a\"], \"/apix/a\", false, [\"a\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"request\": \"/requests/1/4\", \"decision\": [\"/a//b/\", \"a\", \"a//b/\", true, [\"api\", \"a\", \"\", \"b\", \"\"], \"apiab\", false, [\"a\", \"\", \"b\", \"\"], 5, true]}, \"expected\": {\"request\": \"/requests/1/4\", \"decision\": [\"/a//b/\", \"a\", \"a//b/\", true, [\"api\", \"a\", \"\", \"b\", \"\"], \"/api/a//b\", false, [\"a\", \"\", \"b\", \"\"], 5, true]}, \"passed\": false}, {\"check\": \"fixture 6\", \"actual\": {\"request\": \"/requests/1/5\", \"decision\": [\"/a.json\", \"a.json\", \"a.json\", true, [\"api\", \"a.json\"], \"/api/a\", true, [\"a.json\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/5\", \"decision\": [\"/a.json\", \"a.json\", \"a.json\", true, [\"api\", \"a.json\"], \"/api/a\", true, [\"a.json\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"request\": \"/requests/1/6\", \"decision\": [null, \"a\", \"a\", false, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/6\", \"decision\": [null, \"a\", \"a\", false, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.62,"exit_code":1,"observations":[{"actual":{"decision":["/a/b","a","a/b",true,["api","a","b"],"/api/a/b",false,["a","b"],3,true],"request":"/requests/1/0"},"check":"fixture 1","expected":{"decision":["/a/b","a","a/b",true,["api","a","b"],"/api/a/b",false,["a","b"],3,true],"request":"/requests/1/0"},"passed":true},{"actual":{"decision":[null,"a","a",true,["API","a"],"",false,["a"],2,false],"request":"/requests/1/1"},"check":"fixture 2","expected":{"decision":[null,"a","a",true,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/1"},"passed":false},{"actual":{"decision":["",null,"",true,["api"],"",false,[],1,false],"request":"/requests/1/2"},"check":"fixture 3","expected":{"decision":["",null,"",true,["api"],"/api",false,[],1,false],"request":"/requests/1/2"},"passed":false},{"actual":{"decision":["x/a","a","a",true,["apix","a"],"/apix/a",false,["a"],2,false],"request":"/requests/1/3"},"check":"fixture 4","expected":{"decision":["x/a","a","a",true,["apix","a"],"/apix/a",false,["a"],2,false],"request":"/requests/1/3"},"passed":true},{"actual":{"decision":["/a//b/","a","a//b/",true,["api","a","","b",""],"/api/a//b",false,["a","","b",""],5,true],"request":"/requests/1/4"},"check":"fixture 5","expected":{"decision":["/a//b/","a","a//b/",true,["api","a","","b",""],"/api/a//b",false,["a","","b",""],5,true],"request":"/requests/1/4"},"passed":true},{"actual":{"decision":["/a.json","a.json","a.json",true,["api","a.json"],"/api/a",true,["a.json"],2,false],"request":"/requests/1/5"},"check":"fixture 6","expected":{"decision":["/a.json","a.json","a.json",true,["api","a.json"],"/api/a",true,["a.json"],2,false],"request":"/requests/1/5"},"passed":true},{"actual":{"decision":[null,"a","a",false,["API","a"],"",false,["a"],2,false],"request":"/requests/1/6"},"check":"fixture 7","expected":{"decision":[null,"a","a",false,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/6"},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"request\": \"/requests/1/0\", \"decision\": [\"/a/b\", \"a\", \"a/b\", true, [\"api\", \"a\", \"b\"], \"/api/a/b\", false, [\"a\", \"b\"], 3, true]}, \"expected\": {\"request\": \"/requests/1/0\", \"decision\": [\"/a/b\", \"a\", \"a/b\", true, [\"api\", \"a\", \"b\"], \"/api/a/b\", false, [\"a\", \"b\"], 3, true]}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"request\": \"/requests/1/1\", \"decision\": [null, \"a\", \"a\", true, [\"API\", \"a\"], \"\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/1\", \"decision\": [null, \"a\", \"a\", true, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"passed\": false}, {\"check\": \"fixture 3\", \"actual\": {\"request\": \"/requests/1/2\", \"decision\": [\"\", null, \"\", true, [\"api\"], \"\", false, [], 1, false]}, \"expected\": {\"request\": \"/requests/1/2\", \"decision\": [\"\", null, \"\", true, [\"api\"], \"/api\", false, [], 1, false]}, \"passed\": false}, {\"check\": \"fixture 4\", \"actual\": {\"request\": \"/requests/1/3\", \"decision\": [\"x/a\", \"a\", \"a\", true, [\"apix\", \"a\"], \"/apix/a\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/3\", \"decision\": [\"x/a\", \"a\", \"a\", true, [\"apix\", \"a\"], \"/apix/a\", false, [\"a\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"request\": \"/requests/1/4\", \"decision\": [\"/a//b/\", \"a\", \"a//b/\", true, [\"api\", \"a\", \"\", \"b\", \"\"], \"/api/a//b\", false, [\"a\", \"\", \"b\", \"\"], 5, true]}, \"expected\": {\"request\": \"/requests/1/4\", \"decision\": [\"/a//b/\", \"a\", \"a//b/\", true, [\"api\", \"a\", \"\", \"b\", \"\"], \"/api/a//b\", false, [\"a\", \"\", \"b\", \"\"], 5, true]}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"request\": \"/requests/1/5\", \"decision\": [\"/a.json\", \"a.json\", \"a.json\", true, [\"api\", \"a.json\"], \"/api/a\", true, [\"a.json\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/5\", \"decision\": [\"/a.json\", \"a.json\", \"a.json\", true, [\"api\", \"a.json\"], \"/api/a\", true, [\"a.json\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"request\": \"/requests/1/6\", \"decision\": [null, \"a\", \"a\", false, [\"API\", \"a\"], \"\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/6\", \"decision\": [null, \"a\", \"a\", false, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.614,"exit_code":0,"observations":[{"actual":{"decision":["/a/b","a","a/b",true,["api","a","b"],"/api/a/b",false,["a","b"],3,true],"request":"/requests/1/0"},"check":"fixture 1","expected":{"decision":["/a/b","a","a/b",true,["api","a","b"],"/api/a/b",false,["a","b"],3,true],"request":"/requests/1/0"},"passed":true},{"actual":{"decision":[null,"a","a",true,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/1"},"check":"fixture 2","expected":{"decision":[null,"a","a",true,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/1"},"passed":true},{"actual":{"decision":["",null,"",true,["api"],"/api",false,[],1,false],"request":"/requests/1/2"},"check":"fixture 3","expected":{"decision":["",null,"",true,["api"],"/api",false,[],1,false],"request":"/requests/1/2"},"passed":true},{"actual":{"decision":["x/a","a","a",true,["apix","a"],"/apix/a",false,["a"],2,false],"request":"/requests/1/3"},"check":"fixture 4","expected":{"decision":["x/a","a","a",true,["apix","a"],"/apix/a",false,["a"],2,false],"request":"/requests/1/3"},"passed":true},{"actual":{"decision":["/a//b/","a","a//b/",true,["api","a","","b",""],"/api/a//b",false,["a","","b",""],5,true],"request":"/requests/1/4"},"check":"fixture 5","expected":{"decision":["/a//b/","a","a//b/",true,["api","a","","b",""],"/api/a//b",false,["a","","b",""],5,true],"request":"/requests/1/4"},"passed":true},{"actual":{"decision":["/a.json","a.json","a.json",true,["api","a.json"],"/api/a",true,["a.json"],2,false],"request":"/requests/1/5"},"check":"fixture 6","expected":{"decision":["/a.json","a.json","a.json",true,["api","a.json"],"/api/a",true,["a.json"],2,false],"request":"/requests/1/5"},"passed":true},{"actual":{"decision":[null,"a","a",false,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/6"},"check":"fixture 7","expected":{"decision":[null,"a","a",false,["API","a"],"/API/a",false,["a"],2,false],"request":"/requests/1/6"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"request\": \"/requests/1/0\", \"decision\": [\"/a/b\", \"a\", \"a/b\", true, [\"api\", \"a\", \"b\"], \"/api/a/b\", false, [\"a\", \"b\"], 3, true]}, \"expected\": {\"request\": \"/requests/1/0\", \"decision\": [\"/a/b\", \"a\", \"a/b\", true, [\"api\", \"a\", \"b\"], \"/api/a/b\", false, [\"a\", \"b\"], 3, true]}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"request\": \"/requests/1/1\", \"decision\": [null, \"a\", \"a\", true, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/1\", \"decision\": [null, \"a\", \"a\", true, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": {\"request\": \"/requests/1/2\", \"decision\": [\"\", null, \"\", true, [\"api\"], \"/api\", false, [], 1, false]}, \"expected\": {\"request\": \"/requests/1/2\", \"decision\": [\"\", null, \"\", true, [\"api\"], \"/api\", false, [], 1, false]}, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": {\"request\": \"/requests/1/3\", \"decision\": [\"x/a\", \"a\", \"a\", true, [\"apix\", \"a\"], \"/apix/a\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/3\", \"decision\": [\"x/a\", \"a\", \"a\", true, [\"apix\", \"a\"], \"/apix/a\", false, [\"a\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"request\": \"/requests/1/4\", \"decision\": [\"/a//b/\", \"a\", \"a//b/\", true, [\"api\", \"a\", \"\", \"b\", \"\"], \"/api/a//b\", false, [\"a\", \"\", \"b\", \"\"], 5, true]}, \"expected\": {\"request\": \"/requests/1/4\", \"decision\": [\"/a//b/\", \"a\", \"a//b/\", true, [\"api\", \"a\", \"\", \"b\", \"\"], \"/api/a//b\", false, [\"a\", \"\", \"b\", \"\"], 5, true]}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"request\": \"/requests/1/5\", \"decision\": [\"/a.json\", \"a.json\", \"a.json\", true, [\"api\", \"a.json\"], \"/api/a\", true, [\"a.json\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/5\", \"decision\": [\"/a.json\", \"a.json\", \"a.json\", true, [\"api\", \"a.json\"], \"/api/a\", true, [\"a.json\"], 2, false]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"request\": \"/requests/1/6\", \"decision\": [null, \"a\", \"a\", false, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"expected\": {\"request\": \"/requests/1/6\", \"decision\": [null, \"a\", \"a\", false, [\"API\", \"a\"], \"/API/a\", false, [\"a\"], 2, false]}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}