Skip to content

chore: backmerge main into dev (prod hotfixes)#2429

Merged
Hugo0 merged 20 commits into
devfrom
backmerge/main-into-dev
Jul 16, 2026
Merged

chore: backmerge main into dev (prod hotfixes)#2429
Hugo0 merged 20 commits into
devfrom
backmerge/main-into-dev

Conversation

@kushagrasarathe

@kushagrasarathe kushagrasarathe commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Backmerge of prod hotfixes from main into dev so staging picks them up:

Merge was clean — no conflicts with the dev refactor. Verified: npm run typecheck clean, npm test 142 suites / 1974 tests green.

abalinda and others added 19 commits July 13, 2026 18:53
…rozone

Bridge now supports SEPA for Albania, Moldova, Montenegro, North Macedonia
and Serbia (TASK-20580) — surface the bank rail as available instead of
'Soon' for deposit and withdraw, and show the standard EUR-accounts-only
warning for the four that keep a domestic currency.

Bulgaria adopted the euro in Jan 2026: badge EUR instead of BGN and drop
the stale non-EUR SEPA warning.
The map already carried US/GB/CH and now the 2025/26 SEPA joiners; the old
label invited a 'clean up non-EEA entries' edit that would disable live
rails.
Signed-off-by: ab <78670703+abalinda@users.noreply.github.com>
feat: enable SEPA bank rail for AL/MD/ME/MK/RS + treat Bulgaria as Eurozone
…rnels

Three accounts carry validNonceFrom > currentNonce (left by the 2025-09-18
root-validator migration wave); Kernel v3.1 rejects every enable-mode card
approval below that floor with InvalidNonce, so auto-balance fails hourly
forever and no re-grant can help — the account state itself is the poison.
A fourth account is undeployed with a v0.0.3-initCode approval (AA14).

Hidden support page (not linked anywhere): diagnoses the account on-chain,
sends the matching repair userOp (invalidateNonce(floor+1), or the migration
no-op deploy), confirms against re-read chain state, then re-grants — the
existing session-approve route stores the fresh approval and kicks off a
funding run immediately.
- diagnose keyed on the async zerodev address (mount-only effect left the
  page dead on a cold load from a support DM — the exact target flow)
- repair() re-diagnoses live state before sending, so a retry after a
  confirm-poll timeout can't re-send an already-consumed invalidateNonce
- guard the Kernel v3.1 invalidation cap (floor > currentNonce+10 has no
  valid target — fail with clear copy instead of burning doomed passkey taps)
- step 2 respects the card-overview loading state instead of flashing
  'no active card — contact support' at users on the success path
- 'Check again' affordance after a failed diagnosis; dismissed passkey
  sheets are quiet no-ops, matching the grant path; drop the dead lastError
  render condition and the type export from the hook file
…e-repair

feat(card): /fix-card-signature — guided repair for enable-bricked kernel accounts
A user cancelled a funded bank deposit while trying to report a problem:
the cancel button sits next to the support link and fired instantly with
no confirmation (PostHog: 'Issues with this transaction?' at 09:03:00,
'Cancel deposit' 11s later), making the arriving wire unmatchable.

The drawer also showed the FULL deposit reference while Add Money shows
the intentionally shortened 10-char form (some banks cap reference
fields; Bridge matches on the partial) — the two-different-codes
confusion that sent the user hunting in the drawer to begin with.
…a vaul drawer

Root cause of the phantom deposit cancels: vaul sets pointer-events:none
on body while the transaction drawer is open, and the SupportDrawer's
backdrop/panel never re-enabled pointer events — the whole support
overlay was click-transparent, so taps on it fell through to the receipt
underneath, where 'Cancel deposit' sits adjacent to the support link and
fired irreversibly (PostHog: support link 15:05:47.7 → fall-through
click on Cancel deposit 15:05:48.8 → BE cancel 15:05:49.4).

Also per code review: single shortDepositReference() helper for the
6 reference sites across both screens, separate confirm-modal visibility
from the armed action (noun flashed mid-fade), drop no-op icon props.
… twice

CodeRabbit finding: two taps during the modal fade both see the armed
action and start concurrent cancellations. Ref guard, not state — a
same-frame double-tap lands before any re-render.
…rmation

fix(deposits): stop support-chat clicks from cancelling deposits + confirm-before-cancel + uniform reference
Bumps src/content to peanut-content hotfix 32f5b91 (off current prod
pointer f3c0ef66): removes personal phone number + swaps help@ -> support@
in the card legal docs. Isolated from the in-flight tos-v1 rework so it
passes content verification and ships to peanut.me now.
…tact-hotfix

content: publish card-legal contact hotfix (remove phone number, help@ → support@)
…3a05f7)

Bumps src/content on production (main) from 32f5b91 → e3a05f7
(peanut-content latest = mono@83166e9). Single-file submodule
pointer change. Publishes content already merged + mirrored from mono that the
dev-targeted auto-PRs never promote to main.
…202607151650

content: publish legal docs overhaul to production (tos-v1)
@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
peanut-wallet Ready Ready Preview, Comment Jul 16, 2026 9:47am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 83ef89eb-dfb5-4be2-bce3-ec448bfb4ca9

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch backmerge/main-into-dev

Comment @coderabbitai help to get the list of available commands.

# Conflicts:
#	src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx
@github-actions

Copy link
Copy Markdown
Contributor

Code-analysis diff

Painscore total: 6188.38 → 6205.16 (+16.78)
Findings: +10 net (+27 new, -17 resolved)

🆕 New findings (27)

  • critical complexity — src/components/AddMoney/components/AddMoneyBankDetails.tsx — CC 82, MI 58.12, SLOC 153
  • critical complexity — src/components/AddMoney/consts/index.ts — CC 31, MI 24.01, SLOC 2255
  • high complexity — src/app/(mobile-ui)/fix-card-signature/page.tsx — CC 39, MI 60.5, SLOC 53
  • high complexity — src/hooks/wallet/useCardSignatureRepair.ts — CC 35, MI 58.64, SLOC 171
  • high complexity — src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx — CC 33, MI 64.65, SLOC 108
  • high method-complexity — src/components/AddMoney/components/AddMoneyBankDetails.tsx:50 — AddMoneyBankDetails CC 32 SLOC 67
  • high method-complexity — src/app/(mobile-ui)/fix-card-signature/page.tsx:23 — FixCardSignaturePage CC 30 SLOC 35
  • medium high-mdd — src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx:24 — BridgeDepositInstructions: MDD 105.8 (uses across many lines from declarations)
  • medium high-mdd — src/components/Global/SupportDrawer/index.tsx:15 — SupportDrawer: MDD 52.7 (uses across many lines from declarations)
  • medium high-mdd — src/app/(mobile-ui)/fix-card-signature/page.tsx:23 — FixCardSignaturePage: MDD 51.8 (uses across many lines from declarations)
  • medium high-mdd — src/hooks/wallet/useCardSignatureRepair.ts:75 — useCardSignatureRepair: MDD 36.9 (uses across many lines from declarations)
  • medium high-mdd — src/components/AddMoney/consts/index.ts:2681 — : MDD 31.8 (uses across many lines from declarations)
  • medium complexity — src/constants/countryCurrencyMapping.ts — CC 28, MI 51.95, SLOC 160
  • medium high-mdd — src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx:29 — CancelDepositActions: MDD 26.4 (uses across many lines from declarations)
  • medium method-complexity — src/components/AddMoney/components/AddMoneyBankDetails.tsx:179 — CC 22 SLOC 23
  • medium complexity — src/utils/format.utils.ts — CC 17, MI 62.06, SLOC 62
  • medium complexity — src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx — CC 16, MI 64.92, SLOC 16
  • medium method-complexity — src/constants/countryCurrencyMapping.ts:93 — getBankAccountCountryCode CC 15 SLOC 32
  • medium complexity — src/constants/routes.ts — CC 15, MI 60.99, SLOC 47
  • medium nextjs-missing-use-client — src/hooks/wallet/useCardSignatureRepair.ts:1 — Hooks used without use client directive

…and 7 more.

✅ Resolved (17)

  • src/components/AddMoney/components/AddMoneyBankDetails.tsx — CC 82, MI 58.34, SLOC 149
  • src/components/AddMoney/consts/index.ts — CC 31, MI 24.04, SLOC 2250
  • src/components/AddMoney/components/AddMoneyBankDetails.tsx:50 — AddMoneyBankDetails CC 32 SLOC 64
  • src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx:23 — BridgeDepositInstructions: MDD 104.1 (uses across many lines from declarations)
  • src/components/Global/SupportDrawer/index.tsx:15 — SupportDrawer: MDD 51.4 (uses across many lines from declarations)
  • src/components/AddMoney/consts/index.ts:2675 — : MDD 31.8 (uses across many lines from declarations)
  • src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx — CC 28, MI 66.56, SLOC 79
  • src/constants/countryCurrencyMapping.ts — CC 28, MI 53.11, SLOC 145
  • src/components/AddMoney/components/AddMoneyBankDetails.tsx:179 — CC 22 SLOC 22
  • src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx — CC 16, MI 66.22, SLOC 14
  • src/utils/format.utils.ts — CC 16, MI 60.76, SLOC 60
  • src/constants/countryCurrencyMapping.ts:84 — getBankAccountCountryCode CC 15 SLOC 32
  • src/constants/routes.ts — CC 15, MI 61, SLOC 47
  • src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx:28 — CancelDepositActions: MDD 17.1 (uses across many lines from declarations)
  • src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx:28 — CancelDepositActions: DLT 17 (calls 17 distinct functions — high context load)
  • src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx:28 — CancelDepositActions: exported fn missing return type annotation
  • src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx:23 — BridgeDepositInstructions: exported fn missing return type annotation

📈 Painscore deltas (top movers)

File Before After Δ
src/app/(mobile-ui)/fix-card-signature/page.tsx 0.0 8.1 +8.1
src/hooks/wallet/useCardSignatureRepair.ts 0.0 7.8 +7.8
src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx 7.0 7.9 +0.8
src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx 10.6 11.3 +0.7
src/constants/countryCurrencyMapping.ts 8.4 9.0 +0.6

@github-actions

Copy link
Copy Markdown
Contributor

🧪 UI test report — ✅ all green

Suites

  • unit: 1980 ran, 0 failed, 0 skipped, 34.0s

📊 Coverage (unit)

metric %
statements 59.4%
branches 43.4%
functions 48.5%
lines 59.7%
⏱ 10 slowest test cases
time test
3.6s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › never places two stickers in heavy overlap (broad seed sweep)
1.2s src/utils/__tests__/demo-api.test.ts › isDemoMode() is false when not running under Capacitor
0.5s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › every sticker stays within canvas at any count
0.3s src/app/actions/__tests__/api-headers.test.ts › should include Content-Type in validateInviteCode
0.3s src/app/actions/__tests__/api-headers-extended.test.ts › should not include apiKey in validateInviteCode body
0.3s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › keeps stickers off the username pill (final pass respects the keep-out)
0.2s src/utils/__tests__/demo-balance.test.ts › starts at the full balance on a fresh install and stamps a timestamp
0.2s src/utils/__tests__/demo-balance.test.ts › auto-refills a stored balance that has no timestamp (legacy install)
0.2s src/utils/__tests__/url.utils.test.ts › uses the public BASE_URL in Capacitor, not the localhost WebView origin
0.2s src/utils/__tests__/demo-balance.test.ts › keeps a spent-down balance across a cold start within the TTL
📍 Inline annotations are in the **Unit test report** check above. Coverage artifact: `coverage-unit`. Generated by `.github/workflows/tests.yml`.

@Hugo0 Hugo0 merged commit 776995c into dev Jul 16, 2026
16 of 19 checks passed
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.

5 participants