Cut release 0.1.1 on the latest rain-metadata, so a consumer can hold both halves - #9
Conversation
`rain.metadata` sol-v0.1.6 and sol-v0.1.7 completed the split this repo is the other half of: `src/concrete/MetaBoard.sol` and `src/lib/deploy/LibMetaBoardDeploy.sol` are gone from there and live here. 0.1.5 was the last publish that still carried both, so a consumer that wants the current library half AND this repo's deploy pins had to install `rain-metadata` twice — soldeer installs one version per package name, so it could not. Nothing `MetaBoard` reaches moved between 0.1.5 and 0.1.7: `IMetaBoardV1_2`, `IMetaV1_2`, `LibIMetaBoardV1_2` and `LibMeta` are untouched across both tags. `forge script ./script/Build.sol` regenerates `src/generated/candidate/MetaBoard.sol` byte-for-byte identical, so the deterministic deploy address stays `0x8fD50fF9Db9835ba1B61394752A26F53D721D2a1` and the codehash stays `0xb7b74d87…4bed6`. No pin moves; this is a rename of the import prefix and nothing else. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`.soldeerignore` excluded `/script`, `/test` and the tooling files, but not `Cargo.toml`, `Cargo.lock`, `/crates` or `/target`, so `rain-metadata-deploy` 0.1.0 shipped `crates/metaboard-subgraph-report`'s rust source to every solidity consumer that installs it. A soldeer package is `src/` plus `LICENSE`/`LICENSES/` plus `README.md`; the Goldsky reporter is a `nix run` tool for this repo, reaches no solidity and is not part of what a consumer imports. rain.math.float.deploy — the other deploy repo carrying rust — already excludes exactly these four. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ersion `[external.package].version` and the frozen record move together or the release guard reds: `rainix-static release-guard` requires `src/generated/<version>/` to exist in the tagged commit and to be byte-identical to a freshly regenerated `candidate/`. Both land here, cut by `forge script ./script/Build.sol --sig "cutRelease()"`. `src/generated/0_1_1/MetaBoard.sol` is byte-identical to `0_1_0/` — the rain-metadata 0.1.7 bump moves no bytecode, so 0.1.1 records the same `0x8fD50fF9Db9835ba1B61394752A26F53D721D2a1` already broadcast to all seven supported networks and already frozen at 0.1.0. What 0.1.1 publishes that 0.1.0 could not is a package whose own `rain-metadata` pin is the current one, so a consumer can hold the library half at 0.1.7 and these deploy pins at the same time. The record is append-only and each tag is cut once, so this is a second entry rather than an edit: `LibMetaBoardReleased.releasedSuites()` now declares `metaboard@0_1_0` and `metaboard@0_1_1`, both regenerated by the same run. Deploy came first, per the three-step order: `MetaBoard` is live at that address with codehash `0xb7b74d87…4bed6` on arbitrum, base, base_sepolia, ethereum, flare, hyperevm and polygon — `MetaBoardDeployChainTest` is green against all seven. 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: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (7)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. WalkthroughThe project updates its ChangesMetaBoard release update
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: ⚪ Minimal · up to The package updates its rain-metadata dependency, excludes the rust crate, and freezes the 0.1.1 release snapshot without changing deployed behavior; no actionable merge-blocking risk remains. Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ 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 |
`0x8fD50fF9…` was the 0.1.0 MetaBoard and nothing else when both sentences were written. 0.1.1 freezes the same bytes at the same address, so naming one release beside `networks.json` now reads as if the table were behind the record by one — it is not, and the coverage assertion these sentences describe is the thing that would say so. Both edits shrink: CLAUDE.md goes 4083 -> 4077 bytes against the 4096 cap. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
What
Three commits, in order:
rain-metadata0.1.5 → 0.1.7 — the latest published library half..soldeerignore— stop shipping the rust crate to solidity consumers.[external.package].version0.1.0 → 0.1.1 plus thefrozen
src/generated/0_1_1/, in lockstep.Why
rain.metadatasol-v0.1.6 / sol-v0.1.7 finished the split this repo is theother half of:
src/concrete/MetaBoard.solandsrc/lib/deploy/LibMetaBoardDeploy.solare gone from there. 0.1.5 was the lastrain-metadatapublish still carrying both, and this repo was still pinned toit — so a consumer wanting the current library half and these deploy pins
needed
rain-metadataat two versions at once, which soldeer cannot do (oneversion per package name).
Published
rain-metadata-deploy0.1.0 has the same problem baked in: itssrc/concrete/MetaBoard.solimportsrain-metadata-0.1.5/…, so anythingreaching the concrete or
MetaBoardDeploySuitesdrags 0.1.5 in behind it.0.1.1 is the package that does not.
No pin moves
Nothing
MetaBoardreaches changed betweenrain-metadatasol-v0.1.5 andsol-v0.1.7 —
IMetaBoardV1_2,IMetaV1_2,LibIMetaBoardV1_2andLibMetaare untouched across both tags.
forge script ./script/Build.solregeneratessrc/generated/candidate/MetaBoard.solbyte-for-byte identical, so:0x8fD50fF9Db9835ba1B61394752A26F53D721D2a1(unchanged)0xb7b74d879e97f272145d32ce18bd060f1e9f387696911376191ca10ecf24bed6(unchanged)src/generated/0_1_1/MetaBoard.solis therefore byte-identical to0_1_0/.That is the honest record, not a redundancy:
release-guardrequiressrc/generated/<version>/to be present in the tagged commit and byte-identicalto a freshly regenerated
candidate/, so a release cannot be published withoutfreezing one, and the record is append-only so an existing tag cannot be reused.
0.1.1 records the same live deployment that 0.1.0 does; what it adds is a
package whose own
rain-metadatapin is the current one.Deploy → verify → tag
Deploy is already done and is not part of this PR.
MetaBoardis live at0x8fD50fF9…with the codehash above on all seven supported networks(arbitrum, base, base_sepolia, ethereum, flare, hyperevm, polygon).
MetaBoardDeployChainTestis green against all seven, andSubgraphStartBlockTestre-confirms everynetworks.jsonstart block is thedeploy block (code at
startBlock, none atstartBlock - 1) on archiveendpoints for each.
Once merged, the release is the tag:
rainix-static release-guard --version 0.1.1is green on this branch.What a consumer imports
Unchanged in shape from 0.1.0 — the alias lib is the stable path and it aliases
candidate/, so which snapshot backs it never leaks into the import:That file imports only
../generated/candidate/MetaBoard.sol, which importsnothing, so putting the board in a
DeploySuite.dependencieslist pulls in norain-metadataat all. A consumer that also wants the interfaces orLibIMetaBoardV1_2declaresrain-metadata = "0.1.7"alongside, and after thisrelease the two agree.
Not in this PR
.gas-snapshotis stale onmainalready (it recordstestSnapshotInternallyConsistentat 164250 against an actual 324995 — the0.1.0 release moved it and the file was not regenerated). Nothing in CI reads or
writes it, and refreshing it here would be unrelated churn in a release cut.
QA
behaviour: an import-prefix rename, four
.soldeerignorelines, a versionbump and a generated frozen snapshot. Every claim it makes is already
discriminated by shipped tests, and the mutations below are how that was
checked rather than asserted. Full suite green on this branch: 20 passed, 0
failed, both fork suites included (
MetaBoardDeployChainTestandSubgraphStartBlockTestrun against live archive endpoints for all sevennetworks, not skipped).
rainix-static release-guard --version 0.1.1green;forge fmt --checkgreen;slither .0 results;rainix-sol-single-contractrc=0.
src/generated/0_1_1/MetaBoard.sol:12→DEPLOYED_ADDRESSretargeted to theold v1 board
0xfb8437Ae…6928→ killed by 3:MetaBoardDeploySnapshotTest::testSnapshotInternallyConsistent(
StoredAddressMismatch("metaboard@0_1_1", …)),MetaBoardDeploySnapshotTest::testEveryFrozenSnapshotIsReleased(
FrozenSnapshotNotReleased("src/generated/0_1_1/MetaBoard.sol")),SubgraphDeployRecordTest::testEveryReleasedDeployIsIndexedOnEveryNetwork.src/generated/candidate/MetaBoard.sol:16→ one byte flipped inCREATION_CODE(…5f80fd5b50→…5f80fd5b51) → killed by 4:testSnapshotMatchesSource(CandidateSourceMismatch),testSnapshotInternallyConsistent(StoredAddressMismatch),LibMetaBoardDeployCandidateTest::testCandidateCreationCodeMatchesSource,LibMetaBoardDeployCandidateTest::testCandidateReproducesItsDeployment.This is the mutant that matters here: it is exactly the shape the
rain-metadata bump would take if it HAD moved the bytecode, and the suite
reds on it. The bump regenerating
candidate/unchanged is therefore achecked result, not an assumption.
eth_getCodeagainst seven independent public RPCs, hashed withcast keccak— arbitrum, base, base_sepolia, ethereum, flare, hyperevm, polygon all return
0xb7b74d879e97f272145d32ce18bd060f1e9f387696911376191ca10ecf24bed6at0x8fD50fF9…. Start blocks come from the same call atstartBlockandstartBlock - 1on archive endpoints (note:rpc.hyperliquid.xyz/evmis NOTarchive — it answers historical reads with current state; hyperevm was
confirmed on two other archive endpoints instead). "0.1.7 is the latest
rain-metadata" comes from the Soldeer registry API, and "nothing MetaBoardreaches changed" from the upstream
sol-v0.1.5...sol-v0.1.7compare, whichtouches none of
IMetaBoardV1_2,IMetaV1_2,LibIMetaBoardV1_2,LibMeta.the release itself (get this repo onto the latest
rain-metadataand publisha version raindex can depend on). The
.soldeerignorecommit is the one thinghere nobody asked for: it is a §8 conformance gap this release would otherwise
re-publish, and it is split into its own commit so it can be dropped without
touching the release.
Summary by CodeRabbit
New Features
0.1.1release to the list of available deployments.Chores
0.1.1.0.1.7.