close #29: hard-conflict checking UI