recording: node-editor tutorial sweep — voiced, self-verifying, with data-flow pulses#26
Merged
Merged
Conversation
Bring the first node-editor tutorial onto the recording bar: voiced (terse caption decoupled from natural voice), self-verifying (every construct asserted rendered via record_check_rendered; ok=true, dropped=0), and it does what it teaches by closing with a real flow_cmd pulse along the link. - record_first_graph.das: rewritten from narration-only to the voiced/verifying model; 6 beats touring node_editor / node / pin / link, closing with a continuous data-flow pulse (re-pulsed across the voice dwell so the link stays lit, not a one-second blip). - imgui_editor_playwright.das: add ne_flow(s, link_id, backward) rail wrapping the flow_cmd live command, matching the other ne_* helpers. - first_graph.rst: recording note + flow() documentation. - first_graph.mp4: fresh voiced recording (51s, 6 voiceovers, -16dB bed). - .gitignore: cover the voiceover / music / ffmpeg recording intermediates. Recorded against dasImgui with borisbat/dasImgui#159 (user-control cursor bleed) and #160 (prepare_recording --asset-root) applied. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Updates the first_graph tutorial recording driver to match the newer “voiced + self-verifying” recording style used elsewhere in the repo, and adds a Playwright helper to trigger node-editor link flow pulses.
Changes:
- Reworks
record_first_graph.dasinto a 6-beat voiced walkthrough withrecord_check_renderedassertions and a closing linkflowpulse loop. - Adds
ne_flow(...)toimgui_editor_playwright.dasas a wrapper over the existingflow_cmdlive command. - Updates the tutorial docs and
.gitignoreto reflect the new recording artifacts/workflow.
Reviewed changes
Copilot reviewed 3 out of 5 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| tests/integration/record_first_graph.das | Converts the recording driver to voiced + self-verifying beats and demonstrates link flow pulsing. |
| doc/source/tutorials/first_graph.rst | Documents the new voiced/self-verifying recording behavior and adds flow() explanation. |
| daslib/imgui_editor_playwright.das | Adds ne_flow helper wrapping flow_cmd for reuse across recordings/tests. |
| .gitignore | Ignores additional recording intermediates (voiceover/music/ffmpeg sidecars). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
ne_flow was added to imgui_editor_playwright in the first_graph commit but never categorized, so the generated imgui_editor_playwright.rst carried an "Uncategorized" section and the doc gate failed the build. Add it to the "Actions" group regex alongside the other ne_* action helpers. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…pulse
Second tutorial of the node-editor recording sweep. The legacy driver pointed
at the gesture with a soft if/else fallback ("the drag did not land"); now:
- Voiced — 3 beats (setup / hero drag / committed link), terse ASCII captions
decoupled from natural voice lines, paced by the wav durations.
- Self-verifying — the real synthetic pin-drag MUST commit the link or the
recording aborts at teardown (record_check_rendered on link_100, replacing
the soft fallback). dropped=0, ok=true.
- Does what it teaches — closes by pulsing the new link with flow(), re-pulsed
across the voice dwell so it stays lit.
The committing drag timeline is verbatim from test_connect_drag (press on the
output pin, travel held, release on the input pin). connect_by_drag.rst gains
the recording note.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment on lines
+65
to
+67
| def public ne_flow(s : EditorSession; link_id : int; backward : bool = false) : JsonValue? { | ||
| return post_command(s.app, "flow_cmd", JV((editor = s.handle, id = link_id, backward = backward))) | ||
| } |
…ulse
Third tutorial of the node-editor recording sweep. The legacy driver narrated
with a single string as both caption and voice, toggled set_user_control by
hand, printed debug lines, and ended on a soft if/else fallback ("the create
did not land"). Now:
- Voiced - 4 beats (setup / drag-to-empty -> menu / pick -> spawn+wire / flow),
terse ASCII captions decoupled from natural voice lines, paced by the wavs.
- Self-verifying - the drag MUST open the create menu (verifies it landed in
empty canvas) and the menu pick MUST spawn node_200 + commit the auto-link
link_100, or the recording aborts at teardown. dropped=0, ok=true.
- Does what it teaches - real synthetic pin-drag into empty canvas, real menu
click, real enqueue_new_link auto-wire, then a flow pulse on the new link.
Dropped the manual set_user_control (with_node_editor_recording_app owns it) and
the stray prints; switched to ne_open so the flow pulse can run. create_by_drag.rst
gains the recording note.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment on lines
+43
to
+46
| let c_node1 = widget_center(snap, T_NODE1) | ||
| let c_pin11 = widget_center(snap, T_PIN11) | ||
| let c_pin21 = widget_center(snap, T_PIN21) | ||
| let c_link = widget_center(snap, T_LINK) |
Comment on lines
+41
to
+42
| let out_c = widget_center(snap, T_OUT) | ||
| let in_c = widget_center(snap, T_IN) |
Comment on lines
+65
to
+67
| def public ne_flow(s : EditorSession; link_id : int; backward : bool = false) : JsonValue? { | ||
| return post_command(s.app, "flow_cmd", JV((editor = s.handle, id = link_id, backward = backward))) | ||
| } |
Comment on lines
+66
to
+69
| ``flow(ctx, link_id)`` fires a one-shot data-flow pulse along a link — a marker | ||
| that travels the edge and fades over ``style.FlowDuration``. The walkthrough | ||
| re-pulses it so the link visibly carries data; from a live host it is the | ||
| ``flow`` command (``ne_flow`` in the playwright helpers). |
Comment on lines
+11
to
+15
| //! Driver: record connect_by_drag.apng - the signature gesture, voiced and | ||
| //! self-verifying. A REAL synthetic pin-drag (press on the output pin, travel | ||
| //! across, release on the input pin) commits a link; the recording asserts the | ||
| //! link committed (a no-op aborts at teardown) and pulses it to show data flow. | ||
| //! The headless regression for the same gesture is test_connect_drag.das. |
Comment on lines
+11
to
15
| //! Driver: record first_graph.apng - a guided, self-verifying tour of the four | ||
| //! node-editor constructs (node_editor / node / pin / link), closing with a | ||
| //! data-flow pulse along the link. Voiced (terse caption + natural voice); every | ||
| //! construct is asserted rendered, so a missing one aborts the recording at teardown. | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings the node-editor tutorials onto the same voiced / self-verifying bar as the dasImgui set. Each recording is also its own regression test: every interaction is asserted (
record_check_rendered/record_check_value), and a no-op aborts the recording at teardown — no silent duds. Tutorials that involve a link close with (or open on) aflow()pulse, using the data-flow animation as the "highlight" device.Landing one tutorial at a time, each eyeball-approved before commit.
Included so far
node_editor/node/pin/link); every construct asserted rendered; closes by pulsing the link.(Remaining: groups, clipboard, styling, navigation.)
New rail
ne_flow(s, link_id, backward = false)inimgui_editor_playwright.das— wraps theflow_cmdlive command, matching the otherne_*helpers. Categorized under the Actions group innode_editor2rst.dasso it passes the uncategorized-gate.Per-tutorial cleanups
set_user_controltoggles (with_node_editor_recording_appowns it) and strayprint()debug lines.flow()documented in first_graph..gitignore: cover the voiceover / music / ffmpeg recording intermediates (only*.apngwas covered before).Notes
Recorded against dasImgui with borisbat/dasImgui#159 (user-control cursor-position bleed) and #160 (
prepare_recording --asset-root) applied. The.apng/ wavs / manifest / sidecar are gitignored intermediates; only the.mp4is tracked.🤖 Generated with Claude Code