Queue ImageData load through IAsyncWorkExecutor so newTextureFromFile returns a stub immediately; GPU upload still uses the existing immediate path on first use. Skip a second ImGui atlas rebuild on ui.setScale so CJK glyphs are not duplicated during galgame startup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Bring the PR up to date with current dev (65 commits). Resolved the Run.cpp
conflict by taking dev's version: dev already fixed the scriptError handling
(simplified to 'if (report.empty())'), so the earlier profiler drive-by fixes
for it are obsolete. Profiler feature files are unchanged.
MSVC /W4 /WX flags C4189 'scriptError: local variable is initialized but not
referenced' for the dynamic_cast local in Run.cpp's error path (a known
false-positive on the && short-circuit). Inline the cast in the condition so no
named variable exists; Windows build was failing on this warning-as-error.
Drive-by fix for a pre-existing dev regression (PR #252): Run.cpp's catch block
uses scriptError->reported() but the declaration was removed, so the Linux/
Windows/macOS builds fail with 'scriptError was not declared in this scope'.
Re-add the dynamic_cast declaration to unblock CI.
Runtime error-handler sink: wire Runtime::setErrorHandler (previously dead)
into DevTool via a new attach(Runtime&) overload, so compile/reflect/unload
errors reach the slicer/report without double-reporting uncaught script
errors. Run.cpp and the MCP host use the Runtime overload.
State-driven bug reproduction: add eve::dev::ScenarioRecorder (baseline
snapshot + per-frame input/event stream). event::Event gains a poll-observer
hook; recording captures each consumed message per frame and persists
{baseline, frames, errorReport, errorSite} to a JSON scenario. Replay
restores the baseline and re-injects the recorded events to reproduce.
Exposed as eve.dev.scenario* and driven per-frame from load.nut.
Tests: test/runtime_error_sink.cpp, test/scenario_recorder.cpp (deterministic
reproduction verified); devtools + event suites stay green.