{"abstract":"Group receipts vanish for viewers who disabled their own receipts although reciprocity only applies to direct chats.","category":"Chat ordering and read receipts","checks":8,"contract":"settings[u] is a user's \"send read receipts\" flag (default True). In direct chats a reader is shown only when both the reader and the viewer have receipts enabled (reciprocity). In group chats only the reader's flag matters. In channels only admins see receipts and they see every reader regardless of settings. The viewer never sees their own receipt. Result: sorted visible readers.","evaluation_group":"w2-chat_ordering_and_read_receipts-receipt-visibility","failed_approach":"Checking the viewer instead of the reader shows receipts of readers who opted out. The attempted `else: ok = enabled(viewer)` still disagrees with a fixture.","family":"w2-chat_ordering_and_read_receipts-receipt-visibility-group-no-reciprocity","id":"FA-75976","implementations":{"attempt":{"sha256":"bfb8673288615fd40fedf7d32f39e4a4c7b38f0581e4e0be84db49b1782f133a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(viewer, readers, settings, chat_kind, admins):\n    enabled = lambda u: settings.get(u, True)\n    out = []\n    for u in readers:\n        if u == viewer:\n            continue\n        if chat_kind == 'channel':\n            ok = viewer in admins\n        elif chat_kind == 'direct':\n            ok = enabled(u) and enabled(viewer)\n        else:\n            ok = enabled(viewer)\n        if ok:\n            out.append(u)\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('missing settings default on', ('v', ['r1'], {}, 'direct', []), ['r1']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r1'], {}, 'group', []), ['r1']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 2: [('missing settings default on', ('v', ['r2'], {}, 'direct', []), ['r2']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r2'], {}, 'group', []), ['r2']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 3: [('missing settings default on', ('v', ['r3'], {}, 'direct', []), ['r3']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r3'], {}, 'group', []), ['r3']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 4: [('missing settings default on', ('v', ['r4'], {}, 'direct', []), ['r4']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r4'], {}, 'group', []), ['r4']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 5: [('missing settings default on', ('v', ['r5'], {}, 'direct', []), ['r5']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r5'], {}, 'group', []), ['r5']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])]}\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":"c7ee9486d3039521261d5909b99efc31a7b83181b1bcec85792b99304f48bdc3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(viewer, readers, settings, chat_kind, admins):\n    enabled = lambda u: settings.get(u, True)\n    out = []\n    for u in readers:\n        if u == viewer:\n            continue\n        if chat_kind == 'channel':\n            ok = viewer in admins\n        elif chat_kind == 'direct':\n            ok = enabled(u) and enabled(viewer)\n        else:\n            ok = enabled(u) and enabled(viewer)\n        if ok:\n            out.append(u)\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('missing settings default on', ('v', ['r1'], {}, 'direct', []), ['r1']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r1'], {}, 'group', []), ['r1']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 2: [('missing settings default on', ('v', ['r2'], {}, 'direct', []), ['r2']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r2'], {}, 'group', []), ['r2']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 3: [('missing settings default on', ('v', ['r3'], {}, 'direct', []), ['r3']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r3'], {}, 'group', []), ['r3']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 4: [('missing settings default on', ('v', ['r4'], {}, 'direct', []), ['r4']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r4'], {}, 'group', []), ['r4']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 5: [('missing settings default on', ('v', ['r5'], {}, 'direct', []), ['r5']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r5'], {}, 'group', []), ['r5']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])]}\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"},"fixed":{"sha256":"cc76d3fff826f13ffbe45e088089ff8ba069ab5926a314a4b0cb1ca2919a9d60","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(viewer, readers, settings, chat_kind, admins):\n    enabled = lambda u: settings.get(u, True)\n    out = []\n    for u in readers:\n        if u == viewer:\n            continue\n        if chat_kind == 'channel':\n            ok = viewer in admins\n        elif chat_kind == 'direct':\n            ok = enabled(u) and enabled(viewer)\n        else:\n            ok = enabled(u)\n        if ok:\n            out.append(u)\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('missing settings default on', ('v', ['r1'], {}, 'direct', []), ['r1']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r1'], {}, 'group', []), ['r1']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 2: [('missing settings default on', ('v', ['r2'], {}, 'direct', []), ['r2']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r2'], {}, 'group', []), ['r2']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 3: [('missing settings default on', ('v', ['r3'], {}, 'direct', []), ['r3']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r3'], {}, 'group', []), ['r3']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 4: [('missing settings default on', ('v', ['r4'], {}, 'direct', []), ['r4']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r4'], {}, 'group', []), ['r4']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])], 5: [('missing settings default on', ('v', ['r5'], {}, 'direct', []), ['r5']), ('viewer disabled in direct chat', ('v', ['r'], {'v': False}, 'direct', []), []), ('viewer disabled in group', ('v', ['r', 'q'], {'v': False, 'q': False}, 'group', []), ['r']), ('reader disabled in direct chat', ('v', ['r'], {'r': False, 'v': True}, 'direct', []), []), ('channel admin', ('v', ['r', 'q', 'p'], {'r': False}, 'channel', ['v']), ['p', 'q', 'r']), ('channel non-admin', ('v', ['r'], {}, 'channel', ['a']), []), ('own receipt in group', ('v', ['v', 'r5'], {}, 'group', []), ['r5']), ('own receipt in channel as admin', ('v', ['v'], {}, 'channel', ['v']), [])]}\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-visibility-group-no-reciprocity","generated_at":"2026-09-29T14:49:12.015674+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Receipt privacy rules differ by conversation type; mistakes leak receipts users disabled or hide ones they may see.","repair":"Use `else: ok = enabled(u)` for the group no reciprocity decision and keep every other rule of the model unchanged.","root_cause":"The group no reciprocity decision evaluates `else: ok = enabled(u) and enabled(viewer)` where the contract requires `else: ok = enabled(u)`.","sha256":"56241b5a67b971f74fc271cc11ec1dc07695c4e12c59a1f60a27a513700a4579","title":"Filter read receipts by privacy settings and chat kind: group no reciprocity · case 01","variant":1,"variant_policy":"N selects a different enumerated fixture set (shifted clocks, identifiers and sizes); boundary fixtures recur across variants.","verification":{"attempt":{"elapsed_ms":40.521,"exit_code":1,"observations":[{"actual":["r1"],"check":"missing settings default on","expected":["r1"],"passed":true},{"actual":[],"check":"viewer disabled in direct chat","expected":[],"passed":true},{"actual":[],"check":"viewer disabled in group","expected":["r"],"passed":false},{"actual":[],"check":"reader disabled in direct chat","expected":[],"passed":true},{"actual":["p","q","r"],"check":"channel admin","expected":["p","q","r"],"passed":true},{"actual":[],"check":"channel non-admin","expected":[],"passed":true},{"actual":["r1"],"check":"own receipt in group","expected":["r1"],"passed":true},{"actual":[],"check":"own receipt in channel as admin","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missing settings default on\", \"actual\": [\"r1\"], \"expected\": [\"r1\"], \"passed\": true}, {\"check\": \"viewer disabled in direct chat\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"viewer disabled in group\", \"actual\": [], \"expected\": [\"r\"], \"passed\": false}, {\"check\": \"reader disabled in direct chat\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"channel admin\", \"actual\": [\"p\", \"q\", \"r\"], \"expected\": [\"p\", \"q\", \"r\"], \"passed\": true}, {\"check\": \"channel non-admin\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"own receipt in group\", \"actual\": [\"r1\"], \"expected\": [\"r1\"], \"passed\": true}, {\"check\": \"own receipt in channel as admin\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.91,"exit_code":1,"observations":[{"actual":["r1"],"check":"missing settings default on","expected":["r1"],"passed":true},{"actual":[],"check":"viewer disabled in direct chat","expected":[],"passed":true},{"actual":[],"check":"viewer disabled in group","expected":["r"],"passed":false},{"actual":[],"check":"reader disabled in direct chat","expected":[],"passed":true},{"actual":["p","q","r"],"check":"channel admin","expected":["p","q","r"],"passed":true},{"actual":[],"check":"channel non-admin","expected":[],"passed":true},{"actual":["r1"],"check":"own receipt in group","expected":["r1"],"passed":true},{"actual":[],"check":"own receipt in channel as admin","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missing settings default on\", \"actual\": [\"r1\"], \"expected\": [\"r1\"], \"passed\": true}, {\"check\": \"viewer disabled in direct chat\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"viewer disabled in group\", \"actual\": [], \"expected\": [\"r\"], \"passed\": false}, {\"check\": \"reader disabled in direct chat\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"channel admin\", \"actual\": [\"p\", \"q\", \"r\"], \"expected\": [\"p\", \"q\", \"r\"], \"passed\": true}, {\"check\": \"channel non-admin\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"own receipt in group\", \"actual\": [\"r1\"], \"expected\": [\"r1\"], \"passed\": true}, {\"check\": \"own receipt in channel as admin\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.552,"exit_code":0,"observations":[{"actual":["r1"],"check":"missing settings default on","expected":["r1"],"passed":true},{"actual":[],"check":"viewer disabled in direct chat","expected":[],"passed":true},{"actual":["r"],"check":"viewer disabled in group","expected":["r"],"passed":true},{"actual":[],"check":"reader disabled in direct chat","expected":[],"passed":true},{"actual":["p","q","r"],"check":"channel admin","expected":["p","q","r"],"passed":true},{"actual":[],"check":"channel non-admin","expected":[],"passed":true},{"actual":["r1"],"check":"own receipt in group","expected":["r1"],"passed":true},{"actual":[],"check":"own receipt in channel as admin","expected":[],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missing settings default on\", \"actual\": [\"r1\"], \"expected\": [\"r1\"], \"passed\": true}, {\"check\": \"viewer disabled in direct chat\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"viewer disabled in group\", \"actual\": [\"r\"], \"expected\": [\"r\"], \"passed\": true}, {\"check\": \"reader disabled in direct chat\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"channel admin\", \"actual\": [\"p\", \"q\", \"r\"], \"expected\": [\"p\", \"q\", \"r\"], \"passed\": true}, {\"check\": \"channel non-admin\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"own receipt in group\", \"actual\": [\"r1\"], \"expected\": [\"r1\"], \"passed\": true}, {\"check\": \"own receipt in channel as admin\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}