Repository navigation
tests: main's red bake and ub checks skip where their tool can't run; the ub fixture builds on Windows - #1939
Merged
Merged
Conversation
…nd the ub fixture builds on Windows - test_bake_mimo, test_bake_skeleton: the compiler check includes its C++23 mode (bake_mimo.cxx_std raised after the skip, on ubuntu-24.04's clang++: "no C++23 mode"), so a compiler without one skips instead of failing. - test_bake_ds: the enumerator's zstd is the system libzstd through ctypes; where it cannot load (Windows: no libzstd.so.1, no zstd.dll on the runners) the check skips. - test_ub_word_index: -D_CRT_SECURE_NO_WARNINGS for the fixture's getenv (the Windows CRT's deprecation, an error under -Werror). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
|
I finished the underlying #1931 fixes locally: Arkex-ai@4e9ac9e . Full Windows: 321 passed / 3 failed / 21 skipped versus clean main 319 / 4 / 21; DS, Mimo and skeleton actually execute and pass. Linux Clang 18 integration passes too. The fixes use the existing pinned zstandard dependency and a constexpr probe matching the real assertion failure path. Once that lands these bake gates can execute instead of skipping on the runners. I am aligning a concurrent reader fallback with #1872 before opening the focused PR. Exact-head fork CIs are running: https://github.com/Arkex-ai/Hookshot/actions/runs/42905082651 . |
Contributor
hckrman101
pushed a commit
that referenced
this pull request
Nov 11, 2026
…1911) Clamping a short frame before calculating rounding carry loses its timing debt, allowing alternating short and long frames to advance game time too quickly. This preserves short-frame debt, bounds its maximum size, and discards it while the high-FPS frame-time hook already supplies elapsed time. ### Before / after: default settings Each case replays 6,000 intervals through upstream's previous arithmetic and the new source-extracted quantizer, with a 60 FPS nominal cap and the **default five-frame smoothing window**: | Frame-time sequence | Elapsed time | Previous game time | New game time | Clock error: previous → new | |---|---:|---:|---:|---:| | Alternate 14 ms / 19.333333 ms | 100.000 s | 101.723 s | 100.000 s | +1.723% → <0.001% | | Repeat 30 / 90 / 90 / 90 FPS intervals | 100.000 s | 105.021 s | 100.027 s | +5.021% → +0.027% | With `HOS_REALTIME_WINDOW=1`, the same cases change from 107.692 → 100.000 game seconds and 125.000 → 100.017 game seconds. At a steady 47.3 FPS, both versions advance 126.849734 game seconds over 126.849894 elapsed seconds. These measure clock-accounting error, not rendering speed or all in-game systems. ### Bound the debt and preserve high-FPS behavior Addresses the [review on unbounded debt](#1911 (comment)): - Debt has a floor of **−4 nominal frames**. A long unpaced fast stretch cannot leave minutes of debt to repay later. - When the high-FPS time hook is active, each nominal-rate calculation starts with zero carry and saved carry is reset to zero. Actual game time continues to come from the existing frame-time hook. - The 1/15-second maximum step still drops excess long-stall time. - The input `ratio` is used by both the quantizer and log, rather than being computed only for logging. ### Regression coverage - The new tests fail on the previous PR version: the 120 FPS recovery check fails, and the standalone debt check exceeds the floor. - After **72,000 presents at 120 FPS**, the cap-120 fixture checks a return to the nominal rate of 40 within ten slower presents, while the time hook remains correct. - At a cap of 60, a long unpaced fast stretch must recover within 24 presents, including the default smoothing transition. This replaces the earlier assertion tied to an exact unbounded amount of debt. - Source-extracted checks cover one- and five-frame smoothing, both jitter patterns, steady fractional rates, bounded recovery, higher caps and long stalls. - The movie-frame-count checks from #1875 remain compatible and pass. ### Reproduce ```sh python -I -B tests/test_realtime_rate.py --cc gcc python -I -B tests/test_realtime_rate.py --cc clang python -I -B tests/test_frame_rate_cap_step.py python -I -B tests/test_movie_frame_count.py ``` ### Validation - Rebased onto upstream `fc375e9` to include the CI portability fixes in #1939. The clock patch is unchanged from reviewed commit `f4e115d` (identical `git range-diff`). - Focused regression checks pass with GCC and Clang. - Full Linux/Clang source suite on the rebased branch: **335 passed, 1 failed, 10 skipped**, using the .NET 8 SDK for the Windows-updater fixture. The sole failure remains the unchanged Wayland test fixture described below. - The sole failure is the unchanged Wayland test fixture's unused `sdl_ready` variable under Clang `-Werror`. The same failure was reproduced directly from untouched upstream `78e1112`. - Full command: `CXX=clang++ python -I -B tests/run_all.py --jobs 4`. Windows gameplay was not tested. Frame-count-based mechanics outside this real-time clock are outside this change's scope. The revised bounded-debt and high-FPS recovery behavior has not yet been tested in gameplay. The evidence above is source-level regression coverage, not a new in-game A/B. Co-authored-by: i-love-computers-dude <355064834+i-love-computers-dude@users.noreply.github.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.
Main's game-free checks have been red since #1707 and #1910.
test_bake_mimo,test_bake_skeletonSystemExit: /usr/bin/clang++: no C++23 modefrombake_mimo.cxx_std. It's raised after the tests' "no compiler" skip, so the tests error instead of skipping.bake_mimo.cxx_std(bake_mimo.cxx()), so a compiler without C++23 skips like a missing one.test_bake_dsCould not find module 'libzstd.so.1'. The enumerator loads the system libzstd through ctypes, and the runners have none.romenum.zstd()can't load (OSError).test_ub_word_index'getenv' is deprecated(the Windows CRT), an error under-Werror.-D_CRT_SECURE_NO_WARNINGSon the fixture's compile.Locally (Windows):
test_bake_dsprints its SKIP line.test_bake_skeleton: OK, with 3 skipped.test_bake_mimoskips.test_ub_word_index's fixture compiles with the flag. The getenv warning only shows with CI's MSVC-target clang, so CI checks that part.test_log_batch's "off" timing, under 200 ms against the default 250 ms, still flakes now and then on a loaded runner. It isn't changed here: there's no safe margin to widen.Bake tests from #1707 (blessedplummer), ub test from #1910 (i-love-computers-dude).
🤖 Generated with Claude Code