idea : new tag "test" inside "changeSet"

because the databasechangelog table can be manipulated from outside liquibase environement. I faced a situation where the changeSet entry is there in databasechangelog table but the changes are not applied to the schema.
To handle such issues i think it will be a very useful feature to add a element along with the rollback inside the this test element can have a sql with other conditional operators (as in preCondition) which would determine that the changeSet is actually applied on the database or not.
This will also help the users in identifying the changeSets which have been invalidated and needs cleanup.

the tag would look like

alter table emp add column DEPT_NO
select DEPT_NO from emp

in case the column DEPT_NO was renamed to DEPT_ID by some later changeset then the test for the above changeSet would fail and the user can either remove this changeset or merge it with the new one

I could see it being helpful in some cases, like you mention.  It should be possible to create an extension to implement it ( or you can create an issue in 

My concern is that the tests can get expensive if you are running them for every changeSet.  It is probably best to find a way to make sure you can trust the databasechangelog table.