Mephisto 3.1.215 — the notice is the button
The update notice is now the update button. Plus a fix for a switch that could not be switched off, and the Humanize mix finally tells you what it adds up to.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.215.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.215-update.zip |
5.9 MB | You already have Mephisto — extract over your existing folder |
⚠️ Extract the update over your existing install, never into an empty folder — without the engines it cannot run. Extract in place: Chrome derives an unpacked extension's id from its folder path, so a new folder means a new id and re-running the native-host installer.
Already on 3.1.214 with automatic updates set up? You don't need either archive — open Settings → General → Updates and press Install Update. This is the first release that can be installed that way.
One click, from the panel
The notice already told you an update existed and then sent you to this page to do it by hand. When self-updating is set up — switched on, permission held, folder chosen — it now reads:
Update available — v3.1.216 (you have v3.1.215) — click to install
and clicking it does the whole thing: downloads the 5.9 MB archive, checks it, writes it into the extension's own folder and reloads. If any of those three pieces is missing the notice stays exactly what it was, a link to the release page, because there'd be nothing to click that would work.
The panel can't run the install itself — it lives in the page's isolated world, where there is no showDirectoryPicker and where indexedDB belongs to the site, not the extension. So the click asks the service worker, which opens the settings page and lets it run there, with the progress on screen.
Automatic Updates could not be turned off
A real bug in 3.1.214, and a design error rather than a slip. The Chrome permission was the setting — read back on every render — which is tidy right up until chrome.permissions.remove() answers false. It does that whenever Chrome decides to keep a grant, and granting a path-scoped pattern like github.com/…/releases/download/* can widen it to the whole origin, which the narrow pattern then cannot remove. The state read back as on and the checkbox sprang straight back.
Your choice is now its own stored flag, and it wins. Off means off whatever Chrome keeps: every button greys out, the panel stops offering one click, and the installer refuses on that flag before it looks at the permission at all. Switching off still hands the permission back where Chrome allows it.
Humanize — what the mix actually plays at
The table said what each band scores and never what the whole mix does, so the only way to know what you'd built was to read seven rows and estimate. The Total row's Accuracy cell now holds every band's accuracy weighted by the share it's actually played:
| Mix | Reads |
|---|---|
| Shipped defaults (50/40/4/0/0/5/1) | 89% acc · 4% drop |
| Top move only | 100% acc · 0% drop |
| A third of moves blundered | 68% acc · 14% drop |
Weighted by the actual sum rather than by 100, because the panel picks proportionally: a mix totalling 50 plays the same ratios as the same mix totalling 100, so the summary describes what will happen rather than what a corrected mix would do. That also keeps it truthful while the total is mid-edit and red. Lichess's accuracy formula moved to one shared place on the way past — it had been a local inside the threshold editor, and two copies would have drifted.
Known limits
The archive reading and the in-place write are pinned by tests against the real published artifacts: this release's own 5.9 MB zip is unpacked by the updater and diffed file-by-file against unzip, then installed over a stand-in install with the manifest key preserved and lib/engine untouched. The switch, the hand-off and the summary were all driven in a real Chrome with the extension loaded.
The full one-click path — notice → worker → settings page → install → reload — has each link verified separately, but end to end it needs a release newer than an installed build that has the button, which by definition this one is not. That's what 3.1.216 will be. If it misbehaves, the status line names the stage, and nothing is written unless every check passed.