Skip to content

Bump rain-sol-codegen to 0.1.36 (rain-deploy 0.1.7, forge-std 1.16.2) - #321

Open
thedavidmeister wants to merge 4 commits into
mainfrom
bump-rain-sol-codegen-0-1-36
Open

Bump rain-sol-codegen to 0.1.36 (rain-deploy 0.1.7, forge-std 1.16.2)#321
thedavidmeister wants to merge 4 commits into
mainfrom
bump-rain-sol-codegen-0-1-36

Conversation

@thedavidmeister

Copy link
Copy Markdown
Contributor

Bumps the codegen toolchain as a coherent forward pin set: rain-sol-codegen 0.1.3 → 0.1.36, rain-deploy 0.1.4 → 0.1.7, forge-std 1.16.1 → 1.16.2. This is not a vendored wall: the three pins resolve everything together — rain-deploy 0.1.7's LibRainDeploy is a verified API superset of 0.1.4's, with no dual installs and no redirect remappings. Same pattern as rain.math.float#270.

What changed

  • foundry.toml pins bumped, soldeer.lock regenerated, remappings clean; import-prefix rewrites across ~105 files.
  • script/BuildPointers.sol migrated to the 0.1.36 API: buildFileForTaggedContract(vm, deployed, deployTag(), name, body), plus a new pointerFile() helper so frozen 0_1_1/ keeps .pointers.sol forever while new cuts carry .sol.
  • The 12 candidate files are git mv'd X.pointers.solX.sol and regenerated. The rename had to happen BEFORE regeneration: the 0.1.36 orphan check reverts when a .pointers.sol sibling exists.
  • LibProdDeployV4.sol regenerated; LibProdDeployCurrent.sol unchanged; frozen 0_1_1/ untouched.

Pin values did not move

Codegen 0.1.36 is script-side only. The candidates are renamed and re-headed, but every pinned value is byte-identical: a diff loop over all 12 renames (git show HEAD:…X.pointers.sol vs new X.sol) shows the only differing lines are // comment headers and blanks — BYTECODE_HASH, DEPLOYED_ADDRESS, and CREATION_CODE are byte-identical in every file. The next release deploys the SAME bytecode.

Verification

  • Body-identity diff loop: all 12 renamed candidates byte-identical to their pre-bump artifacts outside comment/blank lines.
  • Full pipeline: forge build + forge script ./script/BuildPointers.sol + forge fmt — regeneration reproduces the committed files unchanged (PIPELINE_OK).
  • nix develop -c forge test: 716 passed; the 168 failures are all vm.createSelectFork: environment variable *_RPC_URL not found (fork tests without local RPC secrets; CI has them).

QA

  • Discriminating tests: n/a — dependency bump + codegen migration with zero intended behavior change; the discriminating evidence is the inverse: the body-identity diff loop over all 12 renamed candidates (only ///blank header lines differ; pinned addresses/hashes/bytecode byte-identical) plus the regeneration pipeline reproducing the committed files unchanged.
  • Mutations applied: n/a — no new tests and no hand-written logic beyond the BuildPointers API migration, which the pipeline itself validates: any API misuse fails forge build/regeneration or produces artifacts that the diff loop would flag.
  • Oracle: the pre-bump generated artifacts committed at main HEAD, produced by the OLD codegen — the regenerated outputs are compared byte-for-byte against them, so expected values are independent of the new toolchain under test.
  • Category check: scope is the toolchain bump; covered: pins + lockfile, ~105 import rewrites, BuildPointers 0.1.36 API migration, 12 candidate renames + regeneration, LibProdDeployV4 regeneration; frozen 0_1_1/ snapshots untouched (append-only preserved) and LibProdDeployCurrent.sol unchanged.

🤖 Generated with Claude Code

….16.2

Coherent forward pin set: forge-std 1.16.2 + rain-deploy 0.1.7 +
rain-sol-codegen 0.1.36. Import-prefix rewrites across ~105 files,
BuildPointers.sol migrated to the 0.1.36 buildFileForTaggedContract API
with a pointerFile() helper so frozen 0_1_1/ keeps .pointers.sol while
new cuts carry .sol. The 12 candidate files are git mv'd
X.pointers.sol -> X.sol (required before regeneration: the 0.1.36 orphan
check reverts on .pointers.sol siblings) and regenerated.

Pin values did not move: codegen is script-side only. All 12 renamed
candidates differ from their pre-bump artifacts only in comment header
lines; BYTECODE_HASH, DEPLOYED_ADDRESS and CREATION_CODE are
byte-identical, so the next release deploys the same bytecode.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 107 files, which is 7 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a1f6418e-700b-4592-8025-735547fcddc0

📥 Commits

Reviewing files that changed from the base of the PR and between 405ed78 and 9bc3ed7.

⛔ Files ignored due to path filters (14)
  • soldeer.lock is excluded by !**/*.lock
  • src/generated/LibProdDeployV4.sol is excluded by !**/generated/**
  • src/generated/candidate/ST0xOrchestrator.sol is excluded by !**/generated/**
  • src/generated/candidate/ST0xOrchestratorBeaconSetDeployer.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxCorporateActionsFacet.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxOffchainAssetReceiptVaultAuthorizerV1.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxOffchainAssetReceiptVaultBeaconSetDeployer.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxReceipt.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxReceiptVault.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxUnifiedDeployer.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxWrappedTokenVault.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxWrappedTokenVaultBeacon.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxWrappedTokenVaultBeaconSetDeployer.sol is excluded by !**/generated/**
📒 Files selected for processing (107)
  • .github/workflows/git-clean.yaml
  • foundry.toml
  • remappings.txt
  • script/20260619-deploy-v4-authoriser-clone.s.sol
  • script/20260623-upgrade-receipt-vaults-to-v4.s.sol
  • script/20260706-deploy-tokens-ethereum.s.sol
  • script/20260716-migrate-beacon-owners-ethereum.s.sol
  • script/20260722-migrate-beacon-owners-hyperevm.s.sol
  • script/20260722-swap-remaining-vault-authorisers.s.sol
  • script/20260722-swap-rklb-authoriser.s.sol
  • script/20260723-provision-additional-service-signer.s.sol
  • script/20260729-deploy-governance-timelock.s.sol
  • script/20260729-migrate-governance-to-timelock.s.sol
  • script/20260807-deploy-missing-tokens.s.sol
  • script/20260813-execute-timelock-operations.s.sol
  • script/20260813-timelock-rehearsal-cancel.s.sol
  • script/20260813-timelock-rehearsal-schedule.s.sol
  • script/BuildPointers.sol
  • script/DeployProdV4_0_1_1.sol
  • script/MigrateBeaconOwners.s.sol
  • script/MigrateMultisigThreshold.s.sol
  • src/lib/LibSafeOps.sol
  • src/lib/LibStoxDeployNetworks.sol
  • src/lib/LibTimelockInvariants.sol
  • test/lib/LibTestDeploy.sol
  • test/lib/LibTestProd.sol
  • test/lib/LibTestTofu.sol
  • test/script/20260619-deploy-v4-authoriser-clone.t.sol
  • test/script/20260623-upgrade-receipt-vaults-to-v4.t.sol
  • test/script/20260706-deploy-tokens-ethereum.t.sol
  • test/script/20260723-provision-additional-service-signer.prod.t.sol
  • test/script/20260723-provision-additional-service-signer.t.sol
  • test/script/20260729-deploy-governance-timelock.t.sol
  • test/script/20260729-migrate-governance-to-timelock.t.sol
  • test/script/20260807-deploy-missing-tokens.t.sol
  • test/script/20260813-timelock-rehearsal.t.sol
  • test/script/DeployMissingTokensHarness.sol
  • test/script/MigrateMultisigThresholdTest.t.sol
  • test/src/concrete/ST0xOrchestrator.t.sol
  • test/src/concrete/StoxCorporateActionsFacet.authorizerIntegration.t.sol
  • test/src/concrete/StoxCorporateActionsFacet.t.sol
  • test/src/concrete/StoxCorporateActionsHandler.sol
  • test/src/concrete/StoxCorporateActionsInvariant.t.sol
  • test/src/concrete/StoxReceipt.t.sol
  • test/src/concrete/StoxReceiptRebaseIntegrationTest.t.sol
  • test/src/concrete/StoxReceiptVault.rawTotalSupply.t.sol
  • test/src/concrete/StoxReceiptVault.setAuthorizerGuard.t.sol
  • test/src/concrete/StoxReceiptVault.t.sol
  • test/src/concrete/StoxReceiptVaultFallbackRouting.t.sol
  • test/src/concrete/StoxReceiptVaultMigrationIntegrationTest.t.sol
  • test/src/concrete/StoxWrappedTokenVault.t.sol
  • test/src/concrete/StoxWrappedTokenVaultBeacon.t.sol
  • test/src/concrete/StoxWrappedTokenVaultV1.prod.base.t.sol
  • test/src/concrete/StoxWrappedTokenVaultV2.t.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultAuthorizerV1.initializeGuard.t.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultAuthorizerV1.t.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.corporateActionPairingGap.t.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.t.sol
  • test/src/concrete/deploy/BeaconOwnerMigrationPin.t.sol
  • test/src/concrete/deploy/EthereumBeaconOwnership.t.sol
  • test/src/concrete/deploy/EthereumTokenOwnerSafeParity.t.sol
  • test/src/concrete/deploy/GovernanceTimelockMigration.t.sol
  • test/src/concrete/deploy/HyperEvmBeaconOwnership.t.sol
  • test/src/concrete/deploy/HyperEvmTokenOwnerSafeParity.t.sol
  • test/src/concrete/deploy/ST0xOrchestratorBeaconSetDeployer.t.sol
  • test/src/concrete/deploy/StoxCrossChainParity.t.sol
  • test/src/concrete/deploy/StoxProdV2.t.sol
  • test/src/concrete/deploy/StoxProdV4.t.sol
  • test/src/concrete/deploy/StoxProdV4PostSwap.t.sol
  • test/src/concrete/deploy/StoxUnifiedDeployer.ierc165.t.sol
  • test/src/concrete/deploy/StoxUnifiedDeployer.newTokenAndWrapperVault.t.sol
  • test/src/concrete/deploy/StoxUnifiedDeployer.prod.base.t.sol
  • test/src/concrete/deploy/StoxUnifiedDeployer.t.sol
  • test/src/concrete/deploy/StoxWrappedTokenVaultBeaconSetDeployer.ierc165.t.sol
  • test/src/concrete/deploy/StoxWrappedTokenVaultBeaconSetDeployer.t.sol
  • test/src/concrete/integration/OrchestratorIntegrationTest.sol
  • test/src/concrete/upgrade/V3UpgradeShadowFork.t.sol
  • test/src/lib/LibAuthoriserInvariants.t.sol
  • test/src/lib/LibBeaconInvariants.t.sol
  • test/src/lib/LibConstantsStructure.t.sol
  • test/src/lib/LibCorporateActionNode.t.sol
  • test/src/lib/LibERC1155Storage.t.sol
  • test/src/lib/LibERC20Storage.t.sol
  • test/src/lib/LibInvariants.t.sol
  • test/src/lib/LibMigrationInvariant.t.sol
  • test/src/lib/LibProdBeaconsBase.t.sol
  • test/src/lib/LibProdDeployV1.t.sol
  • test/src/lib/LibProdDeployV1V2.t.sol
  • test/src/lib/LibProdDeployV2.t.sol
  • test/src/lib/LibProdDeployV4.t.sol
  • test/src/lib/LibProdTokenConfig.t.sol
  • test/src/lib/LibRebase.t.sol
  • test/src/lib/LibRebaseMath.t.sol
  • test/src/lib/LibReceiptRebase.t.sol
  • test/src/lib/LibSafeInvariants.t.sol
  • test/src/lib/LibSafeOps.t.sol
  • test/src/lib/LibStockSplit.t.sol
  • test/src/lib/LibStockSplitLifecycleTest.t.sol
  • test/src/lib/LibStockSplitResolveTest.t.sol
  • test/src/lib/LibStockSplitValidation6DecimalsTest.t.sol
  • test/src/lib/LibStockSplitValidationFuzzDecimalsTest.t.sol
  • test/src/lib/LibStoxDeployNetworks.t.sol
  • test/src/lib/LibTimelockInvariants.t.sol
  • test/src/lib/LibTokenInvariants.addresses.t.sol
  • test/src/lib/LibTokenInvariants.t.sol
  • test/src/lib/LibTotalSupply.t.sol
  • test/src/lib/StorageSlotDistinctness.t.sol

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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

Copy link
Copy Markdown
Contributor Author

The two red checks are pre-existing live-chain drift on main, not this PR:

  • build-artifact: fails with ExpectedGrantMissing(0x315b16faa6eE413faBCa877d3851B3818369f0cD, 0x87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821, 0x1c66D6708914C40239D54919320b4C48cAE3D1A9). A workflow_dispatch control run of the same workflow on main fails with the byte-identical error: https://github.com/S01-Issuer/st0x.deploy/actions/runs/32600195627. This PR's entire diff to the workflow's trigger paths (MigrateMultisigThreshold.s.sol, LibSafeOps.sol, …) is three forge-std-1.16.1forge-std-1.16.2 import-prefix lines.
  • rainix-sol / test: 30 failures, all live-fork state assertions (ExpectedGrantMissing, ExpectedOperationalGrantMissing, FireblocksSignerAlreadyRevoked, "retired signer no longer holds a canonical pair - flip the map pin PR"). The failing-test-name set is IDENTICAL to main's scheduled currency run (https://github.com/S01-Issuer/st0x.deploy/actions/runs/32556940789): 29 unique names on each side, zero difference either direction. That scheduled job has been red on main daily since at least 2026-08-17.

The checks this PR can affect are green: git-clean (regeneration reproduces committed artifacts exactly), static, legal. The chain-drift fix ("flip the map pin PR") is a separate operational PR, out of scope for a toolchain bump whose pinned values are byte-identical.

baku-ccron and others added 3 commits August 27, 2026 09:54
main retired the 20260810-revoke-fireblocks-service-signer script and
its two tests; this branch had only rewritten their forge-std imports
from 1.16.1 to 1.16.2. Took the deletion.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rain-sol-codegen 0.1.36 writes a tag snapshot to
`src/generated/<tag>/<ContractName>.sol` — 0.1.3 wrote
`<ContractName>.pointers.sol` — and its orphan check refuses to leave the
old-suffixed file beside the new one, so the bump renames all twelve
candidates. Every one of them is now a second source file whose name is
the name of the contract's own file.

`vm.getCode` selects an artifact by matching the trailing path components
of its source, so `X.sol:X` stopped naming one file the moment a second
`X.sol` existed, and the three StoxUnifiedDeployer tests died on
`multiple matching artifacts found` at the first etch. The full source
path names the concrete contract and nothing else.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every rainix shell carries `rainix-static`, a rust build, and crates.io
is answering 403 to the runners: `crate-zip-2.4.2.tar.gz` fails all four
curl attempts, `rainix-static-0.1.0.drv` fails with it, and the shell
never exists — so `Install soldeer dependencies` dies and nothing this
lane asserts ever runs.

The rainix reusable workflows already substitute from the `rainlanguage`
cache via their shared `nix-cachix-setup` preamble, which is why
`rainix-sol` built a shell on the same commit that this lane could not.
This lane is hand-rolled and had to be told. Same fix as
rainlanguage/rain.metadata#298.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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