By displaying them pre-init:
a) eshell will not have loaded, ensuring any user-popup rules in
an (after! eshell ...) block don't load in time for the first eshell
popup,
b) Popup predicate functions don't have access to the full state of the
buffer, if needed.