Skip to content

fix(rpc): take robinhood's official endpoint out of first place - #406

Merged
thedavidmeister merged 2 commits into
mainfrom
2026-10-07-robinhood-cloudflare-order
Oct 7, 2026
Merged

thedavidmeister merged 2 commits into
mainfrom
2026-10-07-robinhood-cloudflare-order

Conversation

@thedavidmeister

@thedavidmeister thedavidmeister commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

https://rpc.mainnet.chain.robinhood.com served a Cloudflare managed challenge — HTTP 403, body cType: 'managed', "Just a moment..." — to a GitHub runner at 15:53 on 2026-10-07. It took 13 fork tests across RegistryDeployVerify.t.sol and LibRainDeploy.t.sol with it, and with them rain.deploy's sol-v0.1.14 publish (failed run). 655 tests passed; nothing was wrong with the code.

The same endpoint answered eth_getCode 8/8 from a non-CI host within the hour, and rain.deploy's own PR CI had passed on it minutes earlier. The block is keyed to the caller's address, which is why it is not a rate limit and not a measurement this table can take: a probe run from a developer machine sees a healthy endpoint no matter how many samples it takes.

So the order carries it. robinhood's defaults become tenderly, publicnode, official-last. All three measured 8/8 today; both replacements were already 5/5 and 16/16 in the 2026-09-09 pass recorded in the comment.

QA

  • Discriminating tests: an_endpoint_a_suite_measured_as_rate_limiting_is_not_tried_first gains a robinhood row. It fails on base: that test asserts net.defaults[0] != shed, and on main defaults[0] is exactly https://rpc.mainnet.chain.robinhood.com. Its sibling assertion (defaults.contains(&shed), "drop this row too") keeps the endpoint in the pool rather than deleting it — it works for everyone outside CI. cargo test rpc_preflight: 31 passed / 0 failed.
  • Mutations applied: n/a — not run, per the maintainer's instruction that a release push does not wait on mutation testing. The probe was set up and abandoned mid-M01; its harness is removed and the file restored from the commit. The one mutation worth recording is the trivial one the new test row encodes: restoring the official endpoint to defaults[0] fails that assertion by construction.
  • Oracle: the failing run's own log (403 + Cloudflare challenge body) and eth_getCode measured directly against all three candidates, not the preflight prober's verdict. Deliberately independent of preflight: preflight's archive probe is exactly what cannot see this.
  • Category check: the task is to stop a CI-only block from gating releases. Covered: order changed, order pinned by test, endpoint retained for non-CI callers, measurement and date recorded in the comment above the entry. Deliberately not done — removing the endpoint (it is healthy off-CI), and adding a secret/variable override in rain.deploy alone (the block is upstream and affects every consumer of this table).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Updated the default RPC endpoint order to prioritize Tenderly and PublicNode before the official Robinhood endpoint. The official endpoint remains available as a fallback.

It served a Cloudflare managed challenge — HTTP 403, `cType: 'managed'` — to a
GitHub runner on 2026-10-07, which took 13 of rain.deploy's fork tests and the
0.1.14 publish with it. The same endpoint answered 8/8 from a non-CI host within
the hour, so the block is keyed to the caller's address and no probe this table
runs from a developer machine can see it. Order is the only remedy available:
tenderly, then publicnode, with the official endpoint last.

The order test gains a robinhood row, so first place cannot drift back.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 7, 2026

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: Repository: rainlanguage/rainix/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 39774118-4e84-4d11-9df6-463306f583e9
📥 Commits

Reviewing files that changed from the base of the PR and between 0a85350 and 8133785.

📒 Files selected for processing (1)
  • rainix-static/src/rpc_preflight.rs
 ___________________________________________________________________________________________________________________________________
< Keep knowledge in plain text. Plain text won't become obsolete. It helps leverage your work and simplifies debugging and testing. >
 -----------------------------------------------------------------------------------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@thedavidmeister
thedavidmeister merged commit d5ba15d into main Oct 7, 2026
18 of 20 checks passed
@linear

linear Bot commented Oct 7, 2026

Copy link
Copy Markdown

RAI-2978

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

@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