ci: macOS runs serial + unready fast-fail + record/isolated docs (#190 follow-ups)#192
Merged
Merged
Conversation
…190) Investigating #190 on the GitHub macOS runner showed it isn't a render throttle: the runner has no usable OpenGL surface, so a recording host's glfwCreateWindow fails with "Glfw Error 65545: NSGL: Failed to find a suitable pixel format" and init() panics ("can't create window"), rendering zero frames. That zero-frame output is what made content-time gating spin until the wall-clock fallback — the hang #190 describes. Recordings therefore can't run in CI on macOS at all (tutorial videos are made on Windows / real hardware). Document this in the integration-tests step, alongside why isolated mode is safe for the headless suite (every [test] is with_imgui_app — no GL window) and the rule that any future recording-bearing [test] must run in a separate, non-isolated step on a GL-capable runner. No behavior change — the 47 record_*.das are def-main scripts dastest already skips. Refs #190 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
141e094 to
d4aa1bf
Compare
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.
Summary
Follow-ups from the #190 investigation. Three things, all stemming from how the headless suite behaves on the weak GitHub macOS runner.
1. macOS runs the suite serially (no
--isolated-mode)The headless suite was occasionally erroring with "daslang-live not ready after 30s" (first seen as a
test_plot_getters_renderflake). Root cause: the GitHub macOS runner is only ~3 vCPU, but the suite runs--isolated-mode-threads 4— 4 paralleldaslang-livehosts starve each other so hard that a host's/statushealth check takes ~10s to answer, racing the client's 10s per-request timeout.wait_until_readynever registers a success, burns its 30s budget, and the test errors before its body runs. It's not test-specific and not a logic bug — just CPU starvation.Fix: macOS opts out of isolated mode (serial, one host at a time → no contention). ubuntu keeps isolated-4. The macOS sweep timeout is bumped to 1800s since serial is slower. Verified locally: full suite serial headless = 169/169 (198s).
2. Unready path fails fast (no 120s dead-wait)
The failure above was reported at 120s, not 30s:
with_imgui_app's unready branch read the child to EOF but never told it to quit, so it rode to the 120s popen watchdog before surfacing the (already-decided-at-30s) "not ready" panic. Now it posts/shutdownfirst, so the host exits once it drains and the failure surfaces promptly. The 120s cap stays as the outer safety net (not lowered, so genuinely-slow test bodies aren't killed).3. Docs: recordings can't run in macOS CI (no GL)
From the same investigation (the original #190 framing): the GitHub macOS runner has no usable OpenGL surface — a windowed recording host fails
glfwCreateWindowwithGlfw Error 65545: NSGL: Failed to find a suitable pixel format, renders zero frames, and that zero-frame output (not a render throttle) is what made content-time gating spin. Documented intests.yml, alongside why isolated mode is correctness-safe (every[test]iswith_imgui_app— headless, no GL window) and the rule that any future recording-bearing[test]must run in a separate, non-isolated step on a GL-capable runner.Related
glfwSwapInterval(0)+ GL-backend log. Useful on real Macs; doesn't affect the CI case (no window).Rebased on master so #191 stays intact.
Refs #190
🤖 Generated with Claude Code