FAILURE MAP
← Case archive

FA-39016 / Tree accessibility / Open access

Inline branch rename transaction: Rename drops labels on unrelated tree rows · case 01

Rename drops labels on unrelated tree rows produces the wrong hierarchical widget state in a regression fixture.

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

ROOT CAUSE

The rename-branch contract is violated at `labels=dict(d['labels'])` by replacing it with `labels={}`.

VERIFIED REPAIR

Restore `labels=dict(d['labels'])` at this fault site while retaining the other tree state decisions.

Unsuccessful approach: The partial repair `labels={d['row']:d['labels'][d['row']]}` still violates a boundary or preservation case.

Case contract

Rename completion is applied only to the same row incarnation and edit session. Empty trimmed labels are rejected, duplicate sibling labels are rejected case-insensitively, and failure leaves editing active. Successful rename preserves expansion/selection and restores focus to the renamed row only when editing owned focus.

Why this case matters

Offline executable model of a hierarchical accessibility interaction; inputs are bounded and valid as stipulated. No browser, assistive technology, or normative ARIA conformance is claimed.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    current=d['session']==d['reply_session'] and d['incarnation']==d['reply_incarnation']
    label=d['text'].strip()
    nonempty=bool(label)
    duplicate=any(x!=d['row'] and name.casefold()==label.casefold() for x,name in d['siblings'])
    accepted=current and nonempty and not duplicate and d['server_ok']
    labels={}
    if accepted: labels[d['row']]=label
    editing=None if accepted else d['editing']
    error=None if accepted else ('invalid' if current and (not nonempty or duplicate) else d['error'])
    focus=d['row'] if accepted and d['focus']==d['editor'] else d['focus']
    return [labels,editing,error,focus,d['expanded'],d['selected']]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('rename', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 1, 'reply_session': 0, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 3, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 2: [('rename', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 2', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 2, 'reply_session': 1, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 4, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 2', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 3: [('rename', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 3', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 3, 'reply_session': 2, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 5, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 3', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 4: [('rename', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 4', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 4, 'reply_session': 3, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 6, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 4', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 5: [('rename', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 5', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 5, 'reply_session': 4, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 7, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 5', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
rename[{'b': 'New 1'}, None, None, 'b', ['b'], ['a']][{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]Failed
stale session[{}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Failed
recycled row[{}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Failed
empty draft[{}, 'b', 'invalid', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]Failed
collision[{}, 'b', 'invalid', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]Failed
unchanged label[{'b': 'Old'}, None, None, 'b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]Failed
server failure[{}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Failed
outside focus[{'b': 'New 1'}, None, None, 'q', ['b'], ['a']][{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'q', ['b'], ['a']]Failed

SHA-256 / 3874c7bbb1a3c76de6fa25a2d9e3f80e3c95847d4df4a8dc9a286eff38b4de24

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    current=d['session']==d['reply_session'] and d['incarnation']==d['reply_incarnation']
    label=d['text'].strip()
    nonempty=bool(label)
    duplicate=any(x!=d['row'] and name.casefold()==label.casefold() for x,name in d['siblings'])
    accepted=current and nonempty and not duplicate and d['server_ok']
    labels={d['row']:d['labels'][d['row']]}
    if accepted: labels[d['row']]=label
    editing=None if accepted else d['editing']
    error=None if accepted else ('invalid' if current and (not nonempty or duplicate) else d['error'])
    focus=d['row'] if accepted and d['focus']==d['editor'] else d['focus']
    return [labels,editing,error,focus,d['expanded'],d['selected']]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('rename', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 1, 'reply_session': 0, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 3, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 2: [('rename', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 2', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 2, 'reply_session': 1, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 4, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 2', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 3: [('rename', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 3', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 3, 'reply_session': 2, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 5, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 3', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 4: [('rename', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 4', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 4, 'reply_session': 3, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 6, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 4', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 5: [('rename', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 5', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 5, 'reply_session': 4, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 7, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 5', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
rename[{'b': 'New 1'}, None, None, 'b', ['b'], ['a']][{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]Failed
stale session[{'b': 'Old'}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Failed
recycled row[{'b': 'Old'}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Failed
empty draft[{'b': 'Old'}, 'b', 'invalid', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]Failed
collision[{'b': 'Old'}, 'b', 'invalid', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]Failed
unchanged label[{'b': 'Old'}, None, None, 'b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]Failed
server failure[{'b': 'Old'}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Failed
outside focus[{'b': 'New 1'}, None, None, 'q', ['b'], ['a']][{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'q', ['b'], ['a']]Failed

SHA-256 / d56e6d9107dd1c153173d46649a83f9315d393dbb780d9760b56967793c38c99

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    current=d['session']==d['reply_session'] and d['incarnation']==d['reply_incarnation']
    label=d['text'].strip()
    nonempty=bool(label)
    duplicate=any(x!=d['row'] and name.casefold()==label.casefold() for x,name in d['siblings'])
    accepted=current and nonempty and not duplicate and d['server_ok']
    labels=dict(d['labels'])
    if accepted: labels[d['row']]=label
    editing=None if accepted else d['editing']
    error=None if accepted else ('invalid' if current and (not nonempty or duplicate) else d['error'])
    focus=d['row'] if accepted and d['focus']==d['editor'] else d['focus']
    return [labels,editing,error,focus,d['expanded'],d['selected']]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('rename', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 1, 'reply_session': 0, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 3, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 1, 'reply_session': 1, 'incarnation': 4, 'reply_incarnation': 4, 'text': ' New 1  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 2: [('rename', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 2', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 2, 'reply_session': 1, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 4, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 2, 'reply_session': 2, 'incarnation': 5, 'reply_incarnation': 5, 'text': ' New 2  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 2', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 3: [('rename', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 3', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 3, 'reply_session': 2, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 5, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 3, 'reply_session': 3, 'incarnation': 6, 'reply_incarnation': 6, 'text': ' New 3  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 3', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 4: [('rename', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 4', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 4, 'reply_session': 3, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 6, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 4, 'reply_session': 4, 'incarnation': 7, 'reply_incarnation': 7, 'text': ' New 4  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 4', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])], 5: [('rename', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 5', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('stale session', {'session': 5, 'reply_session': 4, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('recycled row', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 7, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('empty draft', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': '   ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('collision', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' taken ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]), ('unchanged label', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': 'Old', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]), ('server failure', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': False, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'editor:b', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]), ('outside focus', {'session': 5, 'reply_session': 5, 'incarnation': 8, 'reply_incarnation': 8, 'text': ' New 5  ', 'row': 'b', 'siblings': [['b', 'Old'], ['a', 'Taken']], 'server_ok': True, 'labels': {'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'editing': 'b', 'error': 'old', 'focus': 'q', 'editor': 'editor:b', 'expanded': ['b'], 'selected': ['a']}, [{'a': 'Taken', 'b': 'New 5', 'q': 'Other'}, None, None, 'q', ['b'], ['a']])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
rename[{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'b', ['b'], ['a']][{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]Passed
stale session[{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Passed
recycled row[{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Passed
empty draft[{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]Passed
collision[{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'invalid', 'editor:b', ['b'], ['a']]Passed
unchanged label[{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, None, None, 'b', ['b'], ['a']]Passed
server failure[{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']][{'a': 'Taken', 'b': 'Old', 'q': 'Other'}, 'b', 'old', 'editor:b', ['b'], ['a']]Passed
outside focus[{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'q', ['b'], ['a']][{'a': 'Taken', 'b': 'New 1', 'q': 'Other'}, None, None, 'q', ['b'], ['a']]Passed

SHA-256 / 0661e439fff3a505d8c077cc26cad98eba13fbdf91f2b43bb19a154d2968b832

Verification & scope

Synthetic deterministic hierarchical-widget data contract; not an implementation of a browser accessibility tree. 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:43:17.067682+00:00.

Case digest / eb4b6383b8a0abe74028ccfb3e83cf7ea5d15dfef35702c19e0449cab0631eef