{"abstract":"An added last line without newline is shown as if it had one.","category":"Text diff and three-way merge","checks":8,"contract":"Split each text on \"\\n\" into [line, terminated] tokens; a final empty piece produces no token, a final non-empty piece is an unterminated token. Diff the token lists with an LCS walk (tokens equal only if text and terminator flag both match, deletions before insertions on ties) and render each op as tag + text, followed by \"\\ No newline at end of file\" after any unterminated token.","evaluation_group":"w2-text-diff-merge-eof-newline-diff","failed_approach":"Skipping context lines still omits the marker for an unchanged unterminated last line.","family":"w2-text-diff-merge-eof-newline-diff-marker-placement","id":"FA-75501","implementations":{"attempt":{"sha256":"2de3584276b1c7eae5e6c66a59691847262ff5756e50df628122d8d2c961069f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(old, new):\n    def toks(s):\n        parts = s.split('\\n')\n        res = [[p, True] for p in parts[:-1]]\n        if parts[-1] != '':\n            res.append([parts[-1], False])\n        return res\n    def same(x, y):\n        return x == y\n    A, B = toks(old), toks(new)\n    n, m = len(A), len(B)\n    T = [[0] * (m + 1) for _ in range(n + 1)]\n    for i in range(n - 1, -1, -1):\n        for j in range(m - 1, -1, -1):\n            T[i][j] = T[i + 1][j + 1] + 1 if same(A[i], B[j]) else max(T[i + 1][j], T[i][j + 1])\n    ops = []\n    i = j = 0\n    while i < n or j < m:\n        if i < n and j < m and same(A[i], B[j]):\n            ops.append((' ', A[i])); i += 1; j += 1\n        elif i < n and (j >= m or T[i + 1][j] >= T[i][j + 1]):\n            ops.append(('-', A[i])); i += 1\n        else:\n            ops.append(('+', B[j])); j += 1\n    out = []\n    for tag, (text, nl) in ops:\n        out.append(tag + text)\n        if not nl and tag != ' ':\n            out.append('\\\\ No newline at end of file')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only1'], ['+only1', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nold', 'k\\nnew'], [' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    2: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only2'], ['+only2', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nold', 'k\\nk\\nnew'], [' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    3: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only3'], ['+only3', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nold', 'k\\nk\\nk\\nnew'], [' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    4: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only4'], ['+only4', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nk\\nold', 'k\\nk\\nk\\nk\\nnew'], [' k', ' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    5: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only5'], ['+only5', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nk\\nk\\nold', 'k\\nk\\nk\\nk\\nk\\nnew'], [' k', ' k', ' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\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":"b14a0c0b55ac1718e74debf9b8b945b5e71fc027a3fe77dc067f74bffdf8dc78","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(old, new):\n    def toks(s):\n        parts = s.split('\\n')\n        res = [[p, True] for p in parts[:-1]]\n        if parts[-1] != '':\n            res.append([parts[-1], False])\n        return res\n    def same(x, y):\n        return x == y\n    A, B = toks(old), toks(new)\n    n, m = len(A), len(B)\n    T = [[0] * (m + 1) for _ in range(n + 1)]\n    for i in range(n - 1, -1, -1):\n        for j in range(m - 1, -1, -1):\n            T[i][j] = T[i + 1][j + 1] + 1 if same(A[i], B[j]) else max(T[i + 1][j], T[i][j + 1])\n    ops = []\n    i = j = 0\n    while i < n or j < m:\n        if i < n and j < m and same(A[i], B[j]):\n            ops.append((' ', A[i])); i += 1; j += 1\n        elif i < n and (j >= m or T[i + 1][j] >= T[i][j + 1]):\n            ops.append(('-', A[i])); i += 1\n        else:\n            ops.append(('+', B[j])); j += 1\n    out = []\n    for tag, (text, nl) in ops:\n        out.append(tag + text)\n        if not nl and tag == '-':\n            out.append('\\\\ No newline at end of file')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only1'], ['+only1', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nold', 'k\\nnew'], [' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    2: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only2'], ['+only2', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nold', 'k\\nk\\nnew'], [' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    3: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only3'], ['+only3', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nold', 'k\\nk\\nk\\nnew'], [' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    4: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only4'], ['+only4', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nk\\nold', 'k\\nk\\nk\\nk\\nnew'], [' k', ' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    5: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only5'], ['+only5', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nk\\nk\\nold', 'k\\nk\\nk\\nk\\nk\\nnew'], [' k', ' k', ' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\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":"3a8d8a863b6d5480c8e26c56d9572c3e18ed3e622d909e232de99c8798f60f72","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(old, new):\n    def toks(s):\n        parts = s.split('\\n')\n        res = [[p, True] for p in parts[:-1]]\n        if parts[-1] != '':\n            res.append([parts[-1], False])\n        return res\n    def same(x, y):\n        return x == y\n    A, B = toks(old), toks(new)\n    n, m = len(A), len(B)\n    T = [[0] * (m + 1) for _ in range(n + 1)]\n    for i in range(n - 1, -1, -1):\n        for j in range(m - 1, -1, -1):\n            T[i][j] = T[i + 1][j + 1] + 1 if same(A[i], B[j]) else max(T[i + 1][j], T[i][j + 1])\n    ops = []\n    i = j = 0\n    while i < n or j < m:\n        if i < n and j < m and same(A[i], B[j]):\n            ops.append((' ', A[i])); i += 1; j += 1\n        elif i < n and (j >= m or T[i + 1][j] >= T[i][j + 1]):\n            ops.append(('-', A[i])); i += 1\n        else:\n            ops.append(('+', B[j])); j += 1\n    out = []\n    for tag, (text, nl) in ops:\n        out.append(tag + text)\n        if not nl:\n            out.append('\\\\ No newline at end of file')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only1'], ['+only1', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nold', 'k\\nnew'], [' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    2: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only2'], ['+only2', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nold', 'k\\nk\\nnew'], [' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    3: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only3'], ['+only3', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nold', 'k\\nk\\nk\\nnew'], [' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    4: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only4'], ['+only4', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nk\\nold', 'k\\nk\\nk\\nk\\nnew'], [' k', ' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\n    5: [('newline added at end of file', ['a\\nb', 'a\\nb\\n'], [' a', '-b', '\\\\ No newline at end of file', '+b']), ('newline removed at end of file', ['a\\nb\\n', 'a\\nb'], [' a', '-b', '+b', '\\\\ No newline at end of file']), ('unchanged last line without newline', ['x\\ny', 'X\\ny'], ['-x', '+X', ' y', '\\\\ No newline at end of file']), ('both terminated', ['p\\nq\\n', 'p\\nr\\n'], [' p', '-q', '+r']), ('empty to one unterminated line', ['', 'only5'], ['+only5', '\\\\ No newline at end of file']), ('last line changed and unterminated', ['k\\nk\\nk\\nk\\nk\\nold', 'k\\nk\\nk\\nk\\nk\\nnew'], [' k', ' k', ' k', ' k', ' k', '-old', '\\\\ No newline at end of file', '+new', '\\\\ No newline at end of file']), ('trailing blank line', ['a\\n\\n', 'a\\n'], [' a', '-']), ('identical texts', ['s\\nt\\n', 's\\nt\\n'], [' s', ' t'])],\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-eof-newline-diff-marker-placement","generated_at":"2026-09-29T14:49:07.255062+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Unified diffs must show a change that only adds or removes the final newline, and mark which side lacks it.","repair":"Write the marker after every unterminated token, whatever its tag.","root_cause":"The no-newline marker is emitted only for deletions.","sha256":"28d08dfef47ccf93bc41848acfa42eac662eb90d6de788c1689a70eff3875903","title":"End-of-file newline diff: the marker is written only after removed lines · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.862,"exit_code":1,"observations":[{"actual":[" a","-b","\\ No newline at end of file","+b"],"check":"newline added at end of file","expected":[" a","-b","\\ No newline at end of file","+b"],"passed":true},{"actual":[" a","-b","+b","\\ No newline at end of file"],"check":"newline removed at end of file","expected":[" a","-b","+b","\\ No newline at end of file"],"passed":true},{"actual":["-x","+X"," y"],"check":"unchanged last line without newline","expected":["-x","+X"," y","\\ No newline at end of file"],"passed":false},{"actual":[" p","-q","+r"],"check":"both terminated","expected":[" p","-q","+r"],"passed":true},{"actual":["+only1","\\ No newline at end of file"],"check":"empty to one unterminated line","expected":["+only1","\\ No newline at end of file"],"passed":true},{"actual":[" k","-old","\\ No newline at end of file","+new","\\ No newline at end of file"],"check":"last line changed and unterminated","expected":[" k","-old","\\ No newline at end of file","+new","\\ No newline at end of file"],"passed":true},{"actual":[" a","-"],"check":"trailing blank line","expected":[" a","-"],"passed":true},{"actual":[" s"," t"],"check":"identical texts","expected":[" s"," t"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"newline added at end of file\", \"actual\": [\" a\", \"-b\", \"\\\\ No newline at end of file\", \"+b\"], \"expected\": [\" a\", \"-b\", \"\\\\ No newline at end of file\", \"+b\"], \"passed\": true}, {\"check\": \"newline removed at end of file\", \"actual\": [\" a\", \"-b\", \"+b\", \"\\\\ No newline at end of file\"], \"expected\": [\" a\", \"-b\", \"+b\", \"\\\\ No newline at end of file\"], \"passed\": true}, {\"check\": \"unchanged last line without newline\", \"actual\": [\"-x\", \"+X\", \" y\"], \"expected\": [\"-x\", \"+X\", \" y\", \"\\\\ No newline at end of file\"], \"passed\": false}, {\"check\": \"both terminated\", \"actual\": [\" p\", \"-q\", \"+r\"], \"expected\": [\" p\", \"-q\", \"+r\"], \"passed\": true}, {\"check\": \"empty to one unterminated line\", \"actual\": [\"+only1\", \"\\\\ No newline at end of file\"], \"expected\": [\"+only1\", \"\\\\ No newline at end of file\"], \"passed\": true}, {\"check\": \"last line changed and unterminated\", \"actual\": [\" k\", \"-old\", \"\\\\ No newline at end of file\", \"+new\", \"\\\\ No newline at end of file\"], \"expected\": [\" k\", \"-old\", \"\\\\ No newline at end of file\", \"+new\", \"\\\\ No newline at end of file\"], \"passed\": true}, {\"check\": \"trailing blank line\", \"actual\": [\" a\", \"-\"], \"expected\": [\" a\", \"-\"], \"passed\": true}, {\"check\": \"identical texts\", \"actual\": [\" s\", \" t\"], \"expected\": [\" s\", \" t\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.478,"exit_code":1,"observations":[{"actual":[" a","-b","\\ No newline at end of file","+b"],"check":"newline added at end of file","expected":[" a","-b","\\ No newline at end of file","+b"],"passed":true},{"actual":[" a","-b","+b"],"check":"newline removed at end of file","expected":[" a","-b","+b","\\ No newline at end of file"],"passed":false},{"actual":["-x","+X"," y"],"check":"unchanged last line without newline","expected":["-x","+X"," y","\\ No newline at end of file"],"passed":false},{"actual":[" p","-q","+r"],"check":"both terminated","expected":[" p","-q","+r"],"passed":true},{"actual":["+only1"],"check":"empty to one unterminated line","expected":["+only1","\\ No newline at end of file"],"passed":false},{"actual":[" k","-old","\\ No newline at end of file","+new"],"check":"last line changed and unterminated","expected":[" k","-old","\\ No newline at end of file","+new","\\ No newline at end of file"],"passed":false},{"actual":[" a","-"],"check":"trailing blank line","expected":[" a","-"],"passed":true},{"actual":[" s"," t"],"check":"identical texts","expected":[" s"," t"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"newline added at end of file\", \"actual\": [\" a\", \"-b\", \"\\\\ No newline at end of file\", \"+b\"], \"expected\": [\" a\", \"-b\", \"\\\\ No newline at end of file\", \"+b\"], \"passed\": true}, {\"check\": \"newline removed at end of file\", \"actual\": [\" a\", \"-b\", \"+b\"], \"expected\": [\" a\", \"-b\", \"+b\", \"\\\\ No newline at end of file\"], \"passed\": false}, {\"check\": \"unchanged last line without newline\", \"actual\": [\"-x\", \"+X\", \" y\"], \"expected\": [\"-x\", \"+X\", \" y\", \"\\\\ No newline at end of file\"], \"passed\": false}, {\"check\": \"both terminated\", \"actual\": [\" p\", \"-q\", \"+r\"], \"expected\": [\" p\", \"-q\", \"+r\"], \"passed\": true}, {\"check\": \"empty to one unterminated line\", \"actual\": [\"+only1\"], \"expected\": [\"+only1\", \"\\\\ No newline at end of file\"], \"passed\": false}, {\"check\": \"last line changed and unterminated\", \"actual\": [\" k\", \"-old\", \"\\\\ No newline at end of file\", \"+new\"], \"expected\": [\" k\", \"-old\", \"\\\\ No newline at end of file\", \"+new\", \"\\\\ No newline at end of file\"], \"passed\": false}, {\"check\": \"trailing blank line\", \"actual\": [\" a\", \"-\"], \"expected\": [\" a\", \"-\"], \"passed\": true}, {\"check\": \"identical texts\", \"actual\": [\" s\", \" t\"], \"expected\": [\" s\", \" t\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.529,"exit_code":0,"observations":[{"actual":[" a","-b","\\ No newline at end of file","+b"],"check":"newline added at end of file","expected":[" a","-b","\\ No newline at end of file","+b"],"passed":true},{"actual":[" a","-b","+b","\\ No newline at end of file"],"check":"newline removed at end of file","expected":[" a","-b","+b","\\ No newline at end of file"],"passed":true},{"actual":["-x","+X"," y","\\ No newline at end of file"],"check":"unchanged last line without newline","expected":["-x","+X"," y","\\ No newline at end of file"],"passed":true},{"actual":[" p","-q","+r"],"check":"both terminated","expected":[" p","-q","+r"],"passed":true},{"actual":["+only1","\\ No newline at end of file"],"check":"empty to one unterminated line","expected":["+only1","\\ No newline at end of file"],"passed":true},{"actual":[" k","-old","\\ No newline at end of file","+new","\\ No newline at end of file"],"check":"last line changed and unterminated","expected":[" k","-old","\\ No newline at end of file","+new","\\ No newline at end of file"],"passed":true},{"actual":[" a","-"],"check":"trailing blank line","expected":[" a","-"],"passed":true},{"actual":[" s"," t"],"check":"identical texts","expected":[" s"," t"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"newline added at end of file\", \"actual\": [\" a\", \"-b\", \"\\\\ No newline at end of file\", \"+b\"], \"expected\": [\" a\", \"-b\", \"\\\\ No newline at end of file\", \"+b\"], \"passed\": true}, {\"check\": \"newline removed at end of file\", \"actual\": [\" a\", \"-b\", \"+b\", \"\\\\ No newline at end of file\"], \"expected\": [\" a\", \"-b\", \"+b\", \"\\\\ No newline at end of file\"], \"passed\": true}, {\"check\": \"unchanged last line without newline\", \"actual\": [\"-x\", \"+X\", \" y\", \"\\\\ No newline at end of file\"], \"expected\": [\"-x\", \"+X\", \" y\", \"\\\\ No newline at end of file\"], \"passed\": true}, {\"check\": \"both terminated\", \"actual\": [\" p\", \"-q\", \"+r\"], \"expected\": [\" p\", \"-q\", \"+r\"], \"passed\": true}, {\"check\": \"empty to one unterminated line\", \"actual\": [\"+only1\", \"\\\\ No newline at end of file\"], \"expected\": [\"+only1\", \"\\\\ No newline at end of file\"], \"passed\": true}, {\"check\": \"last line changed and unterminated\", \"actual\": [\" k\", \"-old\", \"\\\\ No newline at end of file\", \"+new\", \"\\\\ No newline at end of file\"], \"expected\": [\" k\", \"-old\", \"\\\\ No newline at end of file\", \"+new\", \"\\\\ No newline at end of file\"], \"passed\": true}, {\"check\": \"trailing blank line\", \"actual\": [\" a\", \"-\"], \"expected\": [\" a\", \"-\"], \"passed\": true}, {\"check\": \"identical texts\", \"actual\": [\" s\", \" t\"], \"expected\": [\" s\", \" t\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}