The default has been BuildKit in Docker Desktop for a while and 23.0 makes it the engine default, which quietly changes what a plain build does.
what changes without you asking:
build output the new progress format, and no
intermediate image ids
layer caching per-instruction, and parallel across
independent stages
unused stages skipped entirely
secrets --mount=type=secret works by default
and the one that caught us:
a stage nothing depended on stopped running,
and it had been the one running the tests.
The skipped-stage behaviour is correct and is the difference people notice, usually by discovering a check has not run for a fortnight. DOCKER_BUILDKIT=0 still restores the old builder in this version, which is the escape hatch for a build script that parses the output — and parsing build output is the thing to stop doing rather than the thing to preserve.