Uh oh!
There was an error while loading. Please reload this page.
Point the five tooling interface docstrings at a path the published package ships - #132
Point the five tooling interface docstrings at a path the published package ships#132thedavidmeister wants to merge 5 commits into
Conversation
Warning Review limit reached
Next review available in:1 minute Limit details: You’ve used all 1 included review currently available under your plan. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
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 |
Resolves the four src/interface conflicts by keeping origin/main's view mutability and its accompanying note, and replacing the stripped .github path sentence with the script/Build.sol one.
`test/src/PublishedSourcePaths.t.sol` walked `src` in Solidity and parsed `.soldeerignore` to assert no shipped source names a stripped path. The check is worth having once, in `rainix-static`, not per-repo in `forge test`: rainlanguage/rainix#317 item 4 owns it now. Deleting it returns `foundry.toml`'s `fs_permissions` to its base three entries; the three read grants (`.soldeerignore`, `src`, `script`) existed only for this test. The five docstring rewrites this PR is for are untouched. They now have no test guarding them and can regress silently, which the PR body states plainly. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This branch rewrote the five tooling-interface docstrings to point at `script/Build.sol` "in this package" as a worked example. #138 deleted that file, and rewrote the same five docstrings to point at rainix's `rainix-copy-artifacts.yaml` as the test and at `rain.deploy`'s `script/Build.sol` as the worked example — closing issue #95 in the process. Taking `main`'s docstrings wholesale. Keeping this branch's text would reintroduce a claim that the package ships a worked example, which is exactly what #138 removed. This branch is now a no-op against `main`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
thedavidmeister
commented
Aug 17, 2026
Closing: this PR is now an empty diff, and the issue it served is closed. #138 rewrote the same five docstrings and closed #95 (2026-08-17T03:33Z). This Closing rather than merging, because its original text was not merely redundant
What is on Nothing here is lost. The branch is left in place as the audit trail. |
Important
OBSOLETE against post-#138
main— this branch is now an empty diff.Left open for the human to rule on; nothing here is a close decision.
Issue #95 is CLOSED, completed by #138
(#95). #138 rewrote the
same five docstrings this PR rewrites, to:
This PR's replacement text is worse against the current tree, not merely
redundant: it says "
script/Build.solin this package is a worked example ofsuch a generation", and #138 deleted
script/Build.solfrom this package. Thehuman ruling behind #138 is that this repo carries no worked example at all —
rain.deployis the org's — so restoring that sentence would reintroduce thescope the ruling removed.
mainwas merged in and its docstrings taken wholesale.git diff origin/mainon the merge commit is empty. Nothing in this branch islost by that: every claim it makes about where the check lives,
mainnowmakes more precisely.
Original PR description, kept for the record.
Closes#95
What
All five tooling-interface function docstrings ended
See .github/workflows/build-pointers.yaml for an example of such a test..soldeerignore:4is.github, so that path is guaranteed absent from thedirectory consumers read these interfaces from
(
dependencies/rain-sol-codegen-<version>/src/interface/).The five sentences now point at
script/Build.sol, which the published packagedoes carry, and state the check inline so the sentence stands on its own:
That is the whole change. Five docstrings, no behaviour.
No test, and what that costs
This change can regress silently. No test in this repo guards it. Anyone can
put
.github/workflows/build-pointers.yaml— or any other.soldeerignoredpath — back into one of these docstrings and the suite will stay green. Nothing
in
forge testreads.soldeerignore, and after this PR nothing does.An earlier revision of this PR added
test/src/PublishedSourcePaths.t.sol(134lines) which read
.soldeerignore, walkedsrc, and asserted no shipped.solnamed a stripped directory. That file is deleted here, along with the three
fs_permissionsread grants (.soldeerignore,src,script) it needed, sofoundry.tomlreturns to its base three-entry block unchanged.The check itself is worth having; the place for it is not a hand-rolled tree
walker written in Solidity and run by
forge test. It is rehomed torainlanguage/rainix#317,
item 4 ("Published sources name no stripped path"), which will implement it once
in
rainix-staticin Rust with bats coverage, and every consumer repo inheritsit through the reusables instead of copying it. Until #317 lands, this class of
defect is unenforced everywhere, here included.
The deleted test also would not have caught the live instance of the very defect
it guards. It walked
srconly, soscript/Build.sol— which ships, and whoseline 8 imports
../test/concrete/CodeGennable.solwhile.soldeerignore:20is/test— was outside its scope by construction.README.mdandREUSE.tomlcarry the same defect and were likewise outside it. A
src-only walk was thescope that made the harness tractable, not the scope the problem has.
(
script/Build.sol's dangling import is owned by #76.)Where the issue's proposed fix was wrong
The issue proposed pointing at rainix's
rainix-copy-artifacts.yamlreusableworkflow. That swaps one path a consumer cannot resolve for another: the
reusable lives in
rainlanguage/rainix, not in this package, and naming itbare gives a reader of
dependencies/rain-sol-codegen-<version>/nothing toopen. The replacement had to be a path the package actually ships.
Verified against the real published artifact, not the repo tree. Downloaded
rain-sol-codegen~0.1.16(the latest revision on the Soldeer registry at thetime of writing) from
https://soldeer-revisions.s3.amazonaws.com/rain-sol-codegen/0_1_16_16-08-2026_18:45:19_rain.sol.zipand listed it:
No
.github/in the archive;script/Build.solis in it. Grepping theextracted archive for
.githubreturns the five interface hits this PR fixes(plus README and metadata hits, left alone — see "Not touched").
Why this PR shipped a test at all
The fixer brief driving this fleet said "every fix ships a test, verify-by-hand
is never acceptable", with no exemption for changes that have no behaviour. That
instruction was wrong and has been corrected. It produced hand-rolled static
analysis in Solidity across nine PRs in this repo — 1,173 lines of TOML parsing,
glob expansion and tree walking, catalogued in rainix#317. This PR was one of
them. The docstring fix stands on its own; the harness does not.
Merged
origin/main#92 landed while this was open, changing all four interfaces' mutability from
puretoviewand adding a mutability note to each of the five docstrings.origin/mainis merged in (never rebased). Each conflict is resolved by keeping#92's
viewsignature and its whole note verbatim, and replacing only thetrailing
.github/...sentence with this PR's. Nothing from #92, #93 or #94 isreverted or reworded.
CodeRabbit
CodeRabbit's check reports
pass, but its comment on this PR isReview limit reached— it never started a review. That green is an absence ofreview, not a passed one, and there are zero review threads (resolved or
unresolved) to address.
Not touched
src/interface/*.solalso carry findings owned by IParserToolingV1 and ISubParserToolingV1 declare their builders pure, which forbids every implementation that reads storage or an immutable #92, All four tooling interfaces fold their whole description into @title, emitting no contract-level @notice #93 and No @return on any of the five tooling interface functions, so the pointer encoding is documented nowhere the compiler carries #94. This PRchanges only the trailing sentence of each of the five docstrings; the
pure/viewmutability, the missing@notice, and the missing@returnareuntouched.
.soldeerignoreis unchanged. .soldeerignore carries entries for .vscode and /docs, paths that have never existed in this repo #91 owns its dead entries, and All five interface docstrings point consumers at .github/workflows/build-pointers.yaml, which .soldeerignore strips from the published package #95 needed nochange to it.
README.mdnames.github/workflows/build-pointers.yaml,.github/workflows/rainix.yamland.github/workflows/package-release.yaml,and ships in the package with the same dangling-path problem. Outside what All five interface docstrings point consumers at .github/workflows/build-pointers.yaml, which .soldeerignore strips from the published package #95
names, so left alone — and now covered by rainix#317 rather than by anything
here.
script/Build.solships but imports../test/concrete/CodeGennable.sol,which
.soldeerignorestrips — The published package is never compiled as published, and ships a file whose import it excludes #76 already owns that. The docstring referenceis to the file as an example, which is sound today and gets sounder when The published package is never compiled as published, and ships a file whose import it excludes #76
lands.
QA
Ran 18 test suites in 1.71s (17.06s CPU time): 142 tests passed, 0 failed, 0 skipped (142 total tests). Was 19 suites / 144 tests withPublishedSourcePaths.t.solpresent; the drop of one suite and two tests isexactly what was removed and nothing else.
nix develop -c forge fmt --check: exits 0, no diff.foundry.tomlfs_permissionsis byte-identical toorigin/main's.five-docstring change with no behaviour, and the repo-wide check that would
have guarded it belongs in rainix#317, not in
forge test.rain-sol-codegen~0.1.16downloaded from the Soldeer registry and its centraldirectory listed; no
.github/present,script/Build.solpresent..github/workflows/build-pointers.yamlreference to be removed from all fivedocstrings (
IIntegrityToolingV1.sol:18,IOpcodeToolingV1.sol:17,IParserToolingV1.sol:17,26-27,ISubParserToolingV1.sol:16) and replacedwith a durable one; all five covered, and the replacement is verified present
in the published package.