Repository navigation
Restore startup-command execution and unblock PR validation - #200
themuffinator wants to merge 4 commits into
Conversation
The script-smoke job ran its ~350 checks one after another, about 77 minutes on main, and every platform job then reran the same Python suite in sequence before its build (39 of the Linux job's 66 minutes). On the slower runners that left Windows ARM64 and the macOS Intel jobs cancelled at 150 minutes on main, and pull-request jobs, with 90-minute limits, cancelled regardless of the change. Each check is its own process that writes only to fresh temporary directories, so they can overlap: - openq4_validate.py runs its Python checks concurrently, as many as the machine has CPUs. --python-jobs N or OPENQ4_PYTHON_TEST_JOBS change that and --python-jobs 1 restores sequential runs. Output is still printed in list order, one section per check, with each check's duration. - tools/validation/run_parallel_commands.py does the same for a list of commands on standard input; both script-smoke steps feed their unchanged check list through it. - validation_hardening.py covers the parallel path's failure aggregation as well as the sequential one. On a 16-thread Linux host the validator's 350 checks took 2041 s in sequence and 311 s in parallel with the same results; the whole rewritten smoke step took 343 s. The only failures, identical either way, are host-toolchain ones (newer clang/libstdc++), not parallelism. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
idCmdArgs::argv points into the object's own tokenized buffer, which operator= re-points. Since f15a41f, idList::Append copies its argument into a temporary before growing the list, and idCmdArgs had no copy constructor: the implicit member-wise copy left argv aimed at the caller's buffer, and operator= then computed each argument's offset from two unrelated buffers. The startup queue is an idList<idCmdArgs> growing every 16 entries, so the 17th, 33rd, ... "+" command lost its text and was silently skipped. In CI that left the dedicated-server smokes waiting for a "+quit" that never ran (Linux, macOS and Windows), dropped renderer self-tests from the startup matrix (RenderGraphResource, ModernVisibility and the Vulkan render-target set), and long client command lines lost commands such as "+map". The copy constructor now goes through operator=. cmd_args_copy.py compiles the production idCmdArgs and idList, copies a command and queues 40 through several growths, and checks each one reads back intact; it fails without this change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 05de67cb8c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| .tmp/validation/push-builddir/game-regression-logs | ||
| .tmp/validation/push-builddir/meson-logs |
There was a problem hiding this comment.
Upload ARM64 logs from the push build directory
In the windows-arm64-build job, the preceding command runs openq4_validate.py push, whose profile uses builddir; Meson therefore writes the regression output to builddir/game-regression-logs and builddir/meson-logs (the former is configured in meson.build). These .tmp/validation/push-builddir/... paths are never produced, and if-no-files-found: warn lets the upload step succeed without retaining the diagnostics this change is intended to preserve when ARM64 validation fails.
Useful? React with 👍 / 👎.
Several checks create their temporary directories under the repository's .tmp without creating it first (async_session_command_contract.py among seven). Run in sequence, an earlier check had always created it; in parallel any check can start first, and on a fresh checkout the session command contract failed with FileNotFoundError on .tmp/session-command-* (themuffinator#200's Linux push verification). Both parallel entry points, openq4_validate.py and run_parallel_commands.py, now create .tmp before launching anything. validation_hardening.py checks that the runner does so on a fresh root. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the diagnostics. They pin down the three remaining failures here:
Also, |
|
Closing this integration branch, because both halves now have their own route to
This branch's remaining pieces will go onto |
Startup queues lost the command at each capacity growth (the 17th, 33rd, and later
+commands), which could silently drop a map launch or the shutdown command used by CI. This integrates the reviewedidCmdArgscopy constructor from #197 and the parallel validation runner from #191, preserving their original commits and contributor credit.Independent checks run concurrently with ordered output and complete failure aggregation. Failed native game checks now print their compiler/runtime diagnostics; both Windows ARM64 workflows retain their regression logs even when validation fails. The sanitizer job has 150 minutes so tests and staging can follow its long build. No checks are removed or disabled.
The setup guide also records the reporter-confirmed Mac Source Ports Extractor route for GOG installers. The existing roadmap reconciles the open reports, confirmed closures, and the separate macOS language-persistence issue #199.
Validation at
05de67cb8c92c62ff9db75125b56796ca4b9cbeccbe967f2loses queued commands 17 and 33; Give idCmdArgs a copy constructor so queued startup commands survive #197 preserves all 40 queued commands and direct copies..installstaging passed after preparing the fresh worktree's missing OpenAL dependency with the repository script.game/hangar1, and OpenGL MPmp/q4dm1with explicit auto-join. All used hidden 960×540 windowed rendering, disabled input, engine-written screenshots, and clean exit. Captures were inspected; the MP capture shows a joined player in warmup.git diff --checkpassed.These are startup/gameplay smokes, not full campaign or rendering qualification. The audio-disabled SP runs logged non-pre-cached sound warnings; the stock MP map logged missing AAS files, so bot navigation is not qualified. No reporter-specific save or Turbo lift recovery is claimed.
Merge gate
Fresh complete CI is still required. Older timeouts, skipped checks, and the unresolved Windows ARM64 native failures are not passes. #180, #189, #193 and #198 have current review dispositions recorded and remain queued for fresh checks after this foundation reaches main; #173 retains its requested changes.
Merge this PR with a merge commit, not a squash, to preserve the original #191/#197 history and let GitHub recognize those source PRs as integrated.