{"abstract":"A conversation that never sent a receipt suppresses the receipt for its seq-zero message.","category":"Chat ordering and read receipts","checks":6,"contract":"pending_reads are [conv, seq] events produced while scrolling, in any order. Per conversation only the highest seq is sent, and only if it is above the marker already sent (missing marker means nothing sent, -1). In the background nothing is sent: the eligible conversations are deferred. Result {send: [[conv, seq]...] sorted by conv, defer: [conv...]}.","contract_signature":"pending_reads, sent_markers, foreground","evaluation_group":"w2-chat_ordering_and_read_receipts-receipt-batcher","failed_approach":"Falling back to zero via \"or\" has the same effect on the first message. The attempted `(sent_markers.get(c) or 0)]` still disagrees with a fixture.","family":"w2-chat_ordering_and_read_receipts-receipt-batcher-missing-marker-default","id":"FA-76211","implementations":{"attempt":{"sha256":"8f8f27547c9ceeb41a02a6e9d50eb146f60ce2e6d8792fcc3e288451326862a1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(pending_reads, sent_markers, foreground):\n    best = {}\n    for conv, seq in pending_reads:\n        if seq > best.get(conv, -1):\n            best[conv] = seq\n    rows = [[c, s] for c, s in sorted(best.items()) if s > (sent_markers.get(c) or 0)]\n    if not foreground:\n        return {'send': [], 'defer': [c for c, _ in rows]}\n    return {'send': rows, 'defer': []}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('scroll events out of order', ([['a', 10], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 10], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 8]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 8]]}), ('lower than sent', ([['a', 2]], {'a': 7}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 2]], {'b': 2}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 2: [('scroll events out of order', ([['a', 11], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 11], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 9]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 9]]}), ('lower than sent', ([['a', 2]], {'a': 8}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 3]], {'b': 3}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 3: [('scroll events out of order', ([['a', 12], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 12], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 10]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 10]]}), ('lower than sent', ([['a', 2]], {'a': 9}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 4]], {'b': 4}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 4: [('scroll events out of order', ([['a', 13], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 13], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 11]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 11]]}), ('lower than sent', ([['a', 2]], {'a': 10}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 5]], {'b': 5}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 5: [('scroll events out of order', ([['a', 14], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 14], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 12]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 12]]}), ('lower than sent', ([['a', 2]], {'a': 11}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 6]], {'b': 6}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})]}\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":"e234537197ed03feb7a2e419a93e3bc08db0128f61d4e34dced167e4725095a8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(pending_reads, sent_markers, foreground):\n    best = {}\n    for conv, seq in pending_reads:\n        if seq > best.get(conv, -1):\n            best[conv] = seq\n    rows = [[c, s] for c, s in sorted(best.items()) if s > sent_markers.get(c, 0)]\n    if not foreground:\n        return {'send': [], 'defer': [c for c, _ in rows]}\n    return {'send': rows, 'defer': []}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('scroll events out of order', ([['a', 10], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 10], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 8]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 8]]}), ('lower than sent', ([['a', 2]], {'a': 7}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 2]], {'b': 2}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 2: [('scroll events out of order', ([['a', 11], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 11], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 9]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 9]]}), ('lower than sent', ([['a', 2]], {'a': 8}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 3]], {'b': 3}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 3: [('scroll events out of order', ([['a', 12], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 12], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 10]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 10]]}), ('lower than sent', ([['a', 2]], {'a': 9}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 4]], {'b': 4}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 4: [('scroll events out of order', ([['a', 13], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 13], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 11]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 11]]}), ('lower than sent', ([['a', 2]], {'a': 10}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 5]], {'b': 5}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})], 5: [('scroll events out of order', ([['a', 14], ['a', 4], ['b', 2]], {}, True), {'defer': [], 'send': [['a', 14], ['b', 2]]}), ('first message has seq zero', ([['n', 0]], {}, True), {'defer': [], 'send': [['n', 0]]}), ('not advancing', ([['a', 5], ['b', 12]], {'a': 5, 'b': 3}, True), {'defer': [], 'send': [['b', 12]]}), ('lower than sent', ([['a', 2]], {'a': 11}, True), {'defer': [], 'send': []}), ('background defers', ([['a', 3], ['b', 6]], {'b': 6}, False), {'defer': ['a'], 'send': []}), ('empty', ([], {'a': 1}, True), {'defer': [], 'send': []})]}\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-receipt-batcher-missing-marker-default","generated_at":"2026-09-29T14:49:14.181465+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Receipt batching limits traffic; batching errors send stale receipts or none at all.","root_cause":"The missing marker default decision evaluates `sent_markers.get(c, 0)]` where the contract requires `sent_markers.get(c, -1)]`.","sha256":"4b96cefacc36dc9e399d8ca7f97fdeff1321229d1d54cdf1caaf4bf1e1b9580a","title":"Batch outgoing read receipts per conversation: missing marker default · 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":40.172,"exit_code":1,"observations":[{"actual":{"defer":[],"send":[["a",10],["b",2]]},"check":"scroll events out of order","expected":{"defer":[],"send":[["a",10],["b",2]]},"passed":true},{"actual":{"defer":[],"send":[]},"check":"first message has seq zero","expected":{"defer":[],"send":[["n",0]]},"passed":false},{"actual":{"defer":[],"send":[["b",8]]},"check":"not advancing","expected":{"defer":[],"send":[["b",8]]},"passed":true},{"actual":{"defer":[],"send":[]},"check":"lower than sent","expected":{"defer":[],"send":[]},"passed":true},{"actual":{"defer":["a"],"send":[]},"check":"background defers","expected":{"defer":["a"],"send":[]},"passed":true},{"actual":{"defer":[],"send":[]},"check":"empty","expected":{"defer":[],"send":[]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"scroll events out of order\", \"actual\": {\"send\": [[\"a\", 10], [\"b\", 2]], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": [[\"a\", 10], [\"b\", 2]]}, \"passed\": true}, {\"check\": \"first message has seq zero\", \"actual\": {\"send\": [], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": [[\"n\", 0]]}, \"passed\": false}, {\"check\": \"not advancing\", \"actual\": {\"send\": [[\"b\", 8]], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": [[\"b\", 8]]}, \"passed\": true}, {\"check\": \"lower than sent\", \"actual\": {\"send\": [], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": []}, \"passed\": true}, {\"check\": \"background defers\", \"actual\": {\"send\": [], \"defer\": [\"a\"]}, \"expected\": {\"defer\": [\"a\"], \"send\": []}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"send\": [], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": []}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.259,"exit_code":1,"observations":[{"actual":{"defer":[],"send":[["a",10],["b",2]]},"check":"scroll events out of order","expected":{"defer":[],"send":[["a",10],["b",2]]},"passed":true},{"actual":{"defer":[],"send":[]},"check":"first message has seq zero","expected":{"defer":[],"send":[["n",0]]},"passed":false},{"actual":{"defer":[],"send":[["b",8]]},"check":"not advancing","expected":{"defer":[],"send":[["b",8]]},"passed":true},{"actual":{"defer":[],"send":[]},"check":"lower than sent","expected":{"defer":[],"send":[]},"passed":true},{"actual":{"defer":["a"],"send":[]},"check":"background defers","expected":{"defer":["a"],"send":[]},"passed":true},{"actual":{"defer":[],"send":[]},"check":"empty","expected":{"defer":[],"send":[]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"scroll events out of order\", \"actual\": {\"send\": [[\"a\", 10], [\"b\", 2]], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": [[\"a\", 10], [\"b\", 2]]}, \"passed\": true}, {\"check\": \"first message has seq zero\", \"actual\": {\"send\": [], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": [[\"n\", 0]]}, \"passed\": false}, {\"check\": \"not advancing\", \"actual\": {\"send\": [[\"b\", 8]], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": [[\"b\", 8]]}, \"passed\": true}, {\"check\": \"lower than sent\", \"actual\": {\"send\": [], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": []}, \"passed\": true}, {\"check\": \"background defers\", \"actual\": {\"send\": [], \"defer\": [\"a\"]}, \"expected\": {\"defer\": [\"a\"], \"send\": []}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"send\": [], \"defer\": []}, \"expected\": {\"defer\": [], \"send\": []}, \"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."}}