Skip to content

chore: remove the submodule-era residue — the dead foundry.lock and its references - #50

Merged
thedavidmeister merged 1 commit into
mainfrom
2026-08-16-remove-submodule-residue
Aug 16, 2026
Merged

chore: remove the submodule-era residue — the dead foundry.lock and its references#50
thedavidmeister merged 1 commit into
mainfrom
2026-08-16-remove-submodule-residue

Conversation

@thedavidmeister

@thedavidmeisterthedavidmeister commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Closes#35.

Configuration only. No Solidity source, no deployed bytecode, no audited artifact.

What was dead, verified on a fresh clone of main (af4e5a9)

foundry.lock is Foundry's git submodule lockfile. This repo takes no submodules:

  • no .gitmodules, no lib/ directory
  • git ls-files --stage | awk '$1=="160000"' → empty (zero gitlinks)
  • foundry.toml sets libs = ['dependencies']; soldeer.lock is the live lockfile, and it holds exactly one package, forge-std 1.16.1

Its two pins contradicted each other and the build:

  • lib/forge-std1801b054, which is forge-std v1.14.0, while the build resolves 1.16.1
  • lib/rain.math.binary → a dependency that appears in neitherfoundry.toml [dependencies]norsoldeer.lock

Not silent either. forge build --force on the clean clone, before this change:

Warning: Dependency 'lib/rain.math.binary' not found at expected path
Warning: Dependency 'lib/forge-std' not found at expected path

Both are gone after it. The one remaining Warning: Found unknown config section in foundry.toml: [package] is pre-existing, is forge deprecating the section soldeer itself uses, and is not this issue.

Submodules also cannot return: rainix-sol-static runs no-submodules, which fails on a root .gitmodules or any committed gitlink.

The references go with the file

None of these fail anything on their own — reuse lint tolerates annotation paths that do not exist, and a .soldeerignore line for an absent path is a no-op. That is exactly why they survived the first pass, so they are removed in the same change rather than left for a third.

  • REUSE.toml — dropped ".gitmodules" and "foundry.lock". "src/lib/LibCodeGen.sol" is kept: that is first-party source that exists, not a lib/ submodule path.
  • .soldeerignore — dropped .gitmodules, /foundry.lock and /lib for the same reason, plus three more absent paths found while checking:
    • .coderabbitai.yaml — no such file, and not gitignored, so nothing can produce it
    • CLAUDE.md — no such file
    • /target — this repo has no Rust: no Cargo.toml, no crates/, target is not in .gitignore, and nothing under nix develop produces one (checked git status --porcelain --ignored after a devShell build: the only ignored-but-present paths are .pre-commit-config.yaml, cache/, dependencies/, out/)

Deliberately kept:.DS_Store, .vscode, .pre-commit-config.yaml, /out, /cache, /dependencies, /docs. 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. .pre-commit-config.yaml in particular is written into the tree by entering the rainix devShell, which the run above confirms.

What ships is unchanged

forge soldeer push --dry-run on main and on this branch produce identical 18-entry file lists. Removing the .soldeerignore lines adds nothing to the package, because none of the paths they named exist.

QA

  • Discriminating tests: n/a — this diff contains no executable code, so there is no behaviour a Solidity test could discriminate on. The equivalent discriminating evidence is the build itself: nix develop -c forge build --force on the unmodified clone emits Warning: Dependency 'lib/rain.math.binary' not found at expected path and Warning: Dependency 'lib/forge-std' not found at expected path, and the same command on this branch emits neither. That pair fails on base and passes here. Alongside it, nix develop -c reuse lint is compliant with REUSE 3.3 (42/42 files, 0 missing/unused/bad) after the two annotation paths are dropped, nix develop -c forge fmt --check is clean, and nix develop -c forge test is 84 passed / 0 failed — byte-identical to the pre-change baseline measured on main at af4e5a9, with no test added, edited or weakened.
  • Mutations applied: n/a — the three files are a deleted JSON lockfile that nothing in the tree reads, a REUSE annotation path list, and a packaging ignore list. None contains a statement a mutant could be applied to or survive in. The nearest analogue was run instead, as a whole-file deletion probe on the packaging config: forge soldeer push --dry-run on main and on this branch produce identical 18-entry package listings, so no removed ignore line was load-bearing.
  • Oracle: the tree and the tooling, not the issue text. Every claim was re-derived on a fresh clone rather than taken from Remove the submodule-era residue — a dead foundry.lock pinning a dependency this repo no longer takes #35git ls-files --stage | awk '$1=="160000"' for the absence of gitlinks, ls -a + git ls-files for the absence of .gitmodules, lib/, CLAUDE.md, .coderabbitai.yaml, Cargo.toml and crates/, soldeer.lock for the one live dependency (forge-std 1.16.1) against foundry.lock's v1.14.0 pin, git status --porcelain --ignored after a devShell build for which ignored paths actually materialise, and rainix's no-submodules — confirmed wired into rainix-sol-static — for the claim that submodules cannot return.
  • Category check: Remove the submodule-era residue — a dead foundry.lock pinning a dependency this repo no longer takes #35 asks for six things — delete foundry.lock; drop REUSE.toml lines 8 and 19 while keeping line 18; drop .soldeerignore lines 2, 7, 11, 18, 20 and 25; no Dependency ... not found warning from forge build; no .gitmodules / lib/ / foundry.lock reference left outside dependencies/ and first-party src/lib/; CI green. All six covered. The last was re-verified by grep after the change: outside dependencies/ there is now no gitmodules and no foundry.lock string anywhere, and every surviving lib/ hit is a first-party src/lib/ path — the REUSE.toml annotation the issue explicitly carves out, plus script/ and test/ imports of src/lib/*.sol.

One consequence to note

REUSE.tomlis in the published package (it appears in the 18-entry dry-run listing above), so the rainix-autopublish soldeer content gate will read this as a content change: merging publishes 0.1.7 and bumps [package].version to 0.1.8. That is correct — the packaged REUSE.toml genuinely changed — but it means a configuration-only PR cuts a release.

Summary by CodeRabbit

  • Chores
    • Updated project file handling and licensing annotation configurations.
    • Removed obsolete entries from package and compliance metadata lists.

foundry.lock is Foundry's git-submodule lockfile. This repo has no
.gitmodules, no lib/ and no gitlinks; dependencies come from soldeer under
dependencies/. Its two pins are both dead: lib/forge-std points at v1.14.0
while the build uses 1.16.1, and lib/rain.math.binary names a dependency that
appears in neither foundry.toml [dependencies] nor soldeer.lock. Nothing reads
it, and forge build emitted a 'Dependency ... not found at expected path'
warning per entry.
The references outlive the file, so they go with it: REUSE.toml annotated
.gitmodules and foundry.lock, and .soldeerignore excluded .gitmodules,
/foundry.lock and /lib. It also excluded .coderabbitai.yaml, CLAUDE.md and
/target, none of which exist here and none of which any tooling produces --
there is no Cargo.toml and no crates/.
.DS_Store, .vscode, .pre-commit-config.yaml and the build outputs stay: those
are absent from a clean checkout by design and present when soldeer push runs.
src/lib/LibCodeGen.sol stays in the REUSE annotation -- it is first-party
source, not a lib/ path.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@thedavidmeisterthedavidmeister self-assigned this Aug 16, 2026
@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a043050c-d3cf-4585-a76c-97a51903baee

📥 Commits

Reviewing files that changed from the base of the PR and between af4e5a9 and e7e947d.

⛔ Files ignored due to path filters (1)
  • foundry.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • .soldeerignore
  • REUSE.toml
💤 Files with no reviewable changes (2)
  • REUSE.toml
  • .soldeerignore

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


Walkthrough

The change removes obsolete .soldeerignore entries and removes .gitmodules and foundry.lock from REUSE.toml. No public declarations or source code change.

Changes

Repository metadata cleanup

Layer / File(s)Summary
Remove stale metadata entries
.soldeerignore, REUSE.toml
.soldeerignore no longer ignores obsolete configuration, submodule, lockfile, library, and target paths. REUSE.toml no longer annotates .gitmodules or foundry.lock.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Merge Risk:⚪ Minimal · up to e7e94

This configuration-only cleanup removes obsolete dependency and packaging references without changing Solidity code or published package contents; no actionable merge-blocking risk remains after normal checks and review.

Possibly related issues

  • rainlanguage/rain.vats.flare#2 — Tracks removal of the same stale .soldeerignore and REUSE.toml entries.
  • rainlanguage/rain.vats#334 — Covers removal of obsolete .gitmodules and foundry.lock metadata.
  • rainlanguage/rain.math.float#258 — Covers removal of obsolete submodule-era metadata entries.
  • rainlanguage/rain.sol.binmaskflag#20 — Targets the same stale .gitmodules, /lib, and foundry.lock references.
  • rainlanguage/rain.math.fixedpoint#29 — Targets the same submodule-era residue.
  • rainlanguage/rain.math.binary#33 — Targets removal of obsolete .gitmodules, /lib, and foundry.lock references.
  • rainlanguage/rain.factory.deploy#12 — Targets removal of stale .gitmodules and foundry.lock entries.
  • rainlanguage/rain.factory#52 — Covers the same metadata cleanup.
  • rainlanguage/rain.solmem#111 — Targets removal of stale submodule-era references.
  • rainlanguage/rain.merkle#17 — Covers removal of obsolete .gitmodules and foundry.lock entries.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check nameStatusExplanationResolution
Linked Issues check❓ InconclusiveThe reviewed configuration removals match issue #35, but deletion of foundry.lock and validation results cannot be verified because foundry.lock is excluded by !**/*.lock.Provide reviewable evidence for foundry.lock deletion and the required build, reference-scan, and CI results; the file is excluded by !**/*.lock.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly identifies the main change: removing the obsolete foundry.lock file and related submodule-era references.
Out of Scope Changes check✅ PassedThe changes remove only stale entries explicitly listed in issue #35 and do not modify Solidity source, bytecode, or audited artifacts.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 2026-08-16-remove-submodule-residue

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thedavidmeister

Copy link
Copy Markdown
ContributorAuthor

Reviewed e7e947d: ready — Closes #35. Three files, 16 deletions, no source and no test touched.

The evidence behind it is what makes it landable rather than plausible. Both Warning: Dependency 'lib/...' not found at expected path warnings reproduce on a clean clone at af4e5a9 and are gone after the change, so the residue was doing something rather than merely sitting there. forge soldeer push --dry-run on main and on the branch produce identical 18-entry package listings, which is the proof the .soldeerignore edits ship nothing new — an ignore-list change is exactly where a quiet addition to a published package would hide. rainix-static no-submodules is wired into rainix-sol-static, so submodules cannot come back unnoticed.

forge test 84 passed, identical before and after.

The consequence is stated in the body rather than left to be discovered: REUSE.toml ships in the package, so autopublish's content gate reads this config-only PR as a content change and will publish 0.1.7 on merge, bumping the manifest to 0.1.8. That is the lifecycle working — #24's reasoning, posted today, is that this repo's next-version slot is self-maintaining and correct for a pure source emitter.

All five checks green, and CodeRabbit actually reviewed this one — Review completed, not the rate-limit banner the coverage PRs carried — with 0 unresolved threads checked via GraphQL. So that zero is coverage rather than vacuous.

@thedavidmeister
thedavidmeister merged commit 2b0e80d into mainAug 16, 2026
5 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove the submodule-era residue — a dead foundry.lock pinning a dependency this repo no longer takes

1 participant

@thedavidmeister