diff --git a/.changeset/docker-git-lfs.md b/.changeset/docker-git-lfs.md new file mode 100644 index 0000000000..1b87ec38f3 --- /dev/null +++ b/.changeset/docker-git-lfs.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: The Docker image now ships git-lfs, so LFS-tracked files check out as real content instead of stubs. +category: fix +dev: The repository stores binary assets (screenshots) as Git LFS objects, but the runner stage installed plain `git`. Without git-lfs, `git checkout`/`clone` writes ~130-byte pointer files in place of the real content AND reports a clean tree — an agent reading one gets a text stub where an image should be, and any `git lfs` subcommand fails outright. Verified in the running container: `screenshots/fn-061-medieval-desktop.png` was a `version https://git-lfs.github.com/spec/v1` stub across 129 tracked files, and became a valid 753KB PNG after installing git-lfs and running `git lfs pull`. Added to the runner apt install alongside git, with the Dockerfile manifest guard extended so it cannot be dropped again. diff --git a/Dockerfile b/Dockerfile index f3d7a9f3da..14f16303c0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -77,8 +77,13 @@ ENV PORT=4040 # FNXC:DockerRun 2026-08-18-06:05: ripgrep ships by default because the coding agents Fusion drives # reach for `rg` as their primary search tool; without it they silently degrade to slower/partial # fallbacks inside the container while working fine on a developer machine that has it installed. +# FNXC:DockerRun 2026-08-20-04:30: git-lfs ships by default because this repository stores binary +# assets (screenshots) as LFS objects. Without it, git silently checks out 130-byte POINTER FILES +# instead of the real content and reports a clean tree — so an agent reads a text stub where an image +# should be, and `git lfs` subcommands in any workflow fail outright. It is a git dependency, not an +# optional extra: the failure is silent corruption of a working checkout, not a missing feature. RUN apt-get update \ - && apt-get install -y --no-install-recommends git ca-certificates ripgrep curl gnupg \ + && apt-get install -y --no-install-recommends git git-lfs ca-certificates ripgrep curl gnupg \ && rm -rf /var/lib/apt/lists/* # FNXC:DockerRun 2026-08-18-06:40: gh, tailscale, and cloudflared ship in the image. diff --git a/screenshots/fn-096-chat-header-new-desktop.png b/screenshots/fn-096-chat-header-new-desktop.png index 473a2af832..ecb46c3979 100644 Binary files a/screenshots/fn-096-chat-header-new-desktop.png and b/screenshots/fn-096-chat-header-new-desktop.png differ diff --git a/screenshots/fn-096-chat-header-new-mobile.png b/screenshots/fn-096-chat-header-new-mobile.png index 113d67fe78..2b728496f1 100644 Binary files a/screenshots/fn-096-chat-header-new-mobile.png and b/screenshots/fn-096-chat-header-new-mobile.png differ diff --git a/screenshots/fn-099-task-chat-model-menu-desktop.png b/screenshots/fn-099-task-chat-model-menu-desktop.png index 490bed5361..965f489d37 100644 Binary files a/screenshots/fn-099-task-chat-model-menu-desktop.png and b/screenshots/fn-099-task-chat-model-menu-desktop.png differ diff --git a/screenshots/fn-099-task-chat-model-menu-mobile.png b/screenshots/fn-099-task-chat-model-menu-mobile.png index 95cdfae257..97a1b68416 100644 Binary files a/screenshots/fn-099-task-chat-model-menu-mobile.png and b/screenshots/fn-099-task-chat-model-menu-mobile.png differ diff --git a/scripts/__tests__/dockerfile-workspace-manifests.test.mjs b/scripts/__tests__/dockerfile-workspace-manifests.test.mjs index b6c36a5269..abbc882612 100644 --- a/scripts/__tests__/dockerfile-workspace-manifests.test.mjs +++ b/scripts/__tests__/dockerfile-workspace-manifests.test.mjs @@ -131,6 +131,16 @@ test("runner stage installs ca-certificates alongside git", () => { /\bripgrep\b/, "runner stage must install ripgrep — the coding agents Fusion drives use `rg` as their primary search tool", ); + /* + FNXC:DockerRun 2026-08-20-04:30: + Without git-lfs, git checks out 130-byte pointer files in place of LFS-tracked binaries and still + reports a clean tree — silent corruption of a working checkout rather than a visibly missing tool. + */ + assert.match( + aptInstall, + /\bgit-lfs\b/, + "runner stage must install git-lfs — LFS-tracked assets otherwise check out as pointer stubs and git reports the tree clean", + ); }); /*