Repository navigation
Description
What is wrong
REUSE.toml and .soldeerignore still name foundry.lock and .gitmodules — neither of which exists here — and, the part that is not cosmetic, .github/workflows/manual-sol-artifacts.yaml still runs three steps inside ./lib/rain.interpreter, a submodule directory this repo does not have and a dependency it no longer takes. That workflow is the only way this repo deploys, and as written it cannot run.
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.
A deploy workflow pointed at a submodule that is gone
-
.github/workflows/manual-sol-artifacts.yamllines 49–54:- run: nix develop -c rainix-sol-prelude working-directory: ./lib/rain.interpreter - run: nix develop -c rainix-rs-prelude working-directory: ./lib/rain.interpreter - run: nix develop -c i9r-prelude working-directory: ./lib/rain.interpreter
There is no
lib/directory in this repo andgit ls-files --stageon a fresh clone reports zero gitlinks (mode160000).rain.interpreteris not infoundry.toml [dependencies]orsoldeer.lockeither — the interpreter surface this repo uses now arrives as the soldeer packagesrain-interpreter-interface0.1.0 andrainlang0.1.2, underdependencies/. Aworkflow_dispatchrun fails at the first of these three steps, before it reaches therainix-sol-prelude/rainix-sol-artifactssteps that do the actual deploy. This is aworkflow_dispatch-only workflow, so nothing has been exercising it.
Submodule paths that no longer exist
REUSE.tomlline 9 —".gitmodules",. There is no.gitmodulesin the tree and no gitlinks.REUSE.tomlline 18 —"foundry.lock",. There is nofoundry.lock; it was deleted here already, ahead of the ten pass-2 repos that still carry one..soldeerignoreline 25 —/foundry.lock, same absent file.
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: foundry.toml sets libs = ["dependencies"] and soldeer.lock is the live lockfile for 18 packages, all 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
.soldeerignoreline 11 —.envrc. No such file here, and it is not gitignored.flake.nixline 5 —rainix.url = "github:rainprotocol/rainix". The repo has beenrainlanguage/rainixfor a long time; this resolves only through GitHub's rename redirect, andflake.lockalready records the input asrainlanguage/rainix. Same era of residue, one line, worth taking with the rest.
Deliberately not in scope. .soldeerignore also names .DS_Store, .pre-commit-config.yaml and the build/publish outputs (/out, /cache, /dependencies, /node_modules). 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. flake.nix, foundry.toml, remappings.txt, .gitignore, script/, meta/, test/, slither.config.json and README.md were grepped and are otherwise clean; the other three workflows (rainix-sol.yaml, package-release.yaml, git-clean.yaml) never mention lib/. There is no CLAUDE.md, so there is no stale prose describing lib/ submodules to fix here.
Neither annotation blocks its own deletion — reuse lint (the rainix-sol legal job) tolerates annotation paths that do not exist, and a .soldeerignore line for a nonexistent path is a no-op. The workflow does not block anything either, because it only ever runs on demand.
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.pyth only.
Deleting the file was never the whole job — rain.pyth is the case that shows why. The annotations are harmless; the workflow that inherited the same lib/ assumption is not.
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 CI configuration only. No Solidity source, no deployed bytecode and no audited artifact changes.
Done when
-
manual-sol-artifacts.yamllines 49–54 removed, and the workflow re-read end to end against the current soldeer dependency set so aworkflow_dispatchrun reachesrainix-sol-artifacts -
REUSE.tomllines 9 and 18 removed -
.soldeerignorelines 11 and 25 removed -
flake.nixline 5 points atrainlanguage/rainix,flake.lockre-locked - no reference to
.gitmodules,lib/orfoundry.lockremains anywhere in the tree outsidedependencies/ - CI green (
rainix-soltest / static / legal)
Activity