Remove the dead submodule-era entries from .soldeerignore - #209
Remove the dead submodule-era entries from .soldeerignore#209thedavidmeister wants to merge 2 commits into
Conversation
`.soldeerignore` named ten paths that do not exist in this repo. Submodule-era residue from the submodule -> soldeer migration: - `.gitmodules` — not in the tree, and `git ls-files --stage` reports zero gitlinks. rainix CI's `no-submodules` check fails on either, so it cannot come back. - `/foundry.lock` — Foundry's git submodule lockfile, already deleted here. - `/lib` — `foundry.toml` sets `libs = ['dependencies']`, so forge resolves under `dependencies/` and never creates `lib/`. Template copied in from a larger Rust/JS-shaped repo, for paths this repo neither has nor gitignores: - `.cargo`, `.coderabbit.yaml`, `.devcontainer.json`, `.envrc`, `.prettierignore`, `/audit`, `/deployments` The remaining entries stay: `.DS_Store`, `.vscode`, `.pre-commit-config.yaml` and the build/publish outputs (`/out`, `/cache`, `/dependencies`, `/remappings.txt`) are absent from a clean checkout by design but present when `soldeer push` runs. Closes #208 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The previous commit removed too much. `.soldeerignore` is a publish FILTER, not a description of the files that exist. An entry naming a path that is absent today is a forward-looking rule: delete it and that file gets published into the soldeer package if anyone adds it later. So absence is not evidence for removal. Only entries tied to a mechanism this repo can no longer use are dead, which is the three submodule-era ones alone: `.gitmodules`, `/foundry.lock` and `/lib`. Those stay removed. This restores the seven that were wrongly dropped — `.cargo`, `.coderabbit.yaml`, `.devcontainer.json`, `.envrc`, `.prettierignore`, `/audit` and `/deployments`. Each names a real, correctly spelled filename (`.cargo`, `.coderabbit.yaml`, `.devcontainer.json`, `.envrc` and `.prettierignore` all exist verbatim in raindex and rainlang), so each still protects the package if that file ever appears here. Net effect of the branch is now exactly three deletions. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
💤 Files with no reviewable changes (1)
WalkthroughThe change updates ChangesSoldeer ignore cleanup
Estimated code review effort: 1 (Trivial) | ~2 minutes Merge Risk: ⚪ Minimal · up to This change removes obsolete submodule-era ignore rules without changing the current Soldeer package contents, so no actionable merge-blocking risk remains after normal checks and review. Possibly related issues
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Closes #208
What changed
Three lines removed from
.soldeerignore, and nothing else in the tree:.gitmodules— there is no.gitmoduleshere, andgit ls-files --stage | grep ^160000is empty, so there are zero committed gitlinks. It cannot come back either: rainix CI runs ano-submodulescheck in thestaticjob that fails on a root.gitmodulesor any gitlink./foundry.lock— Foundry's git submodule lockfile, recording the commit each dependency vendored underlib/is pinned to, soforge install/forge updatecan restore identical submodule revisions. Meaningful only in a repo that vendors dependencies as submodules. Already deleted here./lib—foundry.tomlsetslibs = ['dependencies'], so forge resolves everything underdependencies/and never createslib/.Why only three, when the issue lists ten
The issue also nominated seven template-copied entries (
.cargo,.coderabbit.yaml,.devcontainer.json,.envrc,.prettierignore,/audit,/deployments) on the grounds that those paths do not exist here. That reasoning does not hold, and they are kept..soldeerignoreis a publish filter, not a description of the files that exist. An entry naming an absent path is a forward-looking rule, not residue: delete it and that file gets published into the soldeer package the moment anyone adds it. Absence is therefore not evidence for removal — the only entries genuinely dead are the ones tied to a mechanism this repo can no longer use, and submodules are exactly that.The seven kept entries all name real, correctly spelled filenames, so each still does its job if the file ever appears. Verified against repos that actually have them rather than from memory —
.cargo,.coderabbit.yaml,.devcontainer.json,.envrcand.prettierignoreall exist verbatim at the root ofrainlanguage/raindexandrainlanguage/rainlang. No entry in this file is misspelled, so there was nothing to correct in place either.The issue's own out-of-scope list (
.DS_Store,.vscode,.pre-commit-config.yaml,/out,/cache,/dependencies,/remappings.txt) is untouched for the same reason, plus its stated one.CLAUDE.md:15already reads "Soldeer (not git submodules)" — correct, explicitly out of scope, left alone.REUSE.tomlis the opposite kind of file (its annotations describe files that must actually exist) but needs no change here: it annotates.soldeerignore, which still exists, so no annotation was removed andreuse linthas nothing new to resolve.After this, the only remaining mention of
.gitmodules/foundry.lock/lib/outsidedependencies/is that one correctCLAUDE.mdsentence.Branch history has two commits — the first implemented the issue as filed, the second restores the seven after the filter-vs-description correction. Net diff is exactly three deletions.
QA
Discriminating tests:
soldeerignore-diff.sh— a behavioural differential, not a grep. It mirrors the real post-forge soldeer install, post-forge buildtree (1634 paths, symlinks included — exactly the statesoldeer pushpackages from) into a throwaway git repo and evaluates both.soldeerignorerevisions under gitignore semantics, which is what soldeer'signorecrate implements. Result: 1566 paths excluded underorigin/main, 1566 under this branch, diff empty. So removing the three lines provably changes nothing about what gets published today. It fails on base in the only sense a no-op change permits — point it at a revision that drops a live entry and the diff is non-empty, which is the mutation ledger below.Mutations applied:
negctl.shdrops each kept entry one at a time and re-evaluates, proving the differential can see a real change rather than being a zero-match filter that always says "identical":/dependencies/out/cache/remappings.txt.pre-commit-config.yaml.vscode.DS_StoreThe two survivors are the point of this PR's scope correction, not a gap: a
.soldeerignoreentry whose path is absent is unobservable by construction, which is precisely why survivorship cannot be used as evidence for deleting one..vscodeand.DS_Storeare absent on a CI checkout but present on a real developer machine atsoldeer pushtime. The same is true of all seven entries the issue asked to delete, and it is why they are kept.Harness honesty note: the first run reported
.pre-commit-config.yamlas SURVIVED. That was a lying harness, not a finding —find -type fskipped it because git-hooks.nix installs it as a symlink into the nix store. Fixed to\( -type f -o -type l \), after which it kills; every count above is post-fix.Oracle: the filesystem,
foundry.toml, and other repos' actual contents — all independent of the.soldeerignoretext being edited. Each of the three removed paths was checked for existence, for a.gitignoreentry that could produce it, and for any producer at all:libs = ['dependencies']for/lib; zero gitlinks fromgit ls-files --stage | grep ^160000plus rainix'sno-submodulesgate for.gitmodules. A positive control closes the loop the other way — each removed pattern was re-added alone against a probe tree that does contain its path, and all three correctly excluded it, so "diff empty" is caused by path absence and not by a dead evaluator. The keep decision's oracle is the GitHub contents API forraindexandrainlang, which is what establishes the seven filenames are real and correctly spelled.Category check: the issue asks for lines 10, 21, 23 (submodule-era) and 2, 3, 4, 5, 12, 16, 29 (template-copied). Covered 10, 21, 23. Deliberately not covered: 2, 3, 4, 5, 12, 16, 29 — the premise behind that half of the issue (absent path ⇒ dead entry) is wrong for a publish filter, reasoned above; deleting them would silently widen what
soldeer pushpublishes. The issue's "no reference to.gitmodules,lib/orfoundry.lockoutsidedependencies/" is met — grep leaves onlyCLAUDE.md:15, which the issue itself rules correct. CI green below. The issue should be closed as done on the submodule half and the template half retracted; if the maintainer disagrees, this is the line to push back on.CI
Full rainix-sol suite run locally in
nix develop github:rainlanguage/rainix/53e96a7d0a97d7c7c75c3b2412521324776fdac6#sol-shell— the exactRAINIX_SHAthe reusable workflows pin — all green on the final tree:reuse lintslither .forge fmt --checkrainix-sol-single-contractforge testlegalis the job at risk from touching this repo's metadata files and it is clean.FLARE_RPC_URLwas supplied so the fork suites (FlareInterfacesProd,LibFtsoV2LTS,LibSceptreStakedFlare,LibDineroFlrEth,LibOpFtsoCurrentPricePair, …) actually ran against Flare rather than erroring out — the 85 includes them.🤖 Generated with Claude Code
Summary by CodeRabbit