Cut release 0.1.9: freeze candidate pins as src/generated/0_1_9/ - #568
Conversation
The repo's first release under the tag-driven machinery #563 migrated to. One commit, exactly the runbook's release shape: - foundry.toml [external.package].version 0.1.8 -> 0.1.9, in lockstep with the frozen record it names. - forge script ./script/Build.sol --sig 'cutRelease()' output committed verbatim: src/generated/0_1_9/ (byte-identical copy of candidate/, five of five, verified) and the five released-suites libs regenerated from the record that now holds 0.1.9. Nothing else moves. No pinned value changes: the frozen constants are the candidate/ constants at the parent commit, and `run()` + `forge fmt` on the parent tree was already a fixed point before the freeze. 0.1.8 is not re-cuttable and never was — it was published by the old merge-driven autopublish and froze no record, so release-guard would reject sol-v0.1.8 on this tree. #563 stated that; 0.1.9 is the first release the lifecycle can carry. Freezing arms RainlangDeployChainTest over the released record. Before this commit releasedSuites() was empty and testSuitesLiveOnEverySupportedNetwork early-returned on a length-0 derivation, touching no RPC; after it, the suite forks all seven supported networks and asserts all five suites are live there with the code they froze. Green: 1579 passed, 0 failed, 0 skipped. Merging publishes nothing. Publication happens only when sol-v0.1.9 is pushed on the merged commit, which re-runs the fork suite and release-guard first. 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: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (5)
📒 Files selected for processing (6)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe package version is updated to Changesrainlang 0.1.9 release registration
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: ⚪ Minimal · up to This PR freezes the 0.1.9 release artifacts and updates the matching package version without changing pinned values or runtime logic; the supplied checks pass, so no actionable merge-blocking risk remains beyond normal review. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Full details: Docstring CoverageExplanation No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (6 skipped: 6 unsupported.) ✨ 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 |
|
@coderabbitai assess this PR size classification for the totality of the PR with the following criterias and report it in your comment: S/M/L PR Classification Guidelines:This guide helps classify merged pull requests by effort and complexity rather than just line count. The goal is to assess the difficulty and scope of changes after they have been completed. Small (S)Characteristics:
Review Effort: Would have taken 5-10 minutes Examples:
Medium (M)Characteristics:
Review Effort: Would have taken 15-30 minutes Examples:
Large (L)Characteristics:
Review Effort: Would have taken 45+ minutes Examples:
Additional Factors to ConsiderWhen deciding between sizes, also consider:
Notes:
|
The repo's first release under the tag-driven machinery #563 migrated to, and the first thing in this repo that ever asserts against a chain.
foundry.toml[external.package].version0.1.8 → 0.1.9, in lockstep with the frozen record it names.forge script ./script/Build.sol --sig 'cutRelease()'output committed verbatim:src/generated/0_1_9/(byte-identical copy ofcandidate/, five of five verified bydiff -r) and the five released-suites libs regenerated from the record that now holds 0.1.9.Nothing else moves. No pinned value changes: the frozen constants are the
candidate/constants at the parent commit, andrun()+forge fmton the parent tree was already a fixed point before the freeze — so the freeze is a copy, not a regeneration that happened to agree.sol-v0.1.8was never cuttable on this tree and this PR does not make it so. 0.1.8 was published by the old merge-driven autopublish and froze no record, sorelease-guardrequires asrc/generated/0_1_8/that does not and cannot exist. #563 said so at the time; 0.1.9 is the first release the lifecycle can carry.What the freeze arms
Before this commit
releasedSuites()was empty,testSuitesLiveOnEverySupportedNetworkearly-returned on a length-0 derivation and touched no RPC, andtestEveryFrozenSnapshotIsReleasedwalked an empty record. Both get their first subject here.RainlangDeployChainTestnow forks all seven supported networks and asserts all five suites —parser,store,interpreter,expression-deployer,rainlang— are live at their derived addresses with the code hash their frozen creation code produces. That is 35 assertions that did not exist on main, and it is the check that would have caught a partial deploy.All 35 pass. Independently of the fork suite,
eth_getCodeagainst each of the five frozenDEPLOYED_ADDRESSes on all seven networks returns code whosekeccak256equals that file'sBYTECODE_HASH:BYTECODE_HASHparser0x0030FF8D5386EF3AdDD5CcaCc6DdB9c3D0C5adaA0x2de1c0c4…d20aeac5store0x1Aa775533E28B1D843e1A589034984E3a62005DC0xdaa0024d…67d0bf9binterpreter0x4c52eee7Fb6aeD0F1a30130d96d02409D9d886cf0x80a0ef85…98b9d1d6expression-deployer0xb90c299a8321fbdd8D0F367e560f5341F840dA3F0x725b5ad6…1f2cebe8rainlang0x820FB8ae43350f6F4F60117955751b0a6777aC540x0ede701e…220422a9arbitrum, base, base_sepolia, ethereum, flare, hyperevm, polygon — one code hash per suite across all seven, so nothing here is chain-dependent.
Merging publishes nothing. Publication happens only when
sol-v0.1.9is pushed on the merged commit, which re-runs the fork suite andrelease-guardfirst.QA
RainlangDeployChainTest.testSuitesLiveOnEverySupportedNetworkandRainDeployVerifySnapshot.testEveryFrozenSnapshotIsReleased— each is vacuous on base and discriminating only because of this commit. Measured, not argued: run at parent072df385the chain test is[PASS] testSuitesLiveOnEverySupportedNetwork() (gas: 4067)in 598.21µs, becausereleasedSuites()is length 0 andcheckDeployedOnSupportedNetworksearly-returns on that without touching an RPC. Run on this commit it is (gas: 11253258) in 10.75s of real fork work against seven endpoints, checking 35 suite/network pairs. Same test, same command, 4067 → 11.25M gas. Migrate to the tag-driven release standard, in-repo #563 shipped both with no subject and said they would get one here. Deploy group locally: 14/14 (RainlangDeployChainTest1,RainlangDeploySnapshotTest3,RainlangDeploySuitesTest6,BuildTest4).0_1_9/againstcandidate/, which a mutant cannot speak to. The one mutation-shaped fact available was checked directly instead: re-runningcutRelease()against an already-frozen 0.1.9 revertsSnapshotAlreadyFrozen, which is the append-only guard refusing exactly what this PR must never do twice.candidate/constants at parent072df385are the expected values for every frozen constant, independent of the generator that emitted them (five of five identical underdiff -r). On-chain presence and code hashes come frometh_getCode+keccak256against live RPC endpoints — independent of this tree, and independent of the fork suite that also checks them, so the two agree without sharing a code path. The release shape comes from the repo's own CLAUDE.md runbook and raindex's9b7e6aef6(#2841), not from this PR's judgement.script/Deploy.solalready targets the standard seven with nodeployNetworks()override. Not in scope and not done here: pushing the tag, which is a human step after merge.Full suite: 1579 passed, 0 failed, 0 skipped, reconciling exactly against #563's own CI figure on the same 1579 tests. This commit adds no test and deletes none; it gives two existing ones a subject.
Not run locally:
slither .andrainix-sol-single-contract(both run inrainix-sol / staticon this PR).forge fmt --checkpasses locally.