Uh oh!
There was an error while loading. Please reload this page.
docs: rainix.yaml runs the four checks, and name the gates it adds - #120
Conversation
The README said "on top of the above, CI applies rainix's org-wide static checks via .github/workflows/rainix.yaml". rainix.yaml is what runs the four checks listed above it, not a layer on top of them, and the gates that are genuinely additional went unnamed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Warning Review limit reached
Next review available in:57 minutes 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. 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 |
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
thedavidmeister
commented
Aug 16, 2026
@coderabbitai review |
|
Uh oh!
There was an error while loading. Please reload this page.
Closes#88
Docs-only, and confined to the two lines the issue names (
README.md:55-56).The claim that was false
The README listed
forge test,forge fmt --check,slither .andreuse lintas "Checks, each of which CI also runs", then said:rainix.yamlis not "on top of the above" — it is the only thing that runsthe above. This repo has three workflows; the other two are
build-pointersand
package-release, neither of which runs a check. So a reader who took thesentence at face value was left looking for a phantom source for the four, and
the gates that genuinely are additional went unnamed.
Falsified against
rainlanguage/rainix@main.github/workflows/rainix.yamlhere is six lines and calls one reusable,rainix-sol.yaml, which fans out to three:Between them those three run all four of the README's checks:
The genuinely additional gates are the remaining six steps in
rainix-sol-static.yaml, and none of the four documented checks covers any ofthem:
The other steps in that job —
nix-cachix-setup, the Foundry build cache andforge soldeer install— are setup, not gates, so they are not listed.rainix-sol-legal.yamlandrainix-sol-test.yamladd nothing beyondreuse lintandforge test.This PR's own check list confirms the fan-out at runtime, not just on paper —
rainix.yamlproduces exactly three jobs, and the repo's only other checkingworkflow is unrelated to the four:
Where the issue's proposed fix was wrong, and what I wrote instead
The proposed replacement described the six as gates "with no local equivalent".
Measured in this repo's own shell, that is literally true today:
But it is true for a reason that has nothing to do with the gates.
flake.lockpins rainix at
f22d4dca, which predates both binaries. At the SHA CI itselfuses —
RAINIX_SHA: 53e96a7d0a97d7c7c75c3b2412521324776fdac6, the pin insiderainix-sol-static.yaml—sol-shellcarries both: at that SHA rainix'sflake.nix:304putsrainix-sol-single-contractinsol-tasks,:319putsrainix-staticincommon-shell-inputs, and:622-623buildssol-shellfrom
sol-build-inputs ++ sol-tasks ++ common-shell-inputs. Sonix develop -c rainix-sol-single-contract, andrainix-staticfor thesubmodule, context-cap and snapshot gates (which are what those three composite
actions shell out to), become local equivalents the moment the lock is
refreshed.
Writing "no local equivalent" would have documented this repo's stale lockfile
as if it were a property of the org's gates: false the next time anyone runs
nix flake update, and enshrining the staleness in the meantime. The landedsentence says "that none of the four covers" instead — which is the claim
that actually matters to a reader (a green local run of the documented checks
is not enough), and which stays true regardless of what the lock pins.
One smaller departure: the last gate is named by its rule, not its task
name. The proposal said "a single-contract check"; the README says "one
contract per
.solfile".rainix-sol-single-contractis a task name, whichis not something a reader can act on, and PR #51 already established here that
naming rainix task names in this README is how it rots.
The count is deliberately absent too — "six" would be a number in a README, the
exact shape of claim that #42 was filed to kill.
The change
Regions of README.md deliberately left alone
Sibling agents hold adjacent findings in this same file, so the diff is exactly
lines 55-56 and nothing else. Untouched:
is what the new sentence refers back to as "all four".
(License).
.soldeerignoreis issue .soldeerignore carries entries for .vscode and /docs, paths that have never existed in this repo #91's and is not in this diff at all.The new paragraph also stays in place at 55-56 rather than moving up to sit
directly under the check list. Reordering would grow the diff across a region a
sibling may be editing, for a readability gain the issue did not ask for.
QA
five lines of English prose in a README, adding no branch, selector or code
path a
forge testcase can assert over. The only test shape that could bindit would fetch
rainlanguage/rainix@mainover the network from inside aSolidity test via ffi and diff its workflow steps against the README's word
list — a docs-lint harness, which per the org's "rainix owns shared CI" rule
belongs in rainix as a reusable, not hand-rolled here. What stands in for the
red-then-green run: the old sentence's assertion ("on top of the above") was
executed against the workflow graph and is false —
rainix.yaml→rainix-sol.yaml→{static, legal, test}runs all four checks itself, atthe line numbers quoted above — and every assertion in the replacement was
then executed the same way (fan-out, the four check lines, the six gate
steps, and that no other step in any of the three reusables is a gate).
no line here whose inversion a test could kill. Each of the six named gates
was negated in turn and the negation checked against
rainix-sol-static.yaml(all six survive as real steps, at
:19,:21,:28,:32,:36,:54);the "none of the four covers" clause was attacked by hunting for a local
command that does cover them, which is what surfaced the
flake.lock/RAINIX_SHAdivergence and moved the wording off the issue's "no localequivalent". Full suite on this branch, in the repo's own pinned shell:
forge test— 16 suites, 134 tests passed, 0 failed, 0 skipped;forge fmt --check— exit 0;reuse lint— 47/47 files, compliant withREUSE 3.3;
slither .— 9 contracts, 98 detectors, 0 results.README.md:55-56) andcites
:42-48as the list it misdescribes. The category is "a statement inthis README about what CI runs that the workflow graph contradicts", so all
three of this repo's workflows and all three rainix reusables they reach were
swept, not just the named lines. One wrong statement found and fixed;
:42-48re-verified as correct and left as-is (all four commands exist in the shell
and all four are run by CI);
build-pointers.yamlandpackage-release.yamlconfirmed to run no check, which is what makes "on top of the above" have no
possible referent. Every gate step in the three reusables is named in the new
sentence — none was dropped for brevity.
rainlanguage/rainix@main's workflow files andflake.nixat53e96a7d, read directly, plus this repo's.github/workflows/andflake.lock. Not the issue body's restatement of them: the issue said thereviewer named four of six gates and two were confirmed on re-measurement,
and all six were re-measured here independently.
Found, not touched
flake.lockpins rainixf22d4dca;rainix-sol-static.yamlruns its checks inrainix
53e96a7d. The local shell is therefore not the shell CI uses —rainix-staticandrainix-sol-single-contractexist in the latter and not theformer. That is outside issue #88 and is not filed or fixed here.