Skip to content

Un-red default-branch CI: no-skips gate, fork RPC env, Package Release - #140

Merged
thedavidmeister merged 2 commits into
mainfrom
2026-08-20-issue-138-unred-main
Aug 20, 2026
Merged

Un-red default-branch CI: no-skips gate, fork RPC env, Package Release#140
thedavidmeister merged 2 commits into
mainfrom
2026-08-20-issue-138-unred-main

Conversation

@thedavidmeister

Copy link
Copy Markdown
Contributor

Un-reds every red lane on the default branch (red since 2026-07-15; Package Release since 2026-06-15).

Per-lane fixes

rainix-sol / static and rainix-rs / static — both failed on the same org no-ignored-tests gate, which greps the whole checkout: the four vm.skip(vm.envOr("CI", false)) lines in test/lib/deploy/LibMetaBoardDeploy.t.sol redded the Rust static lane too (every actual rs test/wasm job is green — there was never a Rust defect). Per the gate's rule the four testStartBlock* tests are deleted, not re-enabled: their findDeployBlock rollFork binary search rate-limits real RPCs (the reason they were skip-gated), and on Arbitrum rollFork maps L1 block numbers, not L2. The pinned start-block constants remain covered for real by the testIsStartBlock* fork tests; the discovery rationale is preserved as a comment. The now-unused findStartBlock helper, ARBITRUM_NITRO_GENESIS_BLOCK constant, and the commented-out Arbitrum test go with them.

rainix-sol / testtestDeployAddress() forked vm.envString("ETH_RPC_URL"), which rainix-sol-test binds to the raw CI_DEPLOY_SEPOLIA_RPC_URL secret/var: empty on the 2026-08-19 runs (blank in the job env dump), with no rpc-preflight failover and no public default, so createSelectFork received an empty URL. Switched to ETHEREUM_RPC_URL: the rainix rpc-preflight demand-scans tracked files for exactly this name, then health-probes and exports a working URL from secret then var then public archive defaults (the org network table forks ethereum at latest). Ethereum mainnet verified: the Zoltu factory has code there and the MetaBoard address is empty, so the deterministic deploy cannot collide with a live deployment. No foundry.toml change, so no conflict surface with #137, and no concrete bytecode or deploy pin is touched.

Package Release — failing in forge soldeer push with error during IO operation for "": not connected: soldeer's interactive "sensitive files" confirm cannot be answered in a non-TTY shell. soldeer filters the copy list through .gitignore + .soldeerignore first and prompts iff any dotfile survives; the only survivor was .prettierignore. Adding it to .soldeerignore makes the zip dotfile-free, so the prompt can never fire and the push is fully non-interactive. SOLDEER_API_TOKEN is present in CI and the soldeer content gate passes, so nothing registry-side is needed.

Contradictions with the issue as filed

  • rainix-sol/test was green on main's last push (2026-07-15) with all RPC env present; the empty ETH_RPC_URL appeared between then and 2026-08-19 (Drop foundry.toml release metadata: version intent lives in next-v tags (rainix#335) #137's branch is in-repo, so secrets do flow there — the underlying secret/var is simply empty now). It would red main's next push regardless; this PR removes the dependency on that secret entirely.
  • rainix-rs/static was not an independent failure needing line-level diagnosis: it is the same four vm.skip lines, hit via the gate's checkout-wide grep.
  • Package Release has been red since 2026-06-15 (the PR chore: latest rainix + soldeer re-lock #126 toolchain bump), a month before the other lanes, with an unrelated cause.

Remains org-side (reported, not attempted)

  • rainix-autopublish could pass --skip-warnings to forge soldeer push so a future dotfile in any consumer's zip cannot re-kill publishes org-wide (current upstream soldeer also defaults to continue when no TTY is attached, so a soldeer bump achieves the same). Not needed for this repo after this PR.
  • CI_DEPLOY_SEPOLIA_RPC_URL (secret or repo/org var) is empty/unavailable as of 2026-08-19; any org repo still reading ETH_RPC_URL from it is affected. Restore or migrate at org level. Not needed for this repo after this PR.

QA

  • Discriminating tests:
    • testDeployAddress() — fails on base under the CI env shape ([FAIL: vm.envString: environment variable "ETH_RPC_URL" not found]; verified by checking out the base test file and running forge test --match-test testDeployAddress with only the preflight-supplied *_RPC_URL env exported), passes on this branch under the same env (gas 197110, real Zoltu deploy on an ethereum mainnet fork).
    • The org no-ignored-tests grep — 4 hits on base (vm.skip at lines 85/90/95/100, the exact CI static-lane failure in both rainix-sol and rainix-rs), zero hits on this branch.
    • Soldeer dry-run zip listing (forge soldeer push rain-metadata~0.0.1 --dry-run) — the base zip contains .prettierignore (the dotfile that makes check_dotfiles true and raises the prompt that kills non-TTY CI), the branch zip has 39 entries and zero dotfiles.
  • Mutations applied: n/a — the diff contains no mutable production logic (one Solidity test file plus one .soldeerignore line; src/ is untouched and MetaBoard bytecode/deploy pins are unchanged), so nix run github:rainlanguage/adversarial-mutation-test#mutation-probe -- mutants.toml has nothing in-diff to mutate.
  • Oracle: the pinned LibMetaBoardDeploy constants checked against live chain state read via raw JSON-RPC independent of the tests (eth_getCode on ethereum mainnet: Zoltu factory bytecode present, MetaBoard address empty); soldeer's own filter_ignored_files/check_dotfiles source semantics plus the verbatim CI failure log for Package Release; the rainix rpc-preflight network table for env names, demand scan, and default pools.
  • Category check: issue Default branch CI fully red since 2026-07-15: skip-gated fork tests, unwired fork RPC env, rs-static, Package Release #138 names four lanes — sol-static no-skips gate, sol-test fork RPC, rs-static, Package Release; covered all four (rs-static diagnosed to the same no-skips grep hit, no Rust defect existed; the other three fixed as above).
  • Full gate run locally in nix develop on this branch: forge test 31 passed / 0 failed / 0 skipped with all fork tests running for real against public archive RPCs (ETHEREUM_RPC_URL, ARBITRUM_RPC_URL, BASE_RPC_URL, BASE_SEPOLIA_RPC_URL, FLARE_RPC_URL, POLYGON_RPC_URL exported from the rpc-preflight default pool); pre-commit run --all-files all hooks passed; cargo test --workspace passed; reuse lint compliant (128/128); forge fmt --check clean.

Closes #138

🤖 Generated with Claude Code

baku-ccron and others added 2 commits August 20, 2026 17:01
…ddress

The org no-ignored-tests gate greps the whole checkout, so the four
vm.skip(vm.envOr("CI", false)) lines redded BOTH the rainix-sol and
rainix-rs static lanes. Per the gate's rule they are deleted, not
re-enabled: findDeployBlock's rollFork binary search rate-limits real
RPCs (the reason they were skip-gated), and on Arbitrum rollFork maps
L1 block numbers. The pinned constants stay covered for real by the
testIsStartBlock* fork tests; the discovery rationale is kept as a
comment. The unused findStartBlock helper, ARBITRUM_NITRO_GENESIS_BLOCK
constant and commented-out Arbitrum test go with them.

testDeployAddress forked ETH_RPC_URL, which rainix-sol-test binds to
the raw CI_DEPLOY_SEPOLIA_RPC_URL secret/var - empty on 2026-08-19
runs, with no rpc-preflight failover and no public default. Switch to
ETHEREUM_RPC_URL: the rainix rpc-preflight demand-scans tracked files
for this exact name, then health-probes and exports a working URL
(secret, then var, then public archive defaults). Ethereum mainnet has
the zoltu factory deployed and no MetaBoard at the pinned address, so
the deterministic deploy cannot collide with a live deployment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
forge soldeer push has failed in CI since 2026-06-15 with 'error during
IO operation for "": not connected': soldeer's interactive sensitive-
files confirm cannot be answered in a non-TTY shell. soldeer filters
the copy list through .gitignore + .soldeerignore first and prompts iff
any dotfile survives; the only survivor was .prettierignore. With it
ignored the zip is dotfile-free (verified via --dry-run: 39 entries,
zero dotfiles; pre-fix the zip contained .prettierignore), so the
prompt can never fire and the push is fully non-interactive.

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

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@thedavidmeister, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 40 minutes

Limit details: You’ve used the included review currently available.

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?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: d976866c-8ad9-44a7-85b3-e369c4b9a80d

📥 Commits

Reviewing files that changed from the base of the PR and between 382d44e and 4836159.

📒 Files selected for processing (2)
  • .soldeerignore
  • test/lib/deploy/LibMetaBoardDeploy.t.sol

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 11213fb into main Aug 20, 2026
11 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.

Default branch CI fully red since 2026-07-15: skip-gated fork tests, unwired fork RPC env, rs-static, Package Release

1 participant