{"abstract":"A capitalised or padded action field is classified as unknown.","category":"Email MIME structure","checks":7,"contract":"A report is valid only when its type is multipart/report, its report-type parameter (name and value case-insensitive) is delivery-status, and its second part is message/delivery-status or message/global-delivery-status. Each recipient {final, action, status} gets: failed -> hard for status class 5, soft for 4, unknown otherwise; delayed -> delayed; delivered, relayed or expanded -> ok; anything else unknown (actions are case-insensitive and trimmed). has_original is true when a third part is message/rfc822 or text/rfc822-headers. Invalid reports give {valid False, recipients [], has_original False}.","evaluation_group":"w2-email_mime_structure-delivery-status-report","failed_approach":"Lower-casing without trimming still misses padded actions. The attempted `action = r['action'].lower()` still disagrees with a fixture.","family":"w2-email_mime_structure-delivery-status-report-action-normalization","id":"FA-76701","implementations":{"attempt":{"sha256":"c8fd46b9e337208d8b1b7f403eed4fa0ed2df4fd1e66c78440357605a18bf6f5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(report):\n    t = report['type'].lower()\n    params = {k.lower(): v for k, v in report.get('params', {}).items()}\n    rt = params.get('report-type', '').lower()\n    parts = report.get('parts', [])\n    if t != 'multipart/report' or rt != 'delivery-status' or len(parts) < 2 or parts[1]['type'].lower() not in ('message/delivery-status', 'message/global-delivery-status'):\n        return {'valid': False, 'recipients': [], 'has_original': False}\n    rows = []\n    for r in parts[1]['recipients']:\n        action = r['action'].lower()\n        klass = r['status'].strip()[:1]\n        if action == 'failed':\n            verdict = 'hard' if klass == '5' else ('soft' if klass == '4' else 'unknown')\n        elif action == 'delayed':\n            verdict = 'delayed'\n        elif action in ('delivered', 'relayed', 'expanded'):\n            verdict = 'ok'\n        else:\n            verdict = 'unknown'\n        rows.append([r['final'].strip(), verdict])\n    orig = len(parts) > 2 and parts[2]['type'].lower() in ('message/rfc822', 'text/rfc822-headers')\n    return {'valid': True, 'recipients': rows, 'has_original': orig}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a1@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a1@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.1'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd1@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d1@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.1'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.1'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 2: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a2@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a2@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.2'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd2@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d2@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.2'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.2'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 3: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a3@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a3@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.3'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd3@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d3@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.3'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.3'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 4: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a4@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a4@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.4'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd4@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d4@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.4'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.4'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 5: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a5@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a5@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.5'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd5@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d5@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.5'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.5'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': 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":"6bffd2ba392fa66e85cd21a7302517f7af361c9d1c4fe3feaf2680b4eb9b920c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(report):\n    t = report['type'].lower()\n    params = {k.lower(): v for k, v in report.get('params', {}).items()}\n    rt = params.get('report-type', '').lower()\n    parts = report.get('parts', [])\n    if t != 'multipart/report' or rt != 'delivery-status' or len(parts) < 2 or parts[1]['type'].lower() not in ('message/delivery-status', 'message/global-delivery-status'):\n        return {'valid': False, 'recipients': [], 'has_original': False}\n    rows = []\n    for r in parts[1]['recipients']:\n        action = r['action']\n        klass = r['status'].strip()[:1]\n        if action == 'failed':\n            verdict = 'hard' if klass == '5' else ('soft' if klass == '4' else 'unknown')\n        elif action == 'delayed':\n            verdict = 'delayed'\n        elif action in ('delivered', 'relayed', 'expanded'):\n            verdict = 'ok'\n        else:\n            verdict = 'unknown'\n        rows.append([r['final'].strip(), verdict])\n    orig = len(parts) > 2 and parts[2]['type'].lower() in ('message/rfc822', 'text/rfc822-headers')\n    return {'valid': True, 'recipients': rows, 'has_original': orig}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a1@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a1@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.1'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd1@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d1@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.1'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.1'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 2: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a2@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a2@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.2'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd2@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d2@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.2'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.2'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 3: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a3@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a3@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.3'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd3@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d3@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.3'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.3'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 4: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a4@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a4@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.4'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd4@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d4@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.4'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.4'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 5: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a5@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a5@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.5'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd5@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d5@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.5'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.5'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': 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"},"fixed":{"sha256":"37779dcd0fc98c9e54becaa6488421fdc0bed82fae5fdd1fbe556c5447b8b3a4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(report):\n    t = report['type'].lower()\n    params = {k.lower(): v for k, v in report.get('params', {}).items()}\n    rt = params.get('report-type', '').lower()\n    parts = report.get('parts', [])\n    if t != 'multipart/report' or rt != 'delivery-status' or len(parts) < 2 or parts[1]['type'].lower() not in ('message/delivery-status', 'message/global-delivery-status'):\n        return {'valid': False, 'recipients': [], 'has_original': False}\n    rows = []\n    for r in parts[1]['recipients']:\n        action = r['action'].strip().lower()\n        klass = r['status'].strip()[:1]\n        if action == 'failed':\n            verdict = 'hard' if klass == '5' else ('soft' if klass == '4' else 'unknown')\n        elif action == 'delayed':\n            verdict = 'delayed'\n        elif action in ('delivered', 'relayed', 'expanded'):\n            verdict = 'ok'\n        else:\n            verdict = 'unknown'\n        rows.append([r['final'].strip(), verdict])\n    orig = len(parts) > 2 and parts[2]['type'].lower() in ('message/rfc822', 'text/rfc822-headers')\n    return {'valid': True, 'recipients': rows, 'has_original': orig}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a1@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a1@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.1'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd1@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d1@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.1'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.1'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 2: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a2@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a2@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.2'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd2@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d2@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.2'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.2'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 3: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a3@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a3@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.3'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd3@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d3@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.3'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.3'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 4: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a4@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a4@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.4'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd4@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d4@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.4'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.4'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False})], 5: [('capitalised parameter name', ({'type': 'multipart/report', 'params': {'Report-Type': 'Delivery-Status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'a5@x', 'action': 'failed', 'status': '5.1.1'}]}, {'type': 'message/rfc822'}]},), {'has_original': True, 'recipients': [['a5@x', 'hard']], 'valid': True}), ('internationalised status part', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global-delivery-status', 'recipients': [{'final': 'b@x', 'action': 'delayed', 'status': '4.4.5'}]}]},), {'has_original': False, 'recipients': [['b@x', 'delayed']], 'valid': True}), ('global message is not a status', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/global', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': False}), ('status class decides', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'c@x', 'action': 'failed', 'status': '4.2.2'}, {'final': 'd5@x', 'action': 'failed', 'status': '2.0.0'}]}]},), {'has_original': False, 'recipients': [['c@x', 'soft'], ['d5@x', 'unknown']], 'valid': True}), ('padded capitalised action', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': ' e@x ', 'action': ' Failed ', 'status': ' 5.7.5'}]}, {'type': 'text/rfc822-headers'}]},), {'has_original': True, 'recipients': [['e@x', 'hard']], 'valid': True}), ('relayed and expanded', ({'type': 'multipart/report', 'params': {'report-type': 'delivery-status'}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': [{'final': 'f@x', 'action': 'relayed', 'status': '2.0.0'}, {'final': 'g@x', 'action': 'expanded', 'status': '2.0.5'}]}]},), {'has_original': False, 'recipients': [['f@x', 'ok'], ['g@x', 'ok']], 'valid': True}), ('not a report', ({'type': 'multipart/mixed', 'params': {}, 'parts': [{'type': 'text/plain'}, {'type': 'message/delivery-status', 'recipients': []}]},), {'has_original': False, 'recipients': [], 'valid': 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 model over pre-parsed MIME dictionaries; not a conforming MIME parser, generator or mail client. 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-email_mime_structure-delivery-status-report-action-normalization","generated_at":"2026-09-29T14:49:18.709830+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bounce processing drives list hygiene and retry decisions; misclassification unsubscribes healthy addresses.","repair":"Use `action = r['action'].strip().lower()` for the action normalization decision and keep every other rule of the model unchanged.","root_cause":"The action normalization decision evaluates `action = r['action']` where the contract requires `action = r['action'].strip().lower()`.","sha256":"57db921611919d4f6a5d1bf676b1894e36634f689ac05aa2d94b0f9a1c2be185","title":"Classify recipients of a delivery status report: action normalization · case 01","variant":1,"variant_policy":"N selects a different enumerated fixture set (renamed identifiers, part counts and sizes); boundary fixtures recur across variants.","verification":{"attempt":{"elapsed_ms":39.814,"exit_code":1,"observations":[{"actual":{"has_original":true,"recipients":[["a1@x","hard"]],"valid":true},"check":"capitalised parameter name","expected":{"has_original":true,"recipients":[["a1@x","hard"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[["b@x","delayed"]],"valid":true},"check":"internationalised status part","expected":{"has_original":false,"recipients":[["b@x","delayed"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[],"valid":false},"check":"global message is not a status","expected":{"has_original":false,"recipients":[],"valid":false},"passed":true},{"actual":{"has_original":false,"recipients":[["c@x","soft"],["d1@x","unknown"]],"valid":true},"check":"status class decides","expected":{"has_original":false,"recipients":[["c@x","soft"],["d1@x","unknown"]],"valid":true},"passed":true},{"actual":{"has_original":true,"recipients":[["e@x","unknown"]],"valid":true},"check":"padded capitalised action","expected":{"has_original":true,"recipients":[["e@x","hard"]],"valid":true},"passed":false},{"actual":{"has_original":false,"recipients":[["f@x","ok"],["g@x","ok"]],"valid":true},"check":"relayed and expanded","expected":{"has_original":false,"recipients":[["f@x","ok"],["g@x","ok"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[],"valid":false},"check":"not a report","expected":{"has_original":false,"recipients":[],"valid":false},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"capitalised parameter name\", \"actual\": {\"valid\": true, \"recipients\": [[\"a1@x\", \"hard\"]], \"has_original\": true}, \"expected\": {\"has_original\": true, \"recipients\": [[\"a1@x\", \"hard\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"internationalised status part\", \"actual\": {\"valid\": true, \"recipients\": [[\"b@x\", \"delayed\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"b@x\", \"delayed\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"global message is not a status\", \"actual\": {\"valid\": false, \"recipients\": [], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [], \"valid\": false}, \"passed\": true}, {\"check\": \"status class decides\", \"actual\": {\"valid\": true, \"recipients\": [[\"c@x\", \"soft\"], [\"d1@x\", \"unknown\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"c@x\", \"soft\"], [\"d1@x\", \"unknown\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"padded capitalised action\", \"actual\": {\"valid\": true, \"recipients\": [[\"e@x\", \"unknown\"]], \"has_original\": true}, \"expected\": {\"has_original\": true, \"recipients\": [[\"e@x\", \"hard\"]], \"valid\": true}, \"passed\": false}, {\"check\": \"relayed and expanded\", \"actual\": {\"valid\": true, \"recipients\": [[\"f@x\", \"ok\"], [\"g@x\", \"ok\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"f@x\", \"ok\"], [\"g@x\", \"ok\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"not a report\", \"actual\": {\"valid\": false, \"recipients\": [], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [], \"valid\": false}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.622,"exit_code":1,"observations":[{"actual":{"has_original":true,"recipients":[["a1@x","hard"]],"valid":true},"check":"capitalised parameter name","expected":{"has_original":true,"recipients":[["a1@x","hard"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[["b@x","delayed"]],"valid":true},"check":"internationalised status part","expected":{"has_original":false,"recipients":[["b@x","delayed"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[],"valid":false},"check":"global message is not a status","expected":{"has_original":false,"recipients":[],"valid":false},"passed":true},{"actual":{"has_original":false,"recipients":[["c@x","soft"],["d1@x","unknown"]],"valid":true},"check":"status class decides","expected":{"has_original":false,"recipients":[["c@x","soft"],["d1@x","unknown"]],"valid":true},"passed":true},{"actual":{"has_original":true,"recipients":[["e@x","unknown"]],"valid":true},"check":"padded capitalised action","expected":{"has_original":true,"recipients":[["e@x","hard"]],"valid":true},"passed":false},{"actual":{"has_original":false,"recipients":[["f@x","ok"],["g@x","ok"]],"valid":true},"check":"relayed and expanded","expected":{"has_original":false,"recipients":[["f@x","ok"],["g@x","ok"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[],"valid":false},"check":"not a report","expected":{"has_original":false,"recipients":[],"valid":false},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"capitalised parameter name\", \"actual\": {\"valid\": true, \"recipients\": [[\"a1@x\", \"hard\"]], \"has_original\": true}, \"expected\": {\"has_original\": true, \"recipients\": [[\"a1@x\", \"hard\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"internationalised status part\", \"actual\": {\"valid\": true, \"recipients\": [[\"b@x\", \"delayed\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"b@x\", \"delayed\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"global message is not a status\", \"actual\": {\"valid\": false, \"recipients\": [], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [], \"valid\": false}, \"passed\": true}, {\"check\": \"status class decides\", \"actual\": {\"valid\": true, \"recipients\": [[\"c@x\", \"soft\"], [\"d1@x\", \"unknown\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"c@x\", \"soft\"], [\"d1@x\", \"unknown\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"padded capitalised action\", \"actual\": {\"valid\": true, \"recipients\": [[\"e@x\", \"unknown\"]], \"has_original\": true}, \"expected\": {\"has_original\": true, \"recipients\": [[\"e@x\", \"hard\"]], \"valid\": true}, \"passed\": false}, {\"check\": \"relayed and expanded\", \"actual\": {\"valid\": true, \"recipients\": [[\"f@x\", \"ok\"], [\"g@x\", \"ok\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"f@x\", \"ok\"], [\"g@x\", \"ok\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"not a report\", \"actual\": {\"valid\": false, \"recipients\": [], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [], \"valid\": false}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.919,"exit_code":0,"observations":[{"actual":{"has_original":true,"recipients":[["a1@x","hard"]],"valid":true},"check":"capitalised parameter name","expected":{"has_original":true,"recipients":[["a1@x","hard"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[["b@x","delayed"]],"valid":true},"check":"internationalised status part","expected":{"has_original":false,"recipients":[["b@x","delayed"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[],"valid":false},"check":"global message is not a status","expected":{"has_original":false,"recipients":[],"valid":false},"passed":true},{"actual":{"has_original":false,"recipients":[["c@x","soft"],["d1@x","unknown"]],"valid":true},"check":"status class decides","expected":{"has_original":false,"recipients":[["c@x","soft"],["d1@x","unknown"]],"valid":true},"passed":true},{"actual":{"has_original":true,"recipients":[["e@x","hard"]],"valid":true},"check":"padded capitalised action","expected":{"has_original":true,"recipients":[["e@x","hard"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[["f@x","ok"],["g@x","ok"]],"valid":true},"check":"relayed and expanded","expected":{"has_original":false,"recipients":[["f@x","ok"],["g@x","ok"]],"valid":true},"passed":true},{"actual":{"has_original":false,"recipients":[],"valid":false},"check":"not a report","expected":{"has_original":false,"recipients":[],"valid":false},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"capitalised parameter name\", \"actual\": {\"valid\": true, \"recipients\": [[\"a1@x\", \"hard\"]], \"has_original\": true}, \"expected\": {\"has_original\": true, \"recipients\": [[\"a1@x\", \"hard\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"internationalised status part\", \"actual\": {\"valid\": true, \"recipients\": [[\"b@x\", \"delayed\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"b@x\", \"delayed\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"global message is not a status\", \"actual\": {\"valid\": false, \"recipients\": [], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [], \"valid\": false}, \"passed\": true}, {\"check\": \"status class decides\", \"actual\": {\"valid\": true, \"recipients\": [[\"c@x\", \"soft\"], [\"d1@x\", \"unknown\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"c@x\", \"soft\"], [\"d1@x\", \"unknown\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"padded capitalised action\", \"actual\": {\"valid\": true, \"recipients\": [[\"e@x\", \"hard\"]], \"has_original\": true}, \"expected\": {\"has_original\": true, \"recipients\": [[\"e@x\", \"hard\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"relayed and expanded\", \"actual\": {\"valid\": true, \"recipients\": [[\"f@x\", \"ok\"], [\"g@x\", \"ok\"]], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [[\"f@x\", \"ok\"], [\"g@x\", \"ok\"]], \"valid\": true}, \"passed\": true}, {\"check\": \"not a report\", \"actual\": {\"valid\": false, \"recipients\": [], \"has_original\": false}, \"expected\": {\"has_original\": false, \"recipients\": [], \"valid\": false}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}