DuckDB + Parquet analysis lake. Attribution is by handset label; message-level tenure attribution is a later refinement. Times shown in local time.