Recorded git-lfs-transfer transcripts
Every byte in these files was produced by git-lfs 3.7.1 (GitHub; linux amd64; go 1.25.0) talking to gunnar-lfs over the pure-SSH transfer, recorded on 2026-08-03. They are not hand-written and they are not what gunnar thinks the protocol looks like — they are what the real client actually sent and what gunnar actually answered, byte for byte, captured by gunnar-lfs-serve's GUNNAR_LFS_TRANSCRIPT_DIR tee as the bytes passed.
tests/transcript.rs replays each client-to-server.bin through Session::serve and asserts the output equals server-to-client.bin exactly. That guard fires on a machine with no git-lfs on it, and it fires on framing changes that a semantic test would wave through — a stray delim-pkt after a quit status, for instance, which is the one difference that makes the real client print unexpected data.
| pair | what the client was doing | what it proves |
upload.* |
git lfs push --all origin main, two objects |
version → batch(transfer=ssh hash-algo=sha256 refname=…) → put-object+verify-object ×2 → quit |
download.* |
git lfs fetch --all origin, the same two objects |
get-object's mandatory size= argument before the delim, and a quit status with no delim |
lock.* |
the second session git lfs push opens |
list-lock answered 501, after which the client proceeds and hangs up without quit |
The two objects are gunnar lfs\n (11 bytes, e2e5ffeb6125407ed45479208193c5e438f1554f0da8cee77a0f10b1f99578c6) and a 68-byte line (4e73c693de0152ab39b91a62461943231d70eaa78c84ac1e9f196f202c29c53b). They are small on purpose: the fixture is committed, and volume is proved against the live client by tests/interop.rs and against process RSS by tests/streaming.rs instead.
Re-recording
cargo build -p gunnar-lfs --features fs --bin gunnar-lfs-serve
# a shell script standing in for ssh, dispatching `git-lfs-transfer <path> <op>`
# to `gunnar-lfs-serve <git-dir> <op>` — tests/interop.rs writes exactly one
export GIT_SSH_COMMAND=/path/to/fakessh.sh
export GUNNAR_LFS_TRANSCRIPT_DIR=/somewhere
git lfs push --all origin main
The files land as <pid>.<operation>.{client-to-server,server-to-client}.bin. The pid is in the name because git lfs push --all opens two sessions and fixed names let the second truncate the first's recording.