FA-12191 / Navigation route constraints / Open access
A via-way prohibition blocks unrelated approaches · case 01
A via-way prohibition blocks unrelated approaches in the controlled route-policy fixture.
ROOT CAUSE
A forbidden maneuver is reduced to its final road pair, discarding the approach history.
VERIFIED REPAIR
Search for the complete ordered maneuver as a contiguous route subsequence.
Unsuccessful approach: Checking only the whole route misses a forbidden maneuver inside a longer itinerary.
Case contract
Return whether a nonempty road-ID prohibition occurs contiguously anywhere in a road sequence.
Why this case matters
Navigation policies depend on road context that a shortest-path cost alone does not encode.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(route, prohibited):
return any(route[i:i+2] == prohibited[-2:] for i in range(len(route)-1))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
a,b,c,x = N, N+10, N+20, N+30
check('whole maneuver', solve([a,b,c],[a,b,c]), True)
check('unrelated approach', solve([x,b,c],[a,b,c]), False)
check('maneuver inside itinerary', solve([x,a,b,c,x],[a,b,c]), True)
check('separated roads', solve([a,x,b,c],[a,b,c]), False)
check('route too short', solve([b,c],[a,b,c]), False)
check('reverse order', solve([c,b,a],[a,b,c]), False)
check('empty route', solve([],[a,b,c]), False)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| whole maneuver | True | True | Passed |
| unrelated approach | True | False | Failed |
| maneuver inside itinerary | True | True | Passed |
| separated roads | True | False | Failed |
| route too short | True | False | Failed |
| reverse order | False | False | Passed |
| empty route | False | False | Passed |
SHA-256 / 877199a8e514cf1267b570d5a850c2231aef23c2f45764a1cfde29ddd6f3dbd2
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(route, prohibited):
return route == prohibited
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
a,b,c,x = N, N+10, N+20, N+30
check('whole maneuver', solve([a,b,c],[a,b,c]), True)
check('unrelated approach', solve([x,b,c],[a,b,c]), False)
check('maneuver inside itinerary', solve([x,a,b,c,x],[a,b,c]), True)
check('separated roads', solve([a,x,b,c],[a,b,c]), False)
check('route too short', solve([b,c],[a,b,c]), False)
check('reverse order', solve([c,b,a],[a,b,c]), False)
check('empty route', solve([],[a,b,c]), False)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| whole maneuver | True | True | Passed |
| unrelated approach | False | False | Passed |
| maneuver inside itinerary | False | True | Failed |
| separated roads | False | False | Passed |
| route too short | False | False | Passed |
| reverse order | False | False | Passed |
| empty route | False | False | Passed |
SHA-256 / 077ba74e592c3461bc21d48a4e2c225e67d2a1bfba9c37f3bd013c8d0027fb0a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(route, prohibited):
return any(route[i:i+len(prohibited)] == prohibited for i in range(len(route)-len(prohibited)+1))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
a,b,c,x = N, N+10, N+20, N+30
check('whole maneuver', solve([a,b,c],[a,b,c]), True)
check('unrelated approach', solve([x,b,c],[a,b,c]), False)
check('maneuver inside itinerary', solve([x,a,b,c,x],[a,b,c]), True)
check('separated roads', solve([a,x,b,c],[a,b,c]), False)
check('route too short', solve([b,c],[a,b,c]), False)
check('reverse order', solve([c,b,a],[a,b,c]), False)
check('empty route', solve([],[a,b,c]), False)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| whole maneuver | True | True | Passed |
| unrelated approach | False | False | Passed |
| maneuver inside itinerary | True | True | Passed |
| separated roads | False | False | Passed |
| route too short | False | False | Passed |
| reverse order | False | False | Passed |
| empty route | False | False | Passed |
SHA-256 / 22f5f35b45ddea1251a3cb07163a550f564917720caa2df7eb124e8fc377d7a7
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:38:54.712225+00:00.
Case digest / cac47e32b8c578c1c27c7a1b143ae5918bcb5582252f29a22a2084925178afcf