giseldo/neodataset huggingface dataset:
Send email about Rogan episode

Subject: Joe Rogan interviews Minds CEO Bill Ottman and Daryl Davis

@name,

We are excited to share that Minds CEO Bill Ottman and advisor Daryl Davis were recently guests on The Joe Rogan Experience, and the episode is now live! 

Bill & Daryl discuss the launch of a research paper which they co-authored titled “[The Censorship Effect](https://www.minds.com/change/blog/the-censorship-effect-an-analysis-of-the-consequences-of-soc-1348668604911980550),” which examines the adverse effects of censoring speech online and proposes an alternative method to elevate global discourse through Internet freedom.

                       [Watch Episode](https://www.minds.com/newsfeed/1350517575166988298)

We encourage you all to watch the episode and share your thoughts about it on Minds with the hashtag [#ChangeMinds](https://www.minds.com/discovery/search?q=%23changeminds&f=top&t=all). If you would like to learn more about our initiative with Daryl, please visit [minds.com/change](https://minds.com/change).

Thank you for being a pioneer of the free and open Internet.

The Minds Team

Story points: 1.0
'top' discovery endpoint to support querying new recommendations engine

The new recommendations index is now available and queryable under the `minds-clustered-entities-feed` index. Entities are clustered by `cluster_id` that every users will belong to. A user will belong to only **one** `cluster_id`.

## Example query

```json
{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "cluster_id": 1
                    }
                }
            ]
        }
    },
    "sort": {
        "score": "desc"
    }
}
```

## Determining the cluster_id

A users cluster_id is determined by what tags they have selected. 

The python implementation (https://gitlab.com/minds/data-science/minds-etl/-/blob/master/prefect/update-recommendations-flow.py#L59) can be translated over to PHP. This avoids needing an additional database query to determine the cluster id.

## Acceptance

- [ ] PHP side `cluster_id` calculation for a user
- [ ] A/B test between existing and new engine (feature name in engine-XXX-label format)
- [ ] New implementation to be on a new api endpoint
- [ ] For you tab displays recommendations

## Mapping

```
{
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 2
    },
    "mappings": {
        "dynamic": false,
        "properties": {
            "entity_guid": {
                "type": "keyword"
            },
            "cluster_id": {
                "type": "integer"
            },
            "score": {
                "type": "float"
            },
            "total_views": {
                "type": "long"
            },
            "total_engagement": {
                "type": "long"
            },
            "@last_updated": {
                "type": "date"
            },
            "@last_engaged": {
                "type": "date"
            },
            "@first_engaged": {
                "type": "date"
            }
        }
    }
}
```

Story points: 3.0
Clicks on homepage nav open homepage with sidebar

<!---
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

Clicks on homepage nav open homepage with sidebar

### Steps to reproduce

Open homepage
Click on topbar Minds logo

### Platform information 

Web

### What is the current *bug* behavior?

Opens sidebar and shows searchbar at top

### What is the expected *correct* behavior?

Should just reload on homepage, else return to homepage if logged out, else return to newsfeed if logged in.

### Relevant logs and/or screenshots

![image](/uploads/7b1a31e9a22e44509f971043e08dc426/image.png)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0
Verify phone input malformed

<!---
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

See screenshot

### Steps to reproduce

Verify phone from onboarding widget

### Platform information 

Web

### What is the current *bug* behavior?

Malformed input

### What is the expected *correct* behavior?

Input shouldn't be malformed

### Relevant logs and/or screenshots

![image](/uploads/c28ed0eda108c1877c6fa9649c523488/image.png)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0
Onboarding changes do not stick

### Summary

Onboarding steps do not always stick.  I did not get this on video, but the first time I tried to "take a picture" with the rear camera on my iPhone 13, it did not stick.

### Steps

1. Create a new account on the latest version of the mobile app
2. Click "earn tokens"
3. Click "setup channel"
4. Make changes
5. Completion status toggles back and forth

### Relevant logs and/or screenshots

![video-1646767612](/uploads/34927dcad5939ed3c20cae82a0b2b459/video-1646767612.mp4)

Story points: 3.0
Remove downvote from Engagement Rewards calculation

<!---
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

Simplify the rewards system as communicated to users, remove hesitance to downvote for disagreement, and address counter-downvoting.

## What needs to be done

Back in December, we started using downvotes to deduct from a user's daily engagement score for Rewards. We should remove part of the engagement score calculation.

## QA

<!---
Consideration is given to how the issue will be demoed and tested prior to being deployed
--->

- Requires running a CLI script for contributions and rewards jobs
- Bigquery may fail in sandboxes?

## UX/Design

No design implications.

## Personas

Regulars and Champions who are engaged in the Engagement Rewards system.

## Experiments

No experiments for this change.

## Acceptance Criteria

- [ ] Downvotes are no longer part of the calculation of daily rewards scores
- [ ] Ping @markryansallee to announce

## Definition of Ready Checklist

- [ ] Definition Of Done (DoD)
- [x] Acceptance criteria
- [ ] Weighted
- [ ] QA
- [x] UX/Design
- [x] Personas
- [x] Experiments

---

_Original issue description:_

It was supposed to be a measure against bots/spammets, but often if those accounts are downvotd, they downvote the user back with 2+ accounts.

Overall, users shouldn't be punished for controversial opinions (which often would get downvotes naturally)

Source: (klara asks for the possibility to filter out downvotes, but if they pose negative impact it's not needed) https://www.minds.com/newsfeed/1344014454941028356

Story points: 2.0
Deprecate TheChecker

<!---
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

TheChecker is no longer in use and intentionally silently failing. We should comment out references and add docs to the class that it is soft deprecated, but leave the code intact should we wish to bring it back.

### Steps to reproduce

N/A

### Platform information 

Engine

### What is the current *bug* behavior?

Silent failure, no apparent behavior, it's just not working, which is intentional but not properly removed.

### What is the expected *correct* behavior?

As it is now, user should be able to register regardless of the email being deliverable.

### 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

N/A

Story points: 2.0
Grant email change grace period before email verification

I helped husband with creating a Minds account, and we misspelled the address. Therefore his email was never verified, but when we try changing the email address, it requires us to type a code we "received" on unverified email.

![image](/uploads/02cc9bd637d454506ea2f0b049b169da/image.png)

![image](/uploads/96989b7b2f48abdcb018e7659e121db9/image.png)

Story points: 2.0
replies push notification url doesn't have focusedCommentUrn

currently, a push notification to an android device RE a reply to a comment is something like this:

```js
      {
        badge: '1',
        bigPicture: '',
        body: '@manishoo test 1',
        from: '81109256529',
        'google.c.sender.id': '81109256529',
        'google.delivered_priority': 'normal',
        'google.message_id': '0:1645433184626441%5f10f41cf9fd7ecd',
        'google.original_priority': 'normal',
        'google.sent_time': 1645433184621,
        'google.ttl': 2419200,
        largeIcon:
          'https://www.minds.com/icon/1280480594752442369/large/1630666363/1639137731/1645398217',
        tag: 'f9832e7eebafae4d666b5393f6b9697085a0630804defed415b0d1cbfcd7d011',
        title: 'manishoo_test2 tagged you in their comment',
        uri: 'https://www.minds.com/newsfeed/1313161938816995332',
        user_guid: '1153095520021913602',
      }
```

notice that it's `uri: 'https://www.minds.com/newsfeed/1313161938816995332'` and not `uri: 'https://www.minds.com/newsfeed/1313161938816995332?focusedCommentUrn=urn:comment:1313161938816995332:1342411969755353095:1342415072978276371:0:1342429418622029839'`

without the focusedCommentUrn in the url clients won't be able to navigate to the reply. unless they do another http request to `api/v3/notifications/single/:urn` and get the notification.

Story points: 2.0
Comment ordering goes both directions when navigating to level 0 comment from notifications (Staging)

## Summary

When you click on a L0 comment notification on a post with more than one comment, you will see the rest of the comments ordered going both ways on the post. see video. 

## Replication Video

![Screen_Recording_2022-02-16_at_12.01.13_PM](/uploads/cb86728e9d93b36f864c476a179c3fca/Screen_Recording_2022-02-16_at_12.01.13_PM.mov)

Story points: 2.0
installer failing: configuration key `verify-service-sid` is not present on defaults or command line arguments

```
INSTALLING MINDS
Installer verified
All settings correct for using Composer
Downloading...

Composer (version 2.2.5) successfully installed to: /var/www/Minds/engine/composer.phar
Use it: php composer.phar

Setting up Keys
Running install
- Building configuration file:
Warning: Undefined array key "scheme" in /var/www/Minds/engine/Core/Provisioner/Installer.php on line 191

Warning: Undefined array key "email" in /var/www/Minds/engine/Core/Provisioner/Installer.php on line 199

cli.php: [ERROR] Configuration key `verify-service-sid` is not present on defaults or command line arguments
    at makeError (/Users/manishoo/Projects/minds/minds/local/node_modules/execa/lib/error.js:59:11)
    at handlePromise (/Users/manishoo/Projects/minds/minds/local/node_modules/execa/index.js:114:26)
    at runMicrotasks (<anonymous>)
```

Story points: 2.0
Upgrade Growthbook PHP SDK and build out Features support in wrapper class.

<!---
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

We're informed the Growthbook team intends to release an upgrade to the PHP SDK at the end of next week (Making the estimate 11th Feb 2022) with support for Features - making a card so we can upgrade.

While we are there we should build out support for Features in the wrapper class - as that is the main thing we need from the upgrade to allow us to run experiments engine side.

## Caching

Front-end is caching for 24 hours. Backend should to the same (consider redis).

Story points: 5.0
Apply bot score to all ES metrics and filter out of contribution scores

:warning: Currently blocked until tasman pipeline is working :warning: 

## Goals

- [ ] When an 'action' metric is saved to `minds-metrics-*` apply a bot accuracy field value
- [ ] Update ES mapping to be a float
- [ ] Apply a filter to only include metrics with a bot accuracy score below X (settings.php value)

Story points: 8.0
"Top Feed" is including posts that the user doesn't subscribe to

<!---
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 unseen top feed endpoint is returning global top posts, not posts from users you are subscribed to

### Steps to reproduce

`api/v3/newsfeed/feed/unseen-top`

### Platform information 

API

### What is the current *bug* behavior?

The unseen top feed endpoint is returning global top posts

### What is the expected *correct* behavior?

Posts from users you are subscribed to

### Relevant logs and/or screenshots

### Possible fixes

See api/v2/feeds/subscribed for the subscribed sub query logic

Story points: 3.0
Rectify legacy token memberships

## Summary

We have a number of users on legacy token memberships that are still being charged, but not activating the perks of Minds+ or Pro. 

This is a result of a fix we made a few months ago to the membership system, which Minds+ and Pro both use for recurring revenue. It was not noticed until recently that it had this impact on some users existing memberships.

## Rectification

- [x] Gather list of all impacted memberships
- [ ] ~~Refund all users who were charged tokens and did not unlock Minds+ or Pro features~~ (https://gitlab.com/minds/engine/-/issues/2207)
- [x] Cancel all upcoming recurring payments that will suffer from this problem
- [ ] ~~Send communication / apology to customers with reward / perk~~ (https://gitlab.com/minds/engine/-/issues/2207)

## Later

We should bring back the ability to pay monthly for Minds+ or Pro with tokens. This task has challenges but is outlined here:
https://gitlab.com/minds/engine/-/issues/1941

Story points: 2.0
Implement account quality score

- [x] Sync matrix from tasman to a Cassandra table
- [x] Manager/Repository to read from Cassandra table and return the scores
- [ ] API controller to expose the score

## Unknown variables

- What the table schema will look like
- How many scores there will be


## Example schema

PRIMARY KEY (`user_guid`, `last_updated_ts`), `score`

Story points: 5.0
Fix linter error with bin dir

<!---
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

Retroactive card for the purpose of tracking the MR properly - Dir needs excluding - without fixing we wont be able to spin up any new engine sandboxes so bringing it into the sprint.

Story points: 1.0
(bug) Notifications | No Wire notifications

I just noticed, that there is no issue for the missing notification for Wires. Notifications about wires stopped working after the notification update.

I think that kind of notification is missing overall, and people who were used to it are wondering what happened to it.

Related issue - additional category to sort notifs: https://gitlab.com/minds/front/-/issues/4810

I think it's relevant for you @omadrid , you were working with notifs in here https://gitlab.com/minds/front/-/issues/4768 and here https://gitlab.com/minds/front/-/issues/4886

Story points: 3.0
(bug) Comments | Photos in comments transformed into 100px x 100px tiny pictures (desktop only)

I suspect this issue may be connected to https://gitlab.com/minds/engine/-/issues/2175 - I thought they would get fixed together, but the images still cause trouble.

Steps:
1. Try posting nice full image in comment
2. Picture will transform into small, 100x100px picture

![untitled](/uploads/d9f0b861b41fb776b297c290f0262cde/untitled.mp4)

[The post where this glitch is present - 3rd level](https://www.minds.com/newsfeed/1320275272213204995)

PS: Works well on the phone app (Tested on Android)

Story points: 3.0
(bug) Gifs glitching

Gifs seems to be glitching. A friend tried uploading one as a post, then we tested in comments, but it resulted as a broken gif.

Tested logged in with canary on Brave on Windows, and also tested on Microsoft Edge:

![untitled](/uploads/42252ba7b765efb4277fb8ed41b88eac/untitled.mp4)

Apparently [known issue](https://www.minds.com/newsfeed/1318703116098473991), but keeping card open because I didn't see one for this.

Story points: 5.0
(bug) Memberships | Members send $/tokens into void if person deletes their account

When user deletes their profile, all their members should have their memberships cancelled. I also believe a cleanup like this should happen when someone deletes their membership tier.

I remember a while ago, I saw in my membership list an empty name, and had no idea who it was. Later on I figured out (don't remember how) it was Sara Bonito, who deleted her account.

I don't have screenshot from my Memberships, but I have screenshots of the emails:

<details><summary>Before deletion (September)</summary>
![image](/uploads/a29580b6074d4284fb0ed418b6101c5c/image.png)
</details>


<details><summary>After Deletion (October)</summary>
![image](/uploads/f5b3f3aa66b4d158d02dbde1165101e4/image.png)
</details>

Story points: 3.0
Recommendation module MVP - part 2

# Note: This ticket is a follow up from #2108 

## Work left to do:
- [ ] Recommendations algorithms
  - [ ] Create 'wider-network' recommendations algorithm
  - [ ] Create 'inferred' recommendations algorithm (optional for this ticket)
- [ ] Spec tests
- [ ] Code documentation
- [ ] Manual testing in envs

## Vision for the module

We want to create a module that can be easily expanded as we learn more about our data and usage patterns of the site. For example we want to be able to support multiple answers such as 'posts that by subscriptions have voted on' but also 'top posts my subscriptions have made'.

The API should be able to dynamically determine what algorithms or queries to return based on the `location` that is provided. This will allow us to easily change the recommendations and run experiments from a single place. The frontend only needs to support a simple component that can render the entities.  

### Example API Call

#### GET `api/v3/recommendations/?location=feed-sidebar`
RESPONSE:
```json
{
  "query": "wider-network",
  "entities": [ ],
}
```
```json
{
  "query": "inferred",
  "entities": [ ],
}
```
```json
{
  "query": "favourite-subscribed-posts",
  "entities": [ ],
}
```

### Example queries

#### Wider network
This will return entities from my wider network (ie. content that my subscribers have interacted with.

#### Inferred 
This will return entities based on content that I have interacted

Story points: 13.0
Guest mode feed duplicates at position 36

## Summary

If you scroll down the guest mode feed, the feed starts over at position #36 and you begin to see the same posts again.

## Steps to replicate

1. Visit guest mode in staging
2. Scroll down feed to position 36
3. You will see content replicates and starts over from top

## Platform Info

- Macbook Air 13 inch
- Brave, Chrome
- Replicated by multiple team members

Story points: 2.0
Issue airdrop for twitter sync

## Summary

- [x] Step 1 - Gather necessary data to issue airdrop for users who connected to Twitter with over 25,000 followers.
- [x] Step 2 - Issue airdrop off-chain to all users based on spreadsheet, on or before December 31, 2021

## Ideal Spreadsheet

| User ID | Date Connected to Twitter | Twitter Followers | Referring Minds User ID |
| ------ | ------ | ------ | ------ |
| cell | cell | cell | cell |
| cell | cell | cell | cell |

Story points: 1.0
Top Feed: seeing feed entities on the client side

**As a user, given I've received the top feed, I want to mark as seen only the posts I've actually seen**

it's important not to assume and mark all returned posts in this endpoint as 'seen'. we should have an `api/v3/newsfeed/see` (or something like that) endpoint where the client calls with some UUIDs and marks them as read. this way we have more control over whether the user has actually seen a post or not

follows https://gitlab.com/minds/engine/-/issues/2145

Story points: 5.0
Implement on-the-fly skETH distribution strategy

<!---
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

Supersedes investigative card at https://gitlab.com/minds/engine/-/issues/2144

We can add gas price calculations to all SKALE contract calls, [like so](https://gitlab.com/minds/engine/-/issues/2144#note_740426909), and have the user call an endpoint (and wait for the transaction to come in) if they do not have enough skETH to make a transaction.

### Spec

#### Engine

The endpoint should be added to the [SKALE routes](https://gitlab.com/minds/engine/blob/102cc1764afcf9b887b769dacc24b18679f52014/Core/Blockchain/SKALE/Routes.php), merging into the `feat/skale-prototype branch`, and **MUST** be rate-limited, best to do this by `user_guid`, `ip_hash`, `eth_address`, and `phone_num_hash`(?) in separate checks.

The request would ideally be made as a POST to `api/v3/blockchain/skale/faucet` with a parameter to pass the requested address through. It should only be accessible to logged-in users.

The endpoint should call a function in the SKALE `Controller`, which in turn should call a function in the SKALE `Manager`, that generates a new SKALE transaction to send an amount of skETH (see below "How much should we send" section).

This amount should be configurable in our `settings.php`.
The gas price per unit should also be configurable in our `settings.php` and exported to the front-end in the `skale` section of our blockchain config.

#### Front

The front-end will need modifying with all SKALE calls first checking the balance, using modified contract functions with an estimateGas param [as here](https://gitlab.com/minds/engine/-/issues/2144#note_740426909). We need to get the amount of gas required, multiply it by the gas price, then check a users balance to determine whether they have enough funds - if they do, we can let them withdraw, if they do not, we need to make a request to the engine endpoint above, then we should either:

* Implement a waiting state where a user waits for the tx, then metamask opens.
* Simply throw a toast warning saying we've send some skETH so they can make the transaction, and ask them to wait a short while and try again. 

### How much should we send

44,005 is the largest amount of gas I found required [digging through the block explorer](http://glamorous-syrma.explorer.dappnet.skalenodes.com/tx/0x0cc4191e7807b7e8bfdff2ceb2c7349afd87c090be6c517bbfc13850b0075fe9/internal-transactions). We can see this tx cost `0.0000000044005 skETH`. I think initially an amount of `0.00000022 SKETH` would provide enough for 50 of those large contract interactions, and sustain a user for quite a whilst, while remaining sustainable for us to distribute.

Story points: 13.0