The best way to ensure your cart-abandonment email always reflects the latest cart state is to store the full cart in a profile attribute when you receive your “cart status” event. Journey Optimizer resolves personalization tokens at send time, not at journey-entry time.
So even if the journey was triggered by an earlier productAdd event, the email will use the most recent value from the profile when it is actually sent.
You can find this behavior documented here:
https://experienceleague.adobe.com/en/docs/journey-optimizer/using/content-management/personalizatio...
Once your cart snapshot is stored on the profile, you can reference it inside your email with personalization tokens (e.g., {{profile.cartItems}}), and AJO will automatically pick up the updated cart if the user adds or removes items during your 1-hour wait.