After carefully study Tendermint, I found a couple of limitations based on my understanding:
When creating a new block, TM DOES NOT check the validity of transactions (although the transaction is pre-checked by CheckTx ABCI). This means that even the txs are valid individually, but can be invalid after running them sequentially (e.g., two tx with the same nonce).
A further issue is how TM imposes resource limits on a block such as a block size limit, gas limit or other resource limits (CPU, BW, etc) without executing the txs.
Any improvement or thoughts? Happy to discuss this.