Every Fedora and Arch install regenerates its initramfs with dracut or mkinitcpio after a kernel update — skip that step and the system drops to the emergency shell you're simulating here because the NVMe or LUKS driver never got loaded. This chicken-and-egg problem (drivers needed to mount root, but root not yet mounted) is the exact reason initramfs exists instead of building every driver statically into the kernel.