Fix denormalized field collision for self-referencing FKs
Fix: denormalization writes are now deferred to a second pass that runs after all of the row's own fields have been written to the map. This makes the collision check deterministic regardless of field serialization order, instead of depending on incidental ordering. Now control_program_id (the rows own field) is processed before prev_program_obj_id(FK).