getcolvals - mf_nobs returns -1 when the dataset does not exist, so the guard tested ==0 and a request that supplied no iwant at all fell through to the SQL. It now tests <=0, which covers both an empty and an absent input. mpe_refreshcatalogs - etlsource defaulted to a bare uid while its two siblings use refreshcatalog:<step>:<uid>, so a load through this path could not be traced to the step that wrote it. The default now has the same shape, and the explicit etlsource=0 path follows it too. mpe_execute - the status table was read without being cleared, so a child that died before core wrote a row left the previous call's row in place and failfast read it as completed. The table is deleted before the call. makedata - KEEPME is compared through cats(), so a numeric column no longer raises in upcase().