← board

Stable binary: fixed-name overwrite (kill vN churn + the dangling-symlink trap)

Problem

make pin records each stable as a new file stable_linux_amd64/default/vN and repoints the pinned/latest symlinks at it. Two costs:

  1. Working-tree churn / bloat. Every pin adds a ~2.8 MB binary that lives in every checkout forever (v1…v36 ≈ 100 MB and growing one-per-pin).
  2. Dangling-symlink trap. A new vN is an untracked path, so git commit -- stable_linux_amd64/ / commit -am silently skip it while still committing the modified pinned -> vN symlink. Origin then has a symlink to a missing file → Track B can't find the pinned binary. This bit v36 (the pinned symlink was committed in 564f7d0, the v36 blob only landed in the follow-up d37d9fb).

Note (sets expectations): git history size is unchanged by any renaming — each distinct binary is one blob regardless of name. This ticket bounds the working tree and removes the trap; it does not shrink history (that would be LFS / out-of-band, a separate decision).

Requirement (from the user)

Retiring the existing 36 versions — keep, searchable, un-littered

Requirement (user): don't lose them, keep them searchable, but stop them cluttering the working tree. Plain git rm felt "blunt"; git mv to an archive dir was floated.

git mv to an in-tree archive does NOT help — moved files still live in every checkout (~100 MB unchanged). "Out of the tree" necessarily means they leave the working tree. The non-blunt way:

This bounds the working tree only; git history still carries every blob (unchanged by rm/mv — that's the LFS/out-of-band conversation, separate).

Out of scope / non-goals

Implementation sketch

Timing / coordination

Changing the symlink targets + git rm the old vN jostles Track B's ground (the pinned file). Do it in a quiet window, not while B is mid-pull/build; tell B to re-pull afterwards.

Log