Uh oh!
There was an error while loading. Please reload this page.
docs: state the fixed-point bound and how a non-converging build reports - #136
Conversation
The README named the regeneration cycle and left the loop unbounded prose, so "several times until they reach a fixed point" gave a reader no way to tell a tree that is behind from a cycle that will never settle, and no number at which to stop trying. It now states the bound CI applies, names the two distinct failures and their distinct fixes, and says what this repo's own example does — one pass, because CodeGennable imports nothing it generates. Closes#81 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Warning Review limit reached
Next review available in:16 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 |
`main` no longer carries `script/Build.sol` or the committed `src/generated/CodeGennable.sol` artifact, so the "One run settles it here" paragraph had nothing left to be about: there is no local regeneration step in this repo and no `CodeGennable` artifact whose codehash could move. The `max-codegen-passes` paragraph is about rainix's reusable, which consumers still run, and is kept unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The paragraph this branch added documented a `max-codegen-passes` bound, a default of 5 and a `did not reach a fixed point` failure. None of them exist: rainix at HEAD 7f223b4 runs `forge script ./script/Build.sol` exactly once inside an `if [ -f ... ]` guard, `max-codegen-passes` has 0 hits across the whole repo, and the only failure that step emits is `Committed artifacts are stale`. rainlanguage/rainix#319, which would add the bound, is still open. State what is true instead: the loop is unbounded, nothing iterates it, and the operator regenerates until the working tree stops changing. Written in the register #140 established for this README (closing #139): the consequence for someone working in a consuming repo plus one link to the workflow that owns it, not a transcription of what that workflow does. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
Closes#81
Note
Rewritten against post-#140
main, and no longer blocked. The paragraphthis PR previously added documented a bound that does not exist, and patched a
README that #140 has since rewritten. Both are corrected here — see "What
changed since the last push". The PR no longer depends on
rainlanguage/rainix#319, because it no longer states anything that PR wouldmake true.
What #81 asks for here
#81 has two halves and says so: the loop itself "is rainix's to own and is filed
separately at rainlanguage/rainix#314", leaving this repo the half that lives
here —
README.mdstating the fixed-point invariant as prose with no bound,and
.github/workflows/build-pointers.yamlinheriting the single-shotbehaviour.
The second half is void: #138 deleted
build-pointers.yamloutright along withthe worked example it regenerated. This repo generates nothing and no longer
calls
rainix-copy-artifacts.yamlat all, so there is no single-shot behaviourleft here to inherit or to fix.
The first half is what this PR discharges. #81 files it as a hazard: a build
that does not converge is indistinguishable, from CI, from a build the developer
forgot to re-run. The README cannot remove that hazard — removing it means
putting the loop in the machine, which is rainix's and is tracked at
rainlanguage/rainix#314. What the README can do, and now does, is stop leaving
the reader to guess: it says who owns the loop, what to do at a shell, and how
to tell "one more pass" from "this will never settle".
What the README says now
One paragraph, immediately after the fixed-point invariant it qualifies:
It is addressed to consumers —
rain.deployand every other repo that drivesthis library from
script/Build.sol. Nothing in this repo is generated, sonothing here loops.
What changed since the last push
1. The bound it documented does not exist. Re-verified independently
against
rainlanguage/rainixat HEAD7f223b4:.github/workflows/rainix-copy-artifacts.yamlrunsforge script ./script/Build.solexactly once, inside a plainif [ -f ... ]guard. No loop.
max-codegen-passesgets 0 hits across the whole rainixrepo, so there is no such input and no default of 5.
fixed pointanddid not reachget 0 hits too; the only failure that step's currency checkcan emit is
Committed artifacts are stale.rainlanguage/rainix#319,which would add the bound, is still open (checked at this push).
So the previous paragraph stated a bound, a default, an input name and a failure
message that no deployed workflow has. It is replaced, not softened: the
regeneration loop is unbounded, nothing iterates it, and the operator repeats
until the working tree stops changing.
2. It patched a README that no longer exists.#140 landed today, closing
#139, and rewrote the README so it stops narrating rainix's workflow internals —
mechanism cut, consequence kept, one link to the workflow that owns it. #139
names this PR explicitly as adding a fifth instance of the defect it fixes.
The replacement paragraph is written in that register: the consequence for
someone working in a consuming repo, plus the one link, and no transcription of
what the reusable does step by step. It says what the reader must do and what CI
will and will not tell them; it does not describe the workflow's steps, name its
inputs, or quote its messages.
What was cut
The false-bound paragraph, in full — see above for why. Everything it
asserted about
max-codegen-passes, the default of 5, and adid not reach a fixed pointfailure is gone rather than hedged.An earlier paragraph, cut on the previous push and confirmed still cut
through this merge:
Every noun in it is gone: #138 deleted
script/Build.sol,src/generated/CodeGennable.solandbuild-pointers.yaml. A plaingit mergedoes not cut it — its anchor was deleted, so git reattaches it silently to
whatever paragraph now precedes that line. It was removed by hand, and the
merged tree here was diffed against
mainto confirm it stayed removed.The blocked-on-rainix#319 banner, because the PR no longer claims anything
#319 would make true.
QA
executable behaviour to test. Every factual claim in the paragraph was checked
against the system it describes: rainix at HEAD
7f223b4for what CI does anddoes not do (grep counts above), and this repo's own emitters for the
deployed-bytecode-hash constant the last sentence is about.
rainlanguage/rainixatHEAD as the authority on CI behaviour — deliberately not rainix#319, which is
unmerged and therefore not behaviour anyone has.
and (b) this repo's single-shot inheritance to be addressed. (a) is this
paragraph. (b) is void by Strip the
script/Build.solworked example, leave the library lean #138's deletion, stated here as a finding ratherthan left as a silent omission. The machine-side bound is out of scope by
The generation fixed point is a human loop with no bound and no diagnosis #81's own text and lives at rainix-copy-artifacts runs codegen exactly once, so a non-converging build is indistinguishable from a forgotten regeneration rainix#314.
the loop" becomes false and this paragraph needs a revisit. That is the drift
The README narrates rainix's workflow internals in four places, so it drifts whenever rainix changes and nothing here can catch it #139 is about, and it is why the paragraph states the consequence and links
the workflow instead of transcribing it — the correction is then one sentence,
not a re-transcription.
mainmerged in; the merged branch differs frommainbythis one README paragraph and nothing else (
git diff origin/main HEADreports
README.md | 10 ++++++++++, one file).