> Neither can Bob replace-recycle out the commitment transaction itself, because the commitment transaction is a single-input transaction, whose sole input requires a signature from
> Bob and a signature from Carol --- obviously Carol will not cooperate on an attack on herself.
The replacement cycling happens on the commitment transaction spend itself, not the second stage, which is effectively locked until block 100.
If the commitment transaction is pre-signed with 0 sat / vb and all the feerate / absolute fee is provided by a CPFP on one of the anchor outputs, Bob can replace the CPFP itself. After replacement of its child, the commitment transaction has a package feerate of 0 sat / vb and it will be trimmed out of the mempool.
This is actually the scenario tested here on the nversion = 3 new mempool policy branch (non-deployed yet):
As of today commitment transactions might not propagate if dynamic mempool min fee is above pre-signed commitment transaction, which is itself unsafe. I think this behavior can currently be opportunistically exploited by attackers.