v0.11.0 — dashboard UX: rail and readout
Every screen is now a grey rail — what you manipulate — beside a white readout — what the tables say.
This release also carries v0.10.0, which was merged to main and superseded within the same session and so has a tag but no separate release.
Added
- Drag-and-drop position editing. Drag a piece from the palette onto a square, drag pieces around the board in the new Arrange mode, or drag one off the edge to remove it. Click-to-place is unchanged and remains the keyboard path. Edit mode gained a visible Done — evaluate.
- The explorer shows the table a position came from, in a band below the board and the move list.
- Materials lands on "All tables" — the whole corpus at once, including the 67 materials that contain no helpmate at all and the seven generator versions that built the rest. The table list scrolls inside its rail, filters on substring, and groups by piece count.
- Search has a Stop button and shows elapsed time against the server's own budget. Stop is honest about its limits: the scan runs in a thread pool, so abandoning the response does not free the worker.
GET /v1/statsreturns a corpus aggregate./v1/probeand/v1/movesreport thematerialwhose table answered — the mirrored one when colours were flipped./v1/healthreportsmine_timeout.
Fixed
- The board overlapped the move list between 860px and ~1150px, sized from the viewport while its column was sized from the grid.
- A material with no helpmate reported "longest mate h#127.5" — the stored
DTM_UNSOLVABLEsentinel divided by two. 67 of 295 tables were affected. - A timed-out search reported "0 position(s) (truncated — raise max results for more)" — advice that could not help, about a scan that never finished.
- The Materials page rendered 12,005px tall.
- An edited position never reached the URL: a copied link reopened the pre-edit position, Back could not undo, and switching panels discarded the edit.
- Typing in the Materials filter with no tables installed threw on every keystroke and permanently killed the filter — the first-run state of a fresh install.
- A truncated sidecar returned 500 from
/v1/statsand/v1/materials, contradicting the documented tolerance. An interrupted generation run produces exactly that. materialcould name a table that cannot exist on unsolvable mirrored positions./v1/statsparsed every sidecar before checking its own cache.make test-apitested a stale site-packages copy, so a regression in existing behaviour could pass silently;make lintskipped new unstaged JavaScript.
Known limits
- An uncommitted edit is still discarded by switching panels; Done — evaluate is the commit gesture.
SIGTERMdoes not stop a runningminescan and its timeout is non-deterministic under load, because the pool worker outlives its HTTP response. Concurrency work is next.- Touch-drag is verified under emulation, not on a physical device.
What's Changed
- Dashboard UX: rail and readout, drag-and-drop editing, corpus statistics (v0.11.0) by @osick in #9
- Bring the dashboard UX pass (v0.11.0) to main by @osick in #10
Full Changelog: v0.10.0...v0.11.0