4866e6b858
`resolve_thinking` is exported, and its third argument turned from `bool` into `Effort` this cycle — so the most natural downstream call now passes the `"low"` it read out of JSON or config. Every gate inside compares by identity, and `"none" is Effort.NONE` is always false: the tier was not rejected, it was silently misjudged. Phase 2 read the on-form for a request that wanted the off-form, Phase 4 was skipped entirely on a model that cannot be disabled, and the only visible symptom arrived much later as an AttributeError from `.value` — an exception that is neither documented nor one of the four error classes. Design 4.4 already lists this as the fourth entry a tier can come in through; this makes the code agree with it.