Why are nodes necessarily using a “highest-finality highest-justified-epoch checkpoints win” forkchoice?
Because if they don’t do that then that’s far enough from the original algo that it’s probably best not to call it FFG
Though I guess names don’t matter, optimal algorithms do; in this case there’s still the efficiency issue: what slashing conditions do you add to ensure that validators are not violating the protocol in ways that break finality, and how do you efficiently validate them?