Remove submodule-era residue from .soldeerignore - #554
Conversation
`.soldeerignore` is a publish filter, not a description of the tree, so an entry naming a file that is absent today is normally a forward-looking rule worth keeping. These three are not: they are tied to a dependency mechanism this repo no longer uses and cannot go back to. - `.gitmodules` and `/lib` are the git-submodule vendoring layout. Rainix CI runs a `no-submodules` check that fails on a root `.gitmodules` or any committed gitlink, so no future commit can reintroduce either path for these entries to filter. - `/foundry.lock` is Foundry's git-submodule lockfile — it pins the commit of each dependency vendored under `lib/` so `forge install` / `forge update` can restore identical revisions. It is only meaningful alongside that same banned layout. `soldeer.lock` is the live lockfile here and everything lands under `dependencies/`, because `foundry.toml` sets `libs = ['dependencies']`. Every other entry is left alone, including the ones absent from a clean checkout by design (`.DS_Store`, `/deployments`) — those are OS junk and build output that IS present when `soldeer push` runs, so they still filter. `forge soldeer push --dry-run` packs a byte-identical 525-entry set before and after this change. Closes #553 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
💤 Files with no reviewable changes (1)
📝 WalkthroughWalkthroughThe change removes obsolete submodule-era entries from ChangesSoldeer ignore cleanup
Estimated code review effort: 1 (Trivial) | ~2 minutes Merge Risk: ⚪ Minimal · up to This change removes obsolete submodule-era filter entries without changing the published package contents; no actionable merge-blocking risk remains after normal checks. Possibly related issues
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
🤖 ai:producer |
Closes #553
What changed
Three lines removed from
.soldeerignore. That is the whole diff:The property being applied
.soldeerignoreis a publish filter, not a description of the tree. An entry naming a file that is absent today is a forward-looking rule — it keeps that file out of the soldeer package if anyone ever adds it — so "this path does not exist" is not on its own a reason to delete an entry. Deleting one on that basis removes protection.These three qualify on a different property: each names part of the git-submodule dependency layout, which this repo does not use and cannot go back to. The rule they encode can never fire again, so there is no protection to lose.
.gitmodulesand/libare the submodule vendoring layout itself. Rainix CI runs ano-submodulescheck that fails on a root.gitmodulesor any committed gitlink, so no future commit can reintroduce either path for these entries to filter. Ran that exact check against this branch:no-submodules: clean, andgit ls-files --stage | grep ^160000is empty. Separately,foundry.tomlsetslibs = ['dependencies'], so forge resolves underdependencies/and never createslib/on its own either. The/libpattern is rooted and never matchedsrc/lib/, which is untouched./foundry.lockis Foundry's git-submodule lockfile: it records the commit each dependency vendored underlib/is pinned to, soforge install/forge updatecan restore identical submodule revisions. It is only meaningful alongside that same banned layout.soldeer.lockis the live lockfile here.Not touched, on purpose
Every other entry stays, including the ones with no file on disk today, because absence is not the test:
.DS_Storeand/deploymentsare absent from a clean checkout by design — OS junk and deploy-script output that IS present whensoldeer pushruns. They still filter. Likewise.pre-commit-config.yaml,/out,/cacheand/dependencies, which are generated atforge soldeer install/forge buildtime.REUSE.tomlis the opposite kind of file — its annotations describe files that actually exist — but it needs no change either: it annotates none of the three removed paths, and every path it does annotate resolves.CLAUDE.mdmakes no stale claim that dependencies are submodules underlib/. Left alone.flowandrain.tier.interfacegenuinely still use submodules and must keep their entries.QA
forge soldeer push --dry-runpackaging-equivalence check, run insol-shellat the CI-pinned rainix SHA. Packed the repo with the new.soldeerignoreand withmain's, then compared every zip entry by name + uncompressed size + CRC32. 525 entries both ways, listings byte-identical. Publishing is the only observable.soldeerignorehas — it decides nothing but whatsoldeer pushuploads, andrainix-static soldeer-gatehashes exactly that packed content — so an identical listing is proof the removal is inert today. There is no code in this diff, so no test fails on base: the correct expected result is a null, and the control below is what gives that null meaning./README.md(an ignore for a file that does exist) to.soldeerignoredropped the packed set from 525 to 524 entries, losing exactlyREADME.md 4458 eed4a9dd. The harness does detect a live ignore line; it reported no difference for these three because their rule is dead, not because it cannot see one.no-submodulesbinary plusfoundry.toml'slibs = ['dependencies'], both external to this repo's.soldeerignore. For the inert-today half, the filesystem and git index (ls,git ls-files --stage). Expected packed contents derive from what is on disk, never from the ignore file under test..soldeerignorelines 10, 21 and 23 removed, (b) no reference to.gitmodules,lib/orfoundry.lockanywhere in the tree outsidedependencies/, (c) CI green onrainix-soltest / static / legal. Covered a, b and c. (b) verified by grepping the whole tree excluding.git/anddependencies/: the only two hits before this change were.soldeerignore:10and.soldeerignore:21; everylibhit issrc/lib/or a dependency'ssrc/lib/, neither of which the rooted/libpattern ever matched. Zero hits after.Verification
Run locally in
sol-shellat the CI-pinned rainix SHA53e96a7d0a97d7c7c75c3b2412521324776fdac6, and in CI:legal —
reuse lint: 469/469 files with copyright and license information, 0 missing, compliant with REUSE 3.3. Green locally and in CI. This was the job most at risk from the change, since dropping aREUSE.tomlannotation is what breaks it — hence leavingREUSE.tomluntouched.static — green in CI. Locally:
forge fmt --checkclean,slither .clean,no-submodulesclean.test — CI red, but pre-existing on
mainand identical, not caused by this change.mainata6b7ad73(this branch's merge base) fails the same 5 tests with the same counts:maina6b7ad7testProdDeployArbitrum,testProdDeployBase,testProdDeployBaseSepolia,testProdDeployFlare,testProdDeployPolygon— all[FAIL: Interpreter not deployed]These are fork tests asserting the prod interpreter is live on each chain; they fail because it is not deployed there, which no
.soldeerignoreedit can affect.rainix-solhas been red onmainon every run since at least 2026-07-03. Zero test delta from this PR. This is a real pre-existing defect and is not fixed here — it needs a deployment, not a code change, and is outside the scope of Remove the submodule-era residue —.soldeerignorestill namesfoundry.lock,.gitmodulesand/lib#553.(A local
forge testadditionally fails on unset<NETWORK>_RPC_URLenv vars, which CI'srpc-preflightstep supplies; CI is authoritative for this job.)🤖 Generated with Claude Code
Summary by CodeRabbit
.gitmodules,foundry.lock, and thelibdirectory are no longer excluded from version control.