Merged
Conversation
#12022) * fix: hotfix release flow ships only hotfix commits and uses patch version bump The hotfix option in `yarn release` was shipping all commits since the last tag instead of just the hotfix commits. This happened because `getCommits()` used `${latestTag}..origin/${branch}` for hotfix branches, which includes develop history. - Use `origin/main..origin/${branch}` range for hotfix branches so only commits not on main are included - Add programmatic verification that the hotfix branch is actually based on origin/main (not just the user's confirmation) - Use patch version bump for hotfixes instead of minor - Detect hotfix vs regular release at merge time via PR title prefix Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: redesign hotfix release to cherry-pick from develop instead of requiring manual branch Hotfix flow now fetches unreleased commits (origin/main..origin/develop), presents them as checkboxes, cherry-picks selected commits onto main, tags with patch version, and syncs private + develop - eliminating the need to manually create a branch off main. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: use raw git exec for getUnreleasedCommits to parse multi-line output correctly simple-git's .log() collapses custom --pretty=format output into a single entry. Switching to pify(exec) gives us raw stdout we can split by newline. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: handle pify(exec) return type safely in getUnreleasedCommits Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: use simple-git format API correctly and harden cherry-pick loop Use simple-git's object-style format option instead of raw --pretty flag which broke internal parsing. Reverse cherry-pick order to oldest-first and add error handling with abort on failure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: harden release script commit parsing and hotfix rollback * fix: print release commits one per line * fix: satisfy release script lint formatting * fix: satisfy release script lint formatting Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add defensive parsing guard and develop merge error handling Guard against empty commit subjects in getUnreleasedCommits where spaceIdx === -1 would corrupt the hash via slice(0, -1). Add try/catch around the merge-main-into-develop step in both hotfix and regular release flows so a conflict doesn't leave develop in a broken state with no recovery guidance. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add missing await on doHotfixRelease() Without await, the script could exit mid-operation or swallow errors as unhandled rejections during cherry-picks, tags, pushes, and develop merges. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Contributor
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ 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 |
* fix: unrug public-api Railway CI - copy patches dir and add .railwayignore Two fixes for Railway deployment failures: 1. Copy patches/ directory in Dockerfile before pnpm install - pnpm requires patch files during install even with --ignore-scripts because patched dependencies are referenced in the lockfile. 2. Add .railwayignore to reduce repo snapshot size - Railway's "Failed to snapshot repository" error was caused by the repo being ~74MB of tracked files. Excludes frontend source, images, tests, and other files not needed for the public-api Docker build. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add patches dir to swap-widget Dockerfile and update .railwayignore The swap-widget Dockerfile had the same missing patches/ dir bug as public-api — pnpm install fails with ENOENT for patched dependencies. Also add swap-widget *.md exception to .railwayignore. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…12100) * fix: use copy package-import-method in Docker to avoid pnpm ENOENT pnpm's default hard-link strategy fails intermittently on Docker's overlay filesystem with "ENOENT: rename _tmp -> secp256k1". Setting package-import-method=copy via env var (Docker-only, doesn't affect local dev .npmrc) fixes the atomic rename race condition. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add retry loop for pnpm install in Docker builds The ENOENT rename failure persists even with package-import-method=copy because pnpm's hoisting/linking phase still does atomic renames that race on Docker's overlay filesystem. Since it's intermittent and all packages are cached in the store after the first attempt, a retry with clean node_modules is fast and reliable. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: restrict swap-widget tsconfig types to prevent auto-discovery Without an explicit `types` field, TypeScript auto-discovers all @types/* packages hoisted to root node_modules. The deprecated stub @types/ethereumjs-util (from hdwallet-ledger devDeps) has no .d.ts files, causing TS2688 during Docker builds. Restricting to ["vite/client"] matches the pattern used by the root tsconfig. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Production changes - testing required
Bitcoin RBF and WalletConnect
Enables Replace-By-Fee on all Bitcoin transactions (nSequence = 0xFFFFFFFD) for fee bumping stuck txs. Also adds full Bitcoin (BIP122) namespace support to WalletConnect - both as a wallet (external dApps connect to ShapeShift) and as a dApp (ShapeShift connects to external BTC wallets like Xverse/OKX). Test BTC sends to confirm RBF flag is set, test WC pairing with a BTC-capable wallet, and test WC dApp mode by connecting an external BTC dApp and signing a transaction.
Yield and staking fixes
Fixes mobile yield page layout (scroll, padding, back arrow positioning) and surfaces proper error messages for Ledger blind signing failures instead of generic toasts. Also adds Mixpanel tracking for yield.xyz deposit/withdraw/claim flows and shows an error state when the pools endpoint is down. Test yield flows on mobile viewport, test Lido ETH staking on Ledger with blind signing disabled to verify the toast, and verify pools page handles API failure gracefully. Note for Mixpanel tracking: disabled in private build.
FOX ecosystem
Fixes TON-backed asset errors on the FOX ecosystem page, routes the trade CTA to FOX context instead of generic trade, disables the rFOX Claim button when no unstaking requests have expired cooldown, and updates the rFOX IPFS hash for February rewards. Test /fox-ecosystem with no console errors for TON assets, verify trade CTA opens with FOX pre-selected, and verify the Claim button is disabled with no claimable requests.
Trade and input fixes
Fixes fiat input retaining a trailing zero after deletion and fixes the limit order expiry dropdown being clipped/unscrollable. Test typing/deleting amounts in fiat mode and verify all 5 expiry options are visible in Trade > Limit.
Send
Constrains the send address input to max 3 rows with scroll overflow. Test pasting a very long string in the Send modal address field - it should cap at 3 rows then scroll.
Legal links
Fixes broken Terms of Service and Privacy Policy links in MobileConnect that were returning 404. Test tapping both links on mobile to verify they navigate correctly.
Fixes, deps, and infra
No testing required. CI fix for public-api Docker builds, strict peer deps enforcement with whitelisted mismatches, security overrides for transitive deps (elliptic, react-router, validator, etc.), BSC fallback RPC env/CSP wiring, and hotfix release script fix to ship only hotfix commits with patch bump.
Dev/local only - no production testing required
Chainflip lending (behind CHAINFLIP_LENDING flag)
Wires Chainflip lending safe mode gating into pool actions, fixes LTV gauge layout in modals, integrates lending operations into the Action Center with toast notifications, and polishes the information architecture revamp (route compat, data-testids, repay asset locking).
Dev tooling and QA
Agent tooling improvements - Codex/Claude instruction unification, qabot exploration mode with no-go zones, qabot reliability checklist, and PORT env override for parallel local dev servers.