Skip to content

Cut release 0.1.9: freeze candidate pins as src/generated/0_1_9/ - #568

Merged
thedavidmeister merged 1 commit into
mainfrom
2026-08-25-release-sol-v0.1.9
Aug 25, 2026
Merged

Cut release 0.1.9: freeze candidate pins as src/generated/0_1_9/#568
thedavidmeister merged 1 commit into
mainfrom
2026-08-25-release-sol-v0.1.9

Conversation

@thedavidmeister

@thedavidmeister thedavidmeister commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

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].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 by diff -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, and run() + forge fmt on 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.8 was 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, so release-guard requires a src/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, testSuitesLiveOnEverySupportedNetwork early-returned on a length-0 derivation and touched no RPC, and testEveryFrozenSnapshotIsReleased walked an empty record. Both get their first subject here.

RainlangDeployChainTest now 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_getCode against each of the five frozen DEPLOYED_ADDRESSes on all seven networks returns code whose keccak256 equals that file's BYTECODE_HASH:

suite address BYTECODE_HASH networks
parser 0x0030FF8D5386EF3AdDD5CcaCc6DdB9c3D0C5adaA 0x2de1c0c4…d20aeac5 7 of 7
store 0x1Aa775533E28B1D843e1A589034984E3a62005DC 0xdaa0024d…67d0bf9b 7 of 7
interpreter 0x4c52eee7Fb6aeD0F1a30130d96d02409D9d886cf 0x80a0ef85…98b9d1d6 7 of 7
expression-deployer 0xb90c299a8321fbdd8D0F367e560f5341F840dA3F 0x725b5ad6…1f2cebe8 7 of 7
rainlang 0x820FB8ae43350f6F4F60117955751b0a6777aC54 0x0ede701e…220422a9 7 of 7

arbitrum, 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.9 is pushed on the merged commit, which re-runs the fork suite and release-guard first.

QA

  • Discriminating tests: RainlangDeployChainTest.testSuitesLiveOnEverySupportedNetwork and RainDeployVerifySnapshot.testEveryFrozenSnapshotIsReleased — each is vacuous on base and discriminating only because of this commit. Measured, not argued: run at parent 072df385 the chain test is [PASS] testSuitesLiveOnEverySupportedNetwork() (gas: 4067) in 598.21µs, because releasedSuites() is length 0 and checkDeployedOnSupportedNetworks early-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 (RainlangDeployChainTest 1, RainlangDeploySnapshotTest 3, RainlangDeploySuitesTest 6, BuildTest 4).
  • Mutations applied: n/a — there is no logic in this diff. It is generated output committed verbatim plus one version string, so there is no line whose meaning a mutant could change. The invariant that matters (no pinned value moved) is settled by byte-comparison of 0_1_9/ against candidate/, which a mutant cannot speak to. The one mutation-shaped fact available was checked directly instead: re-running cutRelease() against an already-frozen 0.1.9 reverts SnapshotAlreadyFrozen, which is the append-only guard refusing exactly what this PR must never do twice.
  • Oracle: the candidate/ constants at parent 072df385 are the expected values for every frozen constant, independent of the generator that emitted them (five of five identical under diff -r). On-chain presence and code hashes come from eth_getCode + keccak256 against 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's 9b7e6aef6 (#2841), not from this PR's judgement.
  • Category check: work order was "cut the first release under Migrate to the tag-driven release standard, in-repo #563's machinery": deploy → freeze → merge → tag, at step two. Covered: version bump in lockstep, frozen record committed verbatim, released-suites regeneration, chain verification of all five suites on all seven networks. Deferred with reason: no residue fix was needed — unlike raindex #2841, Migrate to the tag-driven release standard, in-repo #563 left no broken reader behind, and script/Deploy.sol already targets the standard seven with no deployNetworks() 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 . and rainix-sol-single-contract (both run in rainix-sol / static on this PR). forge fmt --check passes locally.

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>
@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b23bc18d-a1c7-4e1a-acbd-ecbc20308132

📥 Commits

Reviewing files that changed from the base of the PR and between 072df38 and 6177baa.

⛔ Files ignored due to path filters (5)
  • src/generated/0_1_9/Rainlang.sol is excluded by !**/generated/**
  • src/generated/0_1_9/RainlangExpressionDeployer.sol is excluded by !**/generated/**
  • src/generated/0_1_9/RainlangInterpreter.sol is excluded by !**/generated/**
  • src/generated/0_1_9/RainlangParser.sol is excluded by !**/generated/**
  • src/generated/0_1_9/RainlangStore.sol is excluded by !**/generated/**
📒 Files selected for processing (6)
  • foundry.toml
  • src/lib/LibRainlangExpressionDeployerReleased.sol
  • src/lib/LibRainlangInterpreterReleased.sol
  • src/lib/LibRainlangParserReleased.sol
  • src/lib/LibRainlangReleased.sol
  • src/lib/LibRainlangStoreReleased.sol

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The package version is updated to 0.1.9. Five release libraries now expose populated DeploySuite entries for their frozen 0.1.9 artifacts.

Changes

rainlang 0.1.9 release registration

Layer / File(s) Summary
Register frozen 0.1.9 suites
foundry.toml, src/lib/LibRainlang*Released.sol
The package version changes to 0.1.9. The release libraries import frozen deployment metadata and return one DeploySuite for each 0.1.9 component.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 6177b

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)
Check name Status Explanation
Docstring Coverage ✅ Passed 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…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main changes: cutting release 0.1.9 and freezing candidate pins under src/generated/0_1_9/.
Full details: Docstring Coverage

Explanation

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)
  • Create PR with unit tests
  • Commit unit tests in branch 2026-08-25-release-sol-v0.1.9

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thedavidmeister
thedavidmeister merged commit c298c94 into main Aug 25, 2026
8 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

@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:

  • Simple bug fixes, typos, or minor refactoring
  • Single-purpose changes affecting 1-2 files
  • Documentation updates
  • Configuration tweaks
  • Changes that require minimal context to review

Review Effort: Would have taken 5-10 minutes

Examples:

  • Fix typo in variable name
  • Update README with new instructions
  • Adjust configuration values
  • Simple one-line bug fixes
  • Import statement cleanup

Medium (M)

Characteristics:

  • Feature additions or enhancements
  • Refactoring that touches multiple files but maintains existing behavior
  • Breaking changes with backward compatibility
  • Changes requiring some domain knowledge to review

Review Effort: Would have taken 15-30 minutes

Examples:

  • Add new feature or component
  • Refactor common utility functions
  • Update dependencies with minor breaking changes
  • Add new component with tests
  • Performance optimizations
  • More complex bug fixes

Large (L)

Characteristics:

  • Major feature implementations
  • Breaking changes or API redesigns
  • Complex refactoring across multiple modules
  • New architectural patterns or significant design changes
  • Changes requiring deep context and multiple review rounds

Review Effort: Would have taken 45+ minutes

Examples:

  • Complete new feature with frontend/backend changes
  • Protocol upgrades or breaking changes
  • Major architectural refactoring
  • Framework or technology upgrades

Additional Factors to Consider

When deciding between sizes, also consider:

  • Test coverage impact: More comprehensive test changes lean toward larger classification
  • Risk level: Changes to critical systems bump up a size category
  • Team familiarity: Novel patterns or technologies increase complexity

Notes:

  • the assessment must be for the totality of the PR, that means comparing the base branch to the last commit of the PR
  • the assessment output must be exactly one of: S, M or L (single-line comment) in format of: SIZE={S/M/L}
  • do not include any additional text, only the size classification
  • your assessment comment must not include tips or additional sections
  • do NOT tag me or anyone else on your comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant