FA-37166 / Table interactions / Open access
Table cell draft lifecycle: noncommit write · case 01
The table noncommit write result violates the stipulated table cell draft lifecycle contract.
ROOT CAUSE
The noncommit write decision uses "if event=='begin':" instead of "if event!='commit':".
VERIFIED REPAIR
Apply the complete noncommit write rule: if event!='commit':.
Unsuccessful approach: The attempted repair "if event not in ('commit','input'):" still loses a required part of the table contract.
Case contract
Cell drafts belong to a stable row-column pair and snapshot the original value and revision. Readonly cells cannot start/input/commit edits, cancellation discards the draft, commits validate required empty strings, reject stale revisions, and suppress unchanged writes.
Why this case matters
An offline table UI model isolates table cell draft lifecycle, including adversarial row/column relationships.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(row, column, draft, event, value, editable, validator, revision):
key=(row['id'],column)
state=dict(draft)
if event=='begin' and editable: state={'key':key,'base':row[column],'value':row[column],'revision':revision,'error':None}
if state.get('key')!=key: return {'draft':state,'write':None}
if event=='input' and editable: state['value']=value
if event=='cancel': return {'draft':{},'write':None}
if event=='begin': return {'draft':state,'write':None}
if not editable: return {'draft':state,'write':None}
if state['revision']!=revision: state['error']='conflict'; return {'draft':state,'write':None}
if validator=='required' and state['value']=='': state['error']='required'; return {'draft':state,'write':None}
if state['value']==state['base']: return {'draft':{},'write':None}
return {'draft':{},'write':{'row':row['id'],'column':column,'value':state['value'],'expected_revision':revision}}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('begin snapshot', solve({'id':'r','x':1}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 1, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 2:
check('begin snapshot', solve({'id':'r','x':2}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 2, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 3:
check('begin snapshot', solve({'id':'r','x':3}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 3, 'value': 3, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 4:
check('begin snapshot', solve({'id':'r','x':4}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 4, 'value': 4, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 5:
check('begin snapshot', solve({'id':'r','x':5}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 5, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
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 |
|---|---|---|---|
| begin snapshot | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 1}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 1}, 'write': None} | Passed |
| cancel draft | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
| wrong column | {'draft': {'base': 1, 'error': None, 'key': ['r', 'y'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'y'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| readonly input | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| stale revision | {'draft': {'base': 1, 'error': 'conflict', 'key': ['r', 'x'], 'revision': 2, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': 'conflict', 'key': ['r', 'x'], 'revision': 2, 'value': 2}, 'write': None} | Passed |
| required empty | {'draft': {'base': 1, 'error': 'required', 'key': ['r', 'x'], 'revision': 3, 'value': ''}, 'write': None} | {'draft': {'base': 1, 'error': 'required', 'key': ['r', 'x'], 'revision': 3, 'value': ''}, 'write': None} | Passed |
| zero valid | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 0}} | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 0}} | Passed |
| unchanged | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
| readonly commit | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| normal input | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 5}} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 5}, 'write': None} | Failed |
| readonly begin | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
SHA-256 / 830da1f534b8bbf6205e2c9e155f7292a95c2785e62e1f8b8f6bfb5d0465522c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(row, column, draft, event, value, editable, validator, revision):
key=(row['id'],column)
state=dict(draft)
if event=='begin' and editable: state={'key':key,'base':row[column],'value':row[column],'revision':revision,'error':None}
if state.get('key')!=key: return {'draft':state,'write':None}
if event=='input' and editable: state['value']=value
if event=='cancel': return {'draft':{},'write':None}
if event not in ('commit','input'): return {'draft':state,'write':None}
if not editable: return {'draft':state,'write':None}
if state['revision']!=revision: state['error']='conflict'; return {'draft':state,'write':None}
if validator=='required' and state['value']=='': state['error']='required'; return {'draft':state,'write':None}
if state['value']==state['base']: return {'draft':{},'write':None}
return {'draft':{},'write':{'row':row['id'],'column':column,'value':state['value'],'expected_revision':revision}}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('begin snapshot', solve({'id':'r','x':1}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 1, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 2:
check('begin snapshot', solve({'id':'r','x':2}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 2, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 3:
check('begin snapshot', solve({'id':'r','x':3}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 3, 'value': 3, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 4:
check('begin snapshot', solve({'id':'r','x':4}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 4, 'value': 4, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 5:
check('begin snapshot', solve({'id':'r','x':5}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 5, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
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 |
|---|---|---|---|
| begin snapshot | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 1}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 1}, 'write': None} | Passed |
| cancel draft | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
| wrong column | {'draft': {'base': 1, 'error': None, 'key': ['r', 'y'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'y'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| readonly input | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| stale revision | {'draft': {'base': 1, 'error': 'conflict', 'key': ['r', 'x'], 'revision': 2, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': 'conflict', 'key': ['r', 'x'], 'revision': 2, 'value': 2}, 'write': None} | Passed |
| required empty | {'draft': {'base': 1, 'error': 'required', 'key': ['r', 'x'], 'revision': 3, 'value': ''}, 'write': None} | {'draft': {'base': 1, 'error': 'required', 'key': ['r', 'x'], 'revision': 3, 'value': ''}, 'write': None} | Passed |
| zero valid | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 0}} | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 0}} | Passed |
| unchanged | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
| readonly commit | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| normal input | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 5}} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 5}, 'write': None} | Failed |
| readonly begin | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
SHA-256 / a842aa501116799dede5d322b8f85a643909fa2a00e3edb732c6c29c8a9c20b1
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(row, column, draft, event, value, editable, validator, revision):
key=(row['id'],column)
state=dict(draft)
if event=='begin' and editable: state={'key':key,'base':row[column],'value':row[column],'revision':revision,'error':None}
if state.get('key')!=key: return {'draft':state,'write':None}
if event=='input' and editable: state['value']=value
if event=='cancel': return {'draft':{},'write':None}
if event!='commit': return {'draft':state,'write':None}
if not editable: return {'draft':state,'write':None}
if state['revision']!=revision: state['error']='conflict'; return {'draft':state,'write':None}
if validator=='required' and state['value']=='': state['error']='required'; return {'draft':state,'write':None}
if state['value']==state['base']: return {'draft':{},'write':None}
return {'draft':{},'write':{'row':row['id'],'column':column,'value':state['value'],'expected_revision':revision}}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('begin snapshot', solve({'id':'r','x':1}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 1, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 2:
check('begin snapshot', solve({'id':'r','x':2}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 2, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 3:
check('begin snapshot', solve({'id':'r','x':3}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 3, 'value': 3, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 4:
check('begin snapshot', solve({'id':'r','x':4}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 4, 'value': 4, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
if N == 5:
check('begin snapshot', solve({'id':'r','x':5}, 'x', {}, 'begin', 'placeholder', True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 5, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('cancel draft', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'cancel', None, True, '', 3), {'draft': {}, 'write': None})
check('wrong column', solve({'id':'r','x':1}, 'x', {'key':('r','y'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'y'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('readonly input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 4, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('stale revision', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':2,'error':None}, 'commit', None, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 2, 'error': 'conflict'}, 'write': None})
check('required empty', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':'','revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': '', 'revision': 3, 'error': 'required'}, 'write': None})
check('zero valid', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':0,'revision':3,'error':None}, 'commit', None, True, 'required', 3), {'draft': {}, 'write': {'row': 'r', 'column': 'x', 'value': 0, 'expected_revision': 3}})
check('unchanged', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':1,'revision':3,'error':None}, 'commit', None, True, '', 3), {'draft': {}, 'write': None})
check('readonly commit', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'commit', None, False, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 2, 'revision': 3, 'error': None}, 'write': None})
check('normal input', solve({'id':'r','x':1}, 'x', {'key':('r','x'),'base':1,'value':2,'revision':3,'error':None}, 'input', 5, True, '', 3), {'draft': {'key': ('r', 'x'), 'base': 1, 'value': 5, 'revision': 3, 'error': None}, 'write': None})
check('readonly begin', solve({'id':'r','x':1}, 'x', {}, 'begin', None, False, '', 3), {'draft': {}, 'write': None})
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 |
|---|---|---|---|
| begin snapshot | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 1}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 1}, 'write': None} | Passed |
| cancel draft | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
| wrong column | {'draft': {'base': 1, 'error': None, 'key': ['r', 'y'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'y'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| readonly input | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| stale revision | {'draft': {'base': 1, 'error': 'conflict', 'key': ['r', 'x'], 'revision': 2, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': 'conflict', 'key': ['r', 'x'], 'revision': 2, 'value': 2}, 'write': None} | Passed |
| required empty | {'draft': {'base': 1, 'error': 'required', 'key': ['r', 'x'], 'revision': 3, 'value': ''}, 'write': None} | {'draft': {'base': 1, 'error': 'required', 'key': ['r', 'x'], 'revision': 3, 'value': ''}, 'write': None} | Passed |
| zero valid | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 0}} | {'draft': {}, 'write': {'column': 'x', 'expected_revision': 3, 'row': 'r', 'value': 0}} | Passed |
| unchanged | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
| readonly commit | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 2}, 'write': None} | Passed |
| normal input | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 5}, 'write': None} | {'draft': {'base': 1, 'error': None, 'key': ['r', 'x'], 'revision': 3, 'value': 5}, 'write': None} | Passed |
| readonly begin | {'draft': {}, 'write': None} | {'draft': {}, 'write': None} | Passed |
SHA-256 / 62e2482d3474b215c9479f83ee8555bbf90ff2e4df0a28a942c5e3bcd0a605c8
Verification & scope
Existing owned drafts contain base, value, revision, and error fields; the column exists in the row. Deterministic offline table UI model; no browser, DOM, framework, or standards 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:42:58.615227+00:00.
Case digest / 8149cd981a2d47d7ad364af0a38d26fa1fe49be685775b18828e6bc5e902c0a6