{"abstract":"After the user replies in the middle of new messages, the divider still sits above messages they answered.","category":"Chat ordering and read receipts","checks":6,"contract":"messages are ascending [seq, author] pairs of the loaded window that starts at window_start. Sending a message implies having read everything before it, so the effective marker is the larger of marker and the highest seq authored by me. The divider goes before the first loaded message after the effective marker not written by me (index, or None). older_unread is true when some unread seq lies before the loaded window (effective marker < window_start - 1).","contract_signature":"messages, me, marker, window_start","evaluation_group":"w2-chat_ordering_and_read_receipts-new-messages-divider","failed_approach":"Letting only the first own reply advance the marker ignores later replies. The attempted `if author == me and seq > eff and eff == marker:` still disagrees with a fixture.","family":"w2-chat_ordering_and_read_receipts-new-messages-divider-send-implies-read","id":"FA-75991","implementations":{"attempt":{"sha256":"e650d510ea14ad7c6b5b2a13dd8ab5044e43daa8dff427e841963e7b00ac799e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(messages, me, marker, window_start):\n    eff = marker\n    for seq, author in messages:\n        if author == me and seq > eff and eff == marker:\n            eff = seq\n    index = None\n    for i, (seq, author) in enumerate(messages):\n        if seq > eff and author != me:\n            index = i\n            break\n    return {'index': index, 'older_unread': eff < window_start - 1}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('interleaved own replies', ([[11, 'bo'], [12, 'me'], [13, 'bo'], [14, 'me'], [15, 'cy']], 'me', 10, 11), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [22, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 7, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 2: [('interleaved own replies', ([[12, 'bo'], [13, 'me'], [14, 'bo'], [15, 'me'], [16, 'cy']], 'me', 11, 12), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [23, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 8, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 3: [('interleaved own replies', ([[13, 'bo'], [14, 'me'], [15, 'bo'], [16, 'me'], [17, 'cy']], 'me', 12, 13), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [24, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 9, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 4: [('interleaved own replies', ([[14, 'bo'], [15, 'me'], [16, 'bo'], [17, 'me'], [18, 'cy']], 'me', 13, 14), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [25, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 10, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 5: [('interleaved own replies', ([[15, 'bo'], [16, 'me'], [17, 'bo'], [18, 'me'], [19, 'cy']], 'me', 14, 15), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [26, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 11, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})]}\nfor _label, _args, _expected in _CASES[N]:\n    check(_label, solve(*_args), _expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"26271ddd4ba7e10adcb3630c9151b574be035612095a239873e812a390ff6746","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(messages, me, marker, window_start):\n    eff = marker\n    for seq, author in messages:\n        if author == me and seq == eff + 1:\n            eff = seq\n    index = None\n    for i, (seq, author) in enumerate(messages):\n        if seq > eff and author != me:\n            index = i\n            break\n    return {'index': index, 'older_unread': eff < window_start - 1}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('interleaved own replies', ([[11, 'bo'], [12, 'me'], [13, 'bo'], [14, 'me'], [15, 'cy']], 'me', 10, 11), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [22, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 7, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 2: [('interleaved own replies', ([[12, 'bo'], [13, 'me'], [14, 'bo'], [15, 'me'], [16, 'cy']], 'me', 11, 12), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [23, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 8, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 3: [('interleaved own replies', ([[13, 'bo'], [14, 'me'], [15, 'bo'], [16, 'me'], [17, 'cy']], 'me', 12, 13), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [24, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 9, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 4: [('interleaved own replies', ([[14, 'bo'], [15, 'me'], [16, 'bo'], [17, 'me'], [18, 'cy']], 'me', 13, 14), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [25, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 10, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})], 5: [('interleaved own replies', ([[15, 'bo'], [16, 'me'], [17, 'bo'], [18, 'me'], [19, 'cy']], 'me', 14, 15), {'index': 4, 'older_unread': False}), ('window starts right after marker', ([[20, 'bo'], [21, 'bo']], 'me', 19, 20), {'index': 0, 'older_unread': False}), ('one unloaded unread', ([[20, 'bo'], [26, 'bo']], 'me', 18, 20), {'index': 0, 'older_unread': True}), ('all read', ([[5, 'bo'], [6, 'cy']], 'me', 11, 5), {'index': None, 'older_unread': False}), ('only own messages after marker', ([[1, 'bo'], [2, 'me']], 'me', 1, 1), {'index': None, 'older_unread': False}), ('first unread foreign', ([[3, 'bo'], [4, 'cy'], [5, 'dd']], 'me', 3, 3), {'index': 1, 'older_unread': False})]}\nfor _label, _args, _expected in _CASES[N]:\n    check(_label, solve(*_args), _expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-chat_ordering_and_read_receipts-new-messages-divider-send-implies-read","generated_at":"2026-09-29T14:49:12.192746+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"The divider tells users where to resume reading; misplacing it hides or repeats unread history.","root_cause":"The send implies read decision evaluates `if author == me and seq == eff + 1:` where the contract requires `if author == me and seq > eff:`.","sha256":"f8200ec7378dc88cf8d208e984363bb00f6784b6d3223c480dfe5ef17d3740b5","title":"Place the \"new messages\" divider in a loaded window: send implies read · case 01","variant":1,"variant_policy":"N selects a different enumerated fixture set (shifted clocks, identifiers and sizes); boundary fixtures recur across variants.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.746,"exit_code":1,"observations":[{"actual":{"index":2,"older_unread":false},"check":"interleaved own replies","expected":{"index":4,"older_unread":false},"passed":false},{"actual":{"index":0,"older_unread":false},"check":"window starts right after marker","expected":{"index":0,"older_unread":false},"passed":true},{"actual":{"index":0,"older_unread":true},"check":"one unloaded unread","expected":{"index":0,"older_unread":true},"passed":true},{"actual":{"index":null,"older_unread":false},"check":"all read","expected":{"index":null,"older_unread":false},"passed":true},{"actual":{"index":null,"older_unread":false},"check":"only own messages after marker","expected":{"index":null,"older_unread":false},"passed":true},{"actual":{"index":1,"older_unread":false},"check":"first unread foreign","expected":{"index":1,"older_unread":false},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"interleaved own replies\", \"actual\": {\"index\": 2, \"older_unread\": false}, \"expected\": {\"index\": 4, \"older_unread\": false}, \"passed\": false}, {\"check\": \"window starts right after marker\", \"actual\": {\"index\": 0, \"older_unread\": false}, \"expected\": {\"index\": 0, \"older_unread\": false}, \"passed\": true}, {\"check\": \"one unloaded unread\", \"actual\": {\"index\": 0, \"older_unread\": true}, \"expected\": {\"index\": 0, \"older_unread\": true}, \"passed\": true}, {\"check\": \"all read\", \"actual\": {\"index\": null, \"older_unread\": false}, \"expected\": {\"index\": null, \"older_unread\": false}, \"passed\": true}, {\"check\": \"only own messages after marker\", \"actual\": {\"index\": null, \"older_unread\": false}, \"expected\": {\"index\": null, \"older_unread\": false}, \"passed\": true}, {\"check\": \"first unread foreign\", \"actual\": {\"index\": 1, \"older_unread\": false}, \"expected\": {\"index\": 1, \"older_unread\": false}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.727,"exit_code":1,"observations":[{"actual":{"index":0,"older_unread":false},"check":"interleaved own replies","expected":{"index":4,"older_unread":false},"passed":false},{"actual":{"index":0,"older_unread":false},"check":"window starts right after marker","expected":{"index":0,"older_unread":false},"passed":true},{"actual":{"index":0,"older_unread":true},"check":"one unloaded unread","expected":{"index":0,"older_unread":true},"passed":true},{"actual":{"index":null,"older_unread":false},"check":"all read","expected":{"index":null,"older_unread":false},"passed":true},{"actual":{"index":null,"older_unread":false},"check":"only own messages after marker","expected":{"index":null,"older_unread":false},"passed":true},{"actual":{"index":1,"older_unread":false},"check":"first unread foreign","expected":{"index":1,"older_unread":false},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"interleaved own replies\", \"actual\": {\"index\": 0, \"older_unread\": false}, \"expected\": {\"index\": 4, \"older_unread\": false}, \"passed\": false}, {\"check\": \"window starts right after marker\", \"actual\": {\"index\": 0, \"older_unread\": false}, \"expected\": {\"index\": 0, \"older_unread\": false}, \"passed\": true}, {\"check\": \"one unloaded unread\", \"actual\": {\"index\": 0, \"older_unread\": true}, \"expected\": {\"index\": 0, \"older_unread\": true}, \"passed\": true}, {\"check\": \"all read\", \"actual\": {\"index\": null, \"older_unread\": false}, \"expected\": {\"index\": null, \"older_unread\": false}, \"passed\": true}, {\"check\": \"only own messages after marker\", \"actual\": {\"index\": null, \"older_unread\": false}, \"expected\": {\"index\": null, \"older_unread\": false}, \"passed\": true}, {\"check\": \"first unread foreign\", \"actual\": {\"index\": 1, \"older_unread\": false}, \"expected\": {\"index\": 1, \"older_unread\": false}, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}