Post-merge follow-ups: canonical application shape, wasm glfw cards, docs TOC, manifest cleanup - #3593
Conversation
… of skip-guards
The binder skip-guarded 11 GLFW functions on emscripten (3.4 additions +
3.3-era gaps in emscripten's libglfw.js), so the das-visible glfw module
DIVERGED between the desktop cross-compiler and the wasm runtime. The
moment glfw_live called glfwGetWindowTitle, every glfw wasm card died at
module init: the compiled card resolves externs by mangled name via
jit_init_extern_function, and the guarded-out registration is absent
("Failed to find @glfw::glfwGetWindowTitle ... in module glfw").
Registrations are now unconditional and a new src/glfw_emscripten_stubs.c
implements the 11 gaps honestly: glfwGetWindowTitle returns a title
cached by a native glfwSetWindowTitle interposer over
emscripten_set_window_title (native defs shadow JS library symbols);
gamepad trio reports absent (raw joystick APIs still work); GetError ->
NO_ERROR; platform reports the emscripten-glfw contrib value; monitor
user pointer gets the single-monitor slot. The binder's
glfw_emscripten_skip list is gone -- skip-on-web is not fail-closed.
Verified with the pages-pinned emsdk 5.0.7: stub TU compiles
-Wall -Wextra -Werror; the three regenerated binding TUs compile with
the web build's real flags; a probe link with -sUSE_GLFW=3 proves the
interposer shadows cleanly. wasmboy compiles this arm per-PR; the cards
themselves get proven by a pages.yml dispatch post-merge.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
The 56 pages sit directly in tutorials.rst's section toctree like the opengl set; the intermediate imgui/index.rst is gone (intro folded into the section header) and its two inbound refs repoint at the tutorials_imgui label. Built-HTML verified: sibling links present on tutorial pages, parity with opengl; sphinx -W clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
daspkg release discovers modules from the compiled require chain (--list-shared-modules), not manifest dependencies() -- so every require_package(dasImgui) line was dead weight. Deps-only manifests deleted outright (utils/jobque-timeline, the examples/graphics parent); the eight load-bearing ones (release_main / still-external deps) lose the line. Consequence: pages.yml's das_install && gates are gone too (cmd_install_all errors on a dep-less manifest) -- the wasm flow needs no install at all now. Per-example gitignores that existed only for the removed dep deleted; run-proofs green on every touched example. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…oltip Bars rows now share the table rows' interaction: click toggles the run's full receipt (same pairReceipt renderer), noted rows show the same instant CSS tooltip on the label plus the star mark. Verified live: 65 expandable rows, receipts toggle both ways, noted label tooltips. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…_gc, repo-wide GC sweep New examples/application/main.das -- the copyable template for any long-running program: [export] init/update/shutdown + a standalone main that loops update + maybe_collect_gc(). No UI; runs standalone (--frames/--tick-ms) and under daslang-live (@LiVe state survives reloads). Registered with ADD_EXAMPLE_RUN so CI runs it per-PR. maybe_collect_gc moves to a UI-neutral home: new live/live_gc module in dasLiveHost (is_live_mode lives there natively); live/glfw_live re-exports it so every existing caller is unchanged, and windowless programs (servers, bots, tools) get the boundary without GLFW. Language fact, probe-verified and corrected in CLAUDE.md: `options gc` does NOT cascade from a required module -- the entry program must declare it itself; `persistent_heap` does cascade. imgui_harness carries the note beside its options. The sweep (~216 entry programs): every dasImgui example/tutorial app + jobque-timeline get `options gc` + the collect call (harness apps via harness_maybe_collect_gc, legacy imgui_app-shape files via the direct helper); daslive showcases, graphics labs, vulkan/gltf viewers, daStrudel apps likewise. Dual-shape drifters (strudel_live, strudel_sf2_live, daStrudel_16) now have standalone mains that call their own trio -- shutdown is reachable. Full conversions where the shape was absent: examples/hv/ws_chat_server.das (canonical server trio, live-smoke-tested: /ping, /status, clean stop) and both long-poll bots (echo_bot, daslang_helper_bot -- the latter also had a pre-existing compile break, fixed with require daslib/ast_boost). Verified: playwright spot tests pass against the changed harness (test_active_widget, test_app_dockspace, test_snapshot); headless runs of representative swept apps; ws_chat_server live smoke; lint 219 changed files clean; format clean; sphinx -W clean. Deferred (audit in hand): tutorials/opengl x12 (while(update()) web contract decision), examples/opengl x10 + pathTracer viewers + node-editor (monolith rewrites), dasHV tutorials 01-08 (threaded test-fixture shape is content -- needs reframing, not mechanics). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
There was a problem hiding this comment.
Pull request overview
This PR is a broad “post-merge follow-up” batch that (1) standardizes long-running daslang apps around an exported init/update/shutdown lifecycle with a standalone main driver and an explicit per-iteration GC boundary, (2) fixes WebAssembly GLFW cards by making the das-visible GLFW surface consistent on desktop and web (via Emscripten stubs instead of skipping bindings), (3) improves Sphinx tutorial navigation for dasImgui by flattening the sidebar TOC, and (4) removes now-dead require_package("dasImgui") manifest dependencies since dasImgui is in-tree and daspkg release discovers module archives from the compiled require chain.
Changes:
- Added
live/live_gc(dasLiveHost) and updated many examples/tutorials to declareoptions gcand callmaybe_collect_gc()(orharness_maybe_collect_gc()) once per main-loop iteration. - Fixed Emscripten GLFW divergence by removing
__EMSCRIPTEN__skip-guards from generated bindings and providing web-only C stubs for missing GLFW entry points. - Flattened dasImgui tutorial TOC into
tutorials.rst, updated refs, and removed the intermediatetutorials/imgui/index.rst; cleaned up.das_packagemanifests that only existed to declare dasImgui as an external dependency.
Reviewed changes
Copilot reviewed 253 out of 253 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| utils/jobque-timeline/README.md | Updates instructions to reflect in-tree dasImgui (no install step). |
| utils/jobque-timeline/main.das | Enables options gc and adds per-frame GC boundary in the standalone loop. |
| utils/jobque-timeline/.das_package | Removes a manifest that only declared now-dead dasImgui dependency. |
| tutorials/daStrudel/daStrudel_16_live_reloading.das | Adds canonical standalone loop and GC boundary for the tutorial app. |
| site/dasllama.html | Aligns “bars” UI behavior with table mode (expand receipts + note tooltip targeting). |
| modules/dasLiveHost/live/live_gc.das | Introduces UI-neutral maybe_collect_gc() for standalone loops; self-disables under live host. |
| modules/dasLiveHost/CMakeLists.txt | Registers live_gc for module build packaging. |
| modules/dasLiveHost/.das_module | Exposes live_gc under the live/ require path. |
| modules/dasImgui/widgets/imgui_harness.das | Documents non-cascading options gc and wires harness GC boundary accordingly. |
| modules/dasImgui/examples/tutorial/wrap_tab_bar.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/with_tab_stop.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/with_style.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/with_id.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/with_disabled.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/window_size_constraints.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/widgets_tour.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/visual_aids_tour.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/tree_node.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/tree_image_misc.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/toggles.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/texture_ref.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/tab_bar.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/state_telemetry.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/slider.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/selectable_hover.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/recording.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/popups.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/popup_window.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/popup_modal.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/plot.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/narrative_widgets.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/narrative_layout_tour.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/main_menu_bar.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/log_capture.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/live_reload.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/layout.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/layout_primitives.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/item_flags.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/input_text.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/input_numeric.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/icons.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/group.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/flat_tooltips.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/file_dialog.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/editing_external.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/edit_tab_item.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/dynamic_fonts.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/dropdown_select.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/driving_outside.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/drawlist.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/drag.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/docking.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/display_widgets.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/data_table.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/custom_widgets.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/containers.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/color.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/color_button_hover.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/collapsing_header.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/child.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/buttons.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/tutorial/boost_basics.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/save_demo/main.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/main.das | Declares options gc and adds maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_widgets.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_tables.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_style_editor.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_layout.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_inputs.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_window_titles.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_simple_overlay.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_property_editor.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_long_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_layout.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_fullscreen.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_constrained_resize.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_small_auto_resize.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_main_menu.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_documents.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_dockspace.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_app_custom_rendering.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/imgui_demo/harness_about.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/with_text_wrap_pos.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/with_tab_stop.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/with_item_width.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/with_indent.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/widget_no_ident.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/widget_init_defaults.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/visual_aids_dashboard.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/unindent.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/unicode_fonts.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/triggers.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/tree_node_open_manual.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/tree_node_ex.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/transport_demo.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/tooltip_flat.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/text_filter.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/table_set_bg_color.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/table_custom_headers.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/tab_item_button.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/style_override.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/sort_specs.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/snapshot_unrendered.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/snapshot_transform.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/set_window_size_runtime.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/selectable_hover.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/scroll_state.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/scroll_here_y.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/popup_window.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/popup_context_window.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/popup_context_item.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/plot_widgets.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/plot_getter.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/output_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/open_popup_on_item_click.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/narrative_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/narrative_separator.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/narrative_bullet.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/narrate_placement.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/menu_main.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/menu_label_static.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/markdown_uri.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/log_to_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/list_clipper.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/list_box.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/layout_primitives.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/layout_helpers.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/io_synth_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/io_synth_drag.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/io_mirror.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_tree_node_behavior.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_splitter_scrollbar.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_shade_verts.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_separator_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_render.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_render_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_render_rects.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_popup_menu_ex.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_log_capture.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_layout_calc.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_item_hittest.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_item_flag.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_item_add_button_behavior.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_id_seed.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_focus_scope.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_combo.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/internal_button_ex.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/inputs_text.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/inputs_slider.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/inputs_numeric.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/inputs_indexed.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/inputs_drag.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/inputs_color.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/inputs_choice.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/input_text_callback.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/indexed_dynamic.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/imgui_synth_mouse.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/imgui_synth_keys.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/id_override.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/hex_id_click.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/glfw_synth_mouse.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/glfw_synth_keys.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/foundation.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/font_stack.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/focus_widget.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/focus_control.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_vsliders.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_tab_item.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_menu_item.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_external_vectors.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_external_toggles.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_external_special.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_external_scalars.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_external_scalars_custom.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_external_combo.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_external_color.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/edit_collapsing_header.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/dynamic_font_scale.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/drawlist.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/drawlist_path.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/drawlist_channels.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/drag_drop.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/dockspace_in_window.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/dock_basic.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/display_progress.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/display_image.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/disabled_block.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/data_table.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/containers_window.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/containers_overlay.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/containers_layout.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/columns_demo.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/color_button_hover.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/collapsing_header_closable.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/clip_rect.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/child_scroll_reenter.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/button_repeat.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/await_quiescent.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/align_text_to_frame_padding.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/examples/features/active_widget.das | Declares options gc and adds harness_maybe_collect_gc() to the loop. |
| modules/dasImgui/CLAUDE.md | Updates module documentation about in-tree dasImgui and manifest dependency behavior. |
| modules/dasGlfw/src/dasGLFW.main.cpp | Clarifies web-only skip rationale for Vulkan loader binding. |
| modules/dasGlfw/src/dasGLFW.func_5.cpp | Removes Emscripten skip-guards for gamepad-related bindings. |
| modules/dasGlfw/src/dasGLFW.func_2.cpp | Removes Emscripten skip-guards for glfwGetWindowTitle binding. |
| modules/dasGlfw/src/dasGLFW.func_1.cpp | Removes Emscripten skip-guards for several GLFW init/platform/monitor functions. |
| modules/dasGlfw/dasglfw/glfw_live.das | Moves maybe_collect_gc to live/live_gc and re-exports it; adds lint suppressions. |
| modules/dasGlfw/CMakeLists.txt | Links Emscripten stub TU into the web GLFW module build. |
| modules/dasGlfw/bind/bind_glfw.das | Removes binder-side Emscripten skip list now that stubs backfill missing APIs. |
| examples/vulkan/one_source_path_tracer/main.das | Adds persistent heap + GC boundary via live/live_gc in standalone main loop. |
| examples/vulkan/one_source_path_tracer/.das_package | Removes now-dead dasImgui dependency declaration. |
| examples/vulkan_imgui_cube/main.das | Adds persistent heap + GC boundary via live/live_gc in standalone main loop. |
| examples/vulkan_imgui_cube/.das_package | Removes now-dead dasImgui dependency declaration. |
| examples/telegram/echo-bot/echo_bot.das | Refactors into lifecycle trio + loop with GC boundary; adds clean exit on missing token/errors. |
| examples/hv/ws_chat_server.das | Converts to canonical server lifecycle + loop with GC boundary; ensures teardown reachable. |
| examples/graphics/physarum_lab/.gitignore | Removes ignore rule for modules/ now that dasImgui is in-tree. |
| examples/graphics/physarum_lab/.das_package | Removes manifest dependencies() and updates release notes accordingly. |
| examples/graphics/physarum_lab_opengl_imgui_example.das | Adds options gc and per-iteration GC boundary. |
| examples/graphics/path_tracer_lab/.gitignore | Removes ignore rule for modules/ now that dasImgui is in-tree. |
| examples/graphics/path_tracer_lab/.das_package | Removes manifest dependencies() and updates release notes accordingly. |
| examples/graphics/path_tracer_lab_opengl_imgui_example.das | Adds options gc and per-iteration GC boundary. |
| examples/graphics/furier/.gitignore | Removes ignore rule for modules/ now that dasImgui is in-tree. |
| examples/graphics/furier/.das_package | Removes manifest dependencies() and updates release notes accordingly. |
| examples/graphics/furier_opengl_imgui_example.das | Adds options gc, per-iteration GC boundary, and reserves for vertex buffers. |
| examples/graphics/.das_package | Removes a manifest that only existed to declare dasImgui dependency. |
| examples/gltf/mesh_viewer_vulkan/main.das | Adds options gc, live/live_gc require, and per-iteration GC boundary. |
| examples/gltf/mesh_viewer_vulkan/.das_package | Removes now-dead dasImgui dependency declaration. |
| examples/gltf/mesh_viewer_opengl/main.das | Adds options gc and per-iteration GC boundary. |
| examples/gltf/mesh_viewer_opengl/.das_package | Removes manifest dependencies() now that dasImgui is in-tree. |
| examples/daStrudel/strudel_visualizer/main.das | Adds options gc and per-iteration GC boundary; adds STYLE030 suppressions where needed. |
| examples/daStrudel/strudel_sf2_live/main.das | Adds options gc + live/live_gc and canonical bounded standalone loop. |
| examples/daStrudel/strudel_live/main.das | Adds options gc + live/live_gc and canonical standalone loop; adjusts Strudel import. |
| examples/daStrudel/sfx_lab/main.das | Adds options gc + GC boundary call; clarifies non-cascading gc. |
| examples/daStrudel/sfx_lab/.das_package | Removes now-dead dasImgui dependency declaration. |
| examples/daStrudel/drum_compare/main.das | Adds options gc and per-iteration GC boundary; adds lint suppression for long update. |
| examples/daslive/triangle/main.das | Adds persistent heap + options gc and per-iteration GC boundary; adds STYLE030 suppressions. |
| examples/daslive/test_watch/main.das | Adds persistent heap + options gc, requires live/live_gc, and per-iteration GC boundary. |
| examples/daslive/test_api_http/main.das | Requires live/live_gc, adds per-iteration GC boundary, and suppresses unused live-command arg. |
| examples/daslive/reload_test/main.das | Adds persistent heap + options gc, requires live/live_gc, and per-iteration GC boundary. |
| examples/daslive/live_vars_demo/main.das | Adds persistent heap + options gc, requires live/live_gc, and per-iteration GC boundary. |
| examples/daslive/hello/main.das | Adds persistent heap + options gc and per-iteration GC boundary. |
| examples/daslive/hello_stdio/main.das | Adds persistent heap + options gc and per-iteration GC boundary; adds STYLE030 suppression. |
| examples/claude/daslang_helper_bot.das | Refactors into lifecycle trio + loop with GC boundary; adds missing ast_boost require. |
| examples/application/main.das | Adds canonical non-UI application template with exported trio + standalone loop + GC boundary. |
| doc/source/stdlib/imgui_internal_families.rst | Updates tutorial cross-reference to new tutorials_imgui anchor. |
| doc/source/reference/tutorials/imgui/recording.rst | Updates “Curriculum top” ref to tutorials_imgui. |
| doc/source/reference/tutorials/imgui/index.rst | Removes intermediate imgui tutorial index page (TOC flattened into tutorials.rst). |
| doc/source/reference/tutorials.rst | Flattens dasImgui tutorial pages into the section toctree and adjusts maxdepth. |
| CMakeLists.txt | Adds CI example-run for the canonical application template; adjusts graphics install patterns. |
| CLAUDE.md | Documents non-cascading behavior of options gc (entry module must declare it). |
| .github/workflows/pages.yml | Removes daspkg-install gating and builds wasm examples without install step. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Post-merge follow-ups: canonical application shape, wasm glfw cards, docs TOC, manifest cleanup
The follow-up batch to the dasImgui merge (#3592), plus two standalone site/wasm fixes. One PR by design — the lanes run once.
The canonical application shape (
/examples/application+ repo-wide GC sweep)examples/application/main.das— the template every long-running program copies:[export] init/update/shutdown+ a standalonemain=init → loop(update + maybe_collect_gc()) → shutdown. No UI; runs standalone (--frames,--tick-ms) and under daslang-live (the host drives the trio;@livestate survives reloads). Registered withADD_EXAMPLE_RUN, so CI runs it per-PR.maybe_collect_gchoisted to a UI-neutral home: newlive/live_gcmodule (dasLiveHost) — windowless programs (servers, bots, tools) get the standalone GC boundary without a GLFW dependency.live/glfw_livere-exports it; zero call-site changes.options gcdoes not cascade from a required module — the entry program must declare it (persistent_heapdoes cascade). This shaped the sweep: oneoptions gc+ one collect call per entry program.shutdown.examples/hv/ws_chat_server.das(the flagged dasHV case — monolithicwhile(true)with dead gc options → canonical server trio, live-smoke-tested: /ping, /status, clean stop) and both long-poll bots (telegram/echo-bot,claude/daslang_helper_bot— per-poll allocation with no collect point; the helper bot also had a pre-existing compile break, fixed withrequire daslib/ast_boost).while (update())web contract needs a decision), examples/opengl ×10 + pathTracer viewers + node-editor (monolith rewrites), dasHV tutorials 01-08 (their threaded test-fixture shape is content, not an app skeleton — needs a reframing pass, not a mechanical fix).Broken wasm cards (furier / path_tracer_lab / physarum_lab)
Root cause was not a stale archive: the glfw binder skip-guarded 11 functions on emscripten, making the das-visible glfw module diverge between the desktop cross-compiler and the wasm runtime.
glfw_livestarted callingglfwGetWindowTitle(3.4 API) → the wasm-side mangled-name lookup fatals at module init → every glfw card dies. Fix: the guards are gone (module surface identical everywhere) and a newglfw_emscripten_stubs.cimplements the 11 gaps honestly (title cached via a nativeglfwSetWindowTitleinterposer overemscripten_set_window_title; gamepad trio reports absent; etc.). Verified with the exact pinned emsdk 5.0.7: stub TU compiles-Wall -Wextra -Werror, the three regenerated binding TUs compile with the web build's real flags, and a probe link with-sUSE_GLFW=3proves the interposer shadows the JS symbol cleanly.wasmboycompiles the web arm per-PR; the cards themselves are proven by apages.ymldispatch after merge.dasImgui tutorials in the sidebar
The 56 tutorial pages now sit directly in
tutorials.rst's section toctree (the opengl pattern) instead of hiding behind an intermediate index page — the sidebar expands them like every other section (verified in the built HTML: sibling links present, parity with opengl pages).sphinx -Wclean..das_packagecleanup (manifests that existed for dasImgui)daspkg releasediscovers modules from the compiled require chain (--list-shared-modules), not manifestdependencies()— so everyrequire_package("dasImgui")line was dead weight. Deleted outright:utils/jobque-timeline/.das_packageandexamples/graphics/.das_package(deps-only). The eight load-bearing manifests (release_main / still-external deps) lose the dasImgui line. Consequence handled:pages.yml'sdas_install &&gates had to go too (cmd_install_allerrors on a dep-less manifest); the wasm flow needs no install at all now. Run-proofs on all touched examples.dasllama.html: bars mode = tables mode
Bars rows now carry the same click-to-expand run receipt and the ✱ note tooltip the table rows have (one shared receipt renderer). Verified live: 65 expandable rows, receipts toggle, noted row shows its tooltip.
Not in this PR
www.daslang.ioneeds a registrar DNS change (www CNAME gaijinentertainment.github.io.) — currently CNAMEd to the apex, so GitHub can't provision its cert; likely the substance behind the GSC "page with redirect" report.🤖 Generated with Claude Code
https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC