Skip to content

0.11.0: undo, Python scripts, experiments that open again, provenance, live installs, tables, hot reload - #57

Merged
s4mstruthers merged 1 commit into
mainfrom
research-0.11
Oct 11, 2026
Merged

s4mstruthers merged 1 commit into
mainfrom
research-0.11

Conversation

@s4mstruthers

Copy link
Copy Markdown
Owner

What's new

  • Undo and redo on the canvas. ⌘Z takes an analysis back to before the last change (a box added or removed, a connection, a move, a setting, a group), ⇧⌘Z brings it again, and the right-click menu names what each would undo. The boxes run again, with the cache serving the ones that did not change. (flow/history.py)
  • Export as Python script (under ⋯): a .py with the same boxes, settings and connections, which python analysis.py runs on its own, printing what each box gives and writing the results beside it. The folder's own boxes come along from boxes/. The experiment zip carries the same script as run.py. (flow/script.py)
  • An exported experiment opens again. Drop the zip on OpenProcess (or File ▸ Open it): it is unpacked into a folder of its own, the app works in that folder, and the analysis runs and is checked against its record. A folder's own boxes are found by function name when their id (a hash of the old path) no longer matches, so moved or copied folders keep working too. (record.import_experiment)
  • Every result knows where it came from. A figure saved as SVG carries the analysis, the box, its settings and the result's fingerprint in its metadata; a table saved as CSV (and a figure as PNG) gets a .provenance.json beside it. (flow/provenance.py)
  • Installing shows pip's own lines as they come, on the tool's card, with the command it runs.
  • Result tables sort and copy. Click a column heading to sort (numbers as numbers), ⌘C copies the selected rows, and Copy as CSV and Save as CSV… sit under the table.
  • Your own boxes reload when you save them. A file under boxes/ saved in an editor is loaded again by itself (the files are watched, not only the folder), the message names the file, and the boxes it defines run again.
  • The downloaded app checks itself for installs. The build's self-test runs pip inside the app and imports the whole standard library, so a release in which Install… or an installed package would fail is never published.

Verification

  • Full suite offscreen: 422 passed, 3 skipped. New tests cover each feature, including a generated script executed end to end and an export → import round trip that reproduces the recorded numbers.
  • The offscreen review drive (18 steps across every page) ran with no exceptions and no Qt warnings.
  • The self-test passes from source; its pip step only runs in a packaged build, so this PR's Build apps run is where it is first exercised.

🤖 Generated with Claude Code

…installs, tables, hot reload

Eight things the app lacked, built for 0.11:

- Undo and redo on the workflow canvas (flow/history.py): every change keeps
  the state before it (a few kilobytes), ⌘Z puts it back and the boxes run
  again from the cache; the canvas menu names what each step undoes.
- Export as Python script (flow/script.py): the @workflow function to_python
  writes, the folder's boxes loaded from boxes/, and a main block that runs
  it and writes the results beside it.  The experiment zip carries it as
  run.py.
- An exported experiment opens again (record.import_experiment): unpacked
  into a folder of its own, inputs under inputs/, boxes under boxes/, and the
  record kept for the reproducibility check.  A folder box is found by its
  function name when its id (a hash of the old path) no longer matches.
- Provenance (flow/provenance.py): the runner stamps every value with the
  analysis, the box, its settings and the result's key; an SVG carries it in
  <metadata>, a CSV or PNG in a .provenance.json beside it.
- Installing a tool shows pip's lines as they come, on the tool's card.
- Result tables sort by number (the cell holds the number, a delegate shows
  it to four decimals) and copy: ⌘C the selected rows, Copy as CSV, Save as
  CSV…
- A box file saved under boxes/ is reloaded by itself: the files are
  watched, not only the folder, and the message names the file.
- The build's self-test runs pip inside the app and imports the whole
  standard library, so a release in which Install… would fail is never
  published.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@s4mstruthers
s4mstruthers merged commit b160563 into main Oct 11, 2026
6 of 7 checks passed
@s4mstruthers
s4mstruthers deleted the research-0.11 branch October 11, 2026 09:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant