Skip to content

chore: remove submodule-era residue (dead foundry.lock, .gitmodules and root lib/ references) - #259

Open
thedavidmeister wants to merge 1 commit into
mainfrom
chore/258-remove-submodule-residue
Open

chore: remove submodule-era residue (dead foundry.lock, .gitmodules and root lib/ references)#259
thedavidmeister wants to merge 1 commit into
mainfrom
chore/258-remove-submodule-residue

Conversation

@thedavidmeister

@thedavidmeister thedavidmeister commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Closes #258

Why

This repo has no git submodules. There is no .gitmodules, no root lib/, and git ls-files --stage | grep ^160000 is empty. Dependencies come from soldeer — foundry.toml sets libs = ['dependencies'] and soldeer.lock is the live lockfile for the 7 packages under dependencies/.

foundry.lock is Foundry's git submodule lockfile. Every one of its 6 pins names a lib/ path that does not exist, and the set contradicts the live one: it pinned forge-std at 1801b054 (v1.14.0) while soldeer resolves 1.16.1, it pinned lib/rain.math.fixedpoint which has no soldeer counterpart at all, and it had no entry for @openzeppelin-contracts or rain-solmem, which are live. Nothing read it, so nothing reconciled it — but it was not silent: forge build emitted one Dependency '...' not found at expected path warning per entry, 6 on every build.

Submodules cannot come back either — rainix CI runs a no-submodules check that fails on a root .gitmodules or any committed gitlink.

What changed

  • Deleted foundry.lock.
  • REUSE.toml — dropped the "foundry.lock" and ".gitmodules" annotation paths. Both named files absent from the tree.
  • .soldeerignore — dropped .gitmodules, /foundry.lock and /lib. These three go not because the paths are absent today but because they are submodule-era: .gitmodules and root lib/ are the submodule layout itself, and /foundry.lock is the file this PR deletes. rainix CI's no-submodules check fails the build on a root .gitmodules or any gitlink, so no future commit can reintroduce anything these three would filter. src/lib/ is unrelated and unaffected: the pattern was /lib, anchored to the repo root.
  • .soldeerignore — corrected .coderabbitai.yaml to .coderabbit.yaml. The CodeRabbit config filename has no ai in it, so the misspelled line would have let a real config get published to soldeer instead of ignored. This matches the line-2 entry in rainlang.interface and rain.tofu.erc20-decimals, both of which carry a real .coderabbit.yaml.

Left alone deliberately

  • CLAUDE.md. Its lib/... bullets sit under the ### Solidity Layer (src/) heading and describe src/lib/; line 132 already says dependencies are soldeer-managed, "not git submodules". Not stale, so not touched.

  • Every other .soldeerignore entry, whether or not the path exists today. .soldeerignore is a publish filter, not an inventory of the tree: an entry naming a currently-absent file is a forward-looking rule that keeps that file out of the soldeer package if it is ever added. Deleting such a line silently removes that protection. So .DS_Store, .pre-commit-config.yaml, CLAUDE.md, /out, /cache, /dependencies, /target, /node_modules, /dist, /docs and the rest all stay — several of them are build outputs that only exist at forge soldeer install / forge build / cargo build / forge doc time and are therefore present exactly when soldeer push runs. That same reasoning is why .coderabbitai.yaml was corrected in place rather than deleted: dropping a misspelled ignore removes protection instead of restoring it.

    REUSE.toml is the opposite case, which is why its two dead paths do go: its annotations describe files that actually exist and assign them licensing, so a path with no file behind it is residue rather than a rule.

QA

  • Discriminating tests: n/a - this diff deletes a dead lockfile and three dead config lines. It contains no Solidity, Rust or JS, defines no behavior, and is not reachable from any test. The oracle for a removal is that the thing being removed had no readers, which is established by evidence below, not by a unit test.
  • Mutations applied: n/a - no executable line in the diff to mutate. The equivalent falsification was run instead, on the pinned CI shell nix develop github:rainlanguage/rainix/53e96a7d0a97d7c7c75c3b2412521324776fdac6#sol-shell:
    • git ls-files --stage | grep ^160000 -> no output, exit 1. Zero gitlinks, so deleting the .gitmodules references removes nothing live. This is the precondition for the whole change and it was checked before any deletion.
    • forge build -> exit 0, grep -c "not found at expected path" = 0. On main the same command emits 6. That count going 6 -> 0 is the discriminating observation for the foundry.lock deletion.
    • reuse lint (the legal job's exact command) -> exit 0, "Files with copyright information: 154 / 154", "Files with license information: 154 / 154", 0 missing licenses. Removing two annotation path entries left every file still covered — the reverse result (a file dropping out of coverage) is what would have failed here.
    • forge soldeer install -> exit 0, dependencies/ resolves all 7 packages from soldeer.lock with no foundry.lock present, confirming nothing read it.
    • grep -rn over the whole tree for gitmodules, foundry\.lock and coderabbit: the only hits were the 4 lines this PR removes plus the 1 it corrects. Post-change the tree has zero references to any of them outside dependencies/.
  • Oracle: the issue's Done when list, plus the live dependency set in soldeer.lock and the on-disk tree — both independent of foundry.lock, which is precisely the point: the deleted file disagreed with both and nothing noticed.
  • Category check: the issue asks for (a) foundry.lock deleted, (b) both REUSE.toml entries removed, (c) all four .soldeerignore lines removed or corrected, (d) no Dependency '...' not found at expected path warnings, (e) no reference to .gitmodules, root lib/ or foundry.lock anywhere outside dependencies/, (f) CI green. Covered a, b, c, d, e. See the CI note below for f.

CI

legal is green, which is the job this diff could plausibly have broken.

Three failures on this branch are pre-existing on main and untouched by this diff. main last ran on 2026-07-15, so its status badge predates two of them.

  1. rainix-sol / static and rainix-rs-static, step no-ignored-tests: ./test/src/lib/deploy/LibDecimalFloatDeployTaggedConstants.t.sol:24: vm.skip(true);. main's last run (29418592792) fails on the same step, naming that same file, line and expression.
  2. rainix-sol / test, step forge test: 6 failures, and the set is byte-identical to main's last run (29418592976) — testAllPublishedSoldeerTagsHaveAFullConstantSuite (missing *_0_1_7 deploy constants, see Migrate deploy constants to the per-version snapshot canon (src/generated/<tag>/), retiring the flat *_0_1_1 model + its FFI/registry test #252) plus testProdDeployment{Arbitrum,Base,BaseSepolia,Flare,Polygon} ("DecimalFloat not deployed").
  3. copy-artifacts, step Regenerate generated sources: src/generated/ is committed but script/Build.sol was not found. This repo's codegen script is script/BuildPointers.sol. The requirement landed in rainix 98071056 at 2026-07-15T13:46:33Z — 29 minutes after main's last copy-artifacts run started, so main is green on this job only because it has not run since.

None of the three involve foundry.lock, REUSE.toml, .soldeerignore, submodules or licensing. Fixing them is separate work.

🤖 Generated with Claude Code

This repo has no submodules: no `.gitmodules`, no root `lib/`, and
`git ls-files --stage` reports zero gitlinks. `foundry.toml` sets
`libs = ['dependencies']` and `soldeer.lock` is the live lockfile.

- delete `foundry.lock`, the git-submodule lockfile, whose 6 pins all
  name `lib/` paths that do not exist and contradict `soldeer.lock`
  (forge-std 1801b054 = v1.14.0 vs soldeer 1.16.1, plus a
  `lib/rain.math.fixedpoint` pin with no soldeer counterpart). It made
  `forge build` emit 6 `Dependency '...' not found at expected path`
  warnings on every build.
- drop the `foundry.lock` and `.gitmodules` annotation paths from
  `REUSE.toml`.
- drop `.gitmodules`, `/foundry.lock` and `/lib` from `.soldeerignore`.
- fix `.coderabbitai.yaml` -> `.coderabbit.yaml` in `.soldeerignore`;
  the misspelling meant a real CodeRabbit config would be published to
  soldeer rather than ignored. Matches rainlang.interface and
  rain.tofu.erc20-decimals.

Closes #258

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Aug 15, 2026
@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

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: a8b77f33-3565-4d85-aec4-136c8810bb02

📥 Commits

Reviewing files that changed from the base of the PR and between d3fb611 and 367fc2c.

⛔ 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 (1)
  • REUSE.toml

Walkthrough

The change updates .soldeerignore and REUSE.toml to use current repository filenames and remove stale .gitmodules, foundry.lock, and lib entries.

Changes

Repository metadata cleanup

Layer / File(s) Summary
Synchronize ignore and annotation entries
.soldeerignore, REUSE.toml
.soldeerignore now includes .coderabbit.yaml and .gitignore, while removing stale entries. REUSE.toml no longer annotates .gitmodules or foundry.lock.

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

Merge Risk: ⚪ Minimal · up to 367fc

This change removes obsolete submodule-era metadata and corrects an ignore rule without changing application behavior; no actionable merge-blocking risk remains after normal checks and review.

Possibly related issues

  • rainlanguage/rain.datacontract#26 — Removes the same stale .gitmodules, foundry.lock, and lib references.
  • rainlanguage/rain.string#29 — Removes stale repository references and corrects the .coderabbit.yaml entry.
  • rainlanguage/rain.extrospection#47 — Cleans stale .gitmodules, foundry.lock, and related entries.
  • rainlanguage/rain.intorastring#20 — Removes the same stale repository references.
  • rainlanguage/rain.solmem#111 — Removes stale foundry.lock, .gitmodules, and lib references.
  • rainlanguage/rain.lib.memkv#22 — Removes stale entries from .soldeerignore and REUSE.toml.
  • rainlanguage/rain.merkle#17 — Removes stale .gitmodules and foundry.lock annotations.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main cleanup by removing obsolete submodule-era files and references.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/258-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 thedavidmeister added the ai:blocked-on AI producer: blocked on a dependency PR label Aug 16, 2026
@thedavidmeister

Copy link
Copy Markdown
Contributor Author

🤖 ai:producer
Blocked-on: repo not migrated to the split release lifecycle. This chore diff touches only foundry.lock, REUSE.toml and .soldeerignore, yet three checks are red and every one of them is a deploy-lifecycle pin this branch cannot green: (1) rainix-sol / test - testProdDeployment{Arbitrum,Base,BaseSepolia,Flare,Polygon} all revert 'DecimalFloat not deployed', the flat current-deployment prod pin premerge CI tests against, which is exactly what #257 splits out; (2) rainix-sol / test - testAllPublishedSoldeerTagsHaveAFullConstantSuite fails 'MISSING: ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS_0_1_7 LOG_TABLES_DATA_CONTRACT_HASH_0_1_7 ZOLTU_DEPLOYED_DECIMAL_FLOAT_ADDRESS_0_1_7 DECIMAL_FLOAT_CONTRACT_HASH_0_1_7', the flat *_ constant model #252 retires; (3) rs-static and rainix-sol / static - no-ignored-tests flags test/src/lib/deploy/LibDecimalFloatDeployTaggedConstants.t.sol:24 vm.skip(true), which is the registry-unreachable branch of that SAME test in (2) - #252 retires the FFI/registry test outright, taking the skip with it. No producer code change can green any of these: the prod pins need an on-chain deploy (never a producer action, #162) and the constant/skip pair needs the canon migration, not a weakened assertion. NOT covered by either dep, and still red after they land: copy-artifacts fails 'src/generated/ is committed but script/Build.sol was not found, so the committed sources cannot be currency checked here. The codegen script must be script/Build.sol.' - this repo's codegen script is script/BuildPointers.sol (it generates the committed src/generated/LogTables.pointers.sol). That requirement landed in rainix 98071056 after main's last copy-artifacts run, is untracked by any open issue here, and is a rename this chore PR is the wrong place to carry.
blocked-by #257
blocked-by #252

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai:blocked-on AI producer: blocked on a dependency PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove the submodule-era residue — dead foundry.lock, .gitmodules and lib/ references in a repo with no submodules

1 participant