Liquibase-core 4.23.0 CustomChange never runs again with runAlways="true"

I have a new Java development project attempting to use the Java Spring api to seed a MySQL 5.7, 8.0 database.

I cannot use the auto configuration (spring.liquibase.enabled=false) but am still running in spring and attempting to use that implementation through the following code:

    public void update(DataSource dataSource, ResourceLoader resourceLoader, @Nullable Map<String, String> parameters) {
        Scope.setScopeManager(new ThreadLocalScopeManager());
        var springLiquibase = new SpringLiquibase();
        if (parameters != null) {

        try {
        } catch (LiquibaseException e) {
            throw new RuntimeException(e);

Things seem to be mostly working well but I have seen a number situations where it does not appear to apply change sets even though the change log table is empty.

However, what I am trying to debug right now is a situation where a custom change set is never re-run after the initial seeding:

<changeSet author="ben.self" id="1687307709350-LAST" runOrder="last" runAlways=true>
  <customChange class="my.package.CustomChangeSet">
    <param name="tenant" value="${tenant}"/>

I know the above works and see it run if all the tables and databases have been dropped. But it never seems to run again and always outputs the following:

Database is up to date, no changesets to execute
Run:                          1
Previously run:              11
Filtered out:                 0
Total change sets:           12

Does anyone have any ideas how to fix this?

This appears to be a more recent bug and I doubt that custom change changesets are related. There have been issues over several of the last versions (from my observation not entirely confirmed from code or release notes yet) with the checksums, validation visitor code in quick check, and the refactoring of the check code in general. So some (or all) of the changesets are not being applied (even if log table is empty).

So far I have only confirmed if I go back to version 4.18.0 (Dec 06, 2022) everything still compiles, all the changesets are applied, and when update is rerun; runAlways=true runs my custom change changeset code (all 6 times I tried it).

4.23.0, 4.22.0, and 4.21.1 of liquibase-core all seem to have related issues in this area.

Does anyone have a recommendation for a more recent release than 4.18.0 that seems to be stable?