{"abstract":"Lines before a later hunk are reported as removed.","category":"Text diff and three-way merge","checks":8,"contract":"Hunks [old_start, old_len, new_start, new_len] use unified conventions (start is the line before when the length is 0) and are sorted. An old line maps to None if it lies in a hunk's old range; otherwise it moves by the sum of new_len - old_len over hunks entirely before it. A zero-length hunk after line s affects lines from s+1 on. Return the mapped line numbers.","evaluation_group":"w2-text-diff-merge-hunk-line-mapping","failed_approach":"Stopping one line late treats the line just before a hunk as part of it.","family":"w2-text-diff-merge-hunk-line-mapping-later-hunks","id":"FA-75646","implementations":{"attempt":{"sha256":"a3c7f1b8a4ecfafeefd54e6eb245dae0f44056680f8e7dfed12a50eba671f14e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hunks, lines):\n    res = []\n    for ln in lines:\n        shift = 0\n        out = ln\n        for os_, ol, ns, nl in hunks:\n            s = os_ if ol > 0 else os_ + 1\n            if ln < s - 1:\n                break\n            if ln < s + ol:\n                out = None\n                break\n            shift += nl - ol\n        res.append(None if out is None else ln + shift)\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 1]], [5, 6, 7]], [5, 7, 8]), ('pure deletion', [[[3, 1, 2, 0]], [2, 3, 3, 4, 10]], [2, None, None, 3, 9]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 1]], [1, 1])],\n    2: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 2]], [5, 6, 7]], [5, 8, 9]), ('pure deletion', [[[3, 2, 2, 0]], [2, 3, 4, 5, 10]], [2, None, None, 3, 8]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 2]], [1, 2])],\n    3: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 3]], [5, 6, 7]], [5, 9, 10]), ('pure deletion', [[[3, 3, 2, 0]], [2, 3, 5, 6, 10]], [2, None, None, 3, 7]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 3]], [1, 3])],\n    4: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 4]], [5, 6, 7]], [5, 10, 11]), ('pure deletion', [[[3, 4, 2, 0]], [2, 3, 6, 7, 10]], [2, None, None, 3, 6]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 4]], [1, 4])],\n    5: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 5]], [5, 6, 7]], [5, 11, 12]), ('pure deletion', [[[3, 5, 2, 0]], [2, 3, 7, 8, 10]], [2, None, None, 3, 5]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 5]], [1, 5])],\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":"1750a88c4c8e6f16fb4e1cce1fdf7bb6e321d28138c1012ae720d78b725839a2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hunks, lines):\n    res = []\n    for ln in lines:\n        shift = 0\n        out = ln\n        for os_, ol, ns, nl in hunks:\n            s = os_ if ol > 0 else os_ + 1\n            if ln < s + ol:\n                out = None\n                break\n            shift += nl - ol\n        res.append(None if out is None else ln + shift)\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 1]], [5, 6, 7]], [5, 7, 8]), ('pure deletion', [[[3, 1, 2, 0]], [2, 3, 3, 4, 10]], [2, None, None, 3, 9]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 1]], [1, 1])],\n    2: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 2]], [5, 6, 7]], [5, 8, 9]), ('pure deletion', [[[3, 2, 2, 0]], [2, 3, 4, 5, 10]], [2, None, None, 3, 8]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 2]], [1, 2])],\n    3: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 3]], [5, 6, 7]], [5, 9, 10]), ('pure deletion', [[[3, 3, 2, 0]], [2, 3, 5, 6, 10]], [2, None, None, 3, 7]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 3]], [1, 3])],\n    4: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 4]], [5, 6, 7]], [5, 10, 11]), ('pure deletion', [[[3, 4, 2, 0]], [2, 3, 6, 7, 10]], [2, None, None, 3, 6]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 4]], [1, 4])],\n    5: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 5]], [5, 6, 7]], [5, 11, 12]), ('pure deletion', [[[3, 5, 2, 0]], [2, 3, 7, 8, 10]], [2, None, None, 3, 5]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 5]], [1, 5])],\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":"aab39124f240e0d5b7f21f67c12b75c82c38c65ca3b9144132e6026cc1d781f7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hunks, lines):\n    res = []\n    for ln in lines:\n        shift = 0\n        out = ln\n        for os_, ol, ns, nl in hunks:\n            s = os_ if ol > 0 else os_ + 1\n            if ln < s:\n                break\n            if ln < s + ol:\n                out = None\n                break\n            shift += nl - ol\n        res.append(None if out is None else ln + shift)\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 1]], [5, 6, 7]], [5, 7, 8]), ('pure deletion', [[[3, 1, 2, 0]], [2, 3, 3, 4, 10]], [2, None, None, 3, 9]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 1]], [1, 1])],\n    2: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 2]], [5, 6, 7]], [5, 8, 9]), ('pure deletion', [[[3, 2, 2, 0]], [2, 3, 4, 5, 10]], [2, None, None, 3, 8]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 2]], [1, 2])],\n    3: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 3]], [5, 6, 7]], [5, 9, 10]), ('pure deletion', [[[3, 3, 2, 0]], [2, 3, 5, 6, 10]], [2, None, None, 3, 7]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 3]], [1, 3])],\n    4: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 4]], [5, 6, 7]], [5, 10, 11]), ('pure deletion', [[[3, 4, 2, 0]], [2, 3, 6, 7, 10]], [2, None, None, 3, 6]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 4]], [1, 4])],\n    5: [('lines before and after a replacement', [[[5, 2, 5, 3]], [4, 5, 6, 7, 8]], [4, None, None, 8, 9]), ('pure insertion after line five', [[[5, 0, 6, 5]], [5, 6, 7]], [5, 11, 12]), ('pure deletion', [[[3, 5, 2, 0]], [2, 3, 7, 8, 10]], [2, None, None, 3, 5]), ('insertion at the top of the file', [[[0, 0, 1, 2]], [1, 2]], [3, 4]), ('several hunks accumulate', [[[2, 1, 2, 2], [10, 3, 11, 1], [20, 0, 19, 4]], [1, 2, 3, 9, 10, 13, 20, 21]], [1, None, 4, 10, None, 12, 19, 24]), ('line just after a hunk', [[[7, 2, 7, 5]], [8, 9, 10]], [None, 12, 13]), ('last line of a deletion', [[[4, 3, 3, 0]], [6, 7]], [None, 4]), ('no hunks', [[], [1, 5]], [1, 5])],\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-hunk-line-mapping-later-hunks","generated_at":"2026-09-29T14:49:08.940912+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Review tools re-anchor comments on changed files by mapping old line numbers through the diff.","repair":"Stop examining hunks once a hunk starts after the line.","root_cause":"The loop continues past hunks that start after the line, and the range test then matches them.","sha256":"d1cd352e0dc60fbb25a5f7ae33378f030b09938702454b9c94c43128f949678b","title":"Line mapping through hunks: hunks after a line are still examined · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.784,"exit_code":1,"observations":[{"actual":[null,null,null,8,9],"check":"lines before and after a replacement","expected":[4,null,null,8,9],"passed":false},{"actual":[null,7,8],"check":"pure insertion after line five","expected":[5,7,8],"passed":false},{"actual":[null,null,null,3,9],"check":"pure deletion","expected":[2,null,null,3,9],"passed":false},{"actual":[3,4],"check":"insertion at the top of the file","expected":[3,4],"passed":true},{"actual":[null,null,4,null,null,12,null,24],"check":"several hunks accumulate","expected":[1,null,4,10,null,12,19,24],"passed":false},{"actual":[null,12,13],"check":"line just after a hunk","expected":[null,12,13],"passed":true},{"actual":[null,4],"check":"last line of a deletion","expected":[null,4],"passed":true},{"actual":[1,1],"check":"no hunks","expected":[1,1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"lines before and after a replacement\", \"actual\": [null, null, null, 8, 9], \"expected\": [4, null, null, 8, 9], \"passed\": false}, {\"check\": \"pure insertion after line five\", \"actual\": [null, 7, 8], \"expected\": [5, 7, 8], \"passed\": false}, {\"check\": \"pure deletion\", \"actual\": [null, null, null, 3, 9], \"expected\": [2, null, null, 3, 9], \"passed\": false}, {\"check\": \"insertion at the top of the file\", \"actual\": [3, 4], \"expected\": [3, 4], \"passed\": true}, {\"check\": \"several hunks accumulate\", \"actual\": [null, null, 4, null, null, 12, null, 24], \"expected\": [1, null, 4, 10, null, 12, 19, 24], \"passed\": false}, {\"check\": \"line just after a hunk\", \"actual\": [null, 12, 13], \"expected\": [null, 12, 13], \"passed\": true}, {\"check\": \"last line of a deletion\", \"actual\": [null, 4], \"expected\": [null, 4], \"passed\": true}, {\"check\": \"no hunks\", \"actual\": [1, 1], \"expected\": [1, 1], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.309,"exit_code":1,"observations":[{"actual":[null,null,null,8,9],"check":"lines before and after a replacement","expected":[4,null,null,8,9],"passed":false},{"actual":[null,7,8],"check":"pure insertion after line five","expected":[5,7,8],"passed":false},{"actual":[null,null,null,3,9],"check":"pure deletion","expected":[2,null,null,3,9],"passed":false},{"actual":[3,4],"check":"insertion at the top of the file","expected":[3,4],"passed":true},{"actual":[null,null,null,null,null,null,null,24],"check":"several hunks accumulate","expected":[1,null,4,10,null,12,19,24],"passed":false},{"actual":[null,12,13],"check":"line just after a hunk","expected":[null,12,13],"passed":true},{"actual":[null,4],"check":"last line of a deletion","expected":[null,4],"passed":true},{"actual":[1,1],"check":"no hunks","expected":[1,1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"lines before and after a replacement\", \"actual\": [null, null, null, 8, 9], \"expected\": [4, null, null, 8, 9], \"passed\": false}, {\"check\": \"pure insertion after line five\", \"actual\": [null, 7, 8], \"expected\": [5, 7, 8], \"passed\": false}, {\"check\": \"pure deletion\", \"actual\": [null, null, null, 3, 9], \"expected\": [2, null, null, 3, 9], \"passed\": false}, {\"check\": \"insertion at the top of the file\", \"actual\": [3, 4], \"expected\": [3, 4], \"passed\": true}, {\"check\": \"several hunks accumulate\", \"actual\": [null, null, null, null, null, null, null, 24], \"expected\": [1, null, 4, 10, null, 12, 19, 24], \"passed\": false}, {\"check\": \"line just after a hunk\", \"actual\": [null, 12, 13], \"expected\": [null, 12, 13], \"passed\": true}, {\"check\": \"last line of a deletion\", \"actual\": [null, 4], \"expected\": [null, 4], \"passed\": true}, {\"check\": \"no hunks\", \"actual\": [1, 1], \"expected\": [1, 1], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.219,"exit_code":0,"observations":[{"actual":[4,null,null,8,9],"check":"lines before and after a replacement","expected":[4,null,null,8,9],"passed":true},{"actual":[5,7,8],"check":"pure insertion after line five","expected":[5,7,8],"passed":true},{"actual":[2,null,null,3,9],"check":"pure deletion","expected":[2,null,null,3,9],"passed":true},{"actual":[3,4],"check":"insertion at the top of the file","expected":[3,4],"passed":true},{"actual":[1,null,4,10,null,12,19,24],"check":"several hunks accumulate","expected":[1,null,4,10,null,12,19,24],"passed":true},{"actual":[null,12,13],"check":"line just after a hunk","expected":[null,12,13],"passed":true},{"actual":[null,4],"check":"last line of a deletion","expected":[null,4],"passed":true},{"actual":[1,1],"check":"no hunks","expected":[1,1],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"lines before and after a replacement\", \"actual\": [4, null, null, 8, 9], \"expected\": [4, null, null, 8, 9], \"passed\": true}, {\"check\": \"pure insertion after line five\", \"actual\": [5, 7, 8], \"expected\": [5, 7, 8], \"passed\": true}, {\"check\": \"pure deletion\", \"actual\": [2, null, null, 3, 9], \"expected\": [2, null, null, 3, 9], \"passed\": true}, {\"check\": \"insertion at the top of the file\", \"actual\": [3, 4], \"expected\": [3, 4], \"passed\": true}, {\"check\": \"several hunks accumulate\", \"actual\": [1, null, 4, 10, null, 12, 19, 24], \"expected\": [1, null, 4, 10, null, 12, 19, 24], \"passed\": true}, {\"check\": \"line just after a hunk\", \"actual\": [null, 12, 13], \"expected\": [null, 12, 13], \"passed\": true}, {\"check\": \"last line of a deletion\", \"actual\": [null, 4], \"expected\": [null, 4], \"passed\": true}, {\"check\": \"no hunks\", \"actual\": [1, 1], \"expected\": [1, 1], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}