FAILURE MAP
← Case archive

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.

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

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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