{"abstract":"An only-turn rule leaks onto other incoming roads in the controlled route-policy fixture.","category":"Navigation route constraints","checks":7,"contract":"Rules are pairs of incoming and permitted outgoing IDs. For one incoming road matching rules form a union; an unmatched approach permits all exits.","evaluation_group":"model-26db5f9269b053ac","failed_approach":"Applying only the first matching rule loses other permitted exits in the explicit union model.","family":"z-navigation_routes-only-turn","id":"FA-12196","implementations":{"attempt":{"sha256":"36636cb09e98cd86d1a78bfb955e0afa4282d0694cc2b166e6c7761c87bb17b4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(incoming, outgoing, rules):\n    for a,b in rules:\n        if a == incoming:\n            return outgoing == b\n    return True\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\na,b,c,x = N,N+10,N+20,N+30\nrules = [(a,b),(a,c)]\ncheck('first permitted', solve(a,b,rules), True)\ncheck('second permitted', solve(a,c,rules), True)\ncheck('restricted wrong exit', solve(a,x,rules), False)\ncheck('unrelated incoming', solve(x,x,rules), True)\ncheck('no rules', solve(a,x,[]), True)\ncheck('other approach rules', solve(x,c,[(a,b),(x,c)]), True)\ncheck('other approach denied', solve(x,b,[(a,b),(x,c)]), 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":"7baaa0e5ff0893bf086a3f0897b1e2f57f1e4e9d6bef0b4accee5c2627a1ab74","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(incoming, outgoing, rules):\n    return outgoing in [b for a,b in rules] if rules else True\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\na,b,c,x = N,N+10,N+20,N+30\nrules = [(a,b),(a,c)]\ncheck('first permitted', solve(a,b,rules), True)\ncheck('second permitted', solve(a,c,rules), True)\ncheck('restricted wrong exit', solve(a,x,rules), False)\ncheck('unrelated incoming', solve(x,x,rules), True)\ncheck('no rules', solve(a,x,[]), True)\ncheck('other approach rules', solve(x,c,[(a,b),(x,c)]), True)\ncheck('other approach denied', solve(x,b,[(a,b),(x,c)]), 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":"7abd97b90c98f2978f644efd3d93107a5fb462a1ec02771e963f7eff2a64591b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(incoming, outgoing, rules):\n    exits = [b for a,b in rules if a == incoming]\n    return not exits or outgoing in exits\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\na,b,c,x = N,N+10,N+20,N+30\nrules = [(a,b),(a,c)]\ncheck('first permitted', solve(a,b,rules), True)\ncheck('second permitted', solve(a,c,rules), True)\ncheck('restricted wrong exit', solve(a,x,rules), False)\ncheck('unrelated incoming', solve(x,x,rules), True)\ncheck('no rules', solve(a,x,[]), True)\ncheck('other approach rules', solve(x,c,[(a,b),(x,c)]), True)\ncheck('other approach denied', solve(x,b,[(a,b),(x,c)]), 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":"Simplified deterministic offline policy model; not a production router or authoritative road guidance. 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":"z-navigation_routes-only-turn","generated_at":"2026-09-29T14:38:54.752525+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Navigation policies depend on road context that a shortest-path cost alone does not encode.","repair":"Collect allowed exits for this approach, and constrain only that approach.","root_cause":"The allowed outgoing road is treated as a junction-wide rule instead of an incoming-road-specific rule.","sha256":"92db1dbf425342b247820b903862da99dac31557aa3a881b0e38786be8b1ce62","title":"An only-turn rule leaks onto other incoming roads · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.418,"exit_code":1,"observations":[{"actual":true,"check":"first permitted","expected":true,"passed":true},{"actual":false,"check":"second permitted","expected":true,"passed":false},{"actual":false,"check":"restricted wrong exit","expected":false,"passed":true},{"actual":true,"check":"unrelated incoming","expected":true,"passed":true},{"actual":true,"check":"no rules","expected":true,"passed":true},{"actual":true,"check":"other approach rules","expected":true,"passed":true},{"actual":false,"check":"other approach denied","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"first permitted\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"second permitted\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"restricted wrong exit\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"unrelated incoming\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"no rules\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"other approach rules\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"other approach denied\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.896,"exit_code":1,"observations":[{"actual":true,"check":"first permitted","expected":true,"passed":true},{"actual":true,"check":"second permitted","expected":true,"passed":true},{"actual":false,"check":"restricted wrong exit","expected":false,"passed":true},{"actual":false,"check":"unrelated incoming","expected":true,"passed":false},{"actual":true,"check":"no rules","expected":true,"passed":true},{"actual":true,"check":"other approach rules","expected":true,"passed":true},{"actual":true,"check":"other approach denied","expected":false,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"first permitted\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"second permitted\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"restricted wrong exit\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"unrelated incoming\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"no rules\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"other approach rules\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"other approach denied\", \"actual\": true, \"expected\": false, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.09,"exit_code":0,"observations":[{"actual":true,"check":"first permitted","expected":true,"passed":true},{"actual":true,"check":"second permitted","expected":true,"passed":true},{"actual":false,"check":"restricted wrong exit","expected":false,"passed":true},{"actual":true,"check":"unrelated incoming","expected":true,"passed":true},{"actual":true,"check":"no rules","expected":true,"passed":true},{"actual":true,"check":"other approach rules","expected":true,"passed":true},{"actual":false,"check":"other approach denied","expected":false,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"first permitted\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"second permitted\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"restricted wrong exit\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"unrelated incoming\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"no rules\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"other approach rules\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"other approach denied\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}