{"abstract":"Replacing a tab with a space is reported as a change under -b.","category":"Text diff and three-way merge","checks":10,"contract":"Normalize each line: with strip_cr remove one trailing \"\\r\"; mode \"w\" deletes all whitespace (str.split semantics); mode \"b\" collapses runs of spaces and tabs to one space and strips trailing spaces and tabs; mode \"none\" leaves the line. With ignore_blank, drop lines whose normalized key is empty. Return both key lists and whether they are equal.","evaluation_group":"w2-text-diff-merge-whitespace-comparison-modes","failed_approach":"Collapsing every whitespace class also rewrites carriage returns that are content without --strip-trailing-cr.","family":"w2-text-diff-merge-whitespace-comparison-modes-b-mode-run-class","id":"FA-75546","implementations":{"attempt":{"sha256":"91a11c5c8255340f8fe1fd7a4e76b38f4adcca6d7078998810ad72c0f16c1bc3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport re\nN = 1\nobservations = []\ndef solve(a, b, mode, strip_cr, ignore_blank):\n    def norm(line):\n        if strip_cr and line.endswith('\\r'):\n            line = line[:-1]\n        if mode == 'w':\n            return ''.join(line.split())\n        if mode == 'b':\n            return re.sub(r'\\s+', ' ', line).rstrip(' \\t')\n        return line\n    ka = [norm(x) for x in a]\n    kb = [norm(x) for x in b]\n    if ignore_blank:\n        ka = [x for x in ka if x != '']\n        kb = [x for x in kb if x != '']\n    return {'a': ka, 'b': kb, 'equal': ka == kb}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    2: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    3: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    4: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    5: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n}[N]\nfor label, args, expected in cases:\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":"98cab7ce793bd6c8c73df91ce6d419e887786cda8dd7bb9bc159d633f3df84c4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport re\nN = 1\nobservations = []\ndef solve(a, b, mode, strip_cr, ignore_blank):\n    def norm(line):\n        if strip_cr and line.endswith('\\r'):\n            line = line[:-1]\n        if mode == 'w':\n            return ''.join(line.split())\n        if mode == 'b':\n            return re.sub(r'[ ]+', ' ', line).rstrip(' \\t')\n        return line\n    ka = [norm(x) for x in a]\n    kb = [norm(x) for x in b]\n    if ignore_blank:\n        ka = [x for x in ka if x != '']\n        kb = [x for x in kb if x != '']\n    return {'a': ka, 'b': kb, 'equal': ka == kb}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    2: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    3: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    4: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    5: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n}[N]\nfor label, args, expected in cases:\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":"c004dde0f25b1133d2a36dd64148fa02d548feb4cbb32e1f557ed155676cebf5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport re\nN = 1\nobservations = []\ndef solve(a, b, mode, strip_cr, ignore_blank):\n    def norm(line):\n        if strip_cr and line.endswith('\\r'):\n            line = line[:-1]\n        if mode == 'w':\n            return ''.join(line.split())\n        if mode == 'b':\n            return re.sub(r'[ \\t]+', ' ', line).rstrip(' \\t')\n        return line\n    ka = [norm(x) for x in a]\n    kb = [norm(x) for x in b]\n    if ignore_blank:\n        ka = [x for x in ka if x != '']\n        kb = [x for x in kb if x != '']\n    return {'a': ka, 'b': kb, 'equal': ka == kb}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    2: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    3: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    4: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n    5: [('amount of whitespace ignored', [['a  b', 'c\\t\\td  '], ['a b', 'c d'], 'b', False, False], {'a': ['a b', 'c d'], 'b': ['a b', 'c d'], 'equal': True}), ('leading whitespace presence matters under -b', [['  x'], ['x'], 'b', False, False], {'a': [' x'], 'b': ['x'], 'equal': False}), ('all whitespace ignored', [['a b c', ' \\t'], ['abc', ''], 'w', False, False], {'a': ['abc', ''], 'b': ['abc', ''], 'equal': True}), ('carriage return stripped once', [['line\\r', 'two\\r\\r'], ['line', 'two\\r'], 'none', True, False], {'a': ['line', 'two\\r'], 'b': ['line', 'two'], 'equal': False}), ('carriage return kept without the flag', [['cr\\r'], ['cr'], 'b', False, False], {'a': ['cr\\r'], 'b': ['cr'], 'equal': False}), ('interior carriage return is content', [['a\\rb'], ['ab'], 'none', True, False], {'a': ['a\\rb'], 'b': ['ab'], 'equal': False}), ('whitespace-only line is blank only when normalized empty', [['x', '   ', 'y'], ['x', 'y'], 'none', False, True], {'a': ['x', '   ', 'y'], 'b': ['x', 'y'], 'equal': False}), ('blank lines ignored under -w', [['x', ' \\t ', 'y', '', '', '', '', ''], ['x', 'y'], 'w', False, True], {'a': ['x', 'y'], 'b': ['x', 'y'], 'equal': True}), ('tabs under -w', [['k\\tv', 'q'], ['kv', 'q'], 'w', False, False], {'a': ['kv', 'q'], 'b': ['kv', 'q'], 'equal': True}), ('vertical tab under -w', [['m\\x0bn'], ['mn'], 'w', False, False], {'a': ['mn'], 'b': ['mn'], 'equal': True})],\n}[N]\nfor label, args, expected in cases:\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":"A deterministic, bounded teaching model of one diff, patch or merge rule with stipulated conventions; it is not a production diff or version-control implementation and makes no claim of conformance to any specific tool. 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-text-diff-merge-whitespace-comparison-modes-b-mode-run-class","generated_at":"2026-09-29T14:49:07.526526+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Diff options like -w, -b, --strip-trailing-cr and --ignore-blank-lines decide which changes are shown at all.","repair":"Collapse runs of spaces and tabs.","root_cause":"The collapse pattern matches only space characters.","sha256":"a72b2aed0b6378df035a33d168933f71cd8396480327605e55134a05a29a2593","title":"Whitespace comparison modes: -b collapses only spaces, not tabs · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.118,"exit_code":1,"observations":[{"actual":{"a":["a b","c d"],"b":["a b","c d"],"equal":true},"check":"amount of whitespace ignored","expected":{"a":["a b","c d"],"b":["a b","c d"],"equal":true},"passed":true},{"actual":{"a":[" x"],"b":["x"],"equal":false},"check":"leading whitespace presence matters under -b","expected":{"a":[" x"],"b":["x"],"equal":false},"passed":true},{"actual":{"a":["abc",""],"b":["abc",""],"equal":true},"check":"all whitespace ignored","expected":{"a":["abc",""],"b":["abc",""],"equal":true},"passed":true},{"actual":{"a":["line","two\r"],"b":["line","two"],"equal":false},"check":"carriage return stripped once","expected":{"a":["line","two\r"],"b":["line","two"],"equal":false},"passed":true},{"actual":{"a":["cr"],"b":["cr"],"equal":true},"check":"carriage return kept without the flag","expected":{"a":["cr\r"],"b":["cr"],"equal":false},"passed":false},{"actual":{"a":["a\rb"],"b":["ab"],"equal":false},"check":"interior carriage return is content","expected":{"a":["a\rb"],"b":["ab"],"equal":false},"passed":true},{"actual":{"a":["x","   ","y"],"b":["x","y"],"equal":false},"check":"whitespace-only line is blank only when normalized empty","expected":{"a":["x","   ","y"],"b":["x","y"],"equal":false},"passed":true},{"actual":{"a":["x","y"],"b":["x","y"],"equal":true},"check":"blank lines ignored under -w","expected":{"a":["x","y"],"b":["x","y"],"equal":true},"passed":true},{"actual":{"a":["kv","q"],"b":["kv","q"],"equal":true},"check":"tabs under -w","expected":{"a":["kv","q"],"b":["kv","q"],"equal":true},"passed":true},{"actual":{"a":["mn"],"b":["mn"],"equal":true},"check":"vertical tab under -w","expected":{"a":["mn"],"b":["mn"],"equal":true},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"amount of whitespace ignored\", \"actual\": {\"a\": [\"a b\", \"c d\"], \"b\": [\"a b\", \"c d\"], \"equal\": true}, \"expected\": {\"a\": [\"a b\", \"c d\"], \"b\": [\"a b\", \"c d\"], \"equal\": true}, \"passed\": true}, {\"check\": \"leading whitespace presence matters under -b\", \"actual\": {\"a\": [\" x\"], \"b\": [\"x\"], \"equal\": false}, \"expected\": {\"a\": [\" x\"], \"b\": [\"x\"], \"equal\": false}, \"passed\": true}, {\"check\": \"all whitespace ignored\", \"actual\": {\"a\": [\"abc\", \"\"], \"b\": [\"abc\", \"\"], \"equal\": true}, \"expected\": {\"a\": [\"abc\", \"\"], \"b\": [\"abc\", \"\"], \"equal\": true}, \"passed\": true}, {\"check\": \"carriage return stripped once\", \"actual\": {\"a\": [\"line\", \"two\\r\"], \"b\": [\"line\", \"two\"], \"equal\": false}, \"expected\": {\"a\": [\"line\", \"two\\r\"], \"b\": [\"line\", \"two\"], \"equal\": false}, \"passed\": true}, {\"check\": \"carriage return kept without the flag\", \"actual\": {\"a\": [\"cr\"], \"b\": [\"cr\"], \"equal\": true}, \"expected\": {\"a\": [\"cr\\r\"], \"b\": [\"cr\"], \"equal\": false}, \"passed\": false}, {\"check\": \"interior carriage return is content\", \"actual\": {\"a\": [\"a\\rb\"], \"b\": [\"ab\"], \"equal\": false}, \"expected\": {\"a\": [\"a\\rb\"], \"b\": [\"ab\"], \"equal\": false}, \"passed\": true}, {\"check\": \"whitespace-only line is blank only when normalized empty\", \"actual\": {\"a\": [\"x\", \"   \", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": false}, \"expected\": {\"a\": [\"x\", \"   \", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": false}, \"passed\": true}, {\"check\": \"blank lines ignored under -w\", \"actual\": {\"a\": [\"x\", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": true}, \"expected\": {\"a\": [\"x\", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": true}, \"passed\": true}, {\"check\": \"tabs under -w\", \"actual\": {\"a\": [\"kv\", \"q\"], \"b\": [\"kv\", \"q\"], \"equal\": true}, \"expected\": {\"a\": [\"kv\", \"q\"], \"b\": [\"kv\", \"q\"], \"equal\": true}, \"passed\": true}, {\"check\": \"vertical tab under -w\", \"actual\": {\"a\": [\"mn\"], \"b\": [\"mn\"], \"equal\": true}, \"expected\": {\"a\": [\"mn\"], \"b\": [\"mn\"], \"equal\": true}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.237,"exit_code":1,"observations":[{"actual":{"a":["a b","c\t\td"],"b":["a b","c d"],"equal":false},"check":"amount of whitespace ignored","expected":{"a":["a b","c d"],"b":["a b","c d"],"equal":true},"passed":false},{"actual":{"a":[" x"],"b":["x"],"equal":false},"check":"leading whitespace presence matters under -b","expected":{"a":[" x"],"b":["x"],"equal":false},"passed":true},{"actual":{"a":["abc",""],"b":["abc",""],"equal":true},"check":"all whitespace ignored","expected":{"a":["abc",""],"b":["abc",""],"equal":true},"passed":true},{"actual":{"a":["line","two\r"],"b":["line","two"],"equal":false},"check":"carriage return stripped once","expected":{"a":["line","two\r"],"b":["line","two"],"equal":false},"passed":true},{"actual":{"a":["cr\r"],"b":["cr"],"equal":false},"check":"carriage return kept without the flag","expected":{"a":["cr\r"],"b":["cr"],"equal":false},"passed":true},{"actual":{"a":["a\rb"],"b":["ab"],"equal":false},"check":"interior carriage return is content","expected":{"a":["a\rb"],"b":["ab"],"equal":false},"passed":true},{"actual":{"a":["x","   ","y"],"b":["x","y"],"equal":false},"check":"whitespace-only line is blank only when normalized empty","expected":{"a":["x","   ","y"],"b":["x","y"],"equal":false},"passed":true},{"actual":{"a":["x","y"],"b":["x","y"],"equal":true},"check":"blank lines ignored under -w","expected":{"a":["x","y"],"b":["x","y"],"equal":true},"passed":true},{"actual":{"a":["kv","q"],"b":["kv","q"],"equal":true},"check":"tabs under -w","expected":{"a":["kv","q"],"b":["kv","q"],"equal":true},"passed":true},{"actual":{"a":["mn"],"b":["mn"],"equal":true},"check":"vertical tab under -w","expected":{"a":["mn"],"b":["mn"],"equal":true},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"amount of whitespace ignored\", \"actual\": {\"a\": [\"a b\", \"c\\t\\td\"], \"b\": [\"a b\", \"c d\"], \"equal\": false}, \"expected\": {\"a\": [\"a b\", \"c d\"], \"b\": [\"a b\", \"c d\"], \"equal\": true}, \"passed\": false}, {\"check\": \"leading whitespace presence matters under -b\", \"actual\": {\"a\": [\" x\"], \"b\": [\"x\"], \"equal\": false}, \"expected\": {\"a\": [\" x\"], \"b\": [\"x\"], \"equal\": false}, \"passed\": true}, {\"check\": \"all whitespace ignored\", \"actual\": {\"a\": [\"abc\", \"\"], \"b\": [\"abc\", \"\"], \"equal\": true}, \"expected\": {\"a\": [\"abc\", \"\"], \"b\": [\"abc\", \"\"], \"equal\": true}, \"passed\": true}, {\"check\": \"carriage return stripped once\", \"actual\": {\"a\": [\"line\", \"two\\r\"], \"b\": [\"line\", \"two\"], \"equal\": false}, \"expected\": {\"a\": [\"line\", \"two\\r\"], \"b\": [\"line\", \"two\"], \"equal\": false}, \"passed\": true}, {\"check\": \"carriage return kept without the flag\", \"actual\": {\"a\": [\"cr\\r\"], \"b\": [\"cr\"], \"equal\": false}, \"expected\": {\"a\": [\"cr\\r\"], \"b\": [\"cr\"], \"equal\": false}, \"passed\": true}, {\"check\": \"interior carriage return is content\", \"actual\": {\"a\": [\"a\\rb\"], \"b\": [\"ab\"], \"equal\": false}, \"expected\": {\"a\": [\"a\\rb\"], \"b\": [\"ab\"], \"equal\": false}, \"passed\": true}, {\"check\": \"whitespace-only line is blank only when normalized empty\", \"actual\": {\"a\": [\"x\", \"   \", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": false}, \"expected\": {\"a\": [\"x\", \"   \", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": false}, \"passed\": true}, {\"check\": \"blank lines ignored under -w\", \"actual\": {\"a\": [\"x\", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": true}, \"expected\": {\"a\": [\"x\", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": true}, \"passed\": true}, {\"check\": \"tabs under -w\", \"actual\": {\"a\": [\"kv\", \"q\"], \"b\": [\"kv\", \"q\"], \"equal\": true}, \"expected\": {\"a\": [\"kv\", \"q\"], \"b\": [\"kv\", \"q\"], \"equal\": true}, \"passed\": true}, {\"check\": \"vertical tab under -w\", \"actual\": {\"a\": [\"mn\"], \"b\": [\"mn\"], \"equal\": true}, \"expected\": {\"a\": [\"mn\"], \"b\": [\"mn\"], \"equal\": true}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.122,"exit_code":0,"observations":[{"actual":{"a":["a b","c d"],"b":["a b","c d"],"equal":true},"check":"amount of whitespace ignored","expected":{"a":["a b","c d"],"b":["a b","c d"],"equal":true},"passed":true},{"actual":{"a":[" x"],"b":["x"],"equal":false},"check":"leading whitespace presence matters under -b","expected":{"a":[" x"],"b":["x"],"equal":false},"passed":true},{"actual":{"a":["abc",""],"b":["abc",""],"equal":true},"check":"all whitespace ignored","expected":{"a":["abc",""],"b":["abc",""],"equal":true},"passed":true},{"actual":{"a":["line","two\r"],"b":["line","two"],"equal":false},"check":"carriage return stripped once","expected":{"a":["line","two\r"],"b":["line","two"],"equal":false},"passed":true},{"actual":{"a":["cr\r"],"b":["cr"],"equal":false},"check":"carriage return kept without the flag","expected":{"a":["cr\r"],"b":["cr"],"equal":false},"passed":true},{"actual":{"a":["a\rb"],"b":["ab"],"equal":false},"check":"interior carriage return is content","expected":{"a":["a\rb"],"b":["ab"],"equal":false},"passed":true},{"actual":{"a":["x","   ","y"],"b":["x","y"],"equal":false},"check":"whitespace-only line is blank only when normalized empty","expected":{"a":["x","   ","y"],"b":["x","y"],"equal":false},"passed":true},{"actual":{"a":["x","y"],"b":["x","y"],"equal":true},"check":"blank lines ignored under -w","expected":{"a":["x","y"],"b":["x","y"],"equal":true},"passed":true},{"actual":{"a":["kv","q"],"b":["kv","q"],"equal":true},"check":"tabs under -w","expected":{"a":["kv","q"],"b":["kv","q"],"equal":true},"passed":true},{"actual":{"a":["mn"],"b":["mn"],"equal":true},"check":"vertical tab under -w","expected":{"a":["mn"],"b":["mn"],"equal":true},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"amount of whitespace ignored\", \"actual\": {\"a\": [\"a b\", \"c d\"], \"b\": [\"a b\", \"c d\"], \"equal\": true}, \"expected\": {\"a\": [\"a b\", \"c d\"], \"b\": [\"a b\", \"c d\"], \"equal\": true}, \"passed\": true}, {\"check\": \"leading whitespace presence matters under -b\", \"actual\": {\"a\": [\" x\"], \"b\": [\"x\"], \"equal\": false}, \"expected\": {\"a\": [\" x\"], \"b\": [\"x\"], \"equal\": false}, \"passed\": true}, {\"check\": \"all whitespace ignored\", \"actual\": {\"a\": [\"abc\", \"\"], \"b\": [\"abc\", \"\"], \"equal\": true}, \"expected\": {\"a\": [\"abc\", \"\"], \"b\": [\"abc\", \"\"], \"equal\": true}, \"passed\": true}, {\"check\": \"carriage return stripped once\", \"actual\": {\"a\": [\"line\", \"two\\r\"], \"b\": [\"line\", \"two\"], \"equal\": false}, \"expected\": {\"a\": [\"line\", \"two\\r\"], \"b\": [\"line\", \"two\"], \"equal\": false}, \"passed\": true}, {\"check\": \"carriage return kept without the flag\", \"actual\": {\"a\": [\"cr\\r\"], \"b\": [\"cr\"], \"equal\": false}, \"expected\": {\"a\": [\"cr\\r\"], \"b\": [\"cr\"], \"equal\": false}, \"passed\": true}, {\"check\": \"interior carriage return is content\", \"actual\": {\"a\": [\"a\\rb\"], \"b\": [\"ab\"], \"equal\": false}, \"expected\": {\"a\": [\"a\\rb\"], \"b\": [\"ab\"], \"equal\": false}, \"passed\": true}, {\"check\": \"whitespace-only line is blank only when normalized empty\", \"actual\": {\"a\": [\"x\", \"   \", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": false}, \"expected\": {\"a\": [\"x\", \"   \", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": false}, \"passed\": true}, {\"check\": \"blank lines ignored under -w\", \"actual\": {\"a\": [\"x\", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": true}, \"expected\": {\"a\": [\"x\", \"y\"], \"b\": [\"x\", \"y\"], \"equal\": true}, \"passed\": true}, {\"check\": \"tabs under -w\", \"actual\": {\"a\": [\"kv\", \"q\"], \"b\": [\"kv\", \"q\"], \"equal\": true}, \"expected\": {\"a\": [\"kv\", \"q\"], \"b\": [\"kv\", \"q\"], \"equal\": true}, \"passed\": true}, {\"check\": \"vertical tab under -w\", \"actual\": {\"a\": [\"mn\"], \"b\": [\"mn\"], \"equal\": true}, \"expected\": {\"a\": [\"mn\"], \"b\": [\"mn\"], \"equal\": true}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}