Comments have identified this as a bug; in the meantime, a simple way to bring back the old behavior for ComplexExpand in a given session can be obtained by adding the following definition to ComplexExpand. This builds on Michael E2's (in)activation workaround; I noticed that it really is just the Derivative symbol itself that gives us grief, so we can restrict our inactivation to Derivative per se.
Unprotect[complexExpandIntercept, ComplexExpand];
complexExpandIntercept = True;
ComplexExpand[args___] :=
Block[{complexExpandIntercept = False},
Activate[
ComplexExpand @@ Inactivate[{args}, Derivative],
Derivative]] /; complexExpandIntercept
Protect[complexExpandIntercept, ComplexExpand];
{Re, Im}[u'[t]] // Through // ComplexExpand
(* Out: {Derivative[1][u][t], 0} *)
Note: for a brief moment this answer was incorrect due to flipped booleans; now it should be fixed. :)
ComplexExpandsince V6.0, so you should report it. – Michael E2 Jun 24 '22 at 17:31Activate@ComplexExpand[{Re, Im}[Inactivate[u'[t]]] // Through]– Michael E2 Jun 24 '22 at 17:35Simplify[{Re, Im}[u'[t]] // Through, u'[t] \[Element] Reals]. Or, to have the assumptions persist and just useSimplify:$Assumptions = $Assumptions && u'[t] \[Element] Reals; {Re, Im}[u'[t]] // Through // Simplify– thorimur Jun 24 '22 at 20:35