be execs a stale keeper helper → opaque ZINFFAIL clone
be get ssh://host/repo?/branch aborts mid-ingest with KEEPIngestStream failed: ZINFFAIL / WIRECLFL even on a healthy remote (all 19250 objects transfer). The ingest CODE is fine — current source ingests the pack clean. Root cause is a build gap: be execs a SEPARATE keeper binary, but the be-cli CMake target declares no dependency on keeper-cli (nor spot/ graf/sniff). ninja be recompiles the shared keeplib objects yet never relinks the keeper exe, so iterating on be runs a NEW be against an OLD keeper whose ingest predates a landed fix. Relates to GET-009.
be get ssh://localhost/src/dogs?/main → counts/compresses 19250
objects, then be: KEEPIngestStream failed: ZINFFAIL, Error: WIRECLFL.
strace -f -e execve shows be execs build/bin/keeper, which execs
ssh + git upload-pack; the failing ingest is wholly in the keeper child.
ZINFFAIL returns in dog/git/ZINF.c and rebuilding
ONLY be never fired — proof the ingest runs in the un-rebuilt keeper exe.
ninja keeper (relink from the current keeplib objects) → clone succeeds,27 entries checked out, exit 0; pristine source (diagnostics reverted) green.
ninja be co-builds every dog binary be execs (keeper, spot, graf,sniff) so a partial build can't ship a version-skewed helper.
be get ssh://localhost/src/dogs?/main lands a full worktree, exit 0.clone uses ssh-localhost upload-pack.
be-cli links keeplib for in-proc calls but spawns the dog EXES at run
time; those spawn targets were unmodeled build deps. Add add_dependencies(be-cli keeper-cli spot-cli graf-cli sniff-cli) in beagle/CMakeLists.txt (all four exist when beagle/ is configured — the top CMakeLists adds it after them). The dog clis already depend on their own libs, so co-building keeps them current.
add_dependencies line to beagle/CMakeLists.txt.keeper/KEEP.c, ninja be → relinks bin/keeper + bin/be.be get ssh://localhost/src/dogs?/main exit 0, wt full.only the helper binary was stale.