The overall approach looks architecturally correctly. Just two cosmetic nits:
1. In `mcv_can_cap()`, the early-exit branch uses braces around `return false`. This would normally be written without braces.
2. The doc comment above `mcv_can_cap()` says condition requires the clause to be either an equality operator, or a bare boolean Var, but implementation actually handles one more cases - `NOT var`