Turbo's build cache stops being part of the repo (fix #1632) - #1637
Merged
Conversation
7,632 files, ~86% of everything ever committed here, for a tool this repo no longer uses: there is no `turbo.json` anywhere, no package.json names turbo, the lockfile has zero occurrences of it, and no CI step invokes it. What is left is residue — a root `.turbo/` plus one in nine packages. Untracked rather than deleted: the files stay on disk, where a local cache belongs. The ignore pattern carries no leading slash, so the per-package directories are covered by the same line. This does not shrink a clone. The objects are in history, and only a rewrite takes them out — which is the question the pull request asks.
suleimansh
added a commit
that referenced
this pull request
Aug 22, 2026
7,632 files, ~86% of everything ever committed here, for a tool this repo no longer uses: there is no `turbo.json` anywhere, no package.json names turbo, the lockfile has zero occurrences of it, and no CI step invokes it. What is left is residue — a root `.turbo/` plus one in nine packages. Untracked rather than deleted: the files stay on disk, where a local cache belongs. The ignore pattern carries no leading slash, so the per-package directories are covered by the same line. This does not shrink a clone. The objects are in history, and only a rewrite takes them out — which is the question the pull request asks.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1632.
7,632 files, ~86% of everything ever committed to this repo, for a tool the repo no longer uses.
Turbo is not part of this project any more
turbo.jsonanywhere in the treepackage.jsonnaming turbopnpm-lock.yamlnode_modules/.bin/turbo.turbo/directories on diskSo this is not "a cache we should be storing differently" — it is residue.
Even if turbo came back tomorrow the answer would be the same: its cache is keyed by content hashes of task inputs, is per-machine, is never invalidated by git, and grows without bound. A shared turbo cache is what Remote Caching is for; version control has never been the mechanism, and turbo's own scaffolding gitignores the directory.
What this changes
git rm -r --cached .turboplus one ignore line. Untracked, not deleted — the files stay on disk, which is where a local cache belongs. The pattern carries no leading slash, so the nine per-package directories are covered by the same line rather than nine more.Nothing else in the repo moves: no SPEC is touched, because
sdd.mdputs repository mechanics — build, CI, packaging, tooling — outside what a SPEC.md describes.Full suite green: 1536 node + 792 dashboard.
The decision this leaves you — and it expires
This does not shrink a clone. The objects are in history; the 664 MB still transfers on a fresh clone. Only a history rewrite removes them.
.turbo/from history (git-filter-repo), force-push, and re-clone. A fresh clone drops to roughly 115 MB.I would take B, and take it this week. The usual objection to a rewrite is coordination cost, and right now that cost is nearly nil: the repo has zero users, it just moved to
framework/, and there is exactly one open pull request (#1330, untouched since July). Every day of new commits makes the rewrite slightly bigger and the re-clone slightly more annoying; nothing about waiting makes it cheaper.Force-pushing a public repo's
mainis yours to call, not mine, which is why B is not in this PR.How it got here — worth a look of its own
The cache entered in a single commit:
That is the framework's own catch-all safety commit —
git add -Afollowed by that exact message, atsrc/install.ts:48-52andsrc/store/worktree.ts:152-155. Besides the cache it swept in a session'sLOGS.mdand a.the-framework/.gitignore, both files the framework itself had written.The lesson generalises past turbo: a commit path that adds everything it finds is only ever as safe as
.gitignoreis complete. Any large untracked artifact a future tool drops into a checkout gets committed the same way, and nobody notices until a clone takes minutes. Filed separately as #1638 — this PR only cleans up the instance.