Given a long metrics DataFrame with user_id, metric_name, value, pivot it so each metric_name becomes its own column, one row per user. Keep user_id as a normal column (not the index).
Each (user_id, metric_name) pair appears at most once. A user with no row for some metric gets a missing value (NaN) in that cell — not 0.
What the tests check
3 on Run · 4 on Submit01each metric becomes a column, one row per user
02user_id is a column after reset
03exactly one row per user and one column per metric
Submit runs these and one more check you don’t see, so code written for the visible tests alone can still miss.