{"abstract":"A reversible lane is used after its direction changes in the controlled route-policy fixture.","category":"Navigation route constraints","checks":7,"contract":"Windows are nonoverlapping (start,end,direction) on an absolute integer timeline. Entry is inclusive and exit may equal end; travel duration is positive.","evaluation_group":"model-13c63d5a5c3c0c6d","failed_approach":"A strict end comparison rejects a traversal finishing exactly when its direction window ends.","family":"z-navigation_routes-reversible-lane","id":"FA-12226","implementations":{"attempt":{"sha256":"d8bc91a0107a895cb5efa5e8ec6a8886ba5c9865b526bb5857063e3e565d05ac","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(entry, duration, direction, windows):\n    return any(a <= entry and entry + duration < b and d == direction for a,b,d in windows)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nt = N*100\nw = [(t,t+10,'east'),(t+10,t+20,'west')]\ncheck('finish at switch', solve(t+5,5,'east',w), True)\ncheck('overrun switch', solve(t+5,6,'east',w), False)\ncheck('new direction at boundary', solve(t+10,1,'west',w), True)\ncheck('old direction at boundary', solve(t+10,1,'east',w), False)\ncheck('before window', solve(t-1,1,'east',w), False)\ncheck('whole window', solve(t,10,'east',w), True)\ncheck('no allocation', solve(t,1,'east',[]), 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":"2d363e18c16b54f49b4e9015887b9d46ed0568413b8081723e576523564440fa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(entry, duration, direction, windows):\n    return any(a <= entry < b and d == direction for a,b,d in windows)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nt = N*100\nw = [(t,t+10,'east'),(t+10,t+20,'west')]\ncheck('finish at switch', solve(t+5,5,'east',w), True)\ncheck('overrun switch', solve(t+5,6,'east',w), False)\ncheck('new direction at boundary', solve(t+10,1,'west',w), True)\ncheck('old direction at boundary', solve(t+10,1,'east',w), False)\ncheck('before window', solve(t-1,1,'east',w), False)\ncheck('whole window', solve(t,10,'east',w), True)\ncheck('no allocation', solve(t,1,'east',[]), 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":"915f59c55775b6ce5657db6b92b3fb46135581d960d828eefd006229f3bdcf9f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(entry, duration, direction, windows):\n    return any(a <= entry and entry + duration <= b and d == direction for a,b,d in windows)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nt = N*100\nw = [(t,t+10,'east'),(t+10,t+20,'west')]\ncheck('finish at switch', solve(t+5,5,'east',w), True)\ncheck('overrun switch', solve(t+5,6,'east',w), False)\ncheck('new direction at boundary', solve(t+10,1,'west',w), True)\ncheck('old direction at boundary', solve(t+10,1,'east',w), False)\ncheck('before window', solve(t-1,1,'east',w), False)\ncheck('whole window', solve(t,10,'east',w), True)\ncheck('no allocation', solve(t,1,'east',[]), 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-reversible-lane","generated_at":"2026-09-29T14:38:54.963487+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":"Require the entire positive-duration traversal to fit one matching direction window.","root_cause":"Availability is checked only at entry time, even when the traversal outlasts the allocated direction.","sha256":"2234ce4efd4ffcf62b4bf9d97666d213cffae73a09d141a3e786235b6d48452c","title":"A reversible lane is used after its direction changes · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.716,"exit_code":1,"observations":[{"actual":false,"check":"finish at switch","expected":true,"passed":false},{"actual":false,"check":"overrun switch","expected":false,"passed":true},{"actual":true,"check":"new direction at boundary","expected":true,"passed":true},{"actual":false,"check":"old direction at boundary","expected":false,"passed":true},{"actual":false,"check":"before window","expected":false,"passed":true},{"actual":false,"check":"whole window","expected":true,"passed":false},{"actual":false,"check":"no allocation","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"finish at switch\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"overrun switch\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"new direction at boundary\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"old direction at boundary\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"before window\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"whole window\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"no allocation\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.105,"exit_code":1,"observations":[{"actual":true,"check":"finish at switch","expected":true,"passed":true},{"actual":true,"check":"overrun switch","expected":false,"passed":false},{"actual":true,"check":"new direction at boundary","expected":true,"passed":true},{"actual":false,"check":"old direction at boundary","expected":false,"passed":true},{"actual":false,"check":"before window","expected":false,"passed":true},{"actual":true,"check":"whole window","expected":true,"passed":true},{"actual":false,"check":"no allocation","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"finish at switch\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"overrun switch\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"new direction at boundary\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"old direction at boundary\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"before window\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"whole window\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"no allocation\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.576,"exit_code":0,"observations":[{"actual":true,"check":"finish at switch","expected":true,"passed":true},{"actual":false,"check":"overrun switch","expected":false,"passed":true},{"actual":true,"check":"new direction at boundary","expected":true,"passed":true},{"actual":false,"check":"old direction at boundary","expected":false,"passed":true},{"actual":false,"check":"before window","expected":false,"passed":true},{"actual":true,"check":"whole window","expected":true,"passed":true},{"actual":false,"check":"no allocation","expected":false,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"finish at switch\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"overrun switch\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"new direction at boundary\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"old direction at boundary\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"before window\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"whole window\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"no allocation\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}