Skip to content

v2.8.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 09:10
· 116 commits to main since this release

What's Changed

Highlights

A new machine: the embedded pushdown automaton (#78) — an EPDA's store is a stack of stacks, of which only the topmost is reachable. That is exactly the tree-adjoining languages: more than one stack, less than two independent ones. It reaches every surface a machine has — the editor, the player, StateMate, save files and the export IR — and the Reference gains a Language Classes page for the grammar side of it.

Exercises, a lexer generator, and statechart import (#79, #80) — More → Create Exercise from This Machine… turns the machine on the canvas (or the grammar in the Grammar view) into a hidden reference answer, and a student's machine is graded against it automatically. The author also decides how much StateMate may help: off, hints only, or full help. The lexer generator turns a list of regular expressions into a working tokenizer, and XState / SCXML statecharts written for real applications can be opened as machines.

Space-time diagrams and the complexity profile (#85, #88) — a whole run on one screen: one row per step, time running down and space across, with the head's path drawn through the rows and a resizable overview strip beside it. The complexity profile plots steps and space against input length n.

StateMate through your own Claude Code (#83, #84) — two new providers that need no API key: the desktop app can run the claude CLI directly, and an agent bridge lets a running Claude Code session answer StateMate's requests. StateMate now draws its draft while it is being written, can explain a machine answer alongside it, and keeps each run tied to the tab it was sent from.

Paste a machine onto the canvas (#92) — Ctrl+V now opens a Turing machine in the standard text format (1RB1LC_1RC1RB_…, as used by bbchallenge and the Busy Beaver wiki), a share link anywhere in the pasted text, or a saved file's JSON. A paste never replaces the machine on screen: an occupied tab gets a new one.

A reworked Workspace panel and floating windows (#81, #87, #89) — a Machine section, the alphabets as rows of one section, Blocks shown only once a machine has one, and δ available as the textbook's table of states by symbols. Folded sections summarise what they hold; floating windows snap, anchor, and fit their content.

One field language, a tile toolbar, and a better batch tester (#90, #91) — every field on both panels shares one height, radius and focus style; search boxes clear with Escape; the canvas toolbar shows each tool's shortcut on its tile; and every canvas overlay keeps one home instead of jumping between corners as the toolbar moves.

Faster, especially on large machines (#77, #93, #94) — a step now costs the same on a machine of any size (δ is indexed by source state instead of scanned), playback paints once per frame with a speed knob in place of a 20-steps-a-second cap, and nondeterministic searches name configurations by integers rather than by their contents, so they no longer grow quadratically with their own work. The layout grid is flat and the label stage's inner loop is compiled to WebAssembly.

Fixes — characters draw as themselves rather than as programming ligatures, in the canvas and in form controls; the formal definition typesets the notation's own symbols as math; dialogs take focus when they open; icon buttons are named by an attribute rather than a tooltip; notation keeps its case under uppercase labels; arriving at the phone layout by resizing matches arriving by load; the DPA example's note no longer covers its start state; and 595 lines of dead code are gone (#76).

Full Changelog: v2.7.4...v2.8.0