Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/gunnar

crates/gunnar-lfs/tests/transcripts/README.md

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.