Considerations for using BFT like algorithms to issue endorsements
The idea of using something like Tendermint for endorsers to agree on a block, and then require all blocks to carry 2/3+ endorsements is interesting but poses a challenge with respect to the baker <-> node interaction. Right now, the baker relies on the node for maintaining a mempool, a head block, etc.
The path of least resistance would seem to be have blocks being proposed in each round accepted by the node. The head would be changing on each round but would become finalized at some point when the next block comes.
Acceptance by the node can be made dependent on the precommits present in the mempool, similar to what is currently being done with the head heuristic. However, there would be no way for the baker responsible for producing a block in the next round to do so, since its node would contain the block produced in the previous round. The node would need to have a way to get rid of its head passed a certain point.
Another approach would be to not push candidate blocks on the chain at all but instead wrap them inside a dummy "operation" that can be unpacked by the node and interpreted as block... Once there are enough endorsements in the mempool, they can be combined with this "operation" to form a new block that is injected in the chain.
Perhaps a more generic approach would allow the baker to dictate to the node the block upon which it is interested in building.