FA-24016 / Client state / Open access
Observable client resource cache: Cache presence not truthiness · case 01
Cache presence not truthiness.
ROOT CAUSE
The cache-presence-not-truthiness client decision evaluates `bool(cache.get(key))` instead of `key in cache`.
VERIFIED REPAIR
Apply the modeled cache-presence-not-truthiness rule: `key in cache`.
Unsuccessful approach: The partial repair `cache.get(key) is not None` still violates the explicit fixture contract.
Case contract
Client cache presence is independent of payload truthiness. Stale data remains visible during background refresh; first-load status requires absent data. Observers retain resources, and invalidation is idempotent per key. Operation cache-presence-not-truthiness has the six explicit input/output oracles below.
Why this case matters
An offline client lifecycle model that isolates a state-management defect without DOM rendering or network services.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
cache, key, stale, observers, fetching, error = s
if operation == 'cache-presence-not-truthiness':
return bool(cache.get(key))
if operation == 'stale-data-remains-visible':
return cache.get(key)
if operation == 'initial-vs-background-loading':
return fetching and key not in cache
if operation == 'observed-stale-refetch':
return key in stale and bool(observers)
if operation == 'unobserved-garbage-collect':
return not observers and not fetching
if operation == 'resource-error-presence':
return error is not None
if operation == 'invalidate-one-resource':
return list(dict.fromkeys(stale+[key]))
if operation == 'evict-resource-key':
return {k:v for k,v in cache.items() if k!=key}
if operation == 'subscription-fanout-count':
return len(observers)
if operation == 'fetch-state-independent-of-data':
return 'fetching' if fetching else 'idle'
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('cache-presence-not-truthiness scenario 1', solve('cache-presence-not-truthiness', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), True)
check('cache-presence-not-truthiness scenario 2', solve('cache-presence-not-truthiness', ({'a':None},'a',[],[],False,'bad')), True)
check('cache-presence-not-truthiness scenario 3', solve('cache-presence-not-truthiness', ({},'a',[],['screen'],True,None)), False)
check('cache-presence-not-truthiness scenario 4', solve('cache-presence-not-truthiness', ({'a':0},'a',['a'],[],False,'')), True)
check('cache-presence-not-truthiness scenario 5', solve('cache-presence-not-truthiness', ({'b':N},'b',[],['one','two'],False,None)), True)
check('cache-presence-not-truthiness scenario 6', solve('cache-presence-not-truthiness', ({'a':[]},'a',['b'],[],True,None)), True)
check('stale-data-remains-visible scenario 1', solve('stale-data-remains-visible', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), N)
check('stale-data-remains-visible scenario 2', solve('stale-data-remains-visible', ({'a':None},'a',[],[],False,'bad')), None)
check('stale-data-remains-visible scenario 3', solve('stale-data-remains-visible', ({},'a',[],['screen'],True,None)), None)
check('stale-data-remains-visible scenario 4', solve('stale-data-remains-visible', ({'a':0},'a',['a'],[],False,'')), 0)
check('stale-data-remains-visible scenario 5', solve('stale-data-remains-visible', ({'b':N},'b',[],['one','two'],False,None)), N)
check('stale-data-remains-visible scenario 6', solve('stale-data-remains-visible', ({'a':[]},'a',['b'],[],True,None)), [])
check('initial-vs-background-loading scenario 1', solve('initial-vs-background-loading', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('initial-vs-background-loading scenario 2', solve('initial-vs-background-loading', ({'a':None},'a',[],[],False,'bad')), False)
check('initial-vs-background-loading scenario 3', solve('initial-vs-background-loading', ({},'a',[],['screen'],True,None)), True)
check('initial-vs-background-loading scenario 4', solve('initial-vs-background-loading', ({'a':0},'a',['a'],[],False,'')), False)
check('initial-vs-background-loading scenario 5', solve('initial-vs-background-loading', ({'b':N},'b',[],['one','two'],False,None)), False)
check('initial-vs-background-loading scenario 6', solve('initial-vs-background-loading', ({'a':[]},'a',['b'],[],True,None)), False)
check('observed-stale-refetch scenario 1', solve('observed-stale-refetch', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), True)
check('observed-stale-refetch scenario 2', solve('observed-stale-refetch', ({'a':None},'a',[],[],False,'bad')), False)
check('observed-stale-refetch scenario 3', solve('observed-stale-refetch', ({},'a',[],['screen'],True,None)), False)
check('observed-stale-refetch scenario 4', solve('observed-stale-refetch', ({'a':0},'a',['a'],[],False,'')), False)
check('observed-stale-refetch scenario 5', solve('observed-stale-refetch', ({'b':N},'b',[],['one','two'],False,None)), False)
check('observed-stale-refetch scenario 6', solve('observed-stale-refetch', ({'a':[]},'a',['b'],[],True,None)), False)
check('unobserved-garbage-collect scenario 1', solve('unobserved-garbage-collect', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('unobserved-garbage-collect scenario 2', solve('unobserved-garbage-collect', ({'a':None},'a',[],[],False,'bad')), True)
check('unobserved-garbage-collect scenario 3', solve('unobserved-garbage-collect', ({},'a',[],['screen'],True,None)), False)
check('unobserved-garbage-collect scenario 4', solve('unobserved-garbage-collect', ({'a':0},'a',['a'],[],False,'')), True)
check('unobserved-garbage-collect scenario 5', solve('unobserved-garbage-collect', ({'b':N},'b',[],['one','two'],False,None)), False)
check('unobserved-garbage-collect scenario 6', solve('unobserved-garbage-collect', ({'a':[]},'a',['b'],[],True,None)), False)
check('resource-error-presence scenario 1', solve('resource-error-presence', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('resource-error-presence scenario 2', solve('resource-error-presence', ({'a':None},'a',[],[],False,'bad')), True)
check('resource-error-presence scenario 3', solve('resource-error-presence', ({},'a',[],['screen'],True,None)), False)
check('resource-error-presence scenario 4', solve('resource-error-presence', ({'a':0},'a',['a'],[],False,'')), True)
check('resource-error-presence scenario 5', solve('resource-error-presence', ({'b':N},'b',[],['one','two'],False,None)), False)
check('resource-error-presence scenario 6', solve('resource-error-presence', ({'a':[]},'a',['b'],[],True,None)), False)
check('invalidate-one-resource scenario 1', solve('invalidate-one-resource', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), ['a'])
check('invalidate-one-resource scenario 2', solve('invalidate-one-resource', ({'a':None},'a',[],[],False,'bad')), ['a'])
check('invalidate-one-resource scenario 3', solve('invalidate-one-resource', ({},'a',[],['screen'],True,None)), ['a'])
check('invalidate-one-resource scenario 4', solve('invalidate-one-resource', ({'a':0},'a',['a'],[],False,'')), ['a'])
check('invalidate-one-resource scenario 5', solve('invalidate-one-resource', ({'b':N},'b',[],['one','two'],False,None)), ['b'])
check('invalidate-one-resource scenario 6', solve('invalidate-one-resource', ({'a':[]},'a',['b'],[],True,None)), ['b','a'])
check('evict-resource-key scenario 1', solve('evict-resource-key', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), {'b':0})
check('evict-resource-key scenario 2', solve('evict-resource-key', ({'a':None},'a',[],[],False,'bad')), {})
check('evict-resource-key scenario 3', solve('evict-resource-key', ({},'a',[],['screen'],True,None)), {})
check('evict-resource-key scenario 4', solve('evict-resource-key', ({'a':0},'a',['a'],[],False,'')), {})
check('evict-resource-key scenario 5', solve('evict-resource-key', ({'b':N},'b',[],['one','two'],False,None)), {})
check('evict-resource-key scenario 6', solve('evict-resource-key', ({'a':[]},'a',['b'],[],True,None)), {})
check('subscription-fanout-count scenario 1', solve('subscription-fanout-count', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), 1)
check('subscription-fanout-count scenario 2', solve('subscription-fanout-count', ({'a':None},'a',[],[],False,'bad')), 0)
check('subscription-fanout-count scenario 3', solve('subscription-fanout-count', ({},'a',[],['screen'],True,None)), 1)
check('subscription-fanout-count scenario 4', solve('subscription-fanout-count', ({'a':0},'a',['a'],[],False,'')), 0)
check('subscription-fanout-count scenario 5', solve('subscription-fanout-count', ({'b':N},'b',[],['one','two'],False,None)), 2)
check('subscription-fanout-count scenario 6', solve('subscription-fanout-count', ({'a':[]},'a',['b'],[],True,None)), 0)
check('fetch-state-independent-of-data scenario 1', solve('fetch-state-independent-of-data', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), 'fetching')
check('fetch-state-independent-of-data scenario 2', solve('fetch-state-independent-of-data', ({'a':None},'a',[],[],False,'bad')), 'idle')
check('fetch-state-independent-of-data scenario 3', solve('fetch-state-independent-of-data', ({},'a',[],['screen'],True,None)), 'fetching')
check('fetch-state-independent-of-data scenario 4', solve('fetch-state-independent-of-data', ({'a':0},'a',['a'],[],False,'')), 'idle')
check('fetch-state-independent-of-data scenario 5', solve('fetch-state-independent-of-data', ({'b':N},'b',[],['one','two'],False,None)), 'idle')
check('fetch-state-independent-of-data scenario 6', solve('fetch-state-independent-of-data', ({'a':[]},'a',['b'],[],True,None)), 'fetching')
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 |
|---|---|---|---|
| cache-presence-not-truthiness scenario 1 | True | True | Passed |
| cache-presence-not-truthiness scenario 2 | False | True | Failed |
| cache-presence-not-truthiness scenario 3 | False | False | Passed |
| cache-presence-not-truthiness scenario 4 | False | True | Failed |
| cache-presence-not-truthiness scenario 5 | True | True | Passed |
| cache-presence-not-truthiness scenario 6 | False | True | Failed |
| stale-data-remains-visible scenario 1 | 1 | 1 | Passed |
| stale-data-remains-visible scenario 2 | None | None | Passed |
| stale-data-remains-visible scenario 3 | None | None | Passed |
| stale-data-remains-visible scenario 4 | 0 | 0 | Passed |
| stale-data-remains-visible scenario 5 | 1 | 1 | Passed |
| stale-data-remains-visible scenario 6 | [] | [] | Passed |
| initial-vs-background-loading scenario 1 | False | False | Passed |
| initial-vs-background-loading scenario 2 | False | False | Passed |
| initial-vs-background-loading scenario 3 | True | True | Passed |
| initial-vs-background-loading scenario 4 | False | False | Passed |
| initial-vs-background-loading scenario 5 | False | False | Passed |
| initial-vs-background-loading scenario 6 | False | False | Passed |
| observed-stale-refetch scenario 1 | True | True | Passed |
| observed-stale-refetch scenario 2 | False | False | Passed |
| observed-stale-refetch scenario 3 | False | False | Passed |
| observed-stale-refetch scenario 4 | False | False | Passed |
| observed-stale-refetch scenario 5 | False | False | Passed |
| observed-stale-refetch scenario 6 | False | False | Passed |
| unobserved-garbage-collect scenario 1 | False | False | Passed |
| unobserved-garbage-collect scenario 2 | True | True | Passed |
| unobserved-garbage-collect scenario 3 | False | False | Passed |
| unobserved-garbage-collect scenario 4 | True | True | Passed |
| unobserved-garbage-collect scenario 5 | False | False | Passed |
| unobserved-garbage-collect scenario 6 | False | False | Passed |
| resource-error-presence scenario 1 | False | False | Passed |
| resource-error-presence scenario 2 | True | True | Passed |
| resource-error-presence scenario 3 | False | False | Passed |
| resource-error-presence scenario 4 | True | True | Passed |
| resource-error-presence scenario 5 | False | False | Passed |
| resource-error-presence scenario 6 | False | False | Passed |
| invalidate-one-resource scenario 1 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 2 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 3 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 4 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 5 | ['b'] | ['b'] | Passed |
| invalidate-one-resource scenario 6 | ['b', 'a'] | ['b', 'a'] | Passed |
| evict-resource-key scenario 1 | {'b': 0} | {'b': 0} | Passed |
| evict-resource-key scenario 2 | {} | {} | Passed |
| evict-resource-key scenario 3 | {} | {} | Passed |
| evict-resource-key scenario 4 | {} | {} | Passed |
| evict-resource-key scenario 5 | {} | {} | Passed |
| evict-resource-key scenario 6 | {} | {} | Passed |
| subscription-fanout-count scenario 1 | 1 | 1 | Passed |
| subscription-fanout-count scenario 2 | 0 | 0 | Passed |
| subscription-fanout-count scenario 3 | 1 | 1 | Passed |
| subscription-fanout-count scenario 4 | 0 | 0 | Passed |
| subscription-fanout-count scenario 5 | 2 | 2 | Passed |
| subscription-fanout-count scenario 6 | 0 | 0 | Passed |
| fetch-state-independent-of-data scenario 1 | fetching | fetching | Passed |
| fetch-state-independent-of-data scenario 2 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 3 | fetching | fetching | Passed |
| fetch-state-independent-of-data scenario 4 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 5 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 6 | fetching | fetching | Passed |
SHA-256 / aa57981290c0ebd5aa8172188a08840683c7ec09f7676fce325a0048f4766998
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
cache, key, stale, observers, fetching, error = s
if operation == 'cache-presence-not-truthiness':
return cache.get(key) is not None
if operation == 'stale-data-remains-visible':
return cache.get(key)
if operation == 'initial-vs-background-loading':
return fetching and key not in cache
if operation == 'observed-stale-refetch':
return key in stale and bool(observers)
if operation == 'unobserved-garbage-collect':
return not observers and not fetching
if operation == 'resource-error-presence':
return error is not None
if operation == 'invalidate-one-resource':
return list(dict.fromkeys(stale+[key]))
if operation == 'evict-resource-key':
return {k:v for k,v in cache.items() if k!=key}
if operation == 'subscription-fanout-count':
return len(observers)
if operation == 'fetch-state-independent-of-data':
return 'fetching' if fetching else 'idle'
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('cache-presence-not-truthiness scenario 1', solve('cache-presence-not-truthiness', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), True)
check('cache-presence-not-truthiness scenario 2', solve('cache-presence-not-truthiness', ({'a':None},'a',[],[],False,'bad')), True)
check('cache-presence-not-truthiness scenario 3', solve('cache-presence-not-truthiness', ({},'a',[],['screen'],True,None)), False)
check('cache-presence-not-truthiness scenario 4', solve('cache-presence-not-truthiness', ({'a':0},'a',['a'],[],False,'')), True)
check('cache-presence-not-truthiness scenario 5', solve('cache-presence-not-truthiness', ({'b':N},'b',[],['one','two'],False,None)), True)
check('cache-presence-not-truthiness scenario 6', solve('cache-presence-not-truthiness', ({'a':[]},'a',['b'],[],True,None)), True)
check('stale-data-remains-visible scenario 1', solve('stale-data-remains-visible', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), N)
check('stale-data-remains-visible scenario 2', solve('stale-data-remains-visible', ({'a':None},'a',[],[],False,'bad')), None)
check('stale-data-remains-visible scenario 3', solve('stale-data-remains-visible', ({},'a',[],['screen'],True,None)), None)
check('stale-data-remains-visible scenario 4', solve('stale-data-remains-visible', ({'a':0},'a',['a'],[],False,'')), 0)
check('stale-data-remains-visible scenario 5', solve('stale-data-remains-visible', ({'b':N},'b',[],['one','two'],False,None)), N)
check('stale-data-remains-visible scenario 6', solve('stale-data-remains-visible', ({'a':[]},'a',['b'],[],True,None)), [])
check('initial-vs-background-loading scenario 1', solve('initial-vs-background-loading', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('initial-vs-background-loading scenario 2', solve('initial-vs-background-loading', ({'a':None},'a',[],[],False,'bad')), False)
check('initial-vs-background-loading scenario 3', solve('initial-vs-background-loading', ({},'a',[],['screen'],True,None)), True)
check('initial-vs-background-loading scenario 4', solve('initial-vs-background-loading', ({'a':0},'a',['a'],[],False,'')), False)
check('initial-vs-background-loading scenario 5', solve('initial-vs-background-loading', ({'b':N},'b',[],['one','two'],False,None)), False)
check('initial-vs-background-loading scenario 6', solve('initial-vs-background-loading', ({'a':[]},'a',['b'],[],True,None)), False)
check('observed-stale-refetch scenario 1', solve('observed-stale-refetch', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), True)
check('observed-stale-refetch scenario 2', solve('observed-stale-refetch', ({'a':None},'a',[],[],False,'bad')), False)
check('observed-stale-refetch scenario 3', solve('observed-stale-refetch', ({},'a',[],['screen'],True,None)), False)
check('observed-stale-refetch scenario 4', solve('observed-stale-refetch', ({'a':0},'a',['a'],[],False,'')), False)
check('observed-stale-refetch scenario 5', solve('observed-stale-refetch', ({'b':N},'b',[],['one','two'],False,None)), False)
check('observed-stale-refetch scenario 6', solve('observed-stale-refetch', ({'a':[]},'a',['b'],[],True,None)), False)
check('unobserved-garbage-collect scenario 1', solve('unobserved-garbage-collect', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('unobserved-garbage-collect scenario 2', solve('unobserved-garbage-collect', ({'a':None},'a',[],[],False,'bad')), True)
check('unobserved-garbage-collect scenario 3', solve('unobserved-garbage-collect', ({},'a',[],['screen'],True,None)), False)
check('unobserved-garbage-collect scenario 4', solve('unobserved-garbage-collect', ({'a':0},'a',['a'],[],False,'')), True)
check('unobserved-garbage-collect scenario 5', solve('unobserved-garbage-collect', ({'b':N},'b',[],['one','two'],False,None)), False)
check('unobserved-garbage-collect scenario 6', solve('unobserved-garbage-collect', ({'a':[]},'a',['b'],[],True,None)), False)
check('resource-error-presence scenario 1', solve('resource-error-presence', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('resource-error-presence scenario 2', solve('resource-error-presence', ({'a':None},'a',[],[],False,'bad')), True)
check('resource-error-presence scenario 3', solve('resource-error-presence', ({},'a',[],['screen'],True,None)), False)
check('resource-error-presence scenario 4', solve('resource-error-presence', ({'a':0},'a',['a'],[],False,'')), True)
check('resource-error-presence scenario 5', solve('resource-error-presence', ({'b':N},'b',[],['one','two'],False,None)), False)
check('resource-error-presence scenario 6', solve('resource-error-presence', ({'a':[]},'a',['b'],[],True,None)), False)
check('invalidate-one-resource scenario 1', solve('invalidate-one-resource', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), ['a'])
check('invalidate-one-resource scenario 2', solve('invalidate-one-resource', ({'a':None},'a',[],[],False,'bad')), ['a'])
check('invalidate-one-resource scenario 3', solve('invalidate-one-resource', ({},'a',[],['screen'],True,None)), ['a'])
check('invalidate-one-resource scenario 4', solve('invalidate-one-resource', ({'a':0},'a',['a'],[],False,'')), ['a'])
check('invalidate-one-resource scenario 5', solve('invalidate-one-resource', ({'b':N},'b',[],['one','two'],False,None)), ['b'])
check('invalidate-one-resource scenario 6', solve('invalidate-one-resource', ({'a':[]},'a',['b'],[],True,None)), ['b','a'])
check('evict-resource-key scenario 1', solve('evict-resource-key', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), {'b':0})
check('evict-resource-key scenario 2', solve('evict-resource-key', ({'a':None},'a',[],[],False,'bad')), {})
check('evict-resource-key scenario 3', solve('evict-resource-key', ({},'a',[],['screen'],True,None)), {})
check('evict-resource-key scenario 4', solve('evict-resource-key', ({'a':0},'a',['a'],[],False,'')), {})
check('evict-resource-key scenario 5', solve('evict-resource-key', ({'b':N},'b',[],['one','two'],False,None)), {})
check('evict-resource-key scenario 6', solve('evict-resource-key', ({'a':[]},'a',['b'],[],True,None)), {})
check('subscription-fanout-count scenario 1', solve('subscription-fanout-count', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), 1)
check('subscription-fanout-count scenario 2', solve('subscription-fanout-count', ({'a':None},'a',[],[],False,'bad')), 0)
check('subscription-fanout-count scenario 3', solve('subscription-fanout-count', ({},'a',[],['screen'],True,None)), 1)
check('subscription-fanout-count scenario 4', solve('subscription-fanout-count', ({'a':0},'a',['a'],[],False,'')), 0)
check('subscription-fanout-count scenario 5', solve('subscription-fanout-count', ({'b':N},'b',[],['one','two'],False,None)), 2)
check('subscription-fanout-count scenario 6', solve('subscription-fanout-count', ({'a':[]},'a',['b'],[],True,None)), 0)
check('fetch-state-independent-of-data scenario 1', solve('fetch-state-independent-of-data', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), 'fetching')
check('fetch-state-independent-of-data scenario 2', solve('fetch-state-independent-of-data', ({'a':None},'a',[],[],False,'bad')), 'idle')
check('fetch-state-independent-of-data scenario 3', solve('fetch-state-independent-of-data', ({},'a',[],['screen'],True,None)), 'fetching')
check('fetch-state-independent-of-data scenario 4', solve('fetch-state-independent-of-data', ({'a':0},'a',['a'],[],False,'')), 'idle')
check('fetch-state-independent-of-data scenario 5', solve('fetch-state-independent-of-data', ({'b':N},'b',[],['one','two'],False,None)), 'idle')
check('fetch-state-independent-of-data scenario 6', solve('fetch-state-independent-of-data', ({'a':[]},'a',['b'],[],True,None)), 'fetching')
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 |
|---|---|---|---|
| cache-presence-not-truthiness scenario 1 | True | True | Passed |
| cache-presence-not-truthiness scenario 2 | False | True | Failed |
| cache-presence-not-truthiness scenario 3 | False | False | Passed |
| cache-presence-not-truthiness scenario 4 | True | True | Passed |
| cache-presence-not-truthiness scenario 5 | True | True | Passed |
| cache-presence-not-truthiness scenario 6 | True | True | Passed |
| stale-data-remains-visible scenario 1 | 1 | 1 | Passed |
| stale-data-remains-visible scenario 2 | None | None | Passed |
| stale-data-remains-visible scenario 3 | None | None | Passed |
| stale-data-remains-visible scenario 4 | 0 | 0 | Passed |
| stale-data-remains-visible scenario 5 | 1 | 1 | Passed |
| stale-data-remains-visible scenario 6 | [] | [] | Passed |
| initial-vs-background-loading scenario 1 | False | False | Passed |
| initial-vs-background-loading scenario 2 | False | False | Passed |
| initial-vs-background-loading scenario 3 | True | True | Passed |
| initial-vs-background-loading scenario 4 | False | False | Passed |
| initial-vs-background-loading scenario 5 | False | False | Passed |
| initial-vs-background-loading scenario 6 | False | False | Passed |
| observed-stale-refetch scenario 1 | True | True | Passed |
| observed-stale-refetch scenario 2 | False | False | Passed |
| observed-stale-refetch scenario 3 | False | False | Passed |
| observed-stale-refetch scenario 4 | False | False | Passed |
| observed-stale-refetch scenario 5 | False | False | Passed |
| observed-stale-refetch scenario 6 | False | False | Passed |
| unobserved-garbage-collect scenario 1 | False | False | Passed |
| unobserved-garbage-collect scenario 2 | True | True | Passed |
| unobserved-garbage-collect scenario 3 | False | False | Passed |
| unobserved-garbage-collect scenario 4 | True | True | Passed |
| unobserved-garbage-collect scenario 5 | False | False | Passed |
| unobserved-garbage-collect scenario 6 | False | False | Passed |
| resource-error-presence scenario 1 | False | False | Passed |
| resource-error-presence scenario 2 | True | True | Passed |
| resource-error-presence scenario 3 | False | False | Passed |
| resource-error-presence scenario 4 | True | True | Passed |
| resource-error-presence scenario 5 | False | False | Passed |
| resource-error-presence scenario 6 | False | False | Passed |
| invalidate-one-resource scenario 1 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 2 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 3 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 4 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 5 | ['b'] | ['b'] | Passed |
| invalidate-one-resource scenario 6 | ['b', 'a'] | ['b', 'a'] | Passed |
| evict-resource-key scenario 1 | {'b': 0} | {'b': 0} | Passed |
| evict-resource-key scenario 2 | {} | {} | Passed |
| evict-resource-key scenario 3 | {} | {} | Passed |
| evict-resource-key scenario 4 | {} | {} | Passed |
| evict-resource-key scenario 5 | {} | {} | Passed |
| evict-resource-key scenario 6 | {} | {} | Passed |
| subscription-fanout-count scenario 1 | 1 | 1 | Passed |
| subscription-fanout-count scenario 2 | 0 | 0 | Passed |
| subscription-fanout-count scenario 3 | 1 | 1 | Passed |
| subscription-fanout-count scenario 4 | 0 | 0 | Passed |
| subscription-fanout-count scenario 5 | 2 | 2 | Passed |
| subscription-fanout-count scenario 6 | 0 | 0 | Passed |
| fetch-state-independent-of-data scenario 1 | fetching | fetching | Passed |
| fetch-state-independent-of-data scenario 2 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 3 | fetching | fetching | Passed |
| fetch-state-independent-of-data scenario 4 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 5 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 6 | fetching | fetching | Passed |
SHA-256 / ce7b4f2dfaaf39109cd117d2a559723ec5517634bfc96f7cf7014e860a6fd55c
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
cache, key, stale, observers, fetching, error = s
if operation == 'cache-presence-not-truthiness':
return key in cache
if operation == 'stale-data-remains-visible':
return cache.get(key)
if operation == 'initial-vs-background-loading':
return fetching and key not in cache
if operation == 'observed-stale-refetch':
return key in stale and bool(observers)
if operation == 'unobserved-garbage-collect':
return not observers and not fetching
if operation == 'resource-error-presence':
return error is not None
if operation == 'invalidate-one-resource':
return list(dict.fromkeys(stale+[key]))
if operation == 'evict-resource-key':
return {k:v for k,v in cache.items() if k!=key}
if operation == 'subscription-fanout-count':
return len(observers)
if operation == 'fetch-state-independent-of-data':
return 'fetching' if fetching else 'idle'
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('cache-presence-not-truthiness scenario 1', solve('cache-presence-not-truthiness', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), True)
check('cache-presence-not-truthiness scenario 2', solve('cache-presence-not-truthiness', ({'a':None},'a',[],[],False,'bad')), True)
check('cache-presence-not-truthiness scenario 3', solve('cache-presence-not-truthiness', ({},'a',[],['screen'],True,None)), False)
check('cache-presence-not-truthiness scenario 4', solve('cache-presence-not-truthiness', ({'a':0},'a',['a'],[],False,'')), True)
check('cache-presence-not-truthiness scenario 5', solve('cache-presence-not-truthiness', ({'b':N},'b',[],['one','two'],False,None)), True)
check('cache-presence-not-truthiness scenario 6', solve('cache-presence-not-truthiness', ({'a':[]},'a',['b'],[],True,None)), True)
check('stale-data-remains-visible scenario 1', solve('stale-data-remains-visible', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), N)
check('stale-data-remains-visible scenario 2', solve('stale-data-remains-visible', ({'a':None},'a',[],[],False,'bad')), None)
check('stale-data-remains-visible scenario 3', solve('stale-data-remains-visible', ({},'a',[],['screen'],True,None)), None)
check('stale-data-remains-visible scenario 4', solve('stale-data-remains-visible', ({'a':0},'a',['a'],[],False,'')), 0)
check('stale-data-remains-visible scenario 5', solve('stale-data-remains-visible', ({'b':N},'b',[],['one','two'],False,None)), N)
check('stale-data-remains-visible scenario 6', solve('stale-data-remains-visible', ({'a':[]},'a',['b'],[],True,None)), [])
check('initial-vs-background-loading scenario 1', solve('initial-vs-background-loading', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('initial-vs-background-loading scenario 2', solve('initial-vs-background-loading', ({'a':None},'a',[],[],False,'bad')), False)
check('initial-vs-background-loading scenario 3', solve('initial-vs-background-loading', ({},'a',[],['screen'],True,None)), True)
check('initial-vs-background-loading scenario 4', solve('initial-vs-background-loading', ({'a':0},'a',['a'],[],False,'')), False)
check('initial-vs-background-loading scenario 5', solve('initial-vs-background-loading', ({'b':N},'b',[],['one','two'],False,None)), False)
check('initial-vs-background-loading scenario 6', solve('initial-vs-background-loading', ({'a':[]},'a',['b'],[],True,None)), False)
check('observed-stale-refetch scenario 1', solve('observed-stale-refetch', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), True)
check('observed-stale-refetch scenario 2', solve('observed-stale-refetch', ({'a':None},'a',[],[],False,'bad')), False)
check('observed-stale-refetch scenario 3', solve('observed-stale-refetch', ({},'a',[],['screen'],True,None)), False)
check('observed-stale-refetch scenario 4', solve('observed-stale-refetch', ({'a':0},'a',['a'],[],False,'')), False)
check('observed-stale-refetch scenario 5', solve('observed-stale-refetch', ({'b':N},'b',[],['one','two'],False,None)), False)
check('observed-stale-refetch scenario 6', solve('observed-stale-refetch', ({'a':[]},'a',['b'],[],True,None)), False)
check('unobserved-garbage-collect scenario 1', solve('unobserved-garbage-collect', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('unobserved-garbage-collect scenario 2', solve('unobserved-garbage-collect', ({'a':None},'a',[],[],False,'bad')), True)
check('unobserved-garbage-collect scenario 3', solve('unobserved-garbage-collect', ({},'a',[],['screen'],True,None)), False)
check('unobserved-garbage-collect scenario 4', solve('unobserved-garbage-collect', ({'a':0},'a',['a'],[],False,'')), True)
check('unobserved-garbage-collect scenario 5', solve('unobserved-garbage-collect', ({'b':N},'b',[],['one','two'],False,None)), False)
check('unobserved-garbage-collect scenario 6', solve('unobserved-garbage-collect', ({'a':[]},'a',['b'],[],True,None)), False)
check('resource-error-presence scenario 1', solve('resource-error-presence', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), False)
check('resource-error-presence scenario 2', solve('resource-error-presence', ({'a':None},'a',[],[],False,'bad')), True)
check('resource-error-presence scenario 3', solve('resource-error-presence', ({},'a',[],['screen'],True,None)), False)
check('resource-error-presence scenario 4', solve('resource-error-presence', ({'a':0},'a',['a'],[],False,'')), True)
check('resource-error-presence scenario 5', solve('resource-error-presence', ({'b':N},'b',[],['one','two'],False,None)), False)
check('resource-error-presence scenario 6', solve('resource-error-presence', ({'a':[]},'a',['b'],[],True,None)), False)
check('invalidate-one-resource scenario 1', solve('invalidate-one-resource', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), ['a'])
check('invalidate-one-resource scenario 2', solve('invalidate-one-resource', ({'a':None},'a',[],[],False,'bad')), ['a'])
check('invalidate-one-resource scenario 3', solve('invalidate-one-resource', ({},'a',[],['screen'],True,None)), ['a'])
check('invalidate-one-resource scenario 4', solve('invalidate-one-resource', ({'a':0},'a',['a'],[],False,'')), ['a'])
check('invalidate-one-resource scenario 5', solve('invalidate-one-resource', ({'b':N},'b',[],['one','two'],False,None)), ['b'])
check('invalidate-one-resource scenario 6', solve('invalidate-one-resource', ({'a':[]},'a',['b'],[],True,None)), ['b','a'])
check('evict-resource-key scenario 1', solve('evict-resource-key', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), {'b':0})
check('evict-resource-key scenario 2', solve('evict-resource-key', ({'a':None},'a',[],[],False,'bad')), {})
check('evict-resource-key scenario 3', solve('evict-resource-key', ({},'a',[],['screen'],True,None)), {})
check('evict-resource-key scenario 4', solve('evict-resource-key', ({'a':0},'a',['a'],[],False,'')), {})
check('evict-resource-key scenario 5', solve('evict-resource-key', ({'b':N},'b',[],['one','two'],False,None)), {})
check('evict-resource-key scenario 6', solve('evict-resource-key', ({'a':[]},'a',['b'],[],True,None)), {})
check('subscription-fanout-count scenario 1', solve('subscription-fanout-count', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), 1)
check('subscription-fanout-count scenario 2', solve('subscription-fanout-count', ({'a':None},'a',[],[],False,'bad')), 0)
check('subscription-fanout-count scenario 3', solve('subscription-fanout-count', ({},'a',[],['screen'],True,None)), 1)
check('subscription-fanout-count scenario 4', solve('subscription-fanout-count', ({'a':0},'a',['a'],[],False,'')), 0)
check('subscription-fanout-count scenario 5', solve('subscription-fanout-count', ({'b':N},'b',[],['one','two'],False,None)), 2)
check('subscription-fanout-count scenario 6', solve('subscription-fanout-count', ({'a':[]},'a',['b'],[],True,None)), 0)
check('fetch-state-independent-of-data scenario 1', solve('fetch-state-independent-of-data', ({'a':N,'b':0},'a',['a'],['screen'],True,None)), 'fetching')
check('fetch-state-independent-of-data scenario 2', solve('fetch-state-independent-of-data', ({'a':None},'a',[],[],False,'bad')), 'idle')
check('fetch-state-independent-of-data scenario 3', solve('fetch-state-independent-of-data', ({},'a',[],['screen'],True,None)), 'fetching')
check('fetch-state-independent-of-data scenario 4', solve('fetch-state-independent-of-data', ({'a':0},'a',['a'],[],False,'')), 'idle')
check('fetch-state-independent-of-data scenario 5', solve('fetch-state-independent-of-data', ({'b':N},'b',[],['one','two'],False,None)), 'idle')
check('fetch-state-independent-of-data scenario 6', solve('fetch-state-independent-of-data', ({'a':[]},'a',['b'],[],True,None)), 'fetching')
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 |
|---|---|---|---|
| cache-presence-not-truthiness scenario 1 | True | True | Passed |
| cache-presence-not-truthiness scenario 2 | True | True | Passed |
| cache-presence-not-truthiness scenario 3 | False | False | Passed |
| cache-presence-not-truthiness scenario 4 | True | True | Passed |
| cache-presence-not-truthiness scenario 5 | True | True | Passed |
| cache-presence-not-truthiness scenario 6 | True | True | Passed |
| stale-data-remains-visible scenario 1 | 1 | 1 | Passed |
| stale-data-remains-visible scenario 2 | None | None | Passed |
| stale-data-remains-visible scenario 3 | None | None | Passed |
| stale-data-remains-visible scenario 4 | 0 | 0 | Passed |
| stale-data-remains-visible scenario 5 | 1 | 1 | Passed |
| stale-data-remains-visible scenario 6 | [] | [] | Passed |
| initial-vs-background-loading scenario 1 | False | False | Passed |
| initial-vs-background-loading scenario 2 | False | False | Passed |
| initial-vs-background-loading scenario 3 | True | True | Passed |
| initial-vs-background-loading scenario 4 | False | False | Passed |
| initial-vs-background-loading scenario 5 | False | False | Passed |
| initial-vs-background-loading scenario 6 | False | False | Passed |
| observed-stale-refetch scenario 1 | True | True | Passed |
| observed-stale-refetch scenario 2 | False | False | Passed |
| observed-stale-refetch scenario 3 | False | False | Passed |
| observed-stale-refetch scenario 4 | False | False | Passed |
| observed-stale-refetch scenario 5 | False | False | Passed |
| observed-stale-refetch scenario 6 | False | False | Passed |
| unobserved-garbage-collect scenario 1 | False | False | Passed |
| unobserved-garbage-collect scenario 2 | True | True | Passed |
| unobserved-garbage-collect scenario 3 | False | False | Passed |
| unobserved-garbage-collect scenario 4 | True | True | Passed |
| unobserved-garbage-collect scenario 5 | False | False | Passed |
| unobserved-garbage-collect scenario 6 | False | False | Passed |
| resource-error-presence scenario 1 | False | False | Passed |
| resource-error-presence scenario 2 | True | True | Passed |
| resource-error-presence scenario 3 | False | False | Passed |
| resource-error-presence scenario 4 | True | True | Passed |
| resource-error-presence scenario 5 | False | False | Passed |
| resource-error-presence scenario 6 | False | False | Passed |
| invalidate-one-resource scenario 1 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 2 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 3 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 4 | ['a'] | ['a'] | Passed |
| invalidate-one-resource scenario 5 | ['b'] | ['b'] | Passed |
| invalidate-one-resource scenario 6 | ['b', 'a'] | ['b', 'a'] | Passed |
| evict-resource-key scenario 1 | {'b': 0} | {'b': 0} | Passed |
| evict-resource-key scenario 2 | {} | {} | Passed |
| evict-resource-key scenario 3 | {} | {} | Passed |
| evict-resource-key scenario 4 | {} | {} | Passed |
| evict-resource-key scenario 5 | {} | {} | Passed |
| evict-resource-key scenario 6 | {} | {} | Passed |
| subscription-fanout-count scenario 1 | 1 | 1 | Passed |
| subscription-fanout-count scenario 2 | 0 | 0 | Passed |
| subscription-fanout-count scenario 3 | 1 | 1 | Passed |
| subscription-fanout-count scenario 4 | 0 | 0 | Passed |
| subscription-fanout-count scenario 5 | 2 | 2 | Passed |
| subscription-fanout-count scenario 6 | 0 | 0 | Passed |
| fetch-state-independent-of-data scenario 1 | fetching | fetching | Passed |
| fetch-state-independent-of-data scenario 2 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 3 | fetching | fetching | Passed |
| fetch-state-independent-of-data scenario 4 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 5 | idle | idle | Passed |
| fetch-state-independent-of-data scenario 6 | fetching | fetching | Passed |
SHA-256 / e79a3c9a981ba7a63d0965f25b8bf4d487396f28e28b977a600cf3a5ee458194
Verification & scope
Only the explicitly specified operations and finite deterministic records are modeled; 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:40:53.232916+00:00.
Case digest / fa21f75ae491532d4a8ca4755e662039b76bee06a4b7baec41d5d7006ea7e686