FA-23536 / Client state / Open access
Persisted client snapshot admission: Future version readonly · case 01
Future version readonly.
ROOT CAUSE
The future-version-readonly client decision evaluates `version!=current` instead of `version>current`.
VERIFIED REPAIR
Apply the modeled future-version-readonly rule: `version>current`.
Unsuccessful approach: The partial repair `version>=current` still violates the explicit fixture contract.
Case contract
Persist only declared nontransient keys. Missing defaults are filled without replacing null/falsy data. Older schema versions migrate through each intermediate step; future versions stay read-only and keep their version stamp. Operation future-version-readonly 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):
stored, version, current, allowed, defaults, transient = s
if operation == 'unknown-field-projection':
return {k:v for k,v in stored.items() if k in allowed}
if operation == 'default-overlay-order':
return {**defaults,**stored}
if operation == 'future-version-readonly':
return version!=current
if operation == 'migration-step-list':
return list(range(version,current)) if version<=current else []
if operation == 'transient-exclusion':
return {k:v for k,v in stored.items() if k not in transient}
if operation == 'missing-default-identification':
return sorted(set(defaults)-set(stored))
if operation == 'nullable-persisted-value':
return stored['a'] if 'a' in stored else defaults.get('a')
if operation == 'write-version-stamp':
return max(version,current)
if operation == 'schema-fallback-policy':
return 'read-only' if version>current else ('migrate' if version<current else 'load')
if operation == 'serialized-field-order':
return sorted(k for k in stored if k in allowed and k not in transient)
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('unknown-field-projection scenario 1', solve('unknown-field-projection', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False})
check('unknown-field-projection scenario 2', solve('unknown-field-projection', ({},2,2,['a'],{'a':N},[])), {})
check('unknown-field-projection scenario 3', solve('unknown-field-projection', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None})
check('unknown-field-projection scenario 4', solve('unknown-field-projection', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N})
check('unknown-field-projection scenario 5', solve('unknown-field-projection', ({'a':'','b':True},2,2,[],{},[])), {})
check('unknown-field-projection scenario 6', solve('unknown-field-projection', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N})
check('default-overlay-order scenario 1', solve('default-overlay-order', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False,'temp':7})
check('default-overlay-order scenario 2', solve('default-overlay-order', ({},2,2,['a'],{'a':N},[])), {'a':N})
check('default-overlay-order scenario 3', solve('default-overlay-order', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None,'extra':1})
check('default-overlay-order scenario 4', solve('default-overlay-order', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N,'a':0})
check('default-overlay-order scenario 5', solve('default-overlay-order', ({'a':'','b':True},2,2,[],{},[])), {'a':'','b':True})
check('default-overlay-order scenario 6', solve('default-overlay-order', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N,'temp':1})
check('future-version-readonly scenario 1', solve('future-version-readonly', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), False)
check('future-version-readonly scenario 2', solve('future-version-readonly', ({},2,2,['a'],{'a':N},[])), False)
check('future-version-readonly scenario 3', solve('future-version-readonly', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), True)
check('future-version-readonly scenario 4', solve('future-version-readonly', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), False)
check('future-version-readonly scenario 5', solve('future-version-readonly', ({'a':'','b':True},2,2,[],{},[])), False)
check('future-version-readonly scenario 6', solve('future-version-readonly', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), False)
check('migration-step-list scenario 1', solve('migration-step-list', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), [1])
check('migration-step-list scenario 2', solve('migration-step-list', ({},2,2,['a'],{'a':N},[])), [])
check('migration-step-list scenario 3', solve('migration-step-list', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), [])
check('migration-step-list scenario 4', solve('migration-step-list', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), [0,1])
check('migration-step-list scenario 5', solve('migration-step-list', ({'a':'','b':True},2,2,[],{},[])), [])
check('migration-step-list scenario 6', solve('migration-step-list', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), [])
check('transient-exclusion scenario 1', solve('transient-exclusion', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False})
check('transient-exclusion scenario 2', solve('transient-exclusion', ({},2,2,['a'],{'a':N},[])), {})
check('transient-exclusion scenario 3', solve('transient-exclusion', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None})
check('transient-exclusion scenario 4', solve('transient-exclusion', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N})
check('transient-exclusion scenario 5', solve('transient-exclusion', ({'a':'','b':True},2,2,[],{},[])), {'a':'','b':True})
check('transient-exclusion scenario 6', solve('transient-exclusion', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N})
check('missing-default-identification scenario 1', solve('missing-default-identification', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), [])
check('missing-default-identification scenario 2', solve('missing-default-identification', ({},2,2,['a'],{'a':N},[])), ['a'])
check('missing-default-identification scenario 3', solve('missing-default-identification', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), [])
check('missing-default-identification scenario 4', solve('missing-default-identification', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), [])
check('missing-default-identification scenario 5', solve('missing-default-identification', ({'a':'','b':True},2,2,[],{},[])), [])
check('missing-default-identification scenario 6', solve('missing-default-identification', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), [])
check('nullable-persisted-value scenario 1', solve('nullable-persisted-value', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), N)
check('nullable-persisted-value scenario 2', solve('nullable-persisted-value', ({},2,2,['a'],{'a':N},[])), N)
check('nullable-persisted-value scenario 3', solve('nullable-persisted-value', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), None)
check('nullable-persisted-value scenario 4', solve('nullable-persisted-value', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 0)
check('nullable-persisted-value scenario 5', solve('nullable-persisted-value', ({'a':'','b':True},2,2,[],{},[])), '')
check('nullable-persisted-value scenario 6', solve('nullable-persisted-value', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), N)
check('write-version-stamp scenario 1', solve('write-version-stamp', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), 2)
check('write-version-stamp scenario 2', solve('write-version-stamp', ({},2,2,['a'],{'a':N},[])), 2)
check('write-version-stamp scenario 3', solve('write-version-stamp', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), 3)
check('write-version-stamp scenario 4', solve('write-version-stamp', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 2)
check('write-version-stamp scenario 5', solve('write-version-stamp', ({'a':'','b':True},2,2,[],{},[])), 2)
check('write-version-stamp scenario 6', solve('write-version-stamp', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), 1)
check('schema-fallback-policy scenario 1', solve('schema-fallback-policy', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), 'migrate')
check('schema-fallback-policy scenario 2', solve('schema-fallback-policy', ({},2,2,['a'],{'a':N},[])), 'load')
check('schema-fallback-policy scenario 3', solve('schema-fallback-policy', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), 'read-only')
check('schema-fallback-policy scenario 4', solve('schema-fallback-policy', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 'migrate')
check('schema-fallback-policy scenario 5', solve('schema-fallback-policy', ({'a':'','b':True},2,2,[],{},[])), 'load')
check('schema-fallback-policy scenario 6', solve('schema-fallback-policy', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), 'load')
check('serialized-field-order scenario 1', solve('serialized-field-order', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), ['a','b'])
check('serialized-field-order scenario 2', solve('serialized-field-order', ({},2,2,['a'],{'a':N},[])), [])
check('serialized-field-order scenario 3', solve('serialized-field-order', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), ['a'])
check('serialized-field-order scenario 4', solve('serialized-field-order', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), ['b'])
check('serialized-field-order scenario 5', solve('serialized-field-order', ({'a':'','b':True},2,2,[],{},[])), [])
check('serialized-field-order scenario 6', solve('serialized-field-order', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), ['a'])
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 |
|---|---|---|---|
| unknown-field-projection scenario 1 | {'a': 1, 'b': False} | {'a': 1, 'b': False} | Passed |
| unknown-field-projection scenario 2 | {} | {} | Passed |
| unknown-field-projection scenario 3 | {'a': None} | {'a': None} | Passed |
| unknown-field-projection scenario 4 | {'b': 1} | {'b': 1} | Passed |
| unknown-field-projection scenario 5 | {} | {} | Passed |
| unknown-field-projection scenario 6 | {'a': 1} | {'a': 1} | Passed |
| default-overlay-order scenario 1 | {'a': 1, 'b': False, 'temp': 7} | {'a': 1, 'b': False, 'temp': 7} | Passed |
| default-overlay-order scenario 2 | {'a': 1} | {'a': 1} | Passed |
| default-overlay-order scenario 3 | {'a': None, 'extra': 1} | {'a': None, 'extra': 1} | Passed |
| default-overlay-order scenario 4 | {'a': 0, 'b': 1} | {'a': 0, 'b': 1} | Passed |
| default-overlay-order scenario 5 | {'a': '', 'b': True} | {'a': '', 'b': True} | Passed |
| default-overlay-order scenario 6 | {'a': 1, 'temp': 1} | {'a': 1, 'temp': 1} | Passed |
| future-version-readonly scenario 1 | True | False | Failed |
| future-version-readonly scenario 2 | False | False | Passed |
| future-version-readonly scenario 3 | True | True | Passed |
| future-version-readonly scenario 4 | True | False | Failed |
| future-version-readonly scenario 5 | False | False | Passed |
| future-version-readonly scenario 6 | False | False | Passed |
| migration-step-list scenario 1 | [1] | [1] | Passed |
| migration-step-list scenario 2 | [] | [] | Passed |
| migration-step-list scenario 3 | [] | [] | Passed |
| migration-step-list scenario 4 | [0, 1] | [0, 1] | Passed |
| migration-step-list scenario 5 | [] | [] | Passed |
| migration-step-list scenario 6 | [] | [] | Passed |
| transient-exclusion scenario 1 | {'a': 1, 'b': False} | {'a': 1, 'b': False} | Passed |
| transient-exclusion scenario 2 | {} | {} | Passed |
| transient-exclusion scenario 3 | {'a': None} | {'a': None} | Passed |
| transient-exclusion scenario 4 | {'b': 1} | {'b': 1} | Passed |
| transient-exclusion scenario 5 | {'a': '', 'b': True} | {'a': '', 'b': True} | Passed |
| transient-exclusion scenario 6 | {'a': 1} | {'a': 1} | Passed |
| missing-default-identification scenario 1 | [] | [] | Passed |
| missing-default-identification scenario 2 | ['a'] | ['a'] | Passed |
| missing-default-identification scenario 3 | [] | [] | Passed |
| missing-default-identification scenario 4 | [] | [] | Passed |
| missing-default-identification scenario 5 | [] | [] | Passed |
| missing-default-identification scenario 6 | [] | [] | Passed |
| nullable-persisted-value scenario 1 | 1 | 1 | Passed |
| nullable-persisted-value scenario 2 | 1 | 1 | Passed |
| nullable-persisted-value scenario 3 | None | None | Passed |
| nullable-persisted-value scenario 4 | 0 | 0 | Passed |
| nullable-persisted-value scenario 5 | | | Passed |
| nullable-persisted-value scenario 6 | 1 | 1 | Passed |
| write-version-stamp scenario 1 | 2 | 2 | Passed |
| write-version-stamp scenario 2 | 2 | 2 | Passed |
| write-version-stamp scenario 3 | 3 | 3 | Passed |
| write-version-stamp scenario 4 | 2 | 2 | Passed |
| write-version-stamp scenario 5 | 2 | 2 | Passed |
| write-version-stamp scenario 6 | 1 | 1 | Passed |
| schema-fallback-policy scenario 1 | migrate | migrate | Passed |
| schema-fallback-policy scenario 2 | load | load | Passed |
| schema-fallback-policy scenario 3 | read-only | read-only | Passed |
| schema-fallback-policy scenario 4 | migrate | migrate | Passed |
| schema-fallback-policy scenario 5 | load | load | Passed |
| schema-fallback-policy scenario 6 | load | load | Passed |
| serialized-field-order scenario 1 | ['a', 'b'] | ['a', 'b'] | Passed |
| serialized-field-order scenario 2 | [] | [] | Passed |
| serialized-field-order scenario 3 | ['a'] | ['a'] | Passed |
| serialized-field-order scenario 4 | ['b'] | ['b'] | Passed |
| serialized-field-order scenario 5 | [] | [] | Passed |
| serialized-field-order scenario 6 | ['a'] | ['a'] | Passed |
SHA-256 / bdf8dda7038b3a483468cf667a744dda5d1d4453915c532b5e045b025ce0c490
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
stored, version, current, allowed, defaults, transient = s
if operation == 'unknown-field-projection':
return {k:v for k,v in stored.items() if k in allowed}
if operation == 'default-overlay-order':
return {**defaults,**stored}
if operation == 'future-version-readonly':
return version>=current
if operation == 'migration-step-list':
return list(range(version,current)) if version<=current else []
if operation == 'transient-exclusion':
return {k:v for k,v in stored.items() if k not in transient}
if operation == 'missing-default-identification':
return sorted(set(defaults)-set(stored))
if operation == 'nullable-persisted-value':
return stored['a'] if 'a' in stored else defaults.get('a')
if operation == 'write-version-stamp':
return max(version,current)
if operation == 'schema-fallback-policy':
return 'read-only' if version>current else ('migrate' if version<current else 'load')
if operation == 'serialized-field-order':
return sorted(k for k in stored if k in allowed and k not in transient)
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('unknown-field-projection scenario 1', solve('unknown-field-projection', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False})
check('unknown-field-projection scenario 2', solve('unknown-field-projection', ({},2,2,['a'],{'a':N},[])), {})
check('unknown-field-projection scenario 3', solve('unknown-field-projection', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None})
check('unknown-field-projection scenario 4', solve('unknown-field-projection', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N})
check('unknown-field-projection scenario 5', solve('unknown-field-projection', ({'a':'','b':True},2,2,[],{},[])), {})
check('unknown-field-projection scenario 6', solve('unknown-field-projection', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N})
check('default-overlay-order scenario 1', solve('default-overlay-order', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False,'temp':7})
check('default-overlay-order scenario 2', solve('default-overlay-order', ({},2,2,['a'],{'a':N},[])), {'a':N})
check('default-overlay-order scenario 3', solve('default-overlay-order', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None,'extra':1})
check('default-overlay-order scenario 4', solve('default-overlay-order', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N,'a':0})
check('default-overlay-order scenario 5', solve('default-overlay-order', ({'a':'','b':True},2,2,[],{},[])), {'a':'','b':True})
check('default-overlay-order scenario 6', solve('default-overlay-order', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N,'temp':1})
check('future-version-readonly scenario 1', solve('future-version-readonly', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), False)
check('future-version-readonly scenario 2', solve('future-version-readonly', ({},2,2,['a'],{'a':N},[])), False)
check('future-version-readonly scenario 3', solve('future-version-readonly', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), True)
check('future-version-readonly scenario 4', solve('future-version-readonly', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), False)
check('future-version-readonly scenario 5', solve('future-version-readonly', ({'a':'','b':True},2,2,[],{},[])), False)
check('future-version-readonly scenario 6', solve('future-version-readonly', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), False)
check('migration-step-list scenario 1', solve('migration-step-list', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), [1])
check('migration-step-list scenario 2', solve('migration-step-list', ({},2,2,['a'],{'a':N},[])), [])
check('migration-step-list scenario 3', solve('migration-step-list', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), [])
check('migration-step-list scenario 4', solve('migration-step-list', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), [0,1])
check('migration-step-list scenario 5', solve('migration-step-list', ({'a':'','b':True},2,2,[],{},[])), [])
check('migration-step-list scenario 6', solve('migration-step-list', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), [])
check('transient-exclusion scenario 1', solve('transient-exclusion', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False})
check('transient-exclusion scenario 2', solve('transient-exclusion', ({},2,2,['a'],{'a':N},[])), {})
check('transient-exclusion scenario 3', solve('transient-exclusion', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None})
check('transient-exclusion scenario 4', solve('transient-exclusion', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N})
check('transient-exclusion scenario 5', solve('transient-exclusion', ({'a':'','b':True},2,2,[],{},[])), {'a':'','b':True})
check('transient-exclusion scenario 6', solve('transient-exclusion', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N})
check('missing-default-identification scenario 1', solve('missing-default-identification', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), [])
check('missing-default-identification scenario 2', solve('missing-default-identification', ({},2,2,['a'],{'a':N},[])), ['a'])
check('missing-default-identification scenario 3', solve('missing-default-identification', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), [])
check('missing-default-identification scenario 4', solve('missing-default-identification', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), [])
check('missing-default-identification scenario 5', solve('missing-default-identification', ({'a':'','b':True},2,2,[],{},[])), [])
check('missing-default-identification scenario 6', solve('missing-default-identification', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), [])
check('nullable-persisted-value scenario 1', solve('nullable-persisted-value', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), N)
check('nullable-persisted-value scenario 2', solve('nullable-persisted-value', ({},2,2,['a'],{'a':N},[])), N)
check('nullable-persisted-value scenario 3', solve('nullable-persisted-value', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), None)
check('nullable-persisted-value scenario 4', solve('nullable-persisted-value', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 0)
check('nullable-persisted-value scenario 5', solve('nullable-persisted-value', ({'a':'','b':True},2,2,[],{},[])), '')
check('nullable-persisted-value scenario 6', solve('nullable-persisted-value', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), N)
check('write-version-stamp scenario 1', solve('write-version-stamp', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), 2)
check('write-version-stamp scenario 2', solve('write-version-stamp', ({},2,2,['a'],{'a':N},[])), 2)
check('write-version-stamp scenario 3', solve('write-version-stamp', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), 3)
check('write-version-stamp scenario 4', solve('write-version-stamp', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 2)
check('write-version-stamp scenario 5', solve('write-version-stamp', ({'a':'','b':True},2,2,[],{},[])), 2)
check('write-version-stamp scenario 6', solve('write-version-stamp', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), 1)
check('schema-fallback-policy scenario 1', solve('schema-fallback-policy', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), 'migrate')
check('schema-fallback-policy scenario 2', solve('schema-fallback-policy', ({},2,2,['a'],{'a':N},[])), 'load')
check('schema-fallback-policy scenario 3', solve('schema-fallback-policy', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), 'read-only')
check('schema-fallback-policy scenario 4', solve('schema-fallback-policy', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 'migrate')
check('schema-fallback-policy scenario 5', solve('schema-fallback-policy', ({'a':'','b':True},2,2,[],{},[])), 'load')
check('schema-fallback-policy scenario 6', solve('schema-fallback-policy', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), 'load')
check('serialized-field-order scenario 1', solve('serialized-field-order', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), ['a','b'])
check('serialized-field-order scenario 2', solve('serialized-field-order', ({},2,2,['a'],{'a':N},[])), [])
check('serialized-field-order scenario 3', solve('serialized-field-order', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), ['a'])
check('serialized-field-order scenario 4', solve('serialized-field-order', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), ['b'])
check('serialized-field-order scenario 5', solve('serialized-field-order', ({'a':'','b':True},2,2,[],{},[])), [])
check('serialized-field-order scenario 6', solve('serialized-field-order', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), ['a'])
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 |
|---|---|---|---|
| unknown-field-projection scenario 1 | {'a': 1, 'b': False} | {'a': 1, 'b': False} | Passed |
| unknown-field-projection scenario 2 | {} | {} | Passed |
| unknown-field-projection scenario 3 | {'a': None} | {'a': None} | Passed |
| unknown-field-projection scenario 4 | {'b': 1} | {'b': 1} | Passed |
| unknown-field-projection scenario 5 | {} | {} | Passed |
| unknown-field-projection scenario 6 | {'a': 1} | {'a': 1} | Passed |
| default-overlay-order scenario 1 | {'a': 1, 'b': False, 'temp': 7} | {'a': 1, 'b': False, 'temp': 7} | Passed |
| default-overlay-order scenario 2 | {'a': 1} | {'a': 1} | Passed |
| default-overlay-order scenario 3 | {'a': None, 'extra': 1} | {'a': None, 'extra': 1} | Passed |
| default-overlay-order scenario 4 | {'a': 0, 'b': 1} | {'a': 0, 'b': 1} | Passed |
| default-overlay-order scenario 5 | {'a': '', 'b': True} | {'a': '', 'b': True} | Passed |
| default-overlay-order scenario 6 | {'a': 1, 'temp': 1} | {'a': 1, 'temp': 1} | Passed |
| future-version-readonly scenario 1 | False | False | Passed |
| future-version-readonly scenario 2 | True | False | Failed |
| future-version-readonly scenario 3 | True | True | Passed |
| future-version-readonly scenario 4 | False | False | Passed |
| future-version-readonly scenario 5 | True | False | Failed |
| future-version-readonly scenario 6 | True | False | Failed |
| migration-step-list scenario 1 | [1] | [1] | Passed |
| migration-step-list scenario 2 | [] | [] | Passed |
| migration-step-list scenario 3 | [] | [] | Passed |
| migration-step-list scenario 4 | [0, 1] | [0, 1] | Passed |
| migration-step-list scenario 5 | [] | [] | Passed |
| migration-step-list scenario 6 | [] | [] | Passed |
| transient-exclusion scenario 1 | {'a': 1, 'b': False} | {'a': 1, 'b': False} | Passed |
| transient-exclusion scenario 2 | {} | {} | Passed |
| transient-exclusion scenario 3 | {'a': None} | {'a': None} | Passed |
| transient-exclusion scenario 4 | {'b': 1} | {'b': 1} | Passed |
| transient-exclusion scenario 5 | {'a': '', 'b': True} | {'a': '', 'b': True} | Passed |
| transient-exclusion scenario 6 | {'a': 1} | {'a': 1} | Passed |
| missing-default-identification scenario 1 | [] | [] | Passed |
| missing-default-identification scenario 2 | ['a'] | ['a'] | Passed |
| missing-default-identification scenario 3 | [] | [] | Passed |
| missing-default-identification scenario 4 | [] | [] | Passed |
| missing-default-identification scenario 5 | [] | [] | Passed |
| missing-default-identification scenario 6 | [] | [] | Passed |
| nullable-persisted-value scenario 1 | 1 | 1 | Passed |
| nullable-persisted-value scenario 2 | 1 | 1 | Passed |
| nullable-persisted-value scenario 3 | None | None | Passed |
| nullable-persisted-value scenario 4 | 0 | 0 | Passed |
| nullable-persisted-value scenario 5 | | | Passed |
| nullable-persisted-value scenario 6 | 1 | 1 | Passed |
| write-version-stamp scenario 1 | 2 | 2 | Passed |
| write-version-stamp scenario 2 | 2 | 2 | Passed |
| write-version-stamp scenario 3 | 3 | 3 | Passed |
| write-version-stamp scenario 4 | 2 | 2 | Passed |
| write-version-stamp scenario 5 | 2 | 2 | Passed |
| write-version-stamp scenario 6 | 1 | 1 | Passed |
| schema-fallback-policy scenario 1 | migrate | migrate | Passed |
| schema-fallback-policy scenario 2 | load | load | Passed |
| schema-fallback-policy scenario 3 | read-only | read-only | Passed |
| schema-fallback-policy scenario 4 | migrate | migrate | Passed |
| schema-fallback-policy scenario 5 | load | load | Passed |
| schema-fallback-policy scenario 6 | load | load | Passed |
| serialized-field-order scenario 1 | ['a', 'b'] | ['a', 'b'] | Passed |
| serialized-field-order scenario 2 | [] | [] | Passed |
| serialized-field-order scenario 3 | ['a'] | ['a'] | Passed |
| serialized-field-order scenario 4 | ['b'] | ['b'] | Passed |
| serialized-field-order scenario 5 | [] | [] | Passed |
| serialized-field-order scenario 6 | ['a'] | ['a'] | Passed |
SHA-256 / dd3f097a670f4714c5bb35c614701c448fd20bd024627492991c807a996629b0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
stored, version, current, allowed, defaults, transient = s
if operation == 'unknown-field-projection':
return {k:v for k,v in stored.items() if k in allowed}
if operation == 'default-overlay-order':
return {**defaults,**stored}
if operation == 'future-version-readonly':
return version>current
if operation == 'migration-step-list':
return list(range(version,current)) if version<=current else []
if operation == 'transient-exclusion':
return {k:v for k,v in stored.items() if k not in transient}
if operation == 'missing-default-identification':
return sorted(set(defaults)-set(stored))
if operation == 'nullable-persisted-value':
return stored['a'] if 'a' in stored else defaults.get('a')
if operation == 'write-version-stamp':
return max(version,current)
if operation == 'schema-fallback-policy':
return 'read-only' if version>current else ('migrate' if version<current else 'load')
if operation == 'serialized-field-order':
return sorted(k for k in stored if k in allowed and k not in transient)
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('unknown-field-projection scenario 1', solve('unknown-field-projection', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False})
check('unknown-field-projection scenario 2', solve('unknown-field-projection', ({},2,2,['a'],{'a':N},[])), {})
check('unknown-field-projection scenario 3', solve('unknown-field-projection', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None})
check('unknown-field-projection scenario 4', solve('unknown-field-projection', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N})
check('unknown-field-projection scenario 5', solve('unknown-field-projection', ({'a':'','b':True},2,2,[],{},[])), {})
check('unknown-field-projection scenario 6', solve('unknown-field-projection', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N})
check('default-overlay-order scenario 1', solve('default-overlay-order', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False,'temp':7})
check('default-overlay-order scenario 2', solve('default-overlay-order', ({},2,2,['a'],{'a':N},[])), {'a':N})
check('default-overlay-order scenario 3', solve('default-overlay-order', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None,'extra':1})
check('default-overlay-order scenario 4', solve('default-overlay-order', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N,'a':0})
check('default-overlay-order scenario 5', solve('default-overlay-order', ({'a':'','b':True},2,2,[],{},[])), {'a':'','b':True})
check('default-overlay-order scenario 6', solve('default-overlay-order', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N,'temp':1})
check('future-version-readonly scenario 1', solve('future-version-readonly', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), False)
check('future-version-readonly scenario 2', solve('future-version-readonly', ({},2,2,['a'],{'a':N},[])), False)
check('future-version-readonly scenario 3', solve('future-version-readonly', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), True)
check('future-version-readonly scenario 4', solve('future-version-readonly', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), False)
check('future-version-readonly scenario 5', solve('future-version-readonly', ({'a':'','b':True},2,2,[],{},[])), False)
check('future-version-readonly scenario 6', solve('future-version-readonly', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), False)
check('migration-step-list scenario 1', solve('migration-step-list', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), [1])
check('migration-step-list scenario 2', solve('migration-step-list', ({},2,2,['a'],{'a':N},[])), [])
check('migration-step-list scenario 3', solve('migration-step-list', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), [])
check('migration-step-list scenario 4', solve('migration-step-list', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), [0,1])
check('migration-step-list scenario 5', solve('migration-step-list', ({'a':'','b':True},2,2,[],{},[])), [])
check('migration-step-list scenario 6', solve('migration-step-list', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), [])
check('transient-exclusion scenario 1', solve('transient-exclusion', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), {'a':N,'b':False})
check('transient-exclusion scenario 2', solve('transient-exclusion', ({},2,2,['a'],{'a':N},[])), {})
check('transient-exclusion scenario 3', solve('transient-exclusion', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), {'a':None})
check('transient-exclusion scenario 4', solve('transient-exclusion', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), {'b':N})
check('transient-exclusion scenario 5', solve('transient-exclusion', ({'a':'','b':True},2,2,[],{},[])), {'a':'','b':True})
check('transient-exclusion scenario 6', solve('transient-exclusion', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), {'a':N})
check('missing-default-identification scenario 1', solve('missing-default-identification', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), [])
check('missing-default-identification scenario 2', solve('missing-default-identification', ({},2,2,['a'],{'a':N},[])), ['a'])
check('missing-default-identification scenario 3', solve('missing-default-identification', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), [])
check('missing-default-identification scenario 4', solve('missing-default-identification', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), [])
check('missing-default-identification scenario 5', solve('missing-default-identification', ({'a':'','b':True},2,2,[],{},[])), [])
check('missing-default-identification scenario 6', solve('missing-default-identification', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), [])
check('nullable-persisted-value scenario 1', solve('nullable-persisted-value', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), N)
check('nullable-persisted-value scenario 2', solve('nullable-persisted-value', ({},2,2,['a'],{'a':N},[])), N)
check('nullable-persisted-value scenario 3', solve('nullable-persisted-value', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), None)
check('nullable-persisted-value scenario 4', solve('nullable-persisted-value', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 0)
check('nullable-persisted-value scenario 5', solve('nullable-persisted-value', ({'a':'','b':True},2,2,[],{},[])), '')
check('nullable-persisted-value scenario 6', solve('nullable-persisted-value', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), N)
check('write-version-stamp scenario 1', solve('write-version-stamp', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), 2)
check('write-version-stamp scenario 2', solve('write-version-stamp', ({},2,2,['a'],{'a':N},[])), 2)
check('write-version-stamp scenario 3', solve('write-version-stamp', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), 3)
check('write-version-stamp scenario 4', solve('write-version-stamp', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 2)
check('write-version-stamp scenario 5', solve('write-version-stamp', ({'a':'','b':True},2,2,[],{},[])), 2)
check('write-version-stamp scenario 6', solve('write-version-stamp', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), 1)
check('schema-fallback-policy scenario 1', solve('schema-fallback-policy', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), 'migrate')
check('schema-fallback-policy scenario 2', solve('schema-fallback-policy', ({},2,2,['a'],{'a':N},[])), 'load')
check('schema-fallback-policy scenario 3', solve('schema-fallback-policy', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), 'read-only')
check('schema-fallback-policy scenario 4', solve('schema-fallback-policy', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), 'migrate')
check('schema-fallback-policy scenario 5', solve('schema-fallback-policy', ({'a':'','b':True},2,2,[],{},[])), 'load')
check('schema-fallback-policy scenario 6', solve('schema-fallback-policy', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), 'load')
check('serialized-field-order scenario 1', solve('serialized-field-order', ({'a':N,'b':False,'temp':7},1,2,['a','b'],{'a':0,'b':True},['temp'])), ['a','b'])
check('serialized-field-order scenario 2', solve('serialized-field-order', ({},2,2,['a'],{'a':N},[])), [])
check('serialized-field-order scenario 3', solve('serialized-field-order', ({'a':None,'extra':1},3,2,['a'],{'a':N},['extra'])), ['a'])
check('serialized-field-order scenario 4', solve('serialized-field-order', ({'a':0,'b':N},0,2,['b'],{'b':9},['a'])), ['b'])
check('serialized-field-order scenario 5', solve('serialized-field-order', ({'a':'','b':True},2,2,[],{},[])), [])
check('serialized-field-order scenario 6', solve('serialized-field-order', ({'a':N,'temp':1},1,1,['a'],{},['temp'])), ['a'])
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 |
|---|---|---|---|
| unknown-field-projection scenario 1 | {'a': 1, 'b': False} | {'a': 1, 'b': False} | Passed |
| unknown-field-projection scenario 2 | {} | {} | Passed |
| unknown-field-projection scenario 3 | {'a': None} | {'a': None} | Passed |
| unknown-field-projection scenario 4 | {'b': 1} | {'b': 1} | Passed |
| unknown-field-projection scenario 5 | {} | {} | Passed |
| unknown-field-projection scenario 6 | {'a': 1} | {'a': 1} | Passed |
| default-overlay-order scenario 1 | {'a': 1, 'b': False, 'temp': 7} | {'a': 1, 'b': False, 'temp': 7} | Passed |
| default-overlay-order scenario 2 | {'a': 1} | {'a': 1} | Passed |
| default-overlay-order scenario 3 | {'a': None, 'extra': 1} | {'a': None, 'extra': 1} | Passed |
| default-overlay-order scenario 4 | {'a': 0, 'b': 1} | {'a': 0, 'b': 1} | Passed |
| default-overlay-order scenario 5 | {'a': '', 'b': True} | {'a': '', 'b': True} | Passed |
| default-overlay-order scenario 6 | {'a': 1, 'temp': 1} | {'a': 1, 'temp': 1} | Passed |
| future-version-readonly scenario 1 | False | False | Passed |
| future-version-readonly scenario 2 | False | False | Passed |
| future-version-readonly scenario 3 | True | True | Passed |
| future-version-readonly scenario 4 | False | False | Passed |
| future-version-readonly scenario 5 | False | False | Passed |
| future-version-readonly scenario 6 | False | False | Passed |
| migration-step-list scenario 1 | [1] | [1] | Passed |
| migration-step-list scenario 2 | [] | [] | Passed |
| migration-step-list scenario 3 | [] | [] | Passed |
| migration-step-list scenario 4 | [0, 1] | [0, 1] | Passed |
| migration-step-list scenario 5 | [] | [] | Passed |
| migration-step-list scenario 6 | [] | [] | Passed |
| transient-exclusion scenario 1 | {'a': 1, 'b': False} | {'a': 1, 'b': False} | Passed |
| transient-exclusion scenario 2 | {} | {} | Passed |
| transient-exclusion scenario 3 | {'a': None} | {'a': None} | Passed |
| transient-exclusion scenario 4 | {'b': 1} | {'b': 1} | Passed |
| transient-exclusion scenario 5 | {'a': '', 'b': True} | {'a': '', 'b': True} | Passed |
| transient-exclusion scenario 6 | {'a': 1} | {'a': 1} | Passed |
| missing-default-identification scenario 1 | [] | [] | Passed |
| missing-default-identification scenario 2 | ['a'] | ['a'] | Passed |
| missing-default-identification scenario 3 | [] | [] | Passed |
| missing-default-identification scenario 4 | [] | [] | Passed |
| missing-default-identification scenario 5 | [] | [] | Passed |
| missing-default-identification scenario 6 | [] | [] | Passed |
| nullable-persisted-value scenario 1 | 1 | 1 | Passed |
| nullable-persisted-value scenario 2 | 1 | 1 | Passed |
| nullable-persisted-value scenario 3 | None | None | Passed |
| nullable-persisted-value scenario 4 | 0 | 0 | Passed |
| nullable-persisted-value scenario 5 | | | Passed |
| nullable-persisted-value scenario 6 | 1 | 1 | Passed |
| write-version-stamp scenario 1 | 2 | 2 | Passed |
| write-version-stamp scenario 2 | 2 | 2 | Passed |
| write-version-stamp scenario 3 | 3 | 3 | Passed |
| write-version-stamp scenario 4 | 2 | 2 | Passed |
| write-version-stamp scenario 5 | 2 | 2 | Passed |
| write-version-stamp scenario 6 | 1 | 1 | Passed |
| schema-fallback-policy scenario 1 | migrate | migrate | Passed |
| schema-fallback-policy scenario 2 | load | load | Passed |
| schema-fallback-policy scenario 3 | read-only | read-only | Passed |
| schema-fallback-policy scenario 4 | migrate | migrate | Passed |
| schema-fallback-policy scenario 5 | load | load | Passed |
| schema-fallback-policy scenario 6 | load | load | Passed |
| serialized-field-order scenario 1 | ['a', 'b'] | ['a', 'b'] | Passed |
| serialized-field-order scenario 2 | [] | [] | Passed |
| serialized-field-order scenario 3 | ['a'] | ['a'] | Passed |
| serialized-field-order scenario 4 | ['b'] | ['b'] | Passed |
| serialized-field-order scenario 5 | [] | [] | Passed |
| serialized-field-order scenario 6 | ['a'] | ['a'] | Passed |
SHA-256 / da385ab115a80ae9393753f5da3f79c8eac83b1f27db61c76cf18fc3c1d62ec8
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:48.551347+00:00.
Case digest / 8910dca8e1e2354abc10005e2724d9cc41983e44039a98c820533aa56314c02e