{"abstract":"A message whose outermost multipart is never closed is accepted as complete.","category":"Email MIME structure","checks":7,"contract":"events are [\"open\", type] (multipart start), [\"leaf\", type, size] and [\"close\"]. The root multipart has depth 1. An open that would exceed max_depth records \"too-deep\" and its whole subtree (including nested opens) is skipped, but it still counts as a child of its parent. A multipart closing with no children records \"empty-multipart\", a close with nothing open records \"stray-close\", and containers left open record \"unclosed\". Result {leaves, depth (maximum reached), errors}.","evaluation_group":"w2-email_mime_structure-structure-events","failed_approach":"Reporting only skipped or doubly nested containers still accepts an unclosed root. The attempted `if skip or len(stack) > 1: errors.append` still disagrees with a fixture.","family":"w2-email_mime_structure-structure-events-unclosed-report","id":"FA-76546","implementations":{"attempt":{"sha256":"575a02d90527223459414a7cffa10a39c848993ec20cca9cd7745538accc6db3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events, max_depth):\n    stack = []\n    skip = 0\n    leaves = 0\n    depth = 0\n    errors = []\n    for ev in events:\n        kind = ev[0]\n        if skip:\n            if kind == 'open':\n                skip += 1\n            elif kind == 'close':\n                skip -= 1\n            continue\n        if kind == 'open':\n            if stack:\n                stack[-1] += 1\n            if len(stack) + 1 > max_depth:\n                errors.append('too-deep')\n                skip = 1\n                continue\n            stack.append(0)\n            depth = max(depth, len(stack))\n        elif kind == 'leaf':\n            leaves += 1\n            if stack:\n                stack[-1] += 1\n        elif not stack:\n            errors.append('stray-close')\n        elif stack.pop() == 0:\n            errors.append('empty-multipart')\n    if skip or len(stack) > 1:\n        errors.append('unclosed')\n    return {'leaves': leaves, 'depth': depth, 'errors': errors}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 1}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 4], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 1}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 1], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 1], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 2: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 2}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 5], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 2], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 2}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 2], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 2], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 3: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 3}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 6], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 3], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 3}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 3], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 3], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 4: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['leaf', 'image/png', 3], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 4}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 7], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 4], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2], ['leaf', 'text/plain', 3]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 4}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 4], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 4], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 5: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['leaf', 'image/png', 3], ['leaf', 'image/png', 4], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 5}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 8], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 5], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2], ['leaf', 'text/plain', 3], ['leaf', 'text/plain', 4]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 5}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 5], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})]}\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":"dca19e6055e402d09d04c0ca07dfba453524949331867c3ced2e9fafd7716762","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events, max_depth):\n    stack = []\n    skip = 0\n    leaves = 0\n    depth = 0\n    errors = []\n    for ev in events:\n        kind = ev[0]\n        if skip:\n            if kind == 'open':\n                skip += 1\n            elif kind == 'close':\n                skip -= 1\n            continue\n        if kind == 'open':\n            if stack:\n                stack[-1] += 1\n            if len(stack) + 1 > max_depth:\n                errors.append('too-deep')\n                skip = 1\n                continue\n            stack.append(0)\n            depth = max(depth, len(stack))\n        elif kind == 'leaf':\n            leaves += 1\n            if stack:\n                stack[-1] += 1\n        elif not stack:\n            errors.append('stray-close')\n        elif stack.pop() == 0:\n            errors.append('empty-multipart')\n    if len(stack) > 1:\n        errors.append('unclosed')\n    return {'leaves': leaves, 'depth': depth, 'errors': errors}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 1}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 4], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 1}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 1], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 1], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 2: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 2}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 5], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 2], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 2}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 2], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 2], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 3: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 3}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 6], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 3], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 3}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 3], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 3], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 4: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['leaf', 'image/png', 3], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 4}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 7], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 4], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2], ['leaf', 'text/plain', 3]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 4}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 4], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 4], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 5: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['leaf', 'image/png', 3], ['leaf', 'image/png', 4], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 5}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 8], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 5], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2], ['leaf', 'text/plain', 3], ['leaf', 'text/plain', 4]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 5}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 5], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})]}\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":"3cfd44a122e85ff0428bcbb58adeea26488f54ea442855b83a0b4583647abd4a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events, max_depth):\n    stack = []\n    skip = 0\n    leaves = 0\n    depth = 0\n    errors = []\n    for ev in events:\n        kind = ev[0]\n        if skip:\n            if kind == 'open':\n                skip += 1\n            elif kind == 'close':\n                skip -= 1\n            continue\n        if kind == 'open':\n            if stack:\n                stack[-1] += 1\n            if len(stack) + 1 > max_depth:\n                errors.append('too-deep')\n                skip = 1\n                continue\n            stack.append(0)\n            depth = max(depth, len(stack))\n        elif kind == 'leaf':\n            leaves += 1\n            if stack:\n                stack[-1] += 1\n        elif not stack:\n            errors.append('stray-close')\n        elif stack.pop() == 0:\n            errors.append('empty-multipart')\n    if stack:\n        errors.append('unclosed')\n    return {'leaves': leaves, 'depth': depth, 'errors': errors}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\n_CASES = {1: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 1}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 4], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 1}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 1], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 1], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 2: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 2}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 5], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 2], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 2}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 2], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 2], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 3: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 3}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 6], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 3], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 3}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 3], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 3], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 4: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['leaf', 'image/png', 3], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 4}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 7], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 4], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2], ['leaf', 'text/plain', 3]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 4}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 4], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 4], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})], 5: [('three levels with limit two', ([['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close'], ['leaf', 'image/png', 0], ['leaf', 'image/png', 1], ['leaf', 'image/png', 2], ['leaf', 'image/png', 3], ['leaf', 'image/png', 4], ['close']], 2), {'depth': 2, 'errors': ['too-deep'], 'leaves': 5}), ('deep skipped subtree', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['leaf', 'text/plain', 2], ['close'], ['leaf', 'text/plain', 8], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 1}), ('skipped child keeps parent non-empty', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['leaf', 'text/plain', 5], ['close'], ['close']], 1), {'depth': 1, 'errors': ['too-deep'], 'leaves': 0}), ('unterminated root', ([['open', 'multipart/mixed'], ['leaf', 'text/plain', 0], ['leaf', 'text/plain', 1], ['leaf', 'text/plain', 2], ['leaf', 'text/plain', 3], ['leaf', 'text/plain', 4]], 3), {'depth': 1, 'errors': ['unclosed'], 'leaves': 5}), ('deepest branch first', ([['open', 'multipart/mixed'], ['open', 'multipart/mixed'], ['open', 'multipart/alternative'], ['leaf', 'text/plain', 1], ['close'], ['close'], ['open', 'multipart/related'], ['leaf', 'text/html', 5], ['close'], ['close']], 5), {'depth': 3, 'errors': [], 'leaves': 2}), ('stray close', ([['leaf', 'text/plain', 5], ['close']], 2), {'depth': 0, 'errors': ['stray-close'], 'leaves': 1}), ('empty multipart', ([['open', 'multipart/mixed'], ['close']], 2), {'depth': 1, 'errors': ['empty-multipart'], 'leaves': 0})]}\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-structure-events-unclosed-report","generated_at":"2026-09-29T14:49:17.268396+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bounding MIME nesting protects mail parsers from resource exhaustion while keeping the reachable structure intact.","repair":"Use `if stack: errors.append` for the unclosed report decision and keep every other rule of the model unchanged.","root_cause":"The unclosed report decision evaluates `if len(stack) > 1: errors.append` where the contract requires `if stack: errors.append`.","sha256":"5af8f139713ea20699caa45a1dbf8b39d39fe80ce0cc7a6194c3668bb2836cfc","title":"Build a bounded MIME tree summary from parser events: unclosed report · 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.995,"exit_code":1,"observations":[{"actual":{"depth":2,"errors":["too-deep"],"leaves":1},"check":"three levels with limit two","expected":{"depth":2,"errors":["too-deep"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["too-deep"],"leaves":1},"check":"deep skipped subtree","expected":{"depth":1,"errors":["too-deep"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["too-deep"],"leaves":0},"check":"skipped child keeps parent non-empty","expected":{"depth":1,"errors":["too-deep"],"leaves":0},"passed":true},{"actual":{"depth":1,"errors":[],"leaves":1},"check":"unterminated root","expected":{"depth":1,"errors":["unclosed"],"leaves":1},"passed":false},{"actual":{"depth":3,"errors":[],"leaves":2},"check":"deepest branch first","expected":{"depth":3,"errors":[],"leaves":2},"passed":true},{"actual":{"depth":0,"errors":["stray-close"],"leaves":1},"check":"stray close","expected":{"depth":0,"errors":["stray-close"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["empty-multipart"],"leaves":0},"check":"empty multipart","expected":{"depth":1,"errors":["empty-multipart"],"leaves":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three levels with limit two\", \"actual\": {\"leaves\": 1, \"depth\": 2, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 2, \"errors\": [\"too-deep\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"deep skipped subtree\", \"actual\": {\"leaves\": 1, \"depth\": 1, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"too-deep\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"skipped child keeps parent non-empty\", \"actual\": {\"leaves\": 0, \"depth\": 1, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"too-deep\"], \"leaves\": 0}, \"passed\": true}, {\"check\": \"unterminated root\", \"actual\": {\"leaves\": 1, \"depth\": 1, \"errors\": []}, \"expected\": {\"depth\": 1, \"errors\": [\"unclosed\"], \"leaves\": 1}, \"passed\": false}, {\"check\": \"deepest branch first\", \"actual\": {\"leaves\": 2, \"depth\": 3, \"errors\": []}, \"expected\": {\"depth\": 3, \"errors\": [], \"leaves\": 2}, \"passed\": true}, {\"check\": \"stray close\", \"actual\": {\"leaves\": 1, \"depth\": 0, \"errors\": [\"stray-close\"]}, \"expected\": {\"depth\": 0, \"errors\": [\"stray-close\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"empty multipart\", \"actual\": {\"leaves\": 0, \"depth\": 1, \"errors\": [\"empty-multipart\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"empty-multipart\"], \"leaves\": 0}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.733,"exit_code":1,"observations":[{"actual":{"depth":2,"errors":["too-deep"],"leaves":1},"check":"three levels with limit two","expected":{"depth":2,"errors":["too-deep"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["too-deep"],"leaves":1},"check":"deep skipped subtree","expected":{"depth":1,"errors":["too-deep"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["too-deep"],"leaves":0},"check":"skipped child keeps parent non-empty","expected":{"depth":1,"errors":["too-deep"],"leaves":0},"passed":true},{"actual":{"depth":1,"errors":[],"leaves":1},"check":"unterminated root","expected":{"depth":1,"errors":["unclosed"],"leaves":1},"passed":false},{"actual":{"depth":3,"errors":[],"leaves":2},"check":"deepest branch first","expected":{"depth":3,"errors":[],"leaves":2},"passed":true},{"actual":{"depth":0,"errors":["stray-close"],"leaves":1},"check":"stray close","expected":{"depth":0,"errors":["stray-close"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["empty-multipart"],"leaves":0},"check":"empty multipart","expected":{"depth":1,"errors":["empty-multipart"],"leaves":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three levels with limit two\", \"actual\": {\"leaves\": 1, \"depth\": 2, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 2, \"errors\": [\"too-deep\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"deep skipped subtree\", \"actual\": {\"leaves\": 1, \"depth\": 1, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"too-deep\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"skipped child keeps parent non-empty\", \"actual\": {\"leaves\": 0, \"depth\": 1, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"too-deep\"], \"leaves\": 0}, \"passed\": true}, {\"check\": \"unterminated root\", \"actual\": {\"leaves\": 1, \"depth\": 1, \"errors\": []}, \"expected\": {\"depth\": 1, \"errors\": [\"unclosed\"], \"leaves\": 1}, \"passed\": false}, {\"check\": \"deepest branch first\", \"actual\": {\"leaves\": 2, \"depth\": 3, \"errors\": []}, \"expected\": {\"depth\": 3, \"errors\": [], \"leaves\": 2}, \"passed\": true}, {\"check\": \"stray close\", \"actual\": {\"leaves\": 1, \"depth\": 0, \"errors\": [\"stray-close\"]}, \"expected\": {\"depth\": 0, \"errors\": [\"stray-close\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"empty multipart\", \"actual\": {\"leaves\": 0, \"depth\": 1, \"errors\": [\"empty-multipart\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"empty-multipart\"], \"leaves\": 0}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.053,"exit_code":0,"observations":[{"actual":{"depth":2,"errors":["too-deep"],"leaves":1},"check":"three levels with limit two","expected":{"depth":2,"errors":["too-deep"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["too-deep"],"leaves":1},"check":"deep skipped subtree","expected":{"depth":1,"errors":["too-deep"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["too-deep"],"leaves":0},"check":"skipped child keeps parent non-empty","expected":{"depth":1,"errors":["too-deep"],"leaves":0},"passed":true},{"actual":{"depth":1,"errors":["unclosed"],"leaves":1},"check":"unterminated root","expected":{"depth":1,"errors":["unclosed"],"leaves":1},"passed":true},{"actual":{"depth":3,"errors":[],"leaves":2},"check":"deepest branch first","expected":{"depth":3,"errors":[],"leaves":2},"passed":true},{"actual":{"depth":0,"errors":["stray-close"],"leaves":1},"check":"stray close","expected":{"depth":0,"errors":["stray-close"],"leaves":1},"passed":true},{"actual":{"depth":1,"errors":["empty-multipart"],"leaves":0},"check":"empty multipart","expected":{"depth":1,"errors":["empty-multipart"],"leaves":0},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three levels with limit two\", \"actual\": {\"leaves\": 1, \"depth\": 2, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 2, \"errors\": [\"too-deep\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"deep skipped subtree\", \"actual\": {\"leaves\": 1, \"depth\": 1, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"too-deep\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"skipped child keeps parent non-empty\", \"actual\": {\"leaves\": 0, \"depth\": 1, \"errors\": [\"too-deep\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"too-deep\"], \"leaves\": 0}, \"passed\": true}, {\"check\": \"unterminated root\", \"actual\": {\"leaves\": 1, \"depth\": 1, \"errors\": [\"unclosed\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"unclosed\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"deepest branch first\", \"actual\": {\"leaves\": 2, \"depth\": 3, \"errors\": []}, \"expected\": {\"depth\": 3, \"errors\": [], \"leaves\": 2}, \"passed\": true}, {\"check\": \"stray close\", \"actual\": {\"leaves\": 1, \"depth\": 0, \"errors\": [\"stray-close\"]}, \"expected\": {\"depth\": 0, \"errors\": [\"stray-close\"], \"leaves\": 1}, \"passed\": true}, {\"check\": \"empty multipart\", \"actual\": {\"leaves\": 0, \"depth\": 1, \"errors\": [\"empty-multipart\"]}, \"expected\": {\"depth\": 1, \"errors\": [\"empty-multipart\"], \"leaves\": 0}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}