FA-24756 / Client state / Open access
A removed workspace leaves the client on an inaccessible last-visited workspace · case 01
A removed workspace leaves the client on an inaccessible last-visited workspace.
ROOT CAUSE
The faulty implementation violates If the current workspace becomes inaccessible, select the first accessible recent workspace, then an accessible default, otherwise no workspace.
VERIFIED REPAIR
If the current workspace becomes inaccessible, select the first accessible recent workspace, then an accessible default, otherwise no workspace.
Unsuccessful approach: The partial repair still violates at least one explicit regression oracle.
Case contract
If the current workspace becomes inaccessible, select the first accessible recent workspace, then an accessible default, otherwise no workspace.
Why this case matters
A bounded offline client-state transition with explicit lifecycle inputs.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(current, allowed, recent, default):
return current
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('recent allowed preferred', solve('gone',['a','b'],['gone','b','a'],'a'), 'b')
check('current retained', solve('a',['a','b'],['b'],'b'), 'a')
check('default allowed', solve('gone',['a'],[],'a'), 'a')
check('default forbidden', solve('gone',['a'],[],'bad'), None)
check('no workspaces', solve('gone',[],['a'],'a'), None)
check('skip many inaccessible recent', solve('gone',['ok'],['bad'+str(i) for i in range(N)]+['ok'],'bad'), 'ok')
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 |
|---|---|---|---|
| recent allowed preferred | gone | b | Failed |
| current retained | a | a | Passed |
| default allowed | gone | a | Failed |
| default forbidden | gone | None | Failed |
| no workspaces | gone | None | Failed |
| skip many inaccessible recent | gone | ok | Failed |
SHA-256 / eb58f12bfc81a6c504ff74dc4ab95876e1075a78763f85bec9098a79113fb6a8
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(current, allowed, recent, default):
return current if current in allowed else default
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('recent allowed preferred', solve('gone',['a','b'],['gone','b','a'],'a'), 'b')
check('current retained', solve('a',['a','b'],['b'],'b'), 'a')
check('default allowed', solve('gone',['a'],[],'a'), 'a')
check('default forbidden', solve('gone',['a'],[],'bad'), None)
check('no workspaces', solve('gone',[],['a'],'a'), None)
check('skip many inaccessible recent', solve('gone',['ok'],['bad'+str(i) for i in range(N)]+['ok'],'bad'), 'ok')
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 |
|---|---|---|---|
| recent allowed preferred | a | b | Failed |
| current retained | a | a | Passed |
| default allowed | a | a | Passed |
| default forbidden | bad | None | Failed |
| no workspaces | a | None | Failed |
| skip many inaccessible recent | bad | ok | Failed |
SHA-256 / 7ba74003eada805566326487518e42c31ed78fa541feb9d655b816f740f23671
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(current, allowed, recent, default):
return current if current in allowed else next((w for w in recent if w in allowed), default if default in allowed else None)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('recent allowed preferred', solve('gone',['a','b'],['gone','b','a'],'a'), 'b')
check('current retained', solve('a',['a','b'],['b'],'b'), 'a')
check('default allowed', solve('gone',['a'],[],'a'), 'a')
check('default forbidden', solve('gone',['a'],[],'bad'), None)
check('no workspaces', solve('gone',[],['a'],'a'), None)
check('skip many inaccessible recent', solve('gone',['ok'],['bad'+str(i) for i in range(N)]+['ok'],'bad'), 'ok')
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 |
|---|---|---|---|
| recent allowed preferred | b | b | Passed |
| current retained | a | a | Passed |
| default allowed | a | a | Passed |
| default forbidden | None | None | Passed |
| no workspaces | None | None | Passed |
| skip many inaccessible recent | ok | ok | Passed |
SHA-256 / b0cc5b87aa896e1064282b413ef789b84d951b9fe7cfe7e697fe1cff57d788f3
Verification & scope
This models the stated application policy only; no browser or framework conformance is claimed. 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:41:00.427852+00:00.
Case digest / 2376fe055c7712e16c25c269185e32e3ed4b03ebd675ecd103b96b98ae643526