FA-76226 / Chat ordering and read receipts / Open access
Place "seen by" avatars under the latest read message: before window · case 01
A reader who has not reached the loaded window is shown under the newest message.
ROOT CAUSE
The before window decision evaluates `if r < 0:` where the contract requires `if i < 0:`.
VERIFIED REPAIR
Use `if i < 0:` for the before window decision and keep every other rule of the model unchanged.
Unsuccessful approach: Comparing against the first visible sequence minus one misses readers just below the window. The attempted `if r < seqs[0] - 1:` still disagrees with a fixture.
Case contract
messages are ascending [seq, author] of the visible window. reads maps user -> [read_seq, read_at]. Each user other than me gets an avatar under the latest visible message with seq <= read_seq; users whose read_seq is before the first visible message get none. Avatars under one message are ordered by read_at descending, then user id. Result: [[seq, [users...]]...] by seq.
Why this case matters
"Seen by" rows show how far each participant has read; misplacement misreports who saw what.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from bisect import bisect_left, bisect_right
N = 1
observations = []
def solve(messages, reads, me):
seqs = [s for s, _ in messages]
slots = {}
for user, (r, at) in reads.items():
if user == me:
continue
i = bisect_right(seqs, r) - 1
if r < 0:
continue
slots.setdefault(seqs[i], []).append((at, user))
return [[s, [u for _, u in sorted(v, key=lambda x: (-x[0], x[1]))]] for s, v in sorted(slots.items())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
_CASES = {1: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [6, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 31], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [2, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 2: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [13, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [7, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 32], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [3, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 3: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [8, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 33], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [4, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 4: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [13, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [9, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 34], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [5, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 5: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [10, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 35], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [6, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])]}
for _label, _args, _expected in _CASES[N]:
check(_label, solve(*_args), _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 |
|---|---|---|---|
| read exactly a message | [[12, ['bo']]] | [[12, ['bo']]] | Passed |
| read between messages | [[12, ['bo']]] | [[12, ['bo']]] | Passed |
| read before window | [[22, ['bo', 'cy']]] | [] | Failed |
| several readers same message | [[2, ['cy', 'al', 'bo']]] | [[2, ['cy', 'al', 'bo']]] | Passed |
| self excluded | [[1, ['bo']]] | [[1, ['bo']]] | Passed |
| empty reads | [] | [] | Passed |
SHA-256 / 382d29f3e3e5b2f15fe1ad1e66b009b50941a579ce8c98280d788f2a678f080a
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from bisect import bisect_left, bisect_right
N = 1
observations = []
def solve(messages, reads, me):
seqs = [s for s, _ in messages]
slots = {}
for user, (r, at) in reads.items():
if user == me:
continue
i = bisect_right(seqs, r) - 1
if r < seqs[0] - 1:
continue
slots.setdefault(seqs[i], []).append((at, user))
return [[s, [u for _, u in sorted(v, key=lambda x: (-x[0], x[1]))]] for s, v in sorted(slots.items())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
_CASES = {1: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [6, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 31], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [2, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 2: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [13, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [7, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 32], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [3, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 3: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [8, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 33], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [4, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 4: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [13, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [9, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 34], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [5, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 5: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [10, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 35], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [6, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])]}
for _label, _args, _expected in _CASES[N]:
check(_label, solve(*_args), _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 |
|---|---|---|---|
| read exactly a message | [[12, ['bo']]] | [[12, ['bo']]] | Passed |
| read between messages | [[12, ['bo']]] | [[12, ['bo']]] | Passed |
| read before window | [[22, ['bo']]] | [] | Failed |
| several readers same message | [[2, ['cy', 'al', 'bo']]] | [[2, ['cy', 'al', 'bo']]] | Passed |
| self excluded | [[1, ['bo']]] | [[1, ['bo']]] | Passed |
| empty reads | [] | [] | Passed |
SHA-256 / 0c67186f289c2c7179f2ec6066dc91390515ac6c0b13a6173a50368c7a0e1e1b
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from bisect import bisect_left, bisect_right
N = 1
observations = []
def solve(messages, reads, me):
seqs = [s for s, _ in messages]
slots = {}
for user, (r, at) in reads.items():
if user == me:
continue
i = bisect_right(seqs, r) - 1
if i < 0:
continue
slots.setdefault(seqs[i], []).append((at, user))
return [[s, [u for _, u in sorted(v, key=lambda x: (-x[0], x[1]))]] for s, v in sorted(slots.items())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
_CASES = {1: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [6, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 31], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [2, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 2: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [13, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [7, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 32], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [3, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 3: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [8, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 33], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [4, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 4: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [13, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [9, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 34], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [5, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])], 5: [('read exactly a message', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [12, 5]}, 'me'), [[12, ['bo']]]), ('read between messages', ([[10, 'a'], [12, 'b'], [15, 'c']], {'bo': [14, 5]}, 'me'), [[12, ['bo']]]), ('read before window', ([[20, 'a'], [22, 'b']], {'bo': [19, 1], 'cy': [10, 1]}, 'me'), []), ('several readers same message', ([[1, 'a'], [2, 'b']], {'bo': [2, 10], 'cy': [2, 35], 'al': [2, 10]}, 'me'), [[2, ['cy', 'al', 'bo']]]), ('self excluded', ([[1, 'a']], {'me': [1, 1], 'bo': [6, 2]}, 'me'), [[1, ['bo']]]), ('empty reads', ([[1, 'a']], {}, 'me'), [])]}
for _label, _args, _expected in _CASES[N]:
check(_label, solve(*_args), _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 |
|---|---|---|---|
| read exactly a message | [[12, ['bo']]] | [[12, ['bo']]] | Passed |
| read between messages | [[12, ['bo']]] | [[12, ['bo']]] | Passed |
| read before window | [] | [] | Passed |
| several readers same message | [[2, ['cy', 'al', 'bo']]] | [[2, ['cy', 'al', 'bo']]] | Passed |
| self excluded | [[1, ['bo']]] | [[1, ['bo']]] | Passed |
| empty reads | [] | [] | Passed |
SHA-256 / 0a9e50f6a08b7bd57cfb531fc984525365af6c41254c2eb1e656748f76315c13
Verification & scope
Stipulated offline chat model; not a complete messaging protocol, client or server implementation. 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:49:14.227170+00:00.
Case digest / 9120500e9f0aeab1c14797971b19b71e7e003fab2c52a646ff0eb76ee3da3a9b