Review follow-ups on the rk_underlying handling: - mpeAssignRetainedKey (dcMockUtils) mirrors %mp_retainedkey: any submitted RK column is dropped and every row's RK is re-derived from the business key, so a stale RK in a hand-built payload cannot survive into the diff. Business keys compare the way SAS does - case-sensitive, trailing blanks ignored. - editors/loadfile excludes the RK from its expected-columns check for these tables, as loadfile.sas does, and runs the derivation before staging, so a real CSV upload (which legitimately omits the RK) is accepted and its diff matches instead of reporting every row as NEW. - both staging paths add the derived column to the staged headers, so MPE_SUBMIT.INPUT_VARS counts the width mpe_loader would see.