Untrack the cascaded fleet payload - #6
Open
John-David Dalton (jdalton) wants to merge 5 commits into
Open
Conversation
Pins the fleet-pack release bundle this repo tracks and refreshes the git-tracked CI surface to match it: the workflows, the fleet composite actions, and the CLAUDE.md / pnpm-workspace.yaml merged segments. The pin lands first so the payload untrack in the next commit has a release to fetch from.
The fleet payload (scripts/fleet, .claude, .config/fleet, .git-hooks, docs/agents.md, test/fleet) is cascaded content, not repo content. It now ships only in the fleet-pack release bundle and is gitignored here, so the repo tracks 2600 fewer files and a cascade no longer lands as a review-noise commit. A fresh clone repopulates it from the pinned bundle: package.json's prepare hook runs scripts/repo/bootstrap/fleet.mjs before anything that needs a fleet script, and CI hydrates it right after checkout. The git-tracked CI surface (.github/workflows, .github/actions/fleet, .github/dependabot.yml) stays tracked — GitHub reads those from the committed tree before any job can fetch.
Three files under scripts/fleet survived the untrack because the release bundle no longer ships them under those names, so the explicit ignore list could not cover them. Each has a successor the bundle does ship: strip-ai-attribution.mts -> strip-ai-tags.mts check/prose-em-dash-chains-*.mts -> check/prose-em-dashes-are-absent.mts collapse-bot-comments.mts -> .claude/hooks/fleet/bot-comment-collapse-guard They were orphaned by upstream renames and never pruned, because the prune only covers files a previous bundle install recorded and this repo had never installed one. Nothing referenced them. Removing them takes git-tracked scripts/fleet to zero files.
Three files the untrack list swallowed are read by tooling BEFORE the
bootstrap fetch can supply them, so untracking them is not recoverable
by the prepare belt:
.npmrc pnpm reads it at install time. Without it the install
runs with ignore-scripts off and no min-release-age
soak — the supply-chain controls silently lapse.
patches/*.patch pnpm resolves patchedDependencies during install, well
before any lifecycle script runs. A cold clone died
with ENOENT on patches/minimatch@10.2.6.patch.
.github/dependabot.yml
GitHub reads it from the committed default branch. No
job runs, so no fetch can help.
Same rule the fleet already applies to .github/workflows and
.github/actions/fleet: anything a consumer reads before our fetch runs
has to be in the commit.
The cascade rewrote pnpm-workspace.yaml's catalog, so the committed lockfile no longer matched the manifests and CI's --frozen-lockfile install would have failed. Regenerated against the new catalog.
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.
socket-facts stops git-tracking the shared tooling payload. 2,600 files leave the repo; a fresh clone fetches them from the published tooling bundle during
pnpm install. Tracked files go from 2,768 to 165.This is the pilot for the wider move — one repo already works this way, and five more follow this one.
What changed
The payload (
scripts/fleet,.claude,.config/fleet,.git-hooks,docs/agents.md,test/fleet) is shared tooling, not repo content. It now arrives only in the bundle and is gitignored here, so a tooling update no longer lands as a 2,600-file review-noise commit.The repo's tooling config names the bundle version this repo tracks.
package.jsongainedsync-fleetandfleet:status; itspreparealready ran the bootstrap fetch first, so no change was needed there.What stays tracked
Anything a tool reads before our fetch can run has to be in the commit. That was already understood for
.github/workflowsand.github/actions/fleet— GitHub reads those from the committed default branch before any job starts. Three more files turned out to be in the same class, and the untrack list was swallowing all three:.npmrcignore-scriptsandmin-release-agesilently lapsepatches/*.patchENOENT.github/dependabot.ymlReceipts
A cold clone before the fix:
.npmrccarriesignore-scripts=trueandmin-release-age=7. Without it on disk, the very first install of a fresh clone runs every dependency's lifecycle scripts and skips the release-age soak.The Dependabot failure is already visible in the wild. The repo that converted before this one had its
.github/dependabot.ymluntracked the same way, and it now sits on 12 open Dependabot alerts with no update PR since 2026-05-21.Proof
A fresh clone of this branch, with nothing but
pnpm install:pnpm run lint --all,pnpm run type, andpnpm testare green locally (135 tests, 17 files).Also in here
A tooling update rides along, because no bundle release exists at this repo's previous tooling level and the untrack needs a release to fetch from. It refreshes the tracked CI surface and the
CLAUDE.md/pnpm-workspace.yamlmerged sections, and the lockfile is regenerated to match the new catalog so CI's--frozen-lockfileinstall stays happy.Three files under
scripts/fleetsurvived the untrack because the bundle no longer ships them under those names —strip-ai-attribution.mts,check/prose-em-dash-chains-are-absent.mts, andcollapse-bot-comments.mts. Each was orphaned by an upstream rename and never cleaned up, since the cleanup only covers files a previous bundle install recorded and this repo had never installed one. Nothing referenced them, and the bundle ships a successor for each, so they are deleted. Git-trackedscripts/fleetis now zero files.Needs an upstream follow-up
The
.npmrc/patches/dependabot.ymlfix above is local to this repo, and the next conversion run would undo it — the ignore list is rebuilt from the bundle manifest every time. The durable fix belongs upstream, extending the always-tracked set beyond.github/workflowsand.github/actions/fleet. Land that before converting the remaining five repos, or each one repeats these three regressions.The
patchesregression is new since the first repo converted: that one escapes it only because it tracks an older bundle that did not shippatches/. Anything converting against a current bundle hits it.Note
High Risk
Large structural change to how tooling is sourced (git vs bundle) with cold-clone, CI hydration, and pnpm/Dependabot dependencies; mistakes in ignore rules or tracked bootstrap files can break installs or security automation across the fleet pilot.
Overview
Untracks the shared fleet tooling payload (~2,600 paths under
scripts/fleet,.claude,.config/fleet,.git-hooks,docs/agents.md,test/fleet) so they are gitignored and materialized from the published fleet bundle onpnpm install/ CI checkout instead of living in every commit.The repo now pins that bundle in
.config/repo/socket-wheelhouse.json(bundle.ref/cascadeSha) and exposessync-fleetandfleet:statusfor manual fetch/status.preparestill bootstraps viascripts/repo/bootstrap/prepare.mts, which pulls the bundle when needed and reconciles workspace wiring after the first install.Pre-install surfaces stay committed so tools that read the tree before bootstrap can run:
.github/workflowsand.github/actions/fleet(including thin-checkout hydration and the expose-actions-runtime bridge for cache credentials), plus.npmrc,patches/, and.github/dependabot.ymlso cold clones do not lose install policy, patch resolution, or Dependabot.Also removes three orphaned
scripts/fleetfiles the bundle no longer ships under those names, refreshes merged tooling sections and lockfile for the new bundle/catalog, and notes an upstream follow-up to extend the always-tracked set so future repo conversions do not re-break those three files.Reviewed by Cursor Bugbot for commit 8db956e. Configure here.