Why doesn't smart cast use data from in-code contracts?

The contracts are an experimental feature that isn’t enabled yet. See the thread Status of kotlin.internal.contracts? for details.