An attempt that raised after its edit was committed left the branch on a commit the loop never scored, so the next baseline read the loser. The champion is restored on the way out — and the restore declines when the tree is dirty outside the editable allowlist, because a `reset --hard` that discards somebody else's work to tidy up after ourselves is worse than the mess.
Also: ui/metrics.py brought in line with the house lint, version bumped in all three places it is declared, NAV points at the new entry, and the accumulated [Unreleased] changelog block is released as part of 1.0.1.
750 tests pass (was 748).
autoresearch: the keep/reset search, and the UI modules that were never shipped
The `research` CLI command shipped without the package it imports; this lands the whole feature (contract, git fence, attempt runner, durable ledger, keep/reset search, Base anchor + registry, coach observer, k8s job, Ollama console + reasoning pass).
Audit fixes: the default editor no longer corrupts a non-flat TOML; mindxtrain.ui resolves its Gradio-backed exports lazily so console/reasoning/parse_log stay base-install importable; the contradiction check is symmetric; new files are ruff clean.
748 tests pass (was 728).