giseldo/neodataset huggingface dataset:
Use Friendly Captcha to detect spam votes

## Goal

This change is aimed at reducing the volume of spam votes on Minds.

## What needs to be done

Execute Friendly Captcha for all engagements that contribute to Engagement scores. (Currently, I think that's just upvotes.)

The Friendly Captcha should execute in the background, and not require the user to click anything to execute beyond the initial engagement click.

If a Friendly Captcha fails, display a toaster message to the user communicating that their engagement looks like spam.



- In order to implement this task it will be necessary to find a way to use the JS part of the friendly captcha and remove the need for the webview


## QA

<!---
Consideration is given to how the issue will be demoed and tested prior to being deployed
--->


## UX/Design

(Need to define what happens when Friendly Captcha fails. If we're discounting the engagement, we need some transparency for users who may be engaging legitimately but still triggering a captcha failure.)

## Personas

- Users who earn rewards: By discounting inauthentic engagements, engagement rewards for authentic users should increase
- Token manipulators: By discounting inauthentic engagements, manipulators will have fewer tools for gaming the engagement rewards.

## Experiments

I suggest rolling this out not as an A-B experiment, but in phases where we can understand the impact.

- Phase 1: Execute friendly captchas on all upvotes and log the results, without impacting engagement scores. Use captcha-failed events to analyze the effectiveness of the method on identifying inauthentic engagement, and 
- Phase 2: If we're satisfied with the effectiveness, begin discounting engagements that fail the Friendly Captcha. At this point, we need to transparently communicate to users when it's failed.

## Acceptance Criteria

- [ ] Authentic engagements (upvotes) function as they do now -- there is no change to the user experience.
- [ ] Inauthentic engagements trigger a toaster message disclosing the captcha fail.
- [ ] Inauthentic engagements are otherwise still recorded.
- [ ] Visualise to users that their vote is in progress
- [ ] Still submit failed events
- [ ] Snowplow 'proof of work' context to be recorded. Success boolean.
- [ ] Add to elastic metrics (like user account quality score does)
- [ ] Add configuration variable to difficult ramp
- [ ] Use feature flags
- [ ] Spec tests

## Definition of Ready Checklist

- [ ] Definition Of Done (DoD)
- [ ] Acceptance criteria
- [ ] Weighted
- [ ] QA
- [ ] UX/Design
- [ ] Personas
- [ ] Experiments

Story points: 8.0
Use clustered recs for mobile

<!---
Please read this!

The Definition of Ready (DoR) can be found at https://developers.minds.com/docs/handbook/how-we-work/#definition-of-ready-dor

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "Type::Feature" label and verify the feature you're about to submit isn't a duplicate.
--->

## Goal

<!---
Clearly outline the goal of the issue and why we are doing it
--->

Mobile should work like web app. For 'Top' discovery, use the clustered recs.

## What needs to be done

<!---
Clearly detail what needs to be done to achieve the goal set out above
--->

Point to https://www.minds.com/api/v3/newsfeed/feed/clustered-recommendations?. See Frontend for implementation.

## QA

<!---
Consideration is given to how the issue will be demoed and tested prior to being deployed
--->

Recs and pagination work.

## UX/Design

<!---
Sufficient wireframes have been presented and understood by the development team. Full mockups are not required and re-usable components are encouraged.
--->

N/A

## Personas

<!---
Who does this user impact and why (optional)
--->

Everyone

## Experiments

<!---
Experiments are not required, but it should be made clear if one is expected. If experiments are required, the hypothesis should be outlined.
--->

N/A

## Acceptance Criteria

<!--
Everyone should be able to understand what is expected to be delivered
--->

- [ ] Point Discovery Top tab to https://www.minds.com/api/v3/newsfeed/feed/clustered-recommendations?

## Definition of Ready Checklist

- [x] Definition Of Done (DoD)
- [x] Acceptance criteria
- [x] Weighted
- [x] QA
- [x] UX/Design
- [x] Personas
- [x] Experiments

Story points: 2.0
Refactor FeedList component with FlashList



## Goal

Improve performance and memory consumption.

The new FlashList component recycles the item components and has a very low JS thread FPS impact compared with the FlatList

## What needs to be done

Reimplement the FeedList component:

- [ ] Move header to the body (FlashList doesn't support sticky on the header)
- [ ] Check how to implement the component injection (Probably we will need getItemType)

## QA

The new component should work correctly on Newsfeed, Channel screen, Groups, and Discovery.

## UX/Design

No changes are required at the beginning of the implementation but we may need some design decisions over changes needed to keep or improve the performance.  

## Personas

It will improve the overall UX of the user, mostly on low-end device

## Experiments

None


## Acceptance Criteria

- [ ] The new component should work correctly on Newsfeed, Channel screen, Groups, and Discovery.

## Definition of Ready Checklist

- [ ] Definition Of Done (DoD)
- [ ] Acceptance criteria
- [ ] Weighted
- [ ] QA
- [ ] UX/Design
- [ ] Personas
- [ ] Experiments

Story points: 5.0
Deeplink needs two attemps in some devices



### Summary

Deeplink takes two attempts to open on some devices.

This is happening on Bill's device.

To debug this we will create a custom build with additional logs and a Logs screen.

To check if the deep link is sent correctly to the app and if it is handled correctly

### Steps to reproduce

- Make sure the app is closed
- Tap a link

### Platform information 

Android

### What is the current *bug* behavior?

Nop opening the link

### What is the expected *correct* behavior?

It should navigate to the correct screen on the first attemp

### Relevant logs and/or screenshots

-

### Possible fixes

- check summary

Story points: 3.0
(bug) Cash | "Validation Fail for Date of Birth"

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

A few users are complaining, about being unable to join cash rewards, because of the Date of Birth validation on the mobile form.

These are bugs that made trying to replicate this unpleasant : https://gitlab.com/minds/mobile-native/-/issues/4346 and https://gitlab.com/minds/mobile-native/-/issues/4347

### Steps to reproduce

1. Choose account that doesn't have bank connected
1. Log into that account on phone
1. Head to Wallet > Cash > Set up bank
1. Click through months to get to your DoB
2. Fill out rest
3. Try clicking done

### Platform information 

Apple app

### What is the current *bug* behavior?

Can't set DoB

### What is the expected *correct* behavior?

Should be able to set DoB

### Relevant logs and/or screenshots

![image](/uploads/39868f310a8068c728430962f19738e0/image.png)

![DoBValidationError](/uploads/9d70424e21e26ad58fd0d67c9c4f8f29/DoBValidationError.mp4)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0
(bug) Cash | Country inconsistencies

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

List of countries is shorter on mobile, compared to desktop

Desktop:

![image](/uploads/2767dad8c3c9a94632bab28dd34be93a/image.png)

![image](/uploads/488bbd548989e1acbdf6518178ec7f6d/image.png)

### Steps to reproduce

1. Choose account that doesn't have bank connected
1. Log into that account on phone
1. Head to Wallet > Cash > Set up bank
1. Try choosing country

on desktop

1. Head to Wallet > Cash > Settings > Set up bank
1. Try choosing country (there is almost twice as many options)

### Platform information 

Brave and win10 for desktop

Iphone App for mobile

### What is the current *bug* behavior?

Countries for cash payouts are not synced between phone and desktop

### What is the expected *correct* behavior?

countries should be synced

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0
(bug) Cash | Date of Birth settable only month-by-month

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

When setting DoB through Wallet > Cash > Add bank, user needs to go to their DoB month by month, which is unnecessarily slow and tedious.

Our Date pickers should allow setting year and month easier, than just going month-by-month.

### Steps to reproduce

1. Choose account that doesn't have bank connected
2. Log into that account on phone
3. Head to Wallet > Cash > Set up bank
4. Try choosing your DoB in the related field

### Platform information 

Tested in Apple and Android version of the app

### What is the current *bug* behavior?

Date selection for DoB works only monthbymonth

### What is the expected *correct* behavior?

User should be able to choose year and month in better way.

### Relevant logs and/or screenshots

![SetDoB_Month-By-Month](/uploads/727a63d847b76e06701f02bb251ec200/SetDoB_Month-By-Month.mp4)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 3.0
Changing the Password: re-login issue

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

After successfully changing the password from Settings->Account->Password the re-login functionality doesn't work.

### Steps to reproduce

1. Change your password from Settings->Account->Password
2. after entering auth code you'll be prompted to login again, but that login will lead to a blank page

### Platform information 

All

### What is the current *bug* behavior?

App won't log you back in after finishing password reset

### What is the expected *correct* behavior?

App should log you back in after finishing password reset.

### Relevant logs and/or screenshots

![change-password](/uploads/3de47267852afda29b47f1137e78427f/change-password.mov)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 2.0
(bug) Can't remove "logged out" account from the multi account screen

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

Can't remove "logged out" account from the multi account screen (see video bellow)

### Steps to reproduce

1. Log into account on phone
2. Change password through different device (or deactivate account? Goal is to get "logged out" flag)
3. Try removing the account from list via "logged out" flag

### Platform information 

Android app

### What is the current *bug* behavior?

Trying to remove app with flag "Logged out" doesn't remove the app from the list

### What is the expected *correct* behavior?

removing app with flag "Logged out" should remove the app from the list

### Relevant logs and/or screenshots

![signal-2022-06-28-120630](/uploads/f95a7dd36c402d1d47b9e1dbf60323b7/signal-2022-06-28-120630.mp4)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0
Reset Password link: Issue with Opening the App

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

1. Reset Password link doesn't work if the app is already open in the background.
2. Reset Password link will require users to log in again by navigating them to `WelcomeScreen`

### Steps to reproduce

## Scenario 1

1. Make sure the app is open in the background
2. Make sure you have received a reset password link
3. Click the link (it should open the app)
4. Notice that "Create a new password" modal won't pop up

## Scenario 2
1. Make sure the app is closed
2. Make sure you have received a reset password link
3. Click the link (it should open the app)
4. Notice that you're in the Welcome Screen and if you dismiss the "Create a new password" Modal you'll have to log in again

Note: in Scenario 2, if you close and open the app, you're still logged in (the session won't be lost)

### Platform information

All

### App version

Latest

### What is the current *bug* behavior?

As described above

### What is the expected *correct* behavior?

If you click the link and the app is open, it should open the "Create a new password". And if the app is closed, it should not navigate to WelcomeScreen, and user should b able to dismiss the Modal and continue to use the app without having to log in again

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

https://drive.google.com/file/d/19IECVBMzsUAwcgrqABjYSnvfdvGtTtxe/view?usp=sharing

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 2.0
2FA Modal appears behind PasswordReset Modal

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

The 2fa modal appears beneath the "Create a new password" modal (ResetPasswordModal).

### Steps to reproduce

- reset your password by getting a link (mail)
- Click on the link on mobile
- notice that you'll see the "Create a new password" modal but if you enter a new Password the button will stay in an inProgress state because it's waiting for 2FA to complete but the 2fa has appeared behind that modal. And if you dismiss the modal by swiping down you'll see the 2FA modal

### Platform information

All

### App version

All

### What is the current *bug* behavior?

2FA modal appears behind "reset password/create new password" modal

### What is the expected *correct* behavior?

2FA should appear on top of everything else

### Relevant logs and/or screenshots

(With the fix at https://gitlab.com/minds/mobile-native/-/issues/4339)
![Simulator_Screen_Shot_-_iPhone_13_-_2022-06-27_at_18.11.38](/uploads/cc432bc75fd872978f8328f1641cee7e/Simulator_Screen_Shot_-_iPhone_13_-_2022-06-27_at_18.11.38.png)

without the fix (latest build)

![Simulator_Screen_Shot_-_iPhone_13_-_2022-06-27_at_18.08.13](/uploads/c2c5e2ae02fc6bc9ea5895d50b374c1a/Simulator_Screen_Shot_-_iPhone_13_-_2022-06-27_at_18.08.13.png)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 2.0
(bug) "Forgot your password" goes out of screen

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

When clicking "Forgot your password" the modal goes out of screen (see video)

### Steps to reproduce

1. Go to log in screen
2. Click Forgot your password

### Platform information 

iPhone and Android app

### What is the current *bug* behavior?

Forgot your password field goes too up

### What is the expected *correct* behavior?

It should be lower, and visible with all the text

### Relevant logs and/or screenshots

![ResetPasswordOutOfRange](/uploads/65d05decaae12dc8dba23b5c249de32c/ResetPasswordOutOfRange.mp4)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 2.0
OnOpenNotification fired twice after tapping on the second push



### Summary

OnOpenNotification fired twice after tapping on the second push notification whit the app in the background.

The event is fired once with the current notification and whit the previous one

### Steps to reproduce

Use an Android 12 device
- Leave the app in the background
- Tap on the first notification (it navigates correctly)
- move the app to the background again
- Tap on the second notification
- It navigates to both notifications

### Platform information 

Android 12

### What is the current *bug* behavior?

Event fired twice

### What is the expected *correct* behavior?

it should be fired only once with the latest notification

### Relevant logs and/or screenshots
-

### Possible fixes

It is an issue with the package's native code

Story points: 3.0
Mobile Automation: Add captcha bypass for wdio

## Goal
Ensure that you can bypass captcha for user registration.


## What needs to be done
create a function for captcha bypass.


## QA
Should run on android & ios


## UX/Design
N/A


## Personas
N/A


## Experiments
N/A


## Acceptance Criteria

- [ ] Capcha bypass working on Android & iOS

## Definition of Ready Checklist

- [ ] Definition Of Done (DoD)
- [ ] Acceptance criteria
- [ ] Weighted
- [ ] QA
- [ ] UX/Design
- [ ] Personas
- [ ] Experiments

Story points: 3.0
Remove text requirement from media comment

### Summary

Some users have complained about the text requirement for posting media in comments from the app. This requirement does not exist in the web application,
[fffb7169-2fb7-411a-9455-6644b5c4f61e.jfif](/uploads/103d93f776ee7c18400d6768d7b702e5/fffb7169-2fb7-411a-9455-6644b5c4f61e.jfif)

Remove text requirement

### Steps to reproduce

- attempt to post an image in a comment without writing anything first

### Platform information 

(Browser, device, system stats, screen size)

### What is the current *bug* behavior?

I don't think this is a bug: possibly just an oversight.

### What is the expected *correct* behavior?

No text requirement

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0
Refactor portrait bar swiper using a flat list and reanimated



## Goal

The current implementation uses our fork of the old react-native-pager (implemented with reanimated 1)
This is mostly unmaintained and it will cause issues with a future update to reanimated 3 (not longer compatible with v1 API)


## What needs to be done

Reimplement the swiper with a flat list and reanimated

## QA

TBD

## UX/Design

It should match the current design


## Personas

This is mostly a maintenance task but it may improve the UX of the portrait content swiper


## Experiments
none


## Acceptance Criteria

- [ ] it should implement the same look & feel of the current implementation
- [ ] it should be performant (check page nums and items to render per batch)

## Definition of Ready Checklist

- [ ] Definition Of Done (DoD)
- [ ] Acceptance criteria
- [ ] Weighted
- [ ] QA
- [ ] UX/Design
- [ ] Personas
- [ ] Experiments

Story points: 5.0
Push notification navigation issue

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary
This is a follow up task for https://gitlab.com/minds/mobile-native/-/issues/4310

I added extra logs and it seems like in some cases when the user taps a push notification and the app is in the background, the app activity is restarted so the push navigations try to navigate before the navigator is ready again.


### Platform information 

Android

### What is the current *bug* behavior?

App is restarting

### What is the expected *correct* behavior?

If the app is already open it shouldn't restart

### Relevant logs and/or screenshots

https://sentry.io/organizations/minds-inc/issues/2775482580/?project=1766867

### Possible fixes

TBD

Story points: 3.0
(bug) User gets "An error occurred" notice when sharing on Android

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

When sharing video from Rumble app, user gets "An error occurred" notice

### Steps to reproduce

Happens in 4.25

1. Download Rumble app (I think app is country restricted, Ryan was able to download, I was not)
1. Go to video in Rumble
1. Share video to Minds
1. You should get "An error occurred" notice

### Platform information 

OS: Android 12 (User who brought this app)
I am not sure if this would happen on Apple, I don't see Rumble on apple store.

### What is the current *bug* behavior?

When user tries to share content, "An error occurred" notice appears

### What is the expected *correct* behavior?

User should be able to share link for content into Minds app

### Relevant logs and/or screenshots

```
undefined is not a function
STACK:

in Tags
in AndroidTextInput
in InternalTextInput
in TextInput
in Unknown
in RCTView
in Unknown
in RCTView
in Unknown
in RCTView
in Unknown
in RCTScrollView
in ScrollView
in ScrollView
in NativeViewGestureHandler
in Unknown
in RNCSafeAreaView
in Unknown
in ComposeScreen
in StaticContainer
in EnsureSingleNavigator
in SceneView
in RCTView
in Unknown
in RCTView
in Unknown
in RCTView
in Unknown
in CardSheet
in RCTView
in Unknown
in AnimatedComponent
in AnimatedComponentWrapper
in PanGestureHandler
in PanGestureHandler
in RCTView
in Unknown
in AnimatedComponent
in AnimatedComponentWrapper
in RCTView
in Unknown
in Card
in CardContainer
in RNSScreen
in AnimatedComponent
in AnimatedComponentWrapper
in Suspender
in Suspense
in Freeze
in DelayedFreeze
in MaybeFreeze
in Screen
in MaybeScreen
in RNSScreenContainer
in ScreenContainer
in MaybeScreenContainer
in RCTView
in Unknown
in Background
in CardStack
in RCTView
in Unknown
in SafeAreaProviderCompat
in RNGestureHandlerRootView
in GestureHandlerRootView
in StackView
in Unknown
in StackNavigator
in RootStack
in WCContextProvider
in ErrorBoundary
in PortalProviderComponent
in BottomSheetModalProviderWrapper
in PortalProviderComponent
in ToastProvider
in ThemeProvider
in AppMessageProvider
in MobXProvider
in StoresProvider
in EnsureSingleNavigator
in BaseNavigationContainer
in ThemeProvider
in NavigationContainerInner
in RNCSafeAreaProvider
in SafeAreaProvider
in GrowthBookProvider
in ExperimentsProvider
in App
in RCTView
in Unknown
in RCTView
in Unknown
in AppContainer
```

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 2.0