Repository navigation
Conversation
Keep the menu requests, the headless display loop and the POSIX main-loop entry together. Shader preparation keeps its worker-completion path. Extend the startup fixture with headless Restart and Quit while retaining window sizing, failure diagnostics and preparation checks. Assisted-by: Claude Opus 5.5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assisted-by: GPT-6 Astra Co-Authored-By: GPT-6 Astra <noreply@openai.com>
Rebase Nicholas Gower’s pull request NotRexed#1560 for the restart-in-place dependency. Keep the existing hos_hid_tap implementation, current menu rows and option handlers. The option remains off by default. Co-Authored-By: Nicholas Gower <nicholasgower01@gmail.com> Assisted-by: GPT-6 Astra Co-Authored-By: GPT-6 Astra <noreply@openai.com>
Keep the existing restart-in-place state machine on the current menu. Ask the game for its autosave before relaunching, pass a one-use continuation note and use the title-loading dependency to return to that save. Cancelling stops the pending restart. Adapt its status cell to the shared row renderer and leave compact mode before showing the save wait. Assisted-by: Claude Opus 5.5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assisted-by: GPT-6 Astra Co-Authored-By: GPT-6 Astra <noreply@openai.com>
The extracted OpenFile now calls the restart observer on successful writes. Supply a recording observer, keep every existing virtual-core assertion, and check successful, refused and failed writes without changing production code. Assisted-by: GPT-6 Astra Co-Authored-By: GPT-6 Astra <noreply@openai.com>
Record the tested build, menu setting change, inspected pictures and zero kernel driver lines. Keep the startup virtual-core escapes and shared-load limitation visible; no performance or window-placement claim. Assisted-by: GPT-6 Astra Co-Authored-By: GPT-6 Astra <noreply@openai.com>
Record the two authorized headless cases on the unchanged production build. Cancellation leaves the original process running; the saved restart returns to the same logged position. Keep the known kernel mapping-refusal line and the shared-load limits visible instead of claiming an all-zero kernel result. Assisted-by: GPT-6 Astra Co-Authored-By: GPT-6 Astra <noreply@openai.com>
|
Rebased |
14a058b to
ff3f413
Compare
Draft until #1560 lands: this carries #1560's commit (co-authored by its author) so that it can be read and tested as a whole; when #1560 merges I drop that commit and rebase.
What this is for: applying a restart-only setting should not mean returning to the title and manually loading an older save. With Restart in place on, Restart asks the game to autosave, relaunches and loads that save. What is measured: game-free checks on this branch based on main
6ff87f59, with GCC 16.2.1 and Clang 23.1.3, and three headless RTX 4090 cases: the new output size takes effect after relaunch, cancellation keeps the original process running, and a saved restart returns to the same logged position in Kokiri Forest. The save-run interval contains one known kernel mapping-refusal line, not an all-zero kernel result. Not measured: Windows runtime, AMD, Steam Deck, physical input, monitor restoration or performance.This uses the title-loading work in #1560, credited to Nicholas Gower in its separate dependency commit. That pull request is still open.
Problem
host/hos_relaunch.c, but do not ask the game for a fresh save or resume it.main()skippedhos_display_loop()without a window. Changing that condition alone is not enough: main's no-SDL loop only sleeps and never reads the queued Restart/Quit requests.What changed
hos_hid_tapis kept, not duplicated.host/oot_restart.chands the relaunch path a one-use environment note. The restarted game accepts it only while its slot and file time still match the newest save. It then uses the title-loading path regardless of the Skip title screen row. Physical and control-client input is held out of that automatic title passage, not ordinary launches with Skip title screen alone.How to try it
Open the Insert menu, change a setting marked as requiring a restart, then use Gameplay → Restart and confirm it, or choose Restart now when closing the menu. With Restart in place on, allow the autosave to finish. If the game refuses one, the menu asks before proceeding to the title. Esc cancels the pending restart. Turning Restart in place off keeps the ordinary title-screen restart.
Game-free checks
Production head
2a3c6f5con6ff87f59; test-only fixture repair7f924403. Arch Linux, kernel7.2.15-1-omarchy. Complete runs usedtests/run_all.py --strict --jobs 8, serially through the idle/core-dump wrapper. The Clang run also mapped inherited literal GCC fixture commands to Clang; tests with other explicit tool requirements retained them.The pushed head
14a058b1has the same production tree as the tested build; the later commits change the file-open fixture and record the three runs.Both full suites pass the restart-in-place, skip-title, startup, background-input, menu restart/slots/keys/tuning and option-ID checks. The new feature tests fail on main's missing Gameplay rows. The compiled startup fixture fails main's headless idle, Restart and Quit cases; its other ten cases pass.
One failure was caused by this change: the extracted OpenFile fixture lacked the new restart observer. The test-only repair adds a recording observer, keeps every existing core-ownership assertion and checks successful, refused and failed writes. The repaired check passes with both compilers. Against main, it fails at
a successful write tells restart in place its guest path once. Production code did not change after the build.The remaining failure sets reproduce on byte-identical main sources:
test_depth_sample_types.pyandtest_unsigned_image_types.pyreject a static local in a constexpr function under C++20.test_vram_budget_row.pyrejects unusedkVramMinimumOnlyunder-Werror.test_env_on.pyrejects main's set-means-onHOS_FPS_LOGread.These unrelated fixes are not included. The raw full suites are not relabelled as green after the fixture repair. No core dumps were found.
Every test/fixture path was compared with main and the pre-rebase branch by Git blob. Only seven files differ from main. Their guards and assertions were compared separately: no check is missing. The headless worker-wait assertion now checks entry into the request loop; the old Ultrawide row assertion follows main's Aspect ratio rename. The restart-in-place and skip-title tests themselves are unchanged from the pre-rebase branch.
In the game
Arch Linux, kernel
7.2.15-1-omarchy, RTX 4090, NVIDIA615.78.08, i9-13900K; production head2a3c6f5con6ff87f59. Headless, stock input/menu scripts, 1280x720 captures, ordinary shared GPU queue. The build reused a completed matching lift after asserting the lift inputs and HLE set; it is not a mixed host/renderer build.execve)execve)All three ran once on 2026-11-11 and ended at their planned wall limits (exit 124), with zero fatal/crash/device-loss counts. The title case's scheduler escapes occurred during its first startup. These shared-load runs are not a performance or general stability comparison.
The title case's log, in order:
Panel 1 shows 1920x1080 with the restart-required marker; panel 2 the Gameplay/Restart confirmation; panel 3 the replacement image at the title with Continue/New Game. The new output size is established by the log, not by the scaled capture.
Cancellation: the log says
restart: the game saved a moment ago and takes no autosave for another 1357 updates: waiting, thenrestart: cancelled 2997 ms after Restart. There is one startup banner and no restart-close line. Its only startup output-size line remains 2048x1152. The inspected picture after cancellation still marks the selected 1920x1080 as requiring a restart, and the final picture shows play continuing.Save loaded: the game took its autosave request, wrote
slot_02/progress.savand reportedrestart: the game saved slot_02 10021 ms after Restart: restarting to continue there. The replacement logs 1920x1080, accepts the continuation note for that slot and logsskip title: loaded, the player is running. It returns to Kokiri Forest, beside the mossy rock near Link's house, 52.8 s after Restart, with 0.00 m displacement in the rounded position log. The camera view differs: this is a save/load, not restoration of every process state.Kernel exception: title and cancellation have no NVRM line. The save-run interval contains one
NVRM: memMap_IMPL: CPU mapping not supported for addressSpace: 0x1, the known mapping refusal, and no Xid or kmemsysDoCacheOp line. Both game images log that dma-buf imports are disabled on NVIDIA; the global kernel line cannot be attributed to a process from this evidence. My check for zero kernel lines therefore fails for that run and is reported as failed; the three functional checks pass. It was not rerun.Not tested
Windows runtime, AMD and Steam Deck; physical controllers/keyboard/mouse; a moved window returning to the same monitor; co-op reconnection; long sessions; corrupt saves; other areas; Restart in place off in a current-build game run. No frame-rate or stutter improvement is claimed. The headless harness cannot establish window placement.
Risks
execve, so the replacement image keeps the PID. Windows uses a new process and its inherited environment block; that runtime path was not exercised here.Overlaps
The open-head scan and conflict hunks were read. No combined game run with those branches is claimed.
Questions for you
Can #1560 land first so its dependency commit can be dropped from this branch? The headless menu repair is also isolated as its own commit.
Assisted-by: GPT-6 Astra
Co-Authored-By: GPT-6 Astra noreply@openai.com