Skip to content

Remove the submodule-era residue — dangling .soldeerignore entries for .gitmodules, foundry.lock and /lib #15

Description

@thedavidmeister

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

  • .soldeerignore lines 2, 3, 4, 5, 10, 12, 15, 21 and 23 removed
  • no reference to .gitmodules, lib/ or foundry.lock remains anywhere in the tree outside dependencies/
  • CI green (rainix-sol test / static / legal)

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions