Releases: IchNukeDichWeg/Mephisto
Release list
Mephisto 3.1.217 — undoable updates, and a panel that explains itself
Updates you can undo, a panel that tells you why nothing happened, and four-player chess that finishes its own promotions. The largest release since self-updating landed.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.217.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.217-update.zip |
6 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.
On 3.1.215 or later with automatic updates set up? Neither archive. Click the panel's "click to install", or Settings → Updates → Install Update.
Every update is undoable now
Before anything is overwritten, the new version is written to a staging folder and the files it replaces are copied to a backup.
- Roll Back appears in Settings when there is something to go back to, labelled with the version. Files the update added are recorded separately, so rolling back removes them instead of leaving two builds mixed together.
- Finish Interrupted Update appears if a staging folder is left behind — the bytes are already on disk and already checked, so it is a copy, not a second download.
- What changed is shown once in the panel after an install: "Updated to v3.1.218 — …", taken from the release's own first sentence.
True atomicity is not available — the extension id comes from the folder path, so the folder cannot be swapped out from under itself. Recoverable is the honest word, and it is what this is.
Verified on a real filesystem against the published archive: staging leaves the install untouched, the backup holds the old bytes and never the engines, and rolling back leaves the folder byte-identical to before the update.
The panel says why nothing happened
Every path that ended in "no move" used to end in silence, which is indistinguishable from a bug — and was reported as one three times.
- A reason line under the readout for the things you cannot otherwise see: a four-player board that is not playable, a move the board cannot understand, a square not on screen, a position that moved on mid-search. Deliberately not used for anything that happens in ordinary play.
- Copy Diagnostics (panel → Engine tab, or D) puts version, browser, bundled assets, connected hosts, granted permissions, what was detected, why the last move was or was not played, the active toggles and the last 200 trace lines on your clipboard. No addresses, no query strings, no extension id — it is meant to go straight into a bug report.
- Verbose Logging in Settings → Diagnostics. The trace is quiet while the game tab is focused unless Premove happens to be on; that default hid the cause of a four-player bug for three sessions, so it now has a switch instead of an incantation.
- A scrape watchdog: above 60 scrapes a second — a rate real play never reaches — scraping backs off and says so once.
Four-player chess
- Promotions are played in full. The picker is found by its shape — four pieces in two rows over the board — not by a class name, since every class there is generated. If nothing matches that shape it leaves the piece to you rather than guessing, because a wrong guess would be a wrong piece.
- Elimination was wrong, not just untested. The turn came from counting filled cells and taking
count % 4. Chess.com lays that table out as four columns in seat order, so once a seat is out its column stops filling, every later round holds three moves instead of four, and the modulo drifts a seat further out per round. Reading the position of the last filled cell is correct either way. - Multiple lines, on the page board, the panel's own 14×14 board, and a colour-matched list of scores beneath it. Tetrarch has always had MultiPV; nothing had asked for it.
- Autoplay works on the analysis board, not only in a game.
The floating panel
- 79% smaller payload. It was shipping all three board textures — 784 KB of base64 in a 973 KB payload — to use at most one. On a flat-colour theme it now carries none. First open after a cold start went 145 ms → 82 ms.
- It can no longer open into silence. A frame appears before anything is awaited, says more if the worker is slow, and times out rather than hanging — reported as ten seconds of nothing after a browser restart.
- Tetrarch no longer offers an Elo slider; it has no
UCI_Eloto cap.
Known limits
The ten-second stall that prompted the startup work is not explained. It is now visible and survivable, and the trace ring will capture it next time — that is all this release claims about it.
No real game has been seen past an elimination, so that path is pinned by synthetic positions. The promotion picker is confirmed for a seat at the bottom of the board; whether Chess.com rotates that picker per seat is untested, and is noted in the code where the order is declared.
Mephisto 3.1.216 — four-player chess, under your control
Four-player chess gets its mode back under your control, and three things that quietly did nothing now work. If you're on 3.1.215 with automatic updates set up, the panel's update notice will install this one for you — that's the first time that path can be taken end to end.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.216.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.216-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.
On 3.1.215 already? Neither archive. Click the panel's "Update available — click to install", or Settings → Updates → Install Update.
Four-player mode, set by hand
The mode was read from Chess.com's own mode label — a guess about someone else's markup — and it decides the rules the search runs under: promotion is the 8th rank in free-for-all and the 11th in Teams. When that guess was wrong the search was wrong, and there was no way to say so.
Mode now sits in the panel where Variant would be (hidden for Tetrarch anyway, so nothing grew a line): Auto-detect, Teams, Free-for-all. It's on the settings page too. Changing it re-analyses the position already on screen rather than waiting for the next move — the rules just changed, so waiting would keep searching under the ones you said were wrong. Switching back to Auto-detect re-detects rather than serving what was cached while it was forced.
Autoplay works on the analysis board
It was refusing every move there, silently. The guard only accepted /variants/…/game/<id>, and it exists to stop the extension clicking pieces around the lobby and the setup pages, where a board is drawn but there's nothing to play. The analysis board is neither of those — it's your own private board, so playing a line out on it affects nobody. It's allowed now; the lobby and setup pages stay excluded.
Found from a trace, not from reading: automove received {autoplay: true, moving: false} immediately followed by DROPPED: 4PC move outside a game url {path: '/variants/4-player-chess/analysis'}.
Help Mode drew nothing until somebody moved
The four-player lane skips the search entirely when the position hasn't changed, and only the Autoplay toggle cleared that — and only when it was being ticked. So turning Help Mode on asked for an arrow on the position already in front of you, which the dedupe had already decided not to redo. Both toggles clear it now, in both directions.
Four-player traces were hidden from the only person who could report them
bgLog goes quiet when the tab is focused and Premove is off, deliberately, so ordinary play doesn't fill the worker console. The effect on four-player chess was that every line naming why a move never reached the board was suppressed in exactly the situation being investigated: someone sitting in front of the board watching autoplay do nothing. Three sessions of that with nothing to go on.
4PC is one search per move, so there was never any volume to suppress. Its traces bypass the gate now, as do the automove guards for four-player moves — automove received prints autoplay, background_play, moving, visible and focused, which between them name every way a move can be dropped. Ordinary play is unchanged.
Noted while in there: tabActive() is visibility and document.hasFocus(), so opening DevTools on the game tab defers autoplay. Reading the console about autoplay not working stops autoplay. Turn on Background Play while debugging.
Smaller
- Tetrarch no longer offers an Elo slider. It speaks its own four-player protocol and has no
UCI_Eloat all, so the control read "3190+ / Full Strength" and did nothing whatever you set it to. It was missing from both no-Elo lists, and the settings page had no such list at all — so it showed the field for every engine, including the Maia nets, whose strength is the net you pick rather than a cap.
Known limits
Free-for-all still isn't searched — Tetrarch implements Teams only, so forcing FFA tells you so rather than handing back a move scored under the wrong rules. The override exists for the case where detection says FFA and the board is actually Teams. The promotion picker is still yours to click, and elimination has still never been seen in a real game.
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.
Mephisto 3.1.214 — it can update itself now
Mephisto can update itself now — if you ask it to. Plus the four-player fixes from 3.1.211–213, which never got a release of their own.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.214.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.214-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.
This one you still install by hand. The updater ships in 3.1.214, so it can't be the thing that installs 3.1.214. Do this one the usual way; from here on it's a button.
Automatic updates — opt-in, off by default
Settings → General → Updates. Chrome never updates an extension you loaded yourself, so Mephisto does it instead: it fetches the 5.9 MB update archive from this repository's latest release and writes it into its own folder, in place.
Three steps, once:
- Automatic Updates → On — Chrome asks for permission to download from this repository's releases. Refusing leaves it off.
- Choose Extension Folder — pick the folder you loaded as an unpacked extension. Chrome remembers it.
- Install Update when one is offered.
After that it's one button, and the extension reloads itself. Reload any game tab you had open.
In place is the whole point. The id is derived from the folder path — measured, not assumed: the same folder loaded into two fresh Chrome profiles gets the same id both times. So the id survives, and the native engine hosts registered against it keep working. That is also why install-tetrarch.ps1 no longer tells you to re-run it after every reload; it never needed to.
What it will not do:
| Install anything by itself | It checks and it tells you. Nothing is written until you press Install Update. |
| Touch the bundled engines | The update archive doesn't contain them, so lib/engine and lib/ort are left alone. |
| Write into the wrong folder | A folder is rejected unless its manifest.json is this extension's. |
| Apply a broken download | The archive is unpacked and checked in memory first — every path, the version against the release, the files the extension needs to boot, and a refusal to apply the 585 MB archive by mistake. If anything is off, nothing is written at all. |
| Anything at all, while off | Every button is disabled and the installer refuses outright. |
The permission is scoped to this repository's release downloads, not to github.com. You can revoke it on chrome://extensions, or just switch the toggle off, which hands it back for you.
Being straight about one thing: on Chrome 151 an extension page can already read any cross-origin URL with no host permission at all — measured, including a full read of a real release asset with nothing granted. So the permission is a visible, revocable record of what you agreed to, not the thing standing between the extension and a download. The check that actually gates it is the extension's own.
Four-player chess (from 3.1.211–213, unreleased until now)
- Help Mode draws arrows again. The
movingguard sits above the whole message dispatch and its else branch was a barereturnfor every message shape — so it was also throwing awaydrawHint,clearHintanddrawEvalBar, none of which touch the board. Four-player autoplay moves almost continuously, so the guard was up most of the time, which is why arrows looked broken there while the identical code worked on an 8×8 board. It now blocks only automove and premoves. - Free-for-all is actually detected. The old scan read
.board-layout-sidebar, .game-info, main— on a real game page the first two don't exist andmainhas no text, so it saw an empty string and fell through to the Teams default. chess.com renders the mode in.game-details-type("1 | 7 | FFA", "2 | 10 Teams"); that's the signal now, with the whole page's text as a fallback. Also measured: the URL does not carry the mode, so that check can confirm but never decide. - The search streams like every other engine. The readout was a bare move and a number —
a8b7 (2.65). The host had been emitting an info frame per depth all along; this lane just never passed anonInfo, so all of it was discarded. It now reads Red to play, best move is a8b7, with live NPS and a score row that deepens as it searches. - Fresh screenshots for the panel that actually ships.
Known limits
The zip reading and the in-place write are driven by tests against the real published archives — this release's own 5.9 MB artifact was unpacked by the updater and diffed file-by-file against unzip, then installed over a stand-in existing install, with the manifest key preserved and lib/engine untouched. The options page was loaded into a real Chrome to confirm showDirectoryPicker exists there at all, the section renders, and every button is dead while the toggle is off.
Three steps are not yet confirmed on a real profile: accepting the permission prompt, the folder picker returning a handle, and the reload. All three are single browser calls with no logic of ours around them, but none can be automated, so they are owed rather than done. If the first run misbehaves, say so and include what the status line said — it names the stage it failed at, and nothing is written unless every check passed.
Mephisto 3.1.210 — puzzle rework, and the panel rework that never shipped
Puzzle Mode reworked, and the panel rework finally reaching this build. If you skipped 3.1.208–209, take this one.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.210.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.210-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.
Why so many releases in two days?
Because the four-player and puzzle work was being tested on real games as it was written, and each session surfaced the next real bug. The version number moves on every change that reaches a user, however small — that is deliberate, and it is what makes "reload and tell me if it still happens" a question with a definite answer.
Two of those releases were fixing damage from an earlier one. 3.1.199 and 3.1.200 were dead on load — a ReferenceError in the panel — and 3.1.201 existed only to repair that. Nothing was hidden behind a quiet re-upload; a broken build got its own version and its own note saying so.
This one is different in kind: it is the result of diffing the public build against the development build file by file and symbol by symbol, rather than trusting the ports that produced it. That found the panel problem below, which had been shipping silently for eleven releases.
The panel rework was never actually in this build
The two-tab layout, the Move Time steppers and the turn-switch label existed in development and not here — the markup was never carried across, so 3.1.199 onward shipped the old single-column panel while the notes described the new one. Nothing crashed, because the panel skips controls it cannot find, which is exactly why it went unnoticed for so long. It is here now.
Alongside it: the settings stylesheet loaded before Materialize (so Materialize won every conflict), a per-page sheet still held rules that belong in the shared one, and thirteen locale files were about thirty keys behind — the reworked panel was English-only in every other language.
Puzzle Mode
- The database is asked before the engine, not alongside it. The lookup was fire-and-forget, so the engine could finish first and play its move into a position the database had the answer to — and an objectively strong move still fails a puzzle. The search now waits for the database. A miss searches exactly as it always did.
- No moving twice into the same position. After your move the board still shows what you moved from until the scripted reply lands; a second move into it is a wrong answer, not a no-op. The board changing is the only accepted proof the opponent replied.
- Every puzzle move pauses 300 ms, Lichess and Chess.com alike — including engine moves, which previously went out the instant the search returned.
- A known solution is still looked at, to depth 10, purely so the panel shows an evaluation. Its move is explicitly discarded.
- The puzzle's rating is shown:
Puzzle database (Rating 2145). - The two databases are separate stores, so a Chess.com position is never read against Lichess records. Remove drops one without the other, and each is counted separately.
Smaller
Every panel line now starts with a capital — the confidence labels, the tablebase verdicts and the database label read as sentences and sit on their own rows.
Also since 3.1.204, if you skipped those
- Four-player game mode is detected. Tetrarch implements Teams only, so a free-for-all board now says so instead of returning a move scored under rules nobody at the table is playing. Detection reads the URL first, then the mode wording on the page; the per-seat points markup that would separate the two structurally is still unverified, so the default stays Teams and every signal is logged.
- The four-player eval bar could freeze. The native host returns a bare
{move, pv}when a search produces noinfoline, so the win-percentage curve came outNaNand the bar stayed wherever it was. - Chess.com puzzle import. Settings → Load Puzzle Database takes either file; the format is detected from the header. Moves arrive as Chess.com TCN, verified by replaying published rows through chess.js — all 12 moves of a 3554-rated tactic and all 4 of a 590 are legal from the position each row states, promotion included. Daily archive rows carry SAN instead and have no setup move. The exact CSV format, for anyone generating their own, is documented under Puzzles in the README.
- A 6 MB update download, and a check that says so plainly if you extract it into an empty folder instead of over an existing install.
- No forced layout per board scrape — the mode detection is worked out once per game rather than on every mutation.
Coming
The 620,000+ Chess.com puzzle database will be published once the upstream pull request is merged. The reader is already here.
Mephisto 3.1.209 — puzzle pacing and ratings
Puzzle Mode: pacing, a replay guard, and the puzzle's rating on screen.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.209.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.209-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.
Two ways a solved puzzle was being thrown away
Playing twice from the same position. After your move the puzzle scripts the opponent's reply, and until that lands the board still shows the position you just moved from. A second move issued into it answers a question that has already been answered — on a graded puzzle that is a wrong answer, not a no-op. A move is now refused if it would be played from the position we last played from, in a window deliberately shorter than the 1200 ms retry, so a click that genuinely failed can still be re-issued.
No pause on the engine path. The database path already waited; a searched puzzle move went out the instant the search returned. Every puzzle move now waits 300 ms, Lichess and Chess.com alike — including the case that matters most, where the database has no answer and the engine has to supply one.
The puzzle's rating, beside the move
Puzzle solution: a4b4 (Rating 2145). Both publishers provide one; daily archive rows do not and simply show none. Records written before this release are still read correctly — they just have no rating until that database is imported again.
One caught before it shipped
The pause and the replay guard first sat in the same block, so the delayed continuation re-ran the guard, found the record it had written 300 ms earlier, and dropped the move. That would have killed every engine-played puzzle move while leaving database moves working — the hardest kind of bug to notice. The guard now runs only on the way in, and the test suite drives it for real rather than grepping for it: the source-text checks proved the guard existed, not that a move survived it.
Mephisto 3.1.208 — separate puzzle databases
The two puzzle databases are kept apart. Plus everything from 3.1.207, since that release's notes are folded in below.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.208.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.208-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.
Separate databases
Lichess and Chess.com puzzles shared one store, so a Chess.com position was being read against Lichess records and the other way round — every one of those a guaranteed miss, and on a 6.6-million-record store that is disk work per position, per move. Each publisher now has its own store and a lookup only ever reads the one for the site you are on.
The schema change is additive: the Lichess store keeps its original name, so an existing import stays exactly where it is and does not need the half hour again.
Remove can now drop one database without taking the other, and the settings page counts them separately — "6,623,778 positions" was true and told you nothing about whether any of them were Chess.com's.
Chess.com puzzle import (from 3.1.207)
Settings → Load Puzzle Database takes either file. The format is detected from the header, so there is nothing extra to pick.
The two files cannot share a parser. Lichess rows are split on newlines, which is right for six million rows with nothing quoted in the columns that matter. Chess.com's pgn column holds a full PGN with literal newlines inside its quotes, so those rows go through a real streaming CSV reader; Lichess keeps its fast path.
Moves arrive as Chess.com TCN — two characters per move, promotions encoded past the 64th square. The decoder is verified by replaying published rows through chess.js: all 12 moves of a 3554-rated tactic and all 4 of a 590 are legal from the position each row states, promotion included.
Daily archive rows are the exception twice over: they carry SAN rather than TCN, and they have no setup move, so the side to move is the solver. SAN needs a rules engine, which puzzle-db.js deliberately does not carry (it also runs in the service worker) — the settings page injects one.
Building your own CSV? The exact format the importer accepts — column table, the TCN alphabet, promotion encoding, and the three rules a generator must respect — is documented under Puzzles in the README.
Known issue
Help Mode still draws no arrow on a four-player board. Everything upstream of the renderer checks out by reading, so this build logs what actually reaches it rather than shipping a fourth guess. If you hit it, the 4PC hint line in the service-worker console is what identifies it.
Coming
The 620,000+ Chess.com puzzle database will be published once the upstream pull request is merged.
Mephisto 3.1.207 — chess.com puzzle import
Chess.com puzzles import through the same button. The reader is in; the database itself follows the upstream merge.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.207.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.207-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.
What's new
Settings → Load Puzzle Database now takes either file. The format is detected from the header, so there is nothing extra to pick, and importing both simply gives you both — they key on the position, so neither overwrites the other.
The two files cannot share a parser. Lichess rows are split on newlines, which is right for six million rows with nothing quoted in the columns that matter. Chess.com's pgn column holds a full PGN with literal newlines inside its quotes, so those rows go through a real streaming CSV reader; Lichess keeps its fast path.
Moves arrive as chess.com TCN — two characters per move, promotions encoded past the 64th square. The decoder is verified by replaying published rows through chess.js: all 12 moves of a 3554-rated tactic and all 4 of a 590 are legal from the position each row states, promotion included.
Daily archive rows are the exception twice over: they carry SAN rather than TCN, and they have no setup move, so the side to move is the solver. SAN needs a rules engine, which puzzle-db.js deliberately does not carry (it also runs in the service worker) — the settings page injects one.
Still to come
The 620,000+ puzzle database itself will be published once the upstream pull request is merged. This release is the reader, so it is ready the day the file lands.
Mephisto 3.1.206 — no forced layout per scrape
A forced layout on every board scrape, removed. Found reviewing 3.1.205, one release later.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.206.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.206-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.
What changed
The Teams/free-for-all detection added in 3.1.205 was called from the board scrape — which runs on every DOM mutation and on the fallback poll — and its detection reads innerText, forcing a layout each time. A forced reflow per scrape is exactly what made the ChessBase board lookup unusable and got it reverted in 3.1.129; this had reintroduced the same shape one release earlier.
The mode cannot change inside a game, so it is now derived once and cached against the page path.
Only four-player chess was affected, and only on the scrape path — no behaviour changed.
Coming: Chess.com puzzles
Once the upstream pull request is merged, a database of 620,000+ Chess.com puzzles with their solutions will be published for import the same way as the Lichess one — same settings page, same import button, and on a hit the panel plays the known line with no search at all.
Mephisto 3.1.205 — four-player game-mode detection
Four-player chess reads the game mode now. Plus an eval bar that could freeze.
Which download?
| Archive | Size | Use it when |
|---|---|---|
mephisto-3.1.205.zip |
585 MB | First install — everything, engines included |
mephisto-3.1.205-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, too: 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.
Teams vs free-for-all
Tetrarch implements Teams only — its free-for-all search does not exist — and the panel was telling it Mode: teams for every board. On an FFA game that yields a confident move scored under rules nobody at the table is playing. The scraper now works out the mode and sends it with the position, and an FFA board says so rather than analysing.
Detection reads the URL first, then the mode wording on the page. The per-seat points display that would separate the two structurally is unverified, so the default stays Teams and every signal it considered is logged — one real FFA game will pin it rather than a second guess.
The eval bar could freeze
The native host returns a bare {move, pv} when a search produces no info line. score was then undefined, the win-percentage curve came out NaN, and height: NaN% left the bar wherever it happened to be — which reads as an eval bar that does not move. A scoreless line is now ignored instead of poisoning the bar.
Coming: Chess.com puzzles
Once the upstream pull request is merged, a database of 620,000+ Chess.com puzzles with their solutions will be published for import the same way as the Lichess one — same settings page, same import button, and on a hit the panel plays the known line with no search at all.
Everything else is unchanged from 3.1.204.