Skip to content

feat(kyc): mandatory EEA-uplift gate + funnel analytics#2309

Merged
Hugo0 merged 3 commits into
mainfrom
feat/eea-uplift-hard-gate
Jun 29, 2026
Merged

feat(kyc): mandatory EEA-uplift gate + funnel analytics#2309
Hugo0 merged 3 commits into
mainfrom
feat/eea-uplift-hard-gate

Conversation

@kushagrasarathe

@kushagrasarathe kushagrasarathe commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Users were skipping the EEA-uplift KYC via the modal's "Not now" / close button and then continuing to transact — so the Bridge endorsement requirement never got completed before a bank transfer. This makes the verification a hard gate:

  • AdvisoryPreemptModal is now non-closable + non-skippable (preventClose + hideModalCloseButton, "Not now" removed). Only "Complete now" proceeds.
  • useAdvisoryPreempt blocks the deferred deposit/withdraw action while a requirement is pending; it passes through only once the gate clears the advisory. It also auto-closes if the requirement clears while open, and re-shows if the launch fails.

Analytics (the second ask)

Two dedicated PostHog events so the funnel can be filtered directly:

  • eea_uplift_started — fired when the user taps "Complete now".
  • eea_uplift_completed — fired at the Sumsub approval transition (verification submitted), via a new onKycApproved callback on useMultiPhaseKycFlownot at end-of-flow, so it isn't lost if the user drops during post-approval ToS/preparing, and isn't mis-fired on a ToS-skip. Ref-guarded + reset on abandon so non-uplift KYC successes don't mis-fire it.
  • Both carry channel (deposit/withdraw), requirement_key, action_key, effective_date.

Risks / scope

  • Front-end enforcement only — does not change Bridge's underlying requirement.
  • Removes the grace-period skip. Users with a pending requirement can no longer move money via bank until they complete it (they can still navigate away — not trapped in-app). The uplift flow has non-trivial drop-off, so expect a support-ticket bump; pairing with a "contact support" affordance / drop-off monitoring is advised. Product-approved trade-off.
  • Scope is the advisory hard-gate path on add-money/[country]/bank and withdraw/[country]/bank. The post-cliff blocking InitiateKycModal path still emits the generic kyc_* events; the dedicated events are not wired there.
  • onKycApproved is additive on the shared useMultiPhaseKycFlow (optional, no-op for existing consumers).

QA

  • useAdvisoryPreempt.test.ts + useEeaUpliftFunnel.test.ts — 13 tests (hard-gate semantics, modal lifecycle, funnel firing/guards/reset).
  • Manual (sandbox): with a pending Bridge eea_uplift requirement, open add-money/[country]/bank → tap continue → modal appears with no X / no backdrop dismiss / no "Not now"; "Complete now" launches Sumsub; eea_uplift_started fires on launch, eea_uplift_completed on Sumsub approval. Same on withdraw/[country]/bank.

Local gate: prettier ✅ · typecheck ✅ · unit 13/13 ✅. (eslint is the repo's known-amber baseline — not worsened; new code lints clean.)

…lytics

Users were skipping the EEA-uplift KYC via the modal's "Not now" / close and
then continuing to transact, so the requirement never got completed before a
bank transfer. Make the pre-empt mandatory: the modal is non-closable and
non-skippable (preventClose + hideModalCloseButton, "Not now" removed), and
the hook blocks the deferred deposit/withdraw action until the requirement
clears. Only "Complete now" moves forward.

Add dedicated PostHog events (eea_uplift_started / eea_uplift_completed, with
channel + requirement_key) so the start->finish funnel can be filtered
directly. Completion is ref-guarded so generic KYC successes on the bank pages
don't mis-fire it.

Scope: the advisory hard-gate path on add-money/[country]/bank and
withdraw/[country]/bank. Front-end enforcement only — does not change Bridge's
underlying requirement.
@vercel

vercel Bot commented Jun 29, 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 Jun 29, 2026 3:02pm

Request Review

@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Adds EEA uplift analytics, a KYC approval callback, and a mandatory advisory gate, then wires the tracking and gate behavior into the deposit and withdrawal bank pages.

Changes

EEA Uplift Funnel Tracking and Mandatory Advisory Gate

Layer / File(s) Summary
Analytics events and uplift funnel hook
src/constants/analytics.consts.ts, src/hooks/useEeaUpliftFunnel.ts, src/hooks/useEeaUpliftFunnel.test.ts
Adds EEA uplift event names and implements useEeaUpliftFunnel(channel) with session-latched start, completion, and reset tracking plus coverage for emitted payloads and reset behavior.
Multi-phase KYC approval callback
src/hooks/useMultiPhaseKycFlow.ts
Adds onKycApproved to useMultiPhaseKycFlow, invokes it when Sumsub reports approval, and updates the callback dependency list.
Advisory pre-empt hook and tests
src/hooks/useAdvisoryPreempt.ts, src/hooks/useAdvisoryPreempt.test.ts
Refactors useAdvisoryPreempt into a mandatory gate that blocks proceed while an advisory exists, simplifies completeNow(), removes skip/close modal props, and updates tests for the new modal lifecycle and failure behavior.
Advisory modal non-closable UI
src/components/Kyc/AdvisoryPreemptModal.tsx
Removes dismissal callbacks from AdvisoryPreemptModal, enforces non-closable modal behavior, updates copy, and leaves only the complete-now CTA.
Deposit bank page wiring
src/app/(mobile-ui)/add-money/[country]/bank/page.tsx
Wires useEeaUpliftFunnel('deposit') into the deposit bank flow, tracks completion on KYC approval, resets on manual close, and records uplift start before BRIDGE self-heal resubmission.
Withdrawal bank page wiring
src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
Wires useEeaUpliftFunnel('withdraw') into the withdrawal bank flow, tracks completion on KYC approval, resets on manual close, and records uplift start before self-heal resubmission.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • peanutprotocol/peanut-ui#2080: Touches the same multi-phase KYC approval/resubmission path that this PR extends with onKycApproved and uplift tracking.
  • peanutprotocol/peanut-ui#2255: Revises the same advisory pre-empt hook, modal, and bank-page integration points that this PR further changes.

Suggested labels

enhancement

Suggested reviewers

  • jjramirezn
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: a mandatory EEA-uplift KYC gate plus funnel analytics.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The description clearly matches the code changes: hard-gating the advisory modal and adding EEA uplift analytics and tests.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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

@github-actions

github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Code-analysis diff

Painscore total: 5845.66 → 5852.23 (+6.57)
Findings: +1 net (+45 new, -44 resolved)

🆕 New findings (45)

  • critical complexity — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx — CC 99, MI 54.88, SLOC 340
  • critical complexity — src/app/(mobile-ui)/add-money/[country]/bank/page.tsx — CC 94, MI 57.82, SLOC 339
  • critical complexity — src/hooks/useMultiPhaseKycFlow.ts — CC 66, MI 57.68, SLOC 325
  • high hotspot — src/app/(mobile-ui)/add-money/[country]/bank/page.tsx — 52 commits, +602/-476 lines since 6 months ago
  • high hotspot — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx — 45 commits, +451/-202 lines since 6 months ago
  • high complexity — src/constants/analytics.consts.ts — CC 1, MI 34.41, SLOC 153
  • medium react-long-component — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:60 — WithdrawBankPage is 515 lines — split it
  • medium react-long-component — src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:49 — OnrampBankPage is 452 lines — split it
  • medium high-mdd — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:60 — WithdrawBankPage: MDD 149.6 (uses across many lines from declarations)
  • medium high-mdd — src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:49 — OnrampBankPage: MDD 139.3 (uses across many lines from declarations)
  • medium high-mdd — src/hooks/useMultiPhaseKycFlow.ts:98 — useMultiPhaseKycFlow: MDD 116.0 (uses across many lines from declarations)
  • medium high-dlt — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:60 — WithdrawBankPage: DLT 75 (calls 75 distinct functions — high context load)
  • medium high-dlt — src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:49 — OnrampBankPage: DLT 65 (calls 65 distinct functions — high context load)
  • medium high-dlt — src/hooks/useMultiPhaseKycFlow.ts:98 — useMultiPhaseKycFlow: DLT 37 (calls 37 distinct functions — high context load)
  • medium method-complexity — src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:49 — OnrampBankPage CC 29 SLOC 165
  • medium method-complexity — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:60 — WithdrawBankPage CC 28 SLOC 129
  • medium high-mdd — src/hooks/useAdvisoryPreempt.ts:23 — useAdvisoryPreempt: MDD 23.5 (uses across many lines from declarations)
  • medium hotspot — src/hooks/useMultiPhaseKycFlow.ts — 23 commits, +535/-109 lines since 6 months ago
  • medium hotspot — src/constants/analytics.consts.ts — 22 commits, +261/-6 lines since 6 months ago
  • medium method-complexity — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:212 — CC 18 SLOC 103

…and 25 more.

✅ Resolved (44)

  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx — CC 98, MI 54.79, SLOC 327
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx — CC 93, MI 57.82, SLOC 326
  • src/hooks/useMultiPhaseKycFlow.ts — CC 66, MI 57.72, SLOC 324
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx — 49 commits, +572/-466 lines since 6 months ago
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx — 42 commits, +419/-191 lines since 6 months ago
  • src/constants/analytics.consts.ts — CC 1, MI 34.56, SLOC 151
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:59 — WithdrawBankPage is 495 lines — split it
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:48 — OnrampBankPage is 433 lines — split it
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:59 — WithdrawBankPage: MDD 142.7 (uses across many lines from declarations)
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:48 — OnrampBankPage: MDD 136.5 (uses across many lines from declarations)
  • src/hooks/useMultiPhaseKycFlow.ts:90 — useMultiPhaseKycFlow: MDD 113.1 (uses across many lines from declarations)
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:59 — WithdrawBankPage: DLT 72 (calls 72 distinct functions — high context load)
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:48 — OnrampBankPage: DLT 62 (calls 62 distinct functions — high context load)
  • src/hooks/useMultiPhaseKycFlow.ts:90 — useMultiPhaseKycFlow: DLT 36 (calls 36 distinct functions — high context load)
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx:48 — OnrampBankPage CC 29 SLOC 157
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:59 — WithdrawBankPage CC 28 SLOC 121
  • src/hooks/useAdvisoryPreempt.ts:22 — useAdvisoryPreempt: MDD 24.5 (uses across many lines from declarations)
  • src/hooks/useMultiPhaseKycFlow.ts — 22 commits, +515/-107 lines since 6 months ago
  • src/hooks/useZeroDev.ts — 22 commits, +167/-140 lines since 6 months ago
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx:191 — CC 18 SLOC 103

…and 24 more.

📈 Painscore deltas (top movers)

File Before After Δ
src/hooks/useEeaUpliftFunnel.ts 0.0 5.8 +5.8
src/components/Kyc/AdvisoryPreemptModal.tsx 5.5 5.0 -0.6

@github-actions

github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

🧪 UI test report — ✅ all green

Suites

  • unit: 1604 ran, 0 failed, 0 skipped, 24.3s

📊 Coverage (unit)

metric %
statements 54.2%
branches 36.7%
functions 41.7%
lines 54.1%
⏱ 10 slowest test cases
time test
3.5s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › never places two stickers in heavy overlap (broad seed sweep)
0.4s src/app/actions/__tests__/api-headers.test.ts › should include Content-Type in updateUserById
0.3s 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-extended.test.ts › should not include apiKey in updateUserById body
0.1s src/components/Global/GeneralRecipientInput/__tests__/GeneralRecipientInput.test.tsx › should handle valid 9-digit US account
0.1s src/components/Global/GeneralRecipientInput/__tests__/GeneralRecipientInput.test.tsx › should handle valid US account with spaces 2
0.1s src/components/Global/GeneralRecipientInput/__tests__/GeneralRecipientInput.test.tsx › should handle too long for US account
0.1s src/components/Global/GeneralRecipientInput/__tests__/GeneralRecipientInput.test.tsx › should handle valid ETH address with surrounding spaces
0.1s src/components/Global/GeneralRecipientInput/__tests__/GeneralRecipientInput.test.tsx › should handle valid ETH address
0.1s src/components/Global/GeneralRecipientInput/__tests__/GeneralRecipientInput.test.tsx › should handle invalid ETH address (too short)
📍 Inline annotations are in the **Unit test report** check above. Coverage artifact: `coverage-unit`. Generated by `.github/workflows/tests.yml`.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/app/`(mobile-ui)/add-money/[country]/bank/page.tsx:
- Around line 86-91: The `eea_uplift_completed` event is being sent too late via
`useMultiPhaseKycFlow`’s `onKycSuccess`, which only runs after `completeFlow()`
finishes. Move the tracking to the Sumsub approval transition itself in
`bank/page.tsx` (or add a dedicated approved callback on `useMultiPhaseKycFlow`)
so `trackUpliftCompleted` fires when approval is reached, not when the full
post-approval flow ends. Keep the `setUrlState({ step: 'inputAmount' })`
navigation tied to the same approved path if appropriate.

In `@src/app/`(mobile-ui)/withdraw/[country]/bank/page.tsx:
- Around line 95-97: The `eea_uplift_completed` tracking is currently wired to
`useMultiPhaseKycFlow`’s `onKycSuccess`, which only fires at `completeFlow()`
and can miss approved uplift sessions if the user stalls afterward. Move the
`trackUpliftCompleted` emission to the approval transition in the withdrawal
bank flow (around `useEeaUpliftFunnel('withdraw')` and `useMultiPhaseKycFlow`)
so it triggers when uplift approval happens, not when the overall flow fully
settles.

In `@src/hooks/useAdvisoryPreempt.ts`:
- Around line 24-61: The modal visibility state in useAdvisoryPreempt is not
synchronized with the advisory lifecycle: completeNow currently hides the modal
before onCompleteNow finishes, and the hook never clears visible when advisory
becomes undefined. Update the hook so visible is driven by the advisory state in
useAdvisoryPreempt, keeping the modal open until the self-heal request resolves
successfully and automatically closing it when advisory is removed; use the
existing intercept, completeNow, and modalProps wiring to ensure the hard gate
does not disappear on failure or linger after clearance.

In `@src/hooks/useEeaUpliftFunnel.ts`:
- Around line 22-30: `trackStarted` in `useEeaUpliftFunnel` should not fire
`EEA_UPLIFT_STARTED` without a real `GateAdvisory`. Make the `advisory`
parameter required (or return early when it is undefined) so
`startedRef.current` is always set from a valid advisory and `posthog.capture`
always sends `requirement_key`, `action_key`, and `effective_date` together with
`channel`.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7e0c777e-b0cb-44bc-950d-519f55cfa9d7

📥 Commits

Reviewing files that changed from the base of the PR and between efbb2bd and 4092778.

📒 Files selected for processing (8)
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
  • src/components/Kyc/AdvisoryPreemptModal.tsx
  • src/constants/analytics.consts.ts
  • src/hooks/useAdvisoryPreempt.test.ts
  • src/hooks/useAdvisoryPreempt.ts
  • src/hooks/useEeaUpliftFunnel.test.ts
  • src/hooks/useEeaUpliftFunnel.ts

Comment thread src/app/(mobile-ui)/add-money/[country]/bank/page.tsx
Comment thread src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx Outdated
Comment thread src/hooks/useAdvisoryPreempt.ts
Comment thread src/hooks/useEeaUpliftFunnel.ts
The startedRef latch was only cleared on success, so an abandoned uplift
attempt could leave it set and a later unrelated KYC success on the same
mounted page would mis-fire eea_uplift_completed (inflating the funnel).
Reset the pending start via the KYC flow's onManualClose (abandon) on both
bank pages. Covers the main mis-attribution path surfaced in review.
…dal lifecycle

CodeRabbit + review findings:
- Move eea_uplift_completed off the end-of-flow onKycSuccess onto a new
  onKycApproved callback fired at the Sumsub approval transition, so it isn't
  lost when the user drops during post-approval ToS/preparing (undercount) and
  isn't fired on a ToS-skip without finishing (overcount).
- useAdvisoryPreempt: auto-close the modal when the advisory clears while open,
  and re-show it if the launch fails — the hard gate must not silently vanish or
  linger over an already-cleared requirement.
- useEeaUpliftFunnel: require a real advisory for trackStarted (no partial
  started payloads).
@kushagrasarathe

Copy link
Copy Markdown
Contributor Author

@coderabbitai resolve

@kushagrasarathe kushagrasarathe marked this pull request as ready for review June 29, 2026 15:02

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/app/(mobile-ui)/add-money/[country]/bank/page.tsx (1)

144-148: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Clear the uplift latch when the self-heal launch fails.

Lines 146-147 mark the funnel as started before handleSelfHealResubmit() resolves. If that launch rejects, useAdvisoryPreempt just re-shows the gate, but the stored advisory remains latched, so a later unrelated onKycApproved on this page can still emit eea_uplift_completed for a failed attempt.

Suggested fix
-        onCompleteNow: () => {
-            if (!advisory) return Promise.resolve()
-            trackUpliftStarted(advisory)
-            return sumsubFlow.handleSelfHealResubmit('BRIDGE', advisory.requirementKey)
-        },
+        onCompleteNow: async () => {
+            if (!advisory) return
+            trackUpliftStarted(advisory)
+            try {
+                await sumsubFlow.handleSelfHealResubmit('BRIDGE', advisory.requirementKey)
+            } catch (error) {
+                resetUpliftFunnel()
+                throw error
+            }
+        },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/`(mobile-ui)/add-money/[country]/bank/page.tsx around lines 144 -
148, The uplift latch is being set in onCompleteNow before
handleSelfHealResubmit() succeeds, so a failed self-heal can leave advisory
state stuck and later trigger a false eea_uplift_completed. Update the
onCompleteNow flow in the bank page to clear or reset the stored advisory/latch
when sumsubFlow.handleSelfHealResubmit('BRIDGE', advisory.requirementKey)
rejects, and make sure the failure path in useAdvisoryPreempt does not leave the
tracked advisory latched after re-showing the gate.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/hooks/useMultiPhaseKycFlow.ts`:
- Around line 179-183: The new onKycApproved callback in useMultiPhaseKycFlow
should not be able to stop the approval state machine from continuing. Wrap the
onKycApproved?.() call in a best-effort failure boundary so any thrown error is
isolated and the flow still proceeds to fetchUser() and the existing
post-approval branching for ToS, preparing, and complete states. Keep the change
localized around the approval handling path in useMultiPhaseKycFlow so the
callback remains optional side-effect work only.

---

Outside diff comments:
In `@src/app/`(mobile-ui)/add-money/[country]/bank/page.tsx:
- Around line 144-148: The uplift latch is being set in onCompleteNow before
handleSelfHealResubmit() succeeds, so a failed self-heal can leave advisory
state stuck and later trigger a false eea_uplift_completed. Update the
onCompleteNow flow in the bank page to clear or reset the stored advisory/latch
when sumsubFlow.handleSelfHealResubmit('BRIDGE', advisory.requirementKey)
rejects, and make sure the failure path in useAdvisoryPreempt does not leave the
tracked advisory latched after re-showing the gate.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5b86215d-15e2-485f-8bd8-8c537303cd9a

📥 Commits

Reviewing files that changed from the base of the PR and between 33f7d7e and e6a6aa9.

📒 Files selected for processing (6)
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
  • src/hooks/useAdvisoryPreempt.test.ts
  • src/hooks/useAdvisoryPreempt.ts
  • src/hooks/useEeaUpliftFunnel.ts
  • src/hooks/useMultiPhaseKycFlow.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/hooks/useEeaUpliftFunnel.ts
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
  • src/hooks/useAdvisoryPreempt.ts

Comment thread src/hooks/useMultiPhaseKycFlow.ts
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Comments resolved. Approval is disabled; enable reviews.request_changes_workflow to allow explicit top-level @coderabbitai resolve or @coderabbitai approve commands.

@kushagrasarathe kushagrasarathe changed the base branch from dev to main June 29, 2026 15:06
@kushagrasarathe

Copy link
Copy Markdown
Contributor Author

🚑 Retargeted to main as a hotfix (was dev). Contains only the 3 commits / 9 files of this change — verified the diff scope is unchanged after the base swap.

Back-merge note: dev is currently behind main, so after this merges to main it won't be on dev. A main → dev sync is needed so the next release off dev doesn't regress the gate.

Status: CI required checks green · CodeRabbit ✅ (4 findings resolved) · eslint 🟡 known-baseline (not worsened) · mergeable. Ready for review.

@Hugo0 Hugo0 merged commit fdda3db into main Jun 29, 2026
18 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants