An updates DataFrame is a change feed of partial updates. It has id, ts (ISO timestamp string, one format throughout), seq (a unique, increasing ingestion sequence number), and one or more attribute columns (e.g. email, plan). In each update, a null attribute means "not changed in this update" — it does not erase the value.
Build the current state: one row per id where each attribute holds the value from the most recent update that set it (non-null). "Most recent" means the latest ts; when two updates share a ts, the higher seq is the more recent. ts and seq in the output are those of the id's most recent update. An attribute an id never set stays null.
Return a DataFrame with the input's columns in the input's order, sorted by id, with a clean 0..n-1 index.
What the tests check
4 on Run · 5 on Submit01a null in a later update keeps the earlier value; set values take the latest
02most recent by ts even when updates arrive out of order
03one id's values never fill another id's gaps
04equal ts: the higher seq is the more recent update
Submit runs these and one more check you don’t see, so code written for the visible tests alone can still miss.