However, I see a potential bootstrap problem.
Suppose the node starts with only the most recent (N) blocks. Some transactions in the earliest retained blocks may spend outputs created before the retained window. Without the earlier UTXO state, the node cannot fully validate those inputs.
There's bigger problem. If new/fresh node
literally only download most recent N blocks, how can it verify those block actually part of longest chain and input of each TX isn't created from UTXO that never exist or already spend?