v2.7.4
What's Changed
- feat(blocks): a block is a thing you can run, ask about, and copy by @thethinkmachine in #74
- docs(readme): describe the app that exists, and show it running by @thethinkmachine in f038110
- feat(header): one plane of chrome, and menus a keyboard can reach by @thethinkmachine in #75
- fix(panels): an unpinned panel opens without its header spilling onto the canvas by @thethinkmachine in af96d9f
- fix(sim): the empty trace log names Σ*, not "a string" by @thethinkmachine in 6e511b7
Highlights
Blocks you can run, ask about, and copy (#74) — drilling into a block used to change what you could see and nothing about what you could do. The run box now offers a run boundary: run one block on its own, or run the whole machine and stop where control first enters it. A block has no verdict of its own, so its run reports which exit control left by. A scoped StateMate turn cuts the machine to the level you are standing in — asking a question about the adder no longer sends the whole processor, and a scoped edit can no longer delete the machine around the block. Copy/cut is the one gesture that crosses machines, so it now asks: a block whose transition shape doesn't match the host machine is refused whole. Notes live on one level; the trace log became its own card with the elided history reachable on demand.
One plane of chrome (#75) — the header's toolbar groups share one ground instead of three separate pills, the model picker moves beside the wizard button, and the Tools dropdown folds into the More menu. Every header menu now closes the same ways (Escape, window blur, outside click) and its rows are real controls: tabindex, Enter/Space, ↑/↓ roving focus, ARIA roles — the <div onclick>s are gone. The tab strip, machine pill and toolbar all stand at 36px.
Fixes — an unpinned panel no longer spills its header onto the canvas mid-open; the empty trace log names Σ* rather than "a string".
Full Changelog: v2.7.3...v2.7.4