FAILURE MAP
← Case archive

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.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
whole maneuverTrueTruePassed
unrelated approachTrueFalseFailed
maneuver inside itineraryTrueTruePassed
separated roadsTrueFalseFailed
route too shortTrueFalseFailed
reverse orderFalseFalsePassed
empty routeFalseFalsePassed

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 fixtureActualExpectedOutcome
whole maneuverTrueTruePassed
unrelated approachFalseFalsePassed
maneuver inside itineraryFalseTrueFailed
separated roadsFalseFalsePassed
route too shortFalseFalsePassed
reverse orderFalseFalsePassed
empty routeFalseFalsePassed

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 fixtureActualExpectedOutcome
whole maneuverTrueTruePassed
unrelated approachFalseFalsePassed
maneuver inside itineraryTrueTruePassed
separated roadsFalseFalsePassed
route too shortFalseFalsePassed
reverse orderFalseFalsePassed
empty routeFalseFalsePassed

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