giseldo/neodataset huggingface dataset:
BACKEND: add student/volunteer partner org check to notifyVolunteer

`TwilioService.notifyVolunteer` should lookup the session's student partner org (and school) to see if it's AT&T or one that belongs to the verizon sponsor org. If so, change the `volunteerPriority` array of priority filters such that the 1st and 3rd entries reflect the below for the student's respective affiliation:
```
1. volunteers with <AT&T>/<Verizon> partner org - not notified in the last 3 days AND they don’t have "high level subjects"

2. volunteers with <AT&T>/<Verizon> partner org - not notified in the last 24 hours AND they don’t have "high level subjects"
```

Also when setting `messageText` check the volunteer's partner org to set the content to reflect the below for the student's/volunteer's respective affiliation:
```
"Hi {volunteerName}, a <Verizon>/<AT&T> student needs help in {subjectName} on UPchieve!"
```


## Tasks
- [ ] Code review
- [x] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] Correct texts are going out
  - [x] Partner volunteer gets their message ONLY for their partner student sessions
  - Make the check for partner org that kicks off the custom behavior capable of accepting different partner org names/strings for easy testing or expansion

Story points: 3.0
Sign Up Source: CLEAN-UP: remove discovery-source feature flag and dead paths

Remove all feature flags for ` discovery-source` and related dead code paths.

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Partner/Open students can still sign up
- [ ] Manually approved students can still sign up

Story points: 1.0
FRONTEND: ask all open students and appealed partner students for discovery source

* add question to open student form signup view
* add `showDiscoverySource` check for partner student sign up view (same pattern as other org options checking manifest prop)
  * gate's display of student source question
* hard code question options
  * randomize order of questions on initialization (mount, definition of constant at runtime, etc)
* send response to question as part of registration payload of both
Feature flag display of question

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Open/Partner student can sign up
- [ ] Manually approved student can sign up

Story points: 2.0
BACKEND: updatestudent registration routes to accept discoverySource field

* make open student registration route REQUIRE `discoverySource` in payload
  * save field to student document at creation
  * feature flag this change so this can go out independent of frontend
* make partner student registration route OPTIONALLY take `discoverySource` in payload
  * save field to student document IFF studentPartnerOrg === customManualOrg (`eligibility-appeal`)
* update relevant route tests
* update swagger doc

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
BACKEND: add discoverySource field to student model

store `discoverySource` field on student document (student profile in postgres) - name up for debate
* maps to enum of question options
* nullable for legacy compatibility

No need to backfill since field is optional

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
HOTFIX: gleap not loaded causing sessions to not be created or joined in rare occasions

We're having students and volunteers fail to join sessions because Gleap is not loaded into the window, and we're catching all the errors that could potentially happen in starting a session at once and throwing up an alert. There's more refactoring that we should do on that function, but at the least this will allow people to load/join the session, we just won't get the session id in Gleap.

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Refactor Twilio/NotifyTutor and notification job to send additional rounds of notifications

Refactor notification process to allow the chatbot to send additional rounds of notifications.

* Doesn't notify people already notified for a given session
* Should be able to call for a given session id regardless of how many times it has been called already
  * should be able to assume that it's been 10 minutes since the last time it was called
  * test timing issues of kicking off one round before the previous one ends
  * we might need to add the ability to check for last time notifications went out
* Follows the same timing and number of volunteers to notify in each round
* Keep the same entry point: notifyTutors job

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Algebra Two Subject: CLEAN-UP: clean up feature flagged code

Remove all feature flags for `algebra-two-launch` and related dead code paths. Also remove base `algebra` from `MATH_CERTS` and TrainingCtrl num questions

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
MIGRATE: clean-up script to run on 3/1/22

Write script to: 
  - delete `algebra` certification from ALL volunteers
  - delete `algebraTwo-temporary` subject from all volunteer
  - delete `algebra` questions from the questions collection


## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod
- [ ] Run against prod on 3/1/22 - add to the cron so that is executed on this day

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] Volunteers can still be certified in algebraOne and Two
- [x] Volunteers can still pick up session in algebraOne and Two
- [x] Volunteers still see AlgebraOne and Two in unlocked subjects

Story points: 1.0
MIGRATE: update old algebra questions -> algebra1

Write script to clone existing algebra quiz question with category = `algebraOne`

Purpose: Cloning so that the existing quizzes do not break

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
MIGRATE: update algebra 2 temporary subject

Goal:

Volunteers who have only completed Algebra as their highest level of math will have to take a separate Algebra 2 quiz to remain certified in `algebraTwo`. These volunteers will have temporary eligibility to help students with Algebra 2 requests until 03/01. Volunteers who have completed levels of math that unlock Algebra 2 [click here for subjects that unlock algebraTwo](https://gitlab.com/upchieve/subway/-/blob/main/server/constants/subjects.ts#L114) (Calc BC, Calc AB, precalculus) will not have their `algebraTwo` moved to temporary. It's important to note that, currently, passing an Algebra quiz unlocks both `algebraOne` and `algebraTwo` for volunteers. This data is reflected in one certification on the Volunteer schema, `certifications.algebra`. We have separated out the algebra certifications to `certifications.algebraOne` and `certifications.algebraTwo` in https://gitlab.com/upchieve/subway/-/merge_requests/898. Volunteers who were previously certified in `certifications.algebra` should now be certified in `certifications.algebraOne`

Write migration script to do this:
- for all volunteers with `algebraTwo` in subjects array
  - if they have calc/precalc in their subjects array -> do nothing
  - else -> replace `algebraTwo` with `algebraTwo-temporary` in their subjects array
  - if they had passed the `algebra` quiz (`certifications.algebra.passed` === true) copy the `certifications.algebra` data to `certifications.algebraOne`

## Tasks
- [ ] Code review
- [ ] Run script against staging
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod
- [ ] Run script against prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] Volunteers can still pick up algebra2 requests
- [x] Volunteers can still take algebra cert

Story points: 1.0
BACKEND: update math certs/subjects constants

- Add `algebra1` and `algebra2` to `MATH_CERTS` and `MATH_SUBJECTS` constants
  - update SUBJECTS_UNLOCKED accordingly (put new constant behind feature flag)
- add to object `numQuestions` in `TrainingCtrl` for `algebraOne` and `algebraTwo`
- change uses of `MATH_CERTS.ALGEBRA` to `MATH_CERTS.ALGEBRA_ONE`

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
FRONTEND: update algebra -> algebra1/2

* update `TrainingView.vue` list of quizzes to include algebra 1 and 2
  - include the new quizzes under a feature flag that replaces the old algebra quiz
* in `ReviewMaterialsView.vue` split algebra into algebraOne and algebraTwo
* in `@utils/topics.js` add `algebraTwo-temporary` topic + displayname for showing temporary cert in volunteer profile view
  - make temporary cert name just `Algebra2` under feature flag to be changed to `Algebra 2 Temporary` when we launch
  * in StudentDashboard/SubjectSelection hide the temporary subject by adding to `temporarilyHiddenSubjects`
  - include the new topic under a feature flag
- delete line 135 in `Admin/VolunteerCoverage`
- in volunteer dashboard filter incoming list of unmatched sessions to allow algebra2 to be shown to volunteers with `algebraTwo-temporary` subject

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Volunteer training view is correct
- [ ] Volunteer profile unlocked subjects is correct
- [ ] Student math subject selection is correct
- [ ] Algebra2 subject is shown to volunteer with temporary cert

Story points: 2.0
FRONTEND: create algebra 2 app header

- create app header for Algebra 2 notification with link to training page
  - in volunteer dashboard view `created` hook check if volunteer meets criteria to see algebra 2 header and set the new header via the header vuex state
    - criteria: Volunteers who are NOT certified in precalculus, calculus 1 or calculus 2 but ARE certified in Pre-algebra, Algebra 1, Geometry, Trigonometry, Statistics, chemistry, physics 1 or physics 2
  - feature flag showing the header

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Qualified volunteer sees header in dashboard
  - they DO NOT see header while session is active

Story points: 1.0
BACKEND: add algebraOne and algebraTwo certification objects to volunteers

Add `algebraOne` and `algebraTwo` certification objects the volunteer model schema and write a migration script to add empty certifications to every volunteer. Also update the init seeds to match this new shape. Also udate the buildCertifications and buildSession test utilities to match. Finally update `notifyVolunteer` subjects filter to match `algebraTwo `against `algebraTwo `or `algebraTwo-Temporary`

## Tasks
- [ ] Code review
- [ ] Run script against staging
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod
- [ ] Run script against prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 2.0
Modernize chat box CSS

Change the entire chatbox element tree CSS to use modern CSS techniques like flexbox instead of stacking specific pixel padding/heights.

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Student/volunteer chat looks correct on Safari

Story points: 5.0
Banned students aren't receiving appropriate emails

We have it set where we don't send emails to banned students, so they don't get emails letting them know they're banned. Need to fix this.

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Add user identification and custom event data

Identify the user with UPchieve data when reporting to Gleap
https://docs.gleap.io/javascript/user-identity
https://docs.gleap.io/javascript/custom-data

Do this in `src/components/app/index` where we set Sentry and Posthog user data (line 222).

## Waiting on
- [ ] Exact identity fields we want to send to Gleap
- [ ] Exact custom data fields we want to send with a feedback

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Relevant UPchieve user data is show in Gleap dashboard

Story points: 1.0
Work through Gleap Design

Via telepresence work with Grace directly to go through all pages/views and validate the bug report button looks good. If custom behavior is required for a page implement it via the gleap SDK

## Tasks
- [x] Grace review
- [x] Code review
- [x] Staging smoke tests
- [x] Merge to main
- [x] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session

Story points: 3.0
Add Gleap SDK to index.html

https://docs.gleap.io/javascript#installation

Integrate API key via string interpolation from config

## Tasks
- [x] Include gleap in security settings
- [x] Add gleap API key to doppler
- [x] Code review
- [x] Staging smoke tests
- [x] Merge to main

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] Default Gleap settings show up across app
- [x] Everything still works on refresh/VPN (international)

Story points: 1.0
Use CSRF token in frontend

On app router start hit `/api/csrftoken` to get a token to store in memory for the life of the app. Modify the vue router to check for token existence and include the token as a header before every request to the app using interceptors (use this [guide](https://github.com/pagekit/vue-resource/blob/develop/docs/http.md#request-processing). 

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Refreshing app doesn't cause problems
- [ ] Sign up works

Story points: 2.0
Update retool API calls to use CSRF token

Add a retool admin API auth step to get the csrf token from the new endpoint, store it in some variable, and add it to the request headers (basically scripting out what the app does)

## Tasks
- [ ] Add extra auth steps in admin API resource to get csrf token
- [ ] Get work reviewed by another engineer

## Smoke tests
- [ ] Retool modules that use API requests still work

Story points: 2.0
Add CSURF token endpoint

Use [csurf](https://expressjs.com/en/resources/middleware/csurf.html) to generate a token per cookie via an `/api/csrftoken` endpoint. Include the csurf middleware on all API routes except for swagger and index.html

## Tasks
- [ ] All router tests pass
- [ ] Code review
- [ ] Merge to main

Story points: 1.0
Query student usage report by sponsor org in admin panel

In `AdminStudentReportsView` include a new search filter to pull report by sponsor org. Include sponsor org in report request payload. Also be sure to saturate list of sponsor orgs on view mount using #921 

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] Can pull sponsor org usage report
- [x] Full list of sponsor orgs show up in filter option
- [x] Pull regular usage reports before changes and validate your changes didn't affect that

Story points: 2.0
Get all sponsor orgs endpoint

Create an endpoint similar to `auth/partner/volunteer-partners` that returns the manifests for all sponsor orgs. Up to discretion if needs to be part of auth service or if route just returns in memory sponsor manifest

## Tasks
- [x] Code review
- [x] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] Endpoint can be hit by only admins and returns sponsor manifest

Story points: 1.0
Group by sponsor in student usage report

StudentUsageReport payload should now accept a sponsor org string in payload and filter down students to only those associated with the sponsor via school or partner org.

Output report should include a column for the student HS name and student partner org (if not exist put a `-`).

## Tasks
- [x] Code review
- [x] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [x] Student/volunteer can login
- [x] Student/volunteer can make/join session
- [x] Student/volunteer can use whiteboard and chat in session
- [x] Locally (or staging) generated report is of correct shape
  - ensure there is at least 1 student who is associated with partner org and 1 that is not

Story points: 2.0
Parse sponsor org manifest

Create a function to parse sponsor org manifest environment key at server start up. Output should be something like
```
sponsor: {
  schools: Types.ObjectId[],  // stored as objectID strings to school objects
  partnerOrgs: string[],  // studentPartnerOrg keys from that manifest
  displayName: string
}
```

## Tasks
- [ ] Code review
- [ ] Create staging doppler manifest
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Create prod doppler manifest
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session
- [ ] Sponsor org manifest object is correct shape in memory

Story points: 2.0
Student welcome email changes

The student welcome emails have been updated in SendGrid and their current names and respective categories in our codebase no longer reflect their names in SendGrid.

For example `sendStudentWelcomeEmail` in `/server/services/MailService/index` should be called something more along the lines of `sentStudentOnboardingWelcomeEmail`

The changes that were made in SendGrid
- "Student Welcome Email" -> "Student Onboarding Email 1 - Welcome"
- "Student Welcome Email - Student Use Cases" -> "Student Onboarding Email 2 - How It Works"
- "Student Welcome Email - Meet Our Volunteers" -> "Student Onboarding Email 3 - Meet Our Volunteers"
- "Student Welcome Email - Independent Learning" -> "Student Onboarding Email 4 - Mission"
- "Student Welcome Email - Goal Setting" -> "Student Onboarding Email 5 - Survey"


`categories` that need to be changed:

- "student welcome email" -> "Student Onboarding Email 1 - Welcome"
- "student welcome email - student use cases" -> "Student Onboarding Email 2 - How It Works"
- "student welcome email - meet our volunteers" -> "Student Onboarding Email 3 - Meet Our Volunteers"
- "student welcome email - independent learning" -> "Student Onboarding Email 4 - Mission"
- "student welcome email - goal setting" -> "Student Onboarding Email 5 - Survey"

All of the welcome emails should use the `students` upchieve email as the sender

## Tasks
- [ ] Code review
- [ ] Staging smoke tests
- [ ] Merge to main
- [ ] Deploy to prod

## Smoke tests
- [ ] Student/volunteer can login
- [ ] Student/volunteer can make/join session
- [ ] Student/volunteer can use whiteboard and chat in session

Story points: 1.0
Investigate Intermittent issues with verification code

Hi, I just created a student account, but the verification section on web had some glitches.
When I tried to verify my email the first time, it told me “not authenticated” and when I tried pressing the verify button again, my “session expired” and logged me out. I tried logging in again, and it took awhile for me to get a verification code. Once I got my code after waiting for about ~3 mins? I entered the code and pressed verify my account, and I get the “not authenticated” alert again, then shortly the session expired and I am logged out again. So I log back in again and this time I type in my verification code, and nothing happens.
So I moved onto my mobile app to finish my verification. this time, no glitch, and i got my verification email instantly and I was able to verify.
But this might explain some of the drop off thats happening between create account and verify.

![Screen_Shot_2021-10-27_at_2.50.03_PM](/uploads/2196b4db48ec732ba2d41e11d89c821d/Screen_Shot_2021-10-27_at_2.50.03_PM.png)

![Screen_Shot_2021-10-27_at_2.52.39_PM](/uploads/50b7c61bf2fd80cdb418a40564d4615e/Screen_Shot_2021-10-27_at_2.52.39_PM.png)

Aly Murray  1:17 PM
this was on production, is that correct Grace?

Grace Kim:trophy:  1:17 PM
yes

Aly Murray  1:20 PM
there’s more students than I expected that are craetigna ccounts but not completing verification so I’m definitely worried about this now!

but it doesnt look like it necessarily started beginning of last week, so not necessarily craeted by the fix to russian attack

can we think of any other changes we might have made recently that would have impacted verification? :thinking_face:

1:22
(for student sonly)
1:22
its significantly higher for volunteers actually

## Tasks
- [ ] Investigate/reproduce problem
- [ ] Schedule knowledge share with tech team

Story points: 2.0