What is wrong
.soldeerignore still names .gitmodules, /foundry.lock and /lib — none of which exists here — alongside a block of entries copied wholesale from a Rust/JS-shaped repo. All of it is residue from the submodule → soldeer migration and the template it was copied through.
There is no .gitmodules in the tree and git ls-files --stage on a fresh clone reports zero gitlinks (mode 160000).
Everything dangling in this repo
Every reference below names a path that does not exist on main. All of it is one removal, not separate work.
Submodule paths that no longer exist
.soldeerignore line 10 — .gitmodules. No such file, no gitlinks.
.soldeerignore line 21 — /foundry.lock. There is no foundry.lock; it was deleted here already, ahead of the ten pass-2 repos that still carry one.
.soldeerignore line 23 — /lib. There is no lib/ directory. foundry.toml sets libs = ['dependencies'], so forge resolves everything under dependencies/ and never creates lib/.
foundry.lock is Foundry's git submodule lockfile — it records the commit each dependency vendored under lib/ is pinned to, so forge install / forge update can restore identical submodule revisions. It is only meaningful in a repo that vendors dependencies as git submodules. This one does not: soldeer.lock is the live lockfile for the single package (forge-std 1.16.1) that lands under dependencies/.
None of it can come back. rainix CI runs a no-submodules check that fails on a root .gitmodules or any committed gitlink.
Other dangling references found while checking
.soldeerignore lines 2, 4, 5, 12 — .cargo, .devcontainer.json, .envrc, .prettierignore. This .soldeerignore was copied from a Rust/JS-shaped repo — it is rain.vats's file minus its last two lines — and none of these files exists here, none is gitignored, so nothing can produce them. There is no Rust in this repo: no Cargo.toml, no crates/.
.soldeerignore line 3 — .coderabbit.yaml. No such file, not gitignored.
.soldeerignore line 15 — CLAUDE.md. There is no CLAUDE.md in this repo.
Deliberately not in scope. .soldeerignore also names .DS_Store, .vscode, .pre-commit-config.yaml and the build/publish outputs (/out, /cache, /dependencies). Those are absent from a clean checkout by design — OS junk, local developer files, or artifacts generated at forge soldeer install / forge build / devShell-entry time and therefore present when soldeer push runs. They are correct ignores and must stay.
Nothing else references any of it. REUSE.toml is clean — every path it annotates exists. .github/workflows/, flake.nix, foundry.toml, remappings.txt, .gitignore, audit/, test/, slither.config.json and README.md were grepped and are clean too. There is no CLAUDE.md, so there is no stale prose describing lib/ submodules to fix here.
None of these lines blocks its own deletion — a .soldeerignore line for a nonexistent path is a no-op. That is exactly why they all survived.
Context
This is the tail of an unfinished migration, not a convention.
Pass 1 of this sweep covered the 17 repos that consume rain.solmem via soldeer. Every one of them carried residue, and each now has its own issue. This is pass 2: a further 17 rainlanguage repos with the same dangling entries — rain.deploy, rain.sol.codegen, rain.factory, rainix, rain.factory.deploy, rain.vats, rain.math.saturating, rain.math.binary, rain.pyth, rain.vats.flare, rain.sol.binmaskflag, rain.math.fixedpoint, rain.metadata, rain.verify.interface, rain.lib.typecast, rain.lib.hash, raindex.interface — of which ten still carry a dead foundry.lock: rain.deploy, rain.sol.codegen, rain.math.saturating, rain.math.binary, rain.sol.binmaskflag, rain.math.fixedpoint, rain.metadata, rain.lib.typecast, rain.lib.hash, raindex.interface. This issue covers rain.verify.interface only.
Deleting the file was never the whole job. The references outlive it silently, because not one of them fails anything. rain.vats, rain.vats.flare and this repo share the same copied .soldeerignore template, so the same correction applies to all three — separately, one issue each.
rainlanguage/flow and rainlanguage/rain.tier.interface genuinely still use git submodules — live gitlinks, verified — so their .gitmodules and lib/ entries are correct and must be left alone.
This is configuration only. No Solidity source, no deployed bytecode and no audited artifact changes.
Done when
What is wrong
.soldeerignorestill names.gitmodules,/foundry.lockand/lib— none of which exists here — alongside a block of entries copied wholesale from a Rust/JS-shaped repo. All of it is residue from the submodule → soldeer migration and the template it was copied through.There is no
.gitmodulesin the tree andgit ls-files --stageon a fresh clone reports zero gitlinks (mode160000).Everything dangling in this repo
Every reference below names a path that does not exist on
main. All of it is one removal, not separate work.Submodule paths that no longer exist
.soldeerignoreline 10 —.gitmodules. No such file, no gitlinks..soldeerignoreline 21 —/foundry.lock. There is nofoundry.lock; it was deleted here already, ahead of the ten pass-2 repos that still carry one..soldeerignoreline 23 —/lib. There is nolib/directory.foundry.tomlsetslibs = ['dependencies'], so forge resolves everything underdependencies/and never createslib/.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 in a repo that vendors dependencies as git submodules. This one does not:soldeer.lockis the live lockfile for the single package (forge-std1.16.1) that lands underdependencies/.None of it can come back. rainix CI runs a
no-submodulescheck that fails on a root.gitmodulesor any committed gitlink.Other dangling references found while checking
.soldeerignorelines 2, 4, 5, 12 —.cargo,.devcontainer.json,.envrc,.prettierignore. This.soldeerignorewas copied from a Rust/JS-shaped repo — it is rain.vats's file minus its last two lines — and none of these files exists here, none is gitignored, so nothing can produce them. There is no Rust in this repo: noCargo.toml, nocrates/..soldeerignoreline 3 —.coderabbit.yaml. No such file, not gitignored..soldeerignoreline 15 —CLAUDE.md. There is noCLAUDE.mdin this repo.Deliberately not in scope.
.soldeerignorealso names.DS_Store,.vscode,.pre-commit-config.yamland the build/publish outputs (/out,/cache,/dependencies). Those are absent from a clean checkout by design — OS junk, local developer files, or artifacts generated atforge soldeer install/forge build/ devShell-entry time and therefore present whensoldeer pushruns. They are correct ignores and must stay.Nothing else references any of it.
REUSE.tomlis clean — every path it annotates exists..github/workflows/,flake.nix,foundry.toml,remappings.txt,.gitignore,audit/,test/,slither.config.jsonandREADME.mdwere grepped and are clean too. There is noCLAUDE.md, so there is no stale prose describinglib/submodules to fix here.None of these lines blocks its own deletion — a
.soldeerignoreline for a nonexistent path is a no-op. That is exactly why they all survived.Context
This is the tail of an unfinished migration, not a convention.
Pass 1 of this sweep covered the 17 repos that consume
rain.solmemvia soldeer. Every one of them carried residue, and each now has its own issue. This is pass 2: a further 17 rainlanguage repos with the same dangling entries — rain.deploy, rain.sol.codegen, rain.factory, rainix, rain.factory.deploy, rain.vats, rain.math.saturating, rain.math.binary, rain.pyth, rain.vats.flare, rain.sol.binmaskflag, rain.math.fixedpoint, rain.metadata, rain.verify.interface, rain.lib.typecast, rain.lib.hash, raindex.interface — of which ten still carry a deadfoundry.lock: rain.deploy, rain.sol.codegen, rain.math.saturating, rain.math.binary, rain.sol.binmaskflag, rain.math.fixedpoint, rain.metadata, rain.lib.typecast, rain.lib.hash, raindex.interface. This issue covers rain.verify.interface only.Deleting the file was never the whole job. The references outlive it silently, because not one of them fails anything. rain.vats, rain.vats.flare and this repo share the same copied
.soldeerignoretemplate, so the same correction applies to all three — separately, one issue each.rainlanguage/flowandrainlanguage/rain.tier.interfacegenuinely still use git submodules — live gitlinks, verified — so their.gitmodulesandlib/entries are correct and must be left alone.This is configuration only. No Solidity source, no deployed bytecode and no audited artifact changes.
Done when
.soldeerignorelines 2, 3, 4, 5, 10, 12, 15, 21 and 23 removed.gitmodules,lib/orfoundry.lockremains anywhere in the tree outsidedependencies/rainix-soltest / static / legal)