Pure domain logic for tmprl.
Nothing in this crate performs IO, touches a terminal, or is async. That is deliberate: it is the layer where the difficult logic lives, so it is the layer that must be trivially testable. If something here needs a runtime, it is in the wrong crate.