Every git invocation runs through a single blocking subprocess.run
call in python_git/runner.py that always waits for the process to
exit and closes its pipes before returning, so there is no long-lived
Popen handle for a caller to forget to close (the root cause of
GitPython's known fd/process leaks).
Repo exposes status/log/diff/add/commit/push/pull/fetch, branch and
remote management, and clone, backed by dataclasses in models.py.
Covered by tests/test_repo.py, including an fd-count regression test.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>