Git history lab — expected observations / 预期结果 All history, authors, dates and incident wording are synthetic teaching fixtures. Requires Git 2.29+, Python 3.9+, no packages or network. History (oldest first): ce4c0cfdc66b0cc0f2eb40ac8439ed75e49465ad baseline e87088e01edc8b803d103d2e3922b5ffcbcc3ac5 fix-positive-lines 7d41ebcff562a3e75e396667aa6f6f3562d40f52 rename-module 27a0dc5716e1128dfe486074b7a7c2cef6ee98f4 format-spacing git blame -L 3,3 HEAD -- source_lines.py Attributes line 3 to format-spacing (27a0dc57). git blame -w -L 3,4 HEAD -- source_lines.py Attributes both lines to fix-positive-lines (e87088e0), path line_reader.py. git blame --ignore-rev format-spacing -L 3,3 HEAD -- source_lines.py Attributes line 3 to fix-positive-lines. git log --format='%h %s' -p -S 'line number must be positive' HEAD -- '*.py' Only fix-positive-lines, showing addition of the guard and error. git log --format='%h %s' -p -S 'line_number < 1' HEAD -- '*.py' format-spacing, then fix-positive-lines (exact string removed, then added). git log --follow --format='%h %s' -p -S 'line number must be positive' HEAD -- source_lines.py Reaches fix-positive-lines at the previous path. git log --format='%h %s' -L 3,4:source_lines.py HEAD format-spacing, then fix-positive-lines. The unchanged block at the rename has no separate patch. git log --format='%h %s' -L :read_line:source_lines.py HEAD git log --format='%h %s' -L 1,7:source_lines.py HEAD format-spacing, fix-positive-lines, baseline. Behavior for ['alpha', 'omega']: baseline: line 0 -> 'omega'; line -1 -> 'alpha' fixed and later: both raise ValueError Verification: baseline's committed suite: 3 tests OK fix's regression suite against baseline source: 5 tests, 2 EXPECTED failures fix-positive-lines's suite: 5 tests OK rename-module's suite: 5 tests OK format-spacing's suite: 5 tests OK rename-module preserves source bytes format-spacing preserves Python AST git diff --check baseline HEAD: no whitespace errors git fsck --full: succeeds working tree stays clean; no remote is configured The two baseline failures are intentional and checked by the verifier. Any other failure stops verification. Full hashes are fixed by the generator; abbreviated hash lengths and human-readable formatting can vary with Git versions/settings. The script isolates its Git subprocesses from global/system configuration. Commands you type directly use your own configuration, which can affect display. The diff and tests demonstrate behavior for the tested inputs. The synthetic commit message does not prove that a production incident happened. No real application callers, UI integration, or non-integer input validation are modeled.