dasImgui merges into the main repository - #3592
Merged
Merged
Conversation
Flat import of the dasImgui module tree into modules/dasImgui/ -- full history stays in the archived borisbat/dasImgui repository. Excluded from the import: the old repo's CI workflows and git hooks (superseded by main-repo CI), plans/, the 54 tutorial MP4s (moving to a docs-assets GitHub release), and the dormant C++ Vulkan backend sources (superseded by the pure-das vulkan/vulkan_imgui_driver in dasVulkan). Drops the .gitignore modules/dasImgui/ exclusion: the 2026-05-12 master break it recorded was the daspkg-standalone flavor colliding with the modules glob; a git-tracked copy carries no .daspkg_standalone marker and is meant to be built in-tree. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
… derived gate, v1 imgui_boost re-registered The module gate now also drops dasImgui when a superbuild disables dasGlfw or dasClipboard (the dasOPENAI-off-dasHV pattern), covering the GLFW-less lanes (doc, eastl, gcc, cpp_mcp). Superbuild stays static-only per the module's own dllexport-matrix rationale (dasVulkan precedent). Legacy v1 daslib/imgui_boost.das compiles fine standalone (probe-verified) -- re-registered in .das_module + ADD_MODULE_DAS; the 'intentionally non-compileable' comment was stale. ci_only_das + web embed + install comments updated for the in-tree reality. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…imgui opt-in 151 test_*.das + 54 record_* drivers + smoke scripts move from the module tree to tests/dasImgui. Test-side app paths (modules/dasImgui/examples/...) were already root-relative and imgui_playwright resolves them against the module's own runtime location, so no .das changes -- only the two smoke scripts' script-dir depths and the rerecord/README prose. The tests/.das_test gate skips the folder unless the runner passes --imgui (clargs ignores unknown flags, so dastest tolerates it); per-PR --test tests/ sweeps never spawn the 151 daslang-live subprocesses. md4c gets file-scoped MSVC warning suppressions (C4201/4701/4702/4703) -- the superbuild's /WX turned them fatal; sqlite3.c precedent. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
The default daslang/daslang-live host loads modules dynamically, so the superbuild now also builds the dasModuleImgui/imguiApp/imguiAppHeadless .shared_module twins (mirroring the standalone desktop targets on in-tree CMake targets; no EXTERN_GLFW_TYPE_FACTORY -- each DLL is its own link unit). Verified end-to-end: feature app compiles + runs headless in-tree, and tests/dasImgui/test_snapshot.das PASSes through dastest -> daslang-live spawn -> HTTP playwright (4.9s). nightly_imgui.yml: cron 03:00 UTC + workflow_dispatch (on-demand), ubuntu isolated-4 / macos serial, headless, the three permanent excludes; windows off (0xC0000409 + libhv 16-POST, recipe archived with old repo). Verified the tests/.das_test gate: --test tests/ sweep skips the folder (0 mentions), direct targeting runs it. extended_checks: daspkg-install coupling gate removed (module builds in-tree in the lane); bind_imgui.das freshness check re-homed to the mingw nightly worker beside bind_clangbind (cbind lives there). fatman/wasmboy: dasImgui clone dropped, dependents still cloned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
Drop the dasImgui clone and keep the rm -rf cleanup off the now-tracked module. The wasm64 release flow keeps working through the in-tree copy: example manifests still declare require_package(dasImgui) so release wasm stages its archives; daspkg resolves the dep against modules/dasImgui (no clone). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
Content moves: 57 tutorial RSTs -> doc/source/reference/tutorials/imgui/
(hooked into tutorials.rst); stdlib sections -> sec_imgui{,_boost,_widgets,
_live,_testing}.rst + imgui_external_types + imgui_internal_families under
doc/source/stdlib/ (new umbrella sec_imgui.rst in the numbered index); 10
handmade module pages -> stdlib/handmade/; 104 icon PNGs -> _static/icons/;
icon_role.py + tutorial_video.py become main conf.py extensions. The
module's doc/ site scaffolding (conf.py, index, theme copies, sidebar.js
dup) is deleted -- the old borisbat.github.io/dasImgui site retires.
Cross-refs rewritten for the new depths (download targets 3-up -> 5-up via
modules/dasImgui/..., tests/integration -> tests/dasImgui, stdlib refs
absolute). imgui2rst retargets its output to <das_root>/doc/source/stdlib/
generated/ beside das2rst's pages, so the existing Uncategorized/stub/
untracked gates cover it.
Tutorial MP4s (54, 51 MB) leave git: they live on the rolling `docs-assets`
GitHub release (created; all 54 uploaded). utils/docs_assets/fetch.{sh,ps1}
stages them into doc/source/_static/tutorials/ (now gitignored) before
sphinx; the ported `.. video::` directive is depth-aware and fails a -W
build on any unstaged recording. Recordings from with_recording_app now
land in the main doc tree's _static.
doc.yml: paths += modules/dasImgui/**, host build flips DAS_GLFW_DISABLED
=OFF (+ GL/X11 apt deps) so imgui2rst can load the module; new imgui2rst +
stage steps. pages.yml: same two steps + the imgui trio and clipboard
shared modules join the wasm cache list. external_modules/dasimgui.rst stub
deleted; sibling stubs re-point at the in-tree section.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
A tracked in-tree module (modules/<name> in the daslang tree, e.g. dasImgui) needs no install anywhere -- the compiled host carries it. Both the dependency route (install_dependencies) and the explicit cmd_install route now recognize this and no-op with a notice instead of cloning a project-local shadow copy. Discriminated from daspkg GLOBAL installs at the same path via the global lock file (global installs are recorded there; tracked modules never are), so the documented local-shadows-global behavior for real packages is unchanged; --force remains the escape hatch. Probe-verified: explicit 'install dasImgui' and the furier example's require_package(dasImgui) both no-op cleanly. New regression test rides dasGlfw (always in-tree, never in the lock). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…mgui gate; jobque-timeline dep to bare name sphinx -W now builds the merged tree clean (verified locally: das2rst + imgui2rst + 57 tutorials + video directive + icon role, zero warnings). preflight grows a full-tier 'imgui' gate -- builds daslang-live + the imgui trio, runs the tests/dasImgui playwright suite headless; nightly CI is its only lane, so this local mirror is the only pre-push gate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…e imported tree
Skills: the module's four skills move to skills/imgui_{application,
migration,playwright,recording}.md (content reworked for the in-tree
world: tests/dasImgui paths, repo-root commands, docs-assets MP4 flow)
+ four CLAUDE.md table rows; imgui_lint's IMGUI001/002 messages point at
the new migration skill. Stale external-repo claims fixed across
build_and_debug, external_module_debugging (worked example ->
dasImguiNodeEditor), abi_break_sweep, make_pr, preflight (+
nightly_imgui section and CI-table row), daspkg (global example ->
dasVulkan + the in-tree note), imgui_ui_debugging, dynamic_modules,
wsl_ci_repro check, install/CLAUDE.md.
Touchpoints: site daspkg animation -> dasVulkan, dasImgui card -> in-tree
docs; ~10 example READMEs drop the dasImgui install step (externals keep
theirs); daspkg.rst / external_modules.rst / sfx_lab RST updated; module
README + CLAUDE.md rewritten for in-tree (19KB -> 11KB); superseded
utils/rerecord.ps1 removed; prepare_recording's default asset root
follows recordings to get_das_root().
Lint: the imported tree now lints clean against current main rules —
465 changed .das, 0 issues. Real fixes: 61 var->let (LINT003), 65
redundant-unsafe drops (STYLE024), 52 string-clone corrections (LINT016),
7 unused requires (STYLE030), assorted PERF/LINT/STYLE one-liners. The
imgui_demo C++-port files opt out of function-length/complexity via the
sanctioned per-module options; pre-existing long functions in library/
test/utils files carry targeted nolints (no refactors in a merge PR).
jobque-timeline's dep drops the git-URL form for the bare index name.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
The two-dir_name-hops root belonged to the external-repo layout; from tests/dasImgui it walked to the repo root and missed. Full suite now 213/213 locally (headless, isolated x4, the three permanent excludes). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
Ninja's build graph only carries a rule for the BUILD_BYPRODUCTS path (libglfw.so.3.4 / libglfw.3.4.dylib / glfw3dll.lib), not the unversioned symlinks install lays down beside it -- linking libglfw.so broke the doc lane at generation time. DAS_GLFW_DYN_PATH is set in root scope by dasGlfw's CMakeLists (same rail as GLFW_INCLUDE_DIR), so one variable covers all four toolchains. MSVC re-verified locally (same import lib as before). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…on; pdflatex chars; ci-das tool coverage Tests move from tests/dasImgui into the module (per review): the per-PR `--test tests/` sweeps never enter modules/, so the tests/.das_test gate clause is deleted outright — nightly_imgui.yml and local runs target the folder directly. 41 reference sites swept; the smoke/rerecord scripts' script-dir depths go 2-up -> 3-up. Verified from the new location: test_snapshot end-to-end PASS, module_isolation PASS, preflight format+lint green, sphinx -W zero warnings. modules/dasImgui/CODEREVIEW.md establishes folder-scoped review rules (new functionality ships with tests; tests under modules/dasImgui/tests, never tests/dasImgui; run the suite before a PR; tests stay multiplatform). skills/make_pr.md gains step 0a: after the master rebase, walk the changed set's parent dirs, collect every CODEREVIEW.md, and list those rules as binding in the review. doc lane PDF fix: pdflatex died on U+25BC from a tutorial literalinclude; audited the full LaTeX-flowing set (tutorial sources + imgui tutorial RSTs) — exactly four chars, three not yet declared. Added 2022/2192/25BC to conf.py's existing \DeclareUnicodeCharacter ladder; the heavy Unicode demos (unicode_fonts, markdown_viewer) never flow into LaTeX. Per-PR compile coverage for imgui-consuming tools: extended_checks gains a "Compile CI-only das surface" step running preflight's ci-das gate (single source of truth with the local mirror); ci_only_das.txt adds utils/jobque-timeline/*.das + the dasHerd UI root (both compile clean against in-tree imgui, probe-verified; 26 files, 38s). The ~200 dasImgui examples are deliberately NOT swept per-PR — the nightly suite compiles and runs them as spawned apps. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…abysit.md: job-granular watcher rule CMakeCommon's ADD_DEFINITIONS(/W4, /arch:*) have always leaked into the RC language, and freetype's ftver.rc (FetchContent'd by dasImgui) is the first .rc the superbuild ever compiles -- only the Ninja windows cells leak (cmcldeps hands directory flags to rc.exe -> RC1106; the VS generator filters them, which is why local MSVC was green). A version resource in a static .lib is dead weight: strip the file instead of touching repo-wide flag plumbing. babysit.md makes the watcher anti-pattern explicit: never tick on workflow-granular 'gh run list' (fail-fast:false matrices stay in_progress around dead jobs); job-granular 'gh pr checks' + a jobs-json poll for detached workflow_dispatch runs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…t watcher note de-incidented New review-checklist item: a skill states the rule and the mechanism that makes it true, never the incident that taught it -- incidents age into noise and pin readers to a context they don't have. babysit.md's fresh watcher rule now complies with it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
clang-mingw rejects the implicit PROC/FARPROC -> void* conversions MSVC tolerates (gl3w.cpp compiles as C++; the module's first mingw exposure). reinterpret_cast at the two assignment sites; MSVC re-verified locally. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
The shipped skill gained pointers to the folded imgui_playwright/ imgui_application skills, which are repo-only by design -- the bundle smoke's reference gate rightly flagged them. repo-only markers per the gate's own escape hatch. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
…dir gap Parsing imgui.h under the mingw worker's libclang dies on 'float.h not found' -- the same documented gap that already parks bind_llvm there. TODO'd beside it; binding freshness stays a local-regen discipline as in the module's standalone era. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC
pull Bot
pushed a commit
to forksnd/daScript
that referenced
this pull request
Jul 31, 2026
The in-tree import (GaijinEntertainment#3592) was cut from borisbat/dasImgui@66a89de -- one commit before the tree-sitter span-path perf fix (21s -> 1s on ds_parser.cpp) and the kill-by-path sweep, which were committed locally but never pushed. Ported from the archived clone (.codex/archive/dasImgui-clone, 13 unpushed commits preserved): the perf fix onto text/imgui_text_tree_sitter.das (with nolint:STYLE038 re-applied per the merge sweep's convention), and the by-PATH kill wording onto skills/imgui_playwright.md + modules/dasImgui/CLAUDE.md where the fold had kept the bare name-kill. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
dasImgui merges into the main repository
dasImgui was the one external module every daslang UI tool kept pulling back in. This PR ends the split: the module moves in-tree, enabled by default the same way dasGLFW is, with its documentation merged into the main Sphinx tree and its integration tests running nightly. The old repository (borisbat/dasImgui) will be archived after this lands — full history stays there; this is a flat import at
borisbat/dasImgui@66a89de(PR #235 tip).The module (
modules/dasImgui/)plans/, the 54 tutorial MP4s (now release assets, see Docs), and the dormant C++ Vulkan backend sources (superseded by the pure-dasvulkan/vulkan_imgui_driverin dasVulkan — seeexamples/vulkan_imgui_cube).option(DAS_IMGUI_DISABLED ... OFF); the module gate also drops it whenDAS_GLFW_DISABLED=ONorDAS_CLIPBOARD_DISABLED=ON(the dasOPENAI-off-dasHV pattern), covering the GLFW-less lanes (doc/eastl/gcc/cpp_mcp).dasModuleImgui/imguiApp/imguiAppHeadless.shared_modules): the defaultdaslang/daslang-livehost is the dynamic flavor and loads modules via.das_module— static halves alone are invisible to it. The twins mirror the standalone desktop targets on in-tree CMake targets (noEXTERN_GLFW_TYPE_FACTORY;IMGUI_APIexports flow via import libs).daslib/imgui_boost.dasre-registered — it compiles fine standalone (probe-verified); the ".das_module non-compileable" comment was stale.v1.92.6-docking/ freetype / MD4C via hash-pinned FetchContent; gl3w + JetBrains Mono vendored.md4c.cgets file-scoped MSVC/wdsuppressions (the superbuild's/WXturned its warnings fatal;sqlite3.cprecedent)..gitignoredrops themodules/dasImgui/exclusion (the 2026-05-12 break it recorded was the daspkg-standalone flavor colliding with the glob; a tracked copy carries no.daspkg_standalone).Tests (
tests/dasImgui/, nightly-only)record_*drivers move from the module tree. Test-side app paths were already root-relative andimgui_playwrightresolves against the module's runtime location — zero.daschanges for the move.tests/.das_testgates the folder:--test tests/sweeps skip it unless--imguiis passed; direct--test tests/dasImguitargeting always runs (verified both ways).nightly_imgui.yml: cron 03:00 UTC +workflow_dispatch(on-demand runs, per review request), ubuntu isolated-4 / macOS serial, headless, the three permanent excludes; windows stays off (0xC0000409+ libhv 16-POST — recipe archived with the old repo).imguigate (--fulltier): nightly CI is the suite's only lane, so the local mirror is the only pre-push gate.CI lanes
extended_checks: thedaspkg install dasImguiexternals-coupling gate is gone (the module builds in-tree in the lane); the parkedbind_imgui.dasself-binder freshness check is re-homed to the mingw nightly worker besidebind_clangbind(cbind lives there).fatman/wasmboy/pages: stop cloning dasImgui; ImPlot + NodeEditor stay external clones.pages' wasm64 release flow keeps working through the in-tree copy (manifests keep declaringrequire_package("dasImgui")sorelease wasmstages its archives).build.yml(mingw + clang-cl + AOT sweeps) andnightly_imgui.ymlare dispatched on this branch; results tracked here.Docs (merged into the main tree)
doc/source/reference/tutorials/imgui/; stdlib GUI section (sec_imgui.rst+ 4 sub-sections + external types + the internal-families catalog); 10 handmade pages; 104 icon PNGs;icon_role+tutorial_videobecome main conf.py extensions. The module's own Sphinx site scaffolding is deleted; borisbat.github.io/dasImgui retires.imgui2rstoutputs beside das2rst's pages, so the existing Uncategorized/stub/untracked doc gates cover it.doc.ymlbuilds the host with GLFW+imgui ON (new GL/X11 apt deps) and runsimgui2rst+ the recordings-staging step.docs-assetsrelease;utils/docs_assets/fetch.{sh,ps1}stages them before sphinx; the.. video::directive is depth-aware and fails a-Wbuild on any unstaged recording. Re-record workflow ends withgh release upload docs-assets *.mp4 --clobber.sphinx-build -W= zero warnings.daspkg
require_package/install <name>— no-op with "part of this daslang tree — nothing to install". Discriminated from daspkg global installs via the global lock file, so local-shadows-global for real packages is unchanged;--forceremains the escape hatch. Covers the 9 example manifests +utils/jobque-timeline. Regression test included.dasImguileaves the package index after this merges (separate PR);dasImguiImplot/dasImguiNodeEditorstay external and resolve their dasImgui dep against the in-tree module.Sweeps
skills/imgui_{application,migration,playwright,recording}.md(+ CLAUDE.md rows); stale external-repo claims fixed acrossbuild_and_debug,external_module_debugging(worked example → dasImguiNodeEditor),abi_break_sweep,make_pr,preflight(+ nightly_imgui section),daspkg(global-install example → dasVulkan),imgui_ui_debugging,dynamic_modules,install/CLAUDE.md.daspkg installanimation → dasVulkan; dasImgui card → in-tree docs), ~10 example READMEs, daspkg/embedding RSTs, module README + CLAUDE.md rewritten for the in-tree world.imgui_demoC++-port files opt out of the length/complexity rules via the sanctioned per-module options; pre-existing long functions in touched utils files carry targeted nolints.Local validation
modules/dasImgui/examples/features/triggers.dascompiles + runs headless in-tree, no flags.tests/dasImgui/test_snapshot.dasend-to-end PASS through dastest → daslang-live spawn → HTTP playwright (4.9s). Full suite: 213/213 PASS locally (headless, isolated ×4, 284s, the three permanent excludes).ctest -L small: 80/80. daspkg suite: no new failures (3 pre-existing local-box failures unchanged). preflight format + lint gates green.-Wfull tree: zero warnings.Post-merge (tracked separately): withdraw dasImgui from the daspkg index, sweep dasImguiImplot/dasImguiNodeEditor CI (drop their second checkout), banner + archive borisbat/dasImgui.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NcrnLGE9AEh8EAND3xYCRC