FA-24831 / Client state / Open access
A resource observer receives fields that belong to another observer selector · case 01
A resource observer receives fields that belong to another observer selector.
ROOT CAUSE
The faulty implementation violates Each cache observer receives only its declared existing fields and is notified only when that projection differs from its own previous snapshot; missing fields differ from explicit null.
VERIFIED REPAIR
Each cache observer receives only its declared existing fields and is notified only when that projection differs from its own previous snapshot; missing fields differ from explicit null.
Unsuccessful approach: The partial repair still violates at least one explicit regression oracle.
Case contract
Each cache observer receives only its declared existing fields and is notified only when that projection differs from its own previous snapshot; missing fields differ from explicit null.
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(resource, observers, previous):
return [(name,dict(resource)) for name,fields in observers]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('selectors differ', solve({'a':N,'b':2},[('one',['a']),('two',['b'])],{}), [('one',{'a':N}),('two',{'b':2})])
check('unchanged observer suppressed', solve({'a':1},[('one',['a'])],{'one':{'a':1}}), [])
check('empty projection changed', solve({'a':1},[('one',['missing'])],{}), [('one',{})])
check('empty projection stable', solve({},[('one',[])],{'one':{}}), [])
check('missing vs null', solve({'a':None},[('one',['a'])],{'one':{}}), [('one',{'a':None})])
check('no observers', solve({'a':N},[],{}), [])
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 |
|---|---|---|---|
| selectors differ | [['one', {'a': 1, 'b': 2}], ['two', {'a': 1, 'b': 2}]] | [['one', {'a': 1}], ['two', {'b': 2}]] | Failed |
| unchanged observer suppressed | [['one', {'a': 1}]] | [] | Failed |
| empty projection changed | [['one', {'a': 1}]] | [['one', {}]] | Failed |
| empty projection stable | [['one', {}]] | [] | Failed |
| missing vs null | [['one', {'a': None}]] | [['one', {'a': None}]] | Passed |
| no observers | [] | [] | Passed |
SHA-256 / ea7c7a1e8da3b57e5c9a760b2ee9eea616e07c3b9031bd917a38183c7392418b
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(resource, observers, previous):
return [(name,{k:resource[k] for k in fields if k in resource}) for name,fields in observers]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('selectors differ', solve({'a':N,'b':2},[('one',['a']),('two',['b'])],{}), [('one',{'a':N}),('two',{'b':2})])
check('unchanged observer suppressed', solve({'a':1},[('one',['a'])],{'one':{'a':1}}), [])
check('empty projection changed', solve({'a':1},[('one',['missing'])],{}), [('one',{})])
check('empty projection stable', solve({},[('one',[])],{'one':{}}), [])
check('missing vs null', solve({'a':None},[('one',['a'])],{'one':{}}), [('one',{'a':None})])
check('no observers', solve({'a':N},[],{}), [])
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 |
|---|---|---|---|
| selectors differ | [['one', {'a': 1}], ['two', {'b': 2}]] | [['one', {'a': 1}], ['two', {'b': 2}]] | Passed |
| unchanged observer suppressed | [['one', {'a': 1}]] | [] | Failed |
| empty projection changed | [['one', {}]] | [['one', {}]] | Passed |
| empty projection stable | [['one', {}]] | [] | Failed |
| missing vs null | [['one', {'a': None}]] | [['one', {'a': None}]] | Passed |
| no observers | [] | [] | Passed |
SHA-256 / d0f0e846369dc1010296ceff9f13177618fd30daac90dabb84fb2323ea49334f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(resource, observers, previous):
return [(name,{k:resource[k] for k in fields if k in resource}) for name,fields in observers if {k:resource[k] for k in fields if k in resource}!=previous.get(name)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('selectors differ', solve({'a':N,'b':2},[('one',['a']),('two',['b'])],{}), [('one',{'a':N}),('two',{'b':2})])
check('unchanged observer suppressed', solve({'a':1},[('one',['a'])],{'one':{'a':1}}), [])
check('empty projection changed', solve({'a':1},[('one',['missing'])],{}), [('one',{})])
check('empty projection stable', solve({},[('one',[])],{'one':{}}), [])
check('missing vs null', solve({'a':None},[('one',['a'])],{'one':{}}), [('one',{'a':None})])
check('no observers', solve({'a':N},[],{}), [])
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 |
|---|---|---|---|
| selectors differ | [['one', {'a': 1}], ['two', {'b': 2}]] | [['one', {'a': 1}], ['two', {'b': 2}]] | Passed |
| unchanged observer suppressed | [] | [] | Passed |
| empty projection changed | [['one', {}]] | [['one', {}]] | Passed |
| empty projection stable | [] | [] | Passed |
| missing vs null | [['one', {'a': None}]] | [['one', {'a': None}]] | Passed |
| no observers | [] | [] | Passed |
SHA-256 / b4bd43db61659c07cca6e936650306e9d1327d6453778faded4a509a48e98a77
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:01.209249+00:00.
Case digest / b55b9077cf46909841a729c8083c3f2d94132e76a279f73a602c6e579de5b7a2