FA-24786 / Client state / Open access
Preference reset is serialized as a null assignment instead of removing the override · case 01
Preference reset is serialized as a null assignment instead of removing the override.
ROOT CAUSE
The faulty implementation violates Device preference patches explicitly remove absent overrides and set added or type/value-changed overrides. Null remains a set value; removals precede sets in each mapping insertion order.
VERIFIED REPAIR
Device preference patches explicitly remove absent overrides and set added or type/value-changed overrides. Null remains a set value; removals precede sets in each mapping insertion order.
Unsuccessful approach: The partial repair still violates at least one explicit regression oracle.
Case contract
Device preference patches explicitly remove absent overrides and set added or type/value-changed overrides. Null remains a set value; removals precede sets in each mapping insertion order.
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(before, after):
return [('set',k,after.get(k)) for k in before if before[k]!=after.get(k)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('delete override', solve({'theme':'dark'},{}), [('remove','theme')])
check('explicit null set', solve({}, {'theme':None}), [('set','theme',None)])
check('false vs zero', solve({'size':False},{'size':0}), [('set','size',0)])
check('unchanged', solve({'size':N},{'size':N}), [])
check('new value', solve({'size':1},{'size':N+1}), [('set','size',N+1)])
check('mixed removals additions', solve({'a':1,'b':2},{'b':2,'c':3}), [('remove','a'),('set','c',3)])
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 |
|---|---|---|---|
| delete override | [['set', 'theme', None]] | [['remove', 'theme']] | Failed |
| explicit null set | [] | [['set', 'theme', None]] | Failed |
| false vs zero | [] | [['set', 'size', 0]] | Failed |
| unchanged | [] | [] | Passed |
| new value | [['set', 'size', 2]] | [['set', 'size', 2]] | Passed |
| mixed removals additions | [['set', 'a', None]] | [['remove', 'a'], ['set', 'c', 3]] | Failed |
SHA-256 / 505214954fc4affdee17043577b789035aa9d2f4d780ccf90c8d94fd2ba09687
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(before, after):
return [('set',k,v) for k,v in after.items() if before.get(k)!=v]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('delete override', solve({'theme':'dark'},{}), [('remove','theme')])
check('explicit null set', solve({}, {'theme':None}), [('set','theme',None)])
check('false vs zero', solve({'size':False},{'size':0}), [('set','size',0)])
check('unchanged', solve({'size':N},{'size':N}), [])
check('new value', solve({'size':1},{'size':N+1}), [('set','size',N+1)])
check('mixed removals additions', solve({'a':1,'b':2},{'b':2,'c':3}), [('remove','a'),('set','c',3)])
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 |
|---|---|---|---|
| delete override | [] | [['remove', 'theme']] | Failed |
| explicit null set | [] | [['set', 'theme', None]] | Failed |
| false vs zero | [] | [['set', 'size', 0]] | Failed |
| unchanged | [] | [] | Passed |
| new value | [['set', 'size', 2]] | [['set', 'size', 2]] | Passed |
| mixed removals additions | [['set', 'c', 3]] | [['remove', 'a'], ['set', 'c', 3]] | Failed |
SHA-256 / f0e21d411f58db92c5c4aa633cea4f2954b89f75e3e6e32fbdd4091f290fce41
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(before, after):
return [('remove',k) for k in before if k not in after]+[('set',k,v) for k,v in after.items() if k not in before or type(before[k])!=type(v) or before[k]!=v]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('delete override', solve({'theme':'dark'},{}), [('remove','theme')])
check('explicit null set', solve({}, {'theme':None}), [('set','theme',None)])
check('false vs zero', solve({'size':False},{'size':0}), [('set','size',0)])
check('unchanged', solve({'size':N},{'size':N}), [])
check('new value', solve({'size':1},{'size':N+1}), [('set','size',N+1)])
check('mixed removals additions', solve({'a':1,'b':2},{'b':2,'c':3}), [('remove','a'),('set','c',3)])
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 |
|---|---|---|---|
| delete override | [['remove', 'theme']] | [['remove', 'theme']] | Passed |
| explicit null set | [['set', 'theme', None]] | [['set', 'theme', None]] | Passed |
| false vs zero | [['set', 'size', 0]] | [['set', 'size', 0]] | Passed |
| unchanged | [] | [] | Passed |
| new value | [['set', 'size', 2]] | [['set', 'size', 2]] | Passed |
| mixed removals additions | [['remove', 'a'], ['set', 'c', 3]] | [['remove', 'a'], ['set', 'c', 3]] | Passed |
SHA-256 / 7a3d4116739c2b4de9655509169cb604e74cb3a963f0b841f764ae89e1626d5b
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.689296+00:00.
Case digest / 038768e702e15eeeb9387736b2e93063dfb46ee298962ec72f72fc2a9e91dc7d