FA-39556 / Tree accessibility / Open access
Expanded tree viewport anchor stabilization: Anchor pixel position includes anchor height or uses old order · case 01
Anchor pixel position includes anchor height or uses old order produces the wrong hierarchical widget state in a regression fixture.
ROOT CAUSE
The viewport-anchor contract is violated at `new[:new.index(anchor)]` by replacing it with `new[:new.index(anchor)+1]`.
VERIFIED REPAIR
Restore `new[:new.index(anchor)]` at this fault site while retaining the other tree state decisions.
Unsuccessful approach: The partial repair `(old[:old.index(anchor)] if anchor in old else [])` still violates a boundary or preservation case.
Case contract
After branch expansion changes row heights/order, preserve the first visible surviving anchor and its pixel offset. If that row is removed, use the next surviving old row, then previous row. Clamp scroll to content extent, include fractional row offsets, and keep active-row identity independent from viewport anchoring.
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):
old=d['old']; new=d['new']
index=old.index(d['anchor']) if d['anchor'] in old else 0
candidates=[d['anchor']]+old[index+1:]+list(reversed(old[:index]))
anchor=next((x for x in candidates if x in new),(new[0] if new else None))
position=sum(d['heights'][x] for x in new[:new.index(anchor)+1]) if anchor is not None else 0
inside=min(d['offset'],d['heights'][anchor]-1) if anchor==d['anchor'] else 0
requested=position+max(0,inside)
content=sum(d['heights'][x] for x in new)
scroll=max(0,min(requested,content-d['viewport']))
active=d['active']
return [anchor,scroll,content,active]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 64.5, 100, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 40, 100, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 76, 100, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 69, 'a'])], 2: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 65.5, 102, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 42, 102, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 78, 102, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 70, 'a'])], 3: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 66.5, 104, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 44, 104, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 80, 104, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 71, 'a'])], 4: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 67.5, 106, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 46, 106, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 82, 106, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 72, 'a'])], 5: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 68.5, 108, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 48, 108, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 84, 108, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 73, '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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| insert before anchor | ['b', 80, 100, 'a'] | ['b', 64.5, 100, 'a'] | Failed |
| deleted anchor | ['c', 33, 53, 'a'] | ['c', 30, 53, 'a'] | Failed |
| previous fallback | ['a', 10, 30, 'a'] | ['a', 10, 30, 'a'] | Passed |
| new-only tree | ['q', 0, 5, 'a'] | ['q', 0, 5, 'a'] | Passed |
| empty tree | [None, 0, 0, 'a'] | [None, 0, 0, 'a'] | Passed |
| bottom clamp | ['b', 40, 100, 'a'] | ['b', 40, 100, 'a'] | Passed |
| oversized offset | ['b', 80, 100, 'a'] | ['b', 76, 100, 'a'] | Failed |
| reordered | ['b', 42.5, 69, 'a'] | ['b', 26.5, 69, 'a'] | Failed |
SHA-256 / 854cda98969cd7dc81efc254a3c7a7436d25d33645d587402c20d2228ae15f03
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
old=d['old']; new=d['new']
index=old.index(d['anchor']) if d['anchor'] in old else 0
candidates=[d['anchor']]+old[index+1:]+list(reversed(old[:index]))
anchor=next((x for x in candidates if x in new),(new[0] if new else None))
position=sum(d['heights'][x] for x in (old[:old.index(anchor)] if anchor in old else [])) if anchor is not None else 0
inside=min(d['offset'],d['heights'][anchor]-1) if anchor==d['anchor'] else 0
requested=position+max(0,inside)
content=sum(d['heights'][x] for x in new)
scroll=max(0,min(requested,content-d['viewport']))
active=d['active']
return [anchor,scroll,content,active]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 64.5, 100, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 40, 100, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 76, 100, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 69, 'a'])], 2: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 65.5, 102, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 42, 102, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 78, 102, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 70, 'a'])], 3: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 66.5, 104, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 44, 104, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 80, 104, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 71, 'a'])], 4: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 67.5, 106, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 46, 106, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 82, 106, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 72, 'a'])], 5: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 68.5, 108, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 48, 108, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 84, 108, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 73, '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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| insert before anchor | ['b', 33.5, 100, 'a'] | ['b', 64.5, 100, 'a'] | Failed |
| deleted anchor | ['c', 33, 53, 'a'] | ['c', 30, 53, 'a'] | Failed |
| previous fallback | ['a', 10, 30, 'a'] | ['a', 10, 30, 'a'] | Passed |
| new-only tree | ['q', 0, 5, 'a'] | ['q', 0, 5, 'a'] | Passed |
| empty tree | [None, 0, 0, 'a'] | [None, 0, 0, 'a'] | Passed |
| bottom clamp | ['b', 33.5, 100, 'a'] | ['b', 40, 100, 'a'] | Failed |
| oversized offset | ['b', 45, 100, 'a'] | ['b', 76, 100, 'a'] | Failed |
| reordered | ['b', 33.5, 69, 'a'] | ['b', 26.5, 69, 'a'] | Failed |
SHA-256 / 8eb34b63ec71ceb84070fa023b86cb2b615b72491eea50e65698a5899cb66772
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
old=d['old']; new=d['new']
index=old.index(d['anchor']) if d['anchor'] in old else 0
candidates=[d['anchor']]+old[index+1:]+list(reversed(old[:index]))
anchor=next((x for x in candidates if x in new),(new[0] if new else None))
position=sum(d['heights'][x] for x in new[:new.index(anchor)]) if anchor is not None else 0
inside=min(d['offset'],d['heights'][anchor]-1) if anchor==d['anchor'] else 0
requested=position+max(0,inside)
content=sum(d['heights'][x] for x in new)
scroll=max(0,min(requested,content-d['viewport']))
active=d['active']
return [anchor,scroll,content,active]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 64.5, 100, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 40, 100, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 76, 100, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 16, 'c': 11, 'z': 12, 'x': 31, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 69, 'a'])], 2: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 65.5, 102, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 42, 102, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 78, 102, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 17, 'c': 11, 'z': 12, 'x': 32, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 70, 'a'])], 3: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 66.5, 104, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 44, 104, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 80, 104, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 18, 'c': 11, 'z': 12, 'x': 33, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 71, 'a'])], 4: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 67.5, 106, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 46, 106, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 82, 106, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 19, 'c': 11, 'z': 12, 'x': 34, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 72, 'a'])], 5: [('insert before anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 68.5, 108, 'a']), ('deleted anchor', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['c', 30, 53, 'a']), ('previous fallback', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'a'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['a', 10, 30, 'a']), ('new-only tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['q'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['q', 0, 5, 'a']), ('empty tree', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': [], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, [None, 0, 0, 'a']), ('bottom clamp', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 60, 'active': 'a'}, ['b', 48, 108, 'a']), ('oversized offset', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['r', 'x', 'a', 'b', 'c', 'z'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 100, 'viewport': 20, 'active': 'a'}, ['b', 84, 108, 'a']), ('reordered', {'old': ['r', 'a', 'b', 'c', 'z'], 'new': ['z', 'c', 'b', 'a', 'r'], 'anchor': 'b', 'heights': {'r': 10, 'a': 20, 'b': 20, 'c': 11, 'z': 12, 'x': 35, 'q': 5}, 'offset': 3.5, 'viewport': 20, 'active': 'a'}, ['b', 26.5, 73, '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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| insert before anchor | ['b', 64.5, 100, 'a'] | ['b', 64.5, 100, 'a'] | Passed |
| deleted anchor | ['c', 30, 53, 'a'] | ['c', 30, 53, 'a'] | Passed |
| previous fallback | ['a', 10, 30, 'a'] | ['a', 10, 30, 'a'] | Passed |
| new-only tree | ['q', 0, 5, 'a'] | ['q', 0, 5, 'a'] | Passed |
| empty tree | [None, 0, 0, 'a'] | [None, 0, 0, 'a'] | Passed |
| bottom clamp | ['b', 40, 100, 'a'] | ['b', 40, 100, 'a'] | Passed |
| oversized offset | ['b', 76, 100, 'a'] | ['b', 76, 100, 'a'] | Passed |
| reordered | ['b', 26.5, 69, 'a'] | ['b', 26.5, 69, 'a'] | Passed |
SHA-256 / 31833c367fd964568637daa88f5075860dde80070967f9d8351262ab7d437a54
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:22.353122+00:00.
Case digest / b19d8bb96f24267d5a8302c4ca24247b9fb4575ea524ac378eedf88871c5b320