test(mods): exercise the documented RomFS file contract #93

Merged
HumanBean merged 1 commit from mooki/Longshot:test/mods-romfs-contract into main 2026-11-14 21:30:50 +00:00
Member

Why

Mod authors need an example of the file route Longshot already supports, without mistaking co-op's internal hooks for a mod interface. This documents that route and runs its authored example through the real loader without a game dump. See #42.

Independent of pull requests 51 and 68. This is documentation and test coverage, not a new loader or mod format. It does not settle the later chest-table, bridge, catalog or native-module decisions.

What changed

  • docs/mods.md: the current RomFS contract, with source symbols, discovery depth, whole-relative-path precedence, disabling, restart requirements, resource-size/prompt interaction and limitations. A JSON block describes invented text files for a game-free example; it is test input, not a manifest read by Longshot.
  • tests/test_mods_size_table.py, documented_example_checks: materializes that exact documentation example in a temporary folder and runs the existing compiled host/mods.c / host/prompts.c fixture. Six fresh processes check explicit/default roots, nested discovery, full-path order, non-conflicting files, case/slash lookup, ignored ExeFS, disabled parents and fallback after disabling every file mod. Selected file contents are checked, not just log messages.
  • README.md, Mods: corrects “folder name” to the whole relative path, says to restart after changes, and links the author guide.
  • No runtime, renderer, build, save, network, ABI or third-party code changes. Existing table-merge and file-routing assertions remain. No extra compilation is added: the example reuses the existing fixture executable.

Flags and settings

No new switches, options, menu rows or command-line flags. These existing settings are documented and exercised, not changed:

Flag What it does Default now Recommendation Helps on Doesn't help on Untested on
HOS_MODS Existing; documented and tested only: Chooses the folder containing mods Unset: mods beside the executable Off by default: keep the existing opt-in override Separate mod collections Mod format validation or save isolation Native Windows filesystem behavior
HOS_FS_OVERLAY Existing; documented only: Test overlay can override a selected mod file Unset Off by default: testing only Existing filesystem tests Checking ordinary mod precedence; leave it unset Overlay behavior was not exercised by the new example

The existing test driver's --cc and --source options are unchanged. No new setting needs a switch-reference entry.

Measurements

Branch state: on main 5e072fc8c2adadba5ea610148be1c47800ba0cca; head 9ab5201053e4955d29f8a3cfd330fca187ed6934; whole game-free suite on this head: 542 passed, 3 failed, 16 skipped (main 5e072fc8c2adadba5ea610148be1c47800ba0cca: 542 passed, 3 failed, 16 skipped). The 3 failing tests fail on main the same way: tests/test_framegen_resources.py, tests/test_module_ids.py, tests/test_pad_layout.py. The branch was carried onto this main by hand; what differs from a mechanical carry is named in the comment posted with this update.

main: 5eaaf7fb9c (2026-11-12)
this PR: test/mods-romfs-contract @ 36539b7fa0797ea9de4a26071e13ee8de0f0a5d7
Hardware: Linux 7.2.15-1-omarchy, x86_64; Python 3.12.16, GCC 16.2.1; the same PC for every run. No GPU used.
Scene: invented text files and resource tables, not a running game.
Method: the expanded tests/test_mods_size_table.py in main / this PR / main / this PR order, two runs against each source. Wall time includes fixture compilation and all test subprocesses, measured from process start to exit with a monotonic clock. Counts below are named test-driver results, not an invented count of individual assertions. Every run also prints six successful documented-example starts, 12 file/table-routing cases and seven malformed-table refusals. No case was skipped.

The existing --source option selects the pinned main or PR host source. The expanded driver, documentation example, POSIX fixture support and dependencies are the same PR versions for both arms. The exercised loader and prompt source files are byte-identical between these commits: passing both ways is expected for an existing-behavior contract, not evidence of a fixed runtime bug. The wall times describe this source check under shared machine load; they do not establish a game-speed improvement or regression.

How to reproduce: from this PR's checkout, run python -I -B tests/test_mods_size_table.py --cc gcc --source with the host directory of a checkout at the stated main commit, then this PR's host directory, then repeat in that order. Record each process's exit status and elapsed wall time; take the median of each source's two runs. The complete suite command remains python -I -B tests/run_all.py --jobs 6 --strict, but no whole suite was rerun for this measurement.

main @ 5eaaf7fb9 this PR @ 36539b7fa
Named driver passed (run 1 / run 2) 1 / 1 1 / 1
Named driver failed (run 1 / run 2) 0 / 0 0 / 0
Named driver skipped (run 1 / run 2) 0 / 0 0 / 0
Wall time (run 1 / run 2) 1.522517 / 1.509231 s 1.578606 / 1.455857 s
Median wall time 1.515874 s 1.517231 s
Documented-example starts passed (run 1 / run 2) 6 / 6 6 / 6
Existing file/table-routing cases passed (run 1 / run 2) 12 / 12 12 / 12

Recorded process results, in execution order:

1. main @ 5eaaf7fb9, run 1: 1 named driver passed, 0 failed, 0 skipped; wall 1.522517 s
2. this PR @ 36539b7fa, run 1: 1 named driver passed, 0 failed, 0 skipped; wall 1.578606 s
3. main @ 5eaaf7fb9, run 2: 1 named driver passed, 0 failed, 0 skipped; wall 1.509231 s
4. this PR @ 36539b7fa, run 2: 1 named driver passed, 0 failed, 0 skipped; wall 1.455857 s
median main: 1.515874 s
median this PR: 1.517231 s

All four runs print:

ok: merge_restbl: the larger entry of each file, entries of one side kept, sorted; 7 unmergeable tables refused
ok: documented RomFS example: HOS_MODS root, discovery, full-path order and lookup
ok: documented RomFS example: default root beside the executable
ok: documented RomFS example: disabled parent hides nested mods after restart
ok: documented RomFS example: disabled winner reveals the earlier mod after restart
ok: documented RomFS example: all file mods disabled: no replacements
ok: documented RomFS example: a single mod is not the collection root
ok: 12 cases served as they should: no mod, a mod with a table, two table versions in both open orders, one that grows a file without, two mods, a table that cannot be merged, no table of ours, a mod's own font, compressed and size-less frames

Earlier whole-suite evidence, retained at its actual commits rather than relabelled as the newer main:

main @ 77f605a25 this PR @ 36539b7fa
Whole game-free suite 509 passed, 0 failed, 19 skipped 509 passed, 0 failed, 19 skipped
Execution time, not a performance comparison 203 s 171 s
509 passed, 0 failed, 19 skipped in 203 s (linux, 6 at once)
509 passed, 0 failed, 19 skipped in 171 s (linux, 6 at once)

The updater reference-pack failure is not inherited here: main removed that updater test. These 19 full-suite skips remain explicit platform/device/dump requirements, not passes; they are separate from the zero skips in the four named-driver runs.

Testing

Tested: four interleaved Linux runs of the expanded tests/test_mods_size_table.py, main 5eaaf7fb9 / this PR 36539b7fa / main / this PR, with elapsed wall times and named-driver pass/fail counts above. All four pass with no skips, checking selected bytes from the exact documented example. The earlier whole game-free suite on 36539b7fa was 509 passed, 0 failed, 19 skipped; it was not rerun for these measurements. Existing source rules and table/prompt checks are retained; no C fixture source or compiler command changed.

Not tested: a game build or game run, a real Clawshot seed, progression, real controller prompts, native Windows execution, macOS filesystem behavior, or an unknown mod's safety. This driver already skips filesystem routing on Windows and macOS; a passing table-only run there would not prove the new example. No native-module, chest-table, checked-location, grant or Archipelago compatibility claim. No performance claim.

Needs other testers:

  • Windows: confirm the documented full-path precedence and disable/restart behavior with a locally generated mod and disposable copied saves, expecting the same selected replacement and the original file after all mods are disabled (test request T-EQ83)

Screenshots

Nothing on screen. The example uses invented paths the game never requests, so a screenshot would not prove the contract.

Risk and rollback

The risk is misleading documentation or a fixture expectation that drifts from the loader. The example is read from the guide itself and checked through the real loader; the guide separates established behavior from proposals and warns that file mods are not a sandbox. Reverting this commit removes only docs and test coverage. It changes no installed files, saves or runtime defaults.

Reviewer notes

Start with documented_example_checks and the example table in docs/mods.md; compare host/mods.c's find_mods, mod_cmp, hos_mods_init and hos_mods_romfs. The nested example deliberately makes a folder named 00-nested win over 02-override, demonstrating that the whole relative path is compared.

Pull request 51 is the shared menu text editor, not the earlier Mods-tab proposal. Pull request 68 builds core co-op on it; coop_on_event is not a native-module ABI. This branch needs neither head. They also edit the README, but not its Mods section; this change does not touch their code.

Maintainers still need to choose the chest-table versus bridge-first direction, progression/save/conflict ownership, community recipes versus an official catalog, trusted native modules versus companions, and co-op module-first versus core-first. This test-only slice does not choose for them.

No game proof is needed to establish this documentation/test change: production behavior is unchanged. Before claiming current Longshot/Clawshot compatibility, a separate proof should run a locally generated seed for up to five minutes with a copied save, check a known changed reward and controller prompts, then restart for one minute with the mod disabled and confirm the original route. That run has not been requested or performed here and would not prove the higher tiers.

Issues

See #42

Checklist

For everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description).
  • Rebased on current main.
  • python -I -B tests/run_all.py run and passing (any failure that also fails on main is named above).
  • Tested in the game, or what wasn't is named under Testing.
  • Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests).
  • Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. Named game-free test output and wall time; no game-speed claim.
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

If applicable

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • Flags noted, and the switch reference updated (docs/development.md, the README). Existing behavior only; no new switch-reference entry.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Docs updated.

New on this forge; not opened on GitHub.

Assisted-by: GPT-6 Astra
Co-Authored-By: GPT-6 Astra [email protected]

## Why Mod authors need an example of the file route Longshot already supports, without mistaking co-op's internal hooks for a mod interface. This documents that route and runs its authored example through the real loader without a game dump. See #42. **Independent of pull requests 51 and 68.** This is documentation and test coverage, not a new loader or mod format. It does not settle the later chest-table, bridge, catalog or native-module decisions. ## What changed - `docs/mods.md`: the current RomFS contract, with source symbols, discovery depth, whole-relative-path precedence, disabling, restart requirements, resource-size/prompt interaction and limitations. A JSON block describes invented text files for a game-free example; it is test input, **not** a manifest read by Longshot. - `tests/test_mods_size_table.py`, `documented_example_checks`: materializes that exact documentation example in a temporary folder and runs the existing compiled `host/mods.c` / `host/prompts.c` fixture. Six fresh processes check explicit/default roots, nested discovery, full-path order, non-conflicting files, case/slash lookup, ignored ExeFS, disabled parents and fallback after disabling every file mod. Selected file contents are checked, not just log messages. - `README.md`, Mods: corrects “folder name” to the whole relative path, says to restart after changes, and links the author guide. - No runtime, renderer, build, save, network, ABI or third-party code changes. Existing table-merge and file-routing assertions remain. No extra compilation is added: the example reuses the existing fixture executable. ## Flags and settings No new switches, options, menu rows or command-line flags. These existing settings are documented and exercised, not changed: | Flag | What it does | Default now | Recommendation | Helps on | Doesn't help on | Untested on | |---|---|---|---|---|---|---| | `HOS_MODS` | Existing; documented and tested only: Chooses the folder containing mods | Unset: `mods` beside the executable | Off by default: keep the existing opt-in override | Separate mod collections | Mod format validation or save isolation | Native Windows filesystem behavior | | `HOS_FS_OVERLAY` | Existing; documented only: Test overlay can override a selected mod file | Unset | Off by default: testing only | Existing filesystem tests | Checking ordinary mod precedence; leave it unset | Overlay behavior was not exercised by the new example | The existing test driver's `--cc` and `--source` options are unchanged. No new setting needs a switch-reference entry. ## Measurements <!-- branch-state --> Branch state: on main `5e072fc8c2adadba5ea610148be1c47800ba0cca`; head `9ab5201053e4955d29f8a3cfd330fca187ed6934`; whole game-free suite on this head: `542 passed, 3 failed, 16 skipped` (main `5e072fc8c2adadba5ea610148be1c47800ba0cca`: `542 passed, 3 failed, 16 skipped`). The 3 failing tests fail on main the same way: `tests/test_framegen_resources.py`, `tests/test_module_ids.py`, `tests/test_pad_layout.py`. The branch was carried onto this main by hand; what differs from a mechanical carry is named in the comment posted with this update. <!-- /branch-state --> main: 5eaaf7fb9c548782a3dfabcf89ad37363ee76b1e (2026-11-12) this PR: test/mods-romfs-contract @ 36539b7fa0797ea9de4a26071e13ee8de0f0a5d7 Hardware: Linux 7.2.15-1-omarchy, x86_64; Python 3.12.16, GCC 16.2.1; the same PC for every run. No GPU used. Scene: invented text files and resource tables, not a running game. Method: the expanded `tests/test_mods_size_table.py` in main / this PR / main / this PR order, two runs against each source. Wall time includes fixture compilation and all test subprocesses, measured from process start to exit with a monotonic clock. Counts below are **named test-driver results**, not an invented count of individual assertions. Every run also prints six successful documented-example starts, 12 file/table-routing cases and seven malformed-table refusals. No case was skipped. The existing `--source` option selects the pinned main or PR `host` source. The expanded driver, documentation example, POSIX fixture support and dependencies are the same PR versions for both arms. The exercised loader and prompt source files are byte-identical between these commits: passing both ways is expected for an existing-behavior contract, not evidence of a fixed runtime bug. The wall times describe this source check under shared machine load; they do not establish a game-speed improvement or regression. How to reproduce: from this PR's checkout, run `python -I -B tests/test_mods_size_table.py --cc gcc --source` with the `host` directory of a checkout at the stated main commit, then this PR's `host` directory, then repeat in that order. Record each process's exit status and elapsed wall time; take the median of each source's two runs. The complete suite command remains `python -I -B tests/run_all.py --jobs 6 --strict`, but no whole suite was rerun for this measurement. | | main @ 5eaaf7fb9 | this PR @ 36539b7fa | |---|---|---| | Named driver passed (run 1 / run 2) | 1 / 1 | 1 / 1 | | Named driver failed (run 1 / run 2) | 0 / 0 | 0 / 0 | | Named driver skipped (run 1 / run 2) | 0 / 0 | 0 / 0 | | Wall time (run 1 / run 2) | 1.522517 / 1.509231 s | 1.578606 / 1.455857 s | | Median wall time | 1.515874 s | 1.517231 s | | Documented-example starts passed (run 1 / run 2) | 6 / 6 | 6 / 6 | | Existing file/table-routing cases passed (run 1 / run 2) | 12 / 12 | 12 / 12 | Recorded process results, in execution order: ```text 1. main @ 5eaaf7fb9, run 1: 1 named driver passed, 0 failed, 0 skipped; wall 1.522517 s 2. this PR @ 36539b7fa, run 1: 1 named driver passed, 0 failed, 0 skipped; wall 1.578606 s 3. main @ 5eaaf7fb9, run 2: 1 named driver passed, 0 failed, 0 skipped; wall 1.509231 s 4. this PR @ 36539b7fa, run 2: 1 named driver passed, 0 failed, 0 skipped; wall 1.455857 s median main: 1.515874 s median this PR: 1.517231 s ``` All four runs print: ```text ok: merge_restbl: the larger entry of each file, entries of one side kept, sorted; 7 unmergeable tables refused ok: documented RomFS example: HOS_MODS root, discovery, full-path order and lookup ok: documented RomFS example: default root beside the executable ok: documented RomFS example: disabled parent hides nested mods after restart ok: documented RomFS example: disabled winner reveals the earlier mod after restart ok: documented RomFS example: all file mods disabled: no replacements ok: documented RomFS example: a single mod is not the collection root ok: 12 cases served as they should: no mod, a mod with a table, two table versions in both open orders, one that grows a file without, two mods, a table that cannot be merged, no table of ours, a mod's own font, compressed and size-less frames ``` Earlier whole-suite evidence, retained at its actual commits rather than relabelled as the newer main: | | main @ 77f605a25 | this PR @ 36539b7fa | |---|---|---| | Whole game-free suite | 509 passed, 0 failed, 19 skipped | 509 passed, 0 failed, 19 skipped | | Execution time, not a performance comparison | 203 s | 171 s | ```text 509 passed, 0 failed, 19 skipped in 203 s (linux, 6 at once) 509 passed, 0 failed, 19 skipped in 171 s (linux, 6 at once) ``` The updater reference-pack failure is not inherited here: main removed that updater test. These 19 full-suite skips remain explicit platform/device/dump requirements, not passes; they are separate from the zero skips in the four named-driver runs. ## Testing **Tested:** four interleaved Linux runs of the expanded `tests/test_mods_size_table.py`, main `5eaaf7fb9` / this PR `36539b7fa` / main / this PR, with elapsed wall times and named-driver pass/fail counts above. All four pass with no skips, checking selected bytes from the exact documented example. The earlier whole game-free suite on `36539b7fa` was 509 passed, 0 failed, 19 skipped; it was not rerun for these measurements. Existing source rules and table/prompt checks are retained; no C fixture source or compiler command changed. **Not tested:** a game build or game run, a real Clawshot seed, progression, real controller prompts, native Windows execution, macOS filesystem behavior, or an unknown mod's safety. This driver already skips filesystem routing on Windows and macOS; a passing table-only run there would not prove the new example. No native-module, chest-table, checked-location, grant or Archipelago compatibility claim. No performance claim. **Needs other testers:** - Windows: confirm the documented full-path precedence and disable/restart behavior with a locally generated mod and disposable copied saves, expecting the same selected replacement and the original file after all mods are disabled (test request T-EQ83) ## Screenshots Nothing on screen. The example uses invented paths the game never requests, so a screenshot would not prove the contract. ## Risk and rollback The risk is misleading documentation or a fixture expectation that drifts from the loader. The example is read from the guide itself and checked through the real loader; the guide separates established behavior from proposals and warns that file mods are not a sandbox. Reverting this commit removes only docs and test coverage. It changes no installed files, saves or runtime defaults. ## Reviewer notes Start with `documented_example_checks` and the example table in `docs/mods.md`; compare `host/mods.c`'s `find_mods`, `mod_cmp`, `hos_mods_init` and `hos_mods_romfs`. The nested example deliberately makes a folder named `00-nested` win over `02-override`, demonstrating that the whole relative path is compared. [Pull request 51](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/51) is the shared menu text editor, not the earlier Mods-tab proposal. [Pull request 68](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/68) builds core co-op on it; `coop_on_event` is not a native-module ABI. This branch needs neither head. They also edit the README, but not its Mods section; this change does not touch their code. Maintainers still need to choose the chest-table versus bridge-first direction, progression/save/conflict ownership, community recipes versus an official catalog, trusted native modules versus companions, and co-op module-first versus core-first. This test-only slice does not choose for them. No game proof is needed to establish this documentation/test change: production behavior is unchanged. Before claiming current Longshot/Clawshot compatibility, a separate proof should run a locally generated seed for up to five minutes with a copied save, check a known changed reward and controller prompts, then restart for one minute with the mod disabled and confirm the original route. That run has not been requested or performed here and would not prove the higher tiers. ## Issues See #42 ## Checklist ### For everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`). - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` run and passing (any failure that also fails on `main` is named above). - [x] Tested in the game, or what wasn't is named under Testing. - [x] Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests). - [x] Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. Named game-free test output and wall time; no game-speed claim. - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### If applicable - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] Flags noted, and the switch reference updated (docs/development.md, the README). Existing behavior only; no new switch-reference entry. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [x] Docs updated. --- New on this forge; not opened on GitHub. Assisted-by: GPT-6 Astra Co-Authored-By: GPT-6 Astra <[email protected]>
Author
Member

Measured the named mod test in main/PR/main/PR order at main 5eaaf7fb9 and this PR 36539b7fa: all four runs passed, with median wall times of 1.515874 s and 1.517231 s. This is game-free contract coverage, not a game-speed result; native Windows ordering and disable/restart behavior remain the separate request for testers. The test request is open (T-EQ83). Rebased onto main 5eaaf7fb9 with the change otherwise unchanged; whole suite on the new head f609dd2ab: 510 passed, 0 failed, 19 skipped. Ready for review.

Measured the named mod test in main/PR/main/PR order at main `5eaaf7fb9` and this PR `36539b7fa`: all four runs passed, with median wall times of 1.515874 s and 1.517231 s. This is game-free contract coverage, not a game-speed result; native Windows ordering and disable/restart behavior remain the separate request for testers. The test request is open (T-EQ83). Rebased onto main 5eaaf7fb9 with the change otherwise unchanged; whole suite on the new head f609dd2ab: 510 passed, 0 failed, 19 skipped. Ready for review.
mooki force-pushed test/mods-romfs-contract from 36539b7fa0
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 2s
Linux AppImage / appimage (pull_request) Has been cancelled
Windows builder / Longshot Builder zip (pull_request) Has been cancelled
Windows builder / Windows Vulkan back end (llvm-mingw) (pull_request) Has been cancelled
Windows builder / dav1d for Windows (llvm-mingw) (pull_request) Has been cancelled
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / Python source checks (windows-2022, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (windows-2022, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
to f609dd2abd
Some checks failed
Linux AppImage / appimage (pull_request) Blocked by required conditions
Windows builder / Longshot Builder zip (pull_request) Blocked by required conditions
Windows builder / Windows Vulkan back end (llvm-mingw) (pull_request) Blocked by required conditions
Windows builder / dav1d for Windows (llvm-mingw) (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Successful in 2s
Website / Website on Cloudflare (pull_request_target) Has been skipped
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / Python source checks (windows-2022, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (windows-2022, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
2026-11-13 03:03:38 +00:00
Compare
mooki changed title from WIP: test(mods): exercise the documented RomFS file contract to test(mods): exercise the documented RomFS file contract 2026-11-13 03:03:39 +00:00
Author
Member

Carried onto main 5e072fc8c; new head 9ab520105. The one commit replayed with no conflicts, and its own added and removed lines are unchanged. Only untouched lines around its changes differ, because main changed the neighbouring text: in README.md the paragraph above the mods section is now main's hold-to-toggle description, and the build-from-source line below it has main's new wording; in tests/test_mods_size_table.py main's prompt-cache change added CreateDirectoryA to the list just above the new example function. The whole suite on this exact head: 542 passed, 3 failed, 16 skipped; its only failures are main's own tests/test_pad_layout.py, tests/test_module_ids.py and tests/test_framegen_resources.py.

Carried onto main `5e072fc8c`; new head `9ab520105`. The one commit replayed with no conflicts, and its own added and removed lines are unchanged. Only untouched lines around its changes differ, because main changed the neighbouring text: in `README.md` the paragraph above the mods section is now main's hold-to-toggle description, and the build-from-source line below it has main's new wording; in `tests/test_mods_size_table.py` main's prompt-cache change added `CreateDirectoryA` to the list just above the new example function. The whole suite on this exact head: 542 passed, 3 failed, 16 skipped; its only failures are main's own `tests/test_pad_layout.py`, `tests/test_module_ids.py` and `tests/test_framegen_resources.py`.
mooki force-pushed test/mods-romfs-contract from f609dd2abd
Some checks failed
Linux AppImage / appimage (pull_request) Blocked by required conditions
Windows builder / Longshot Builder zip (pull_request) Blocked by required conditions
Windows builder / Windows Vulkan back end (llvm-mingw) (pull_request) Blocked by required conditions
Windows builder / dav1d for Windows (llvm-mingw) (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Successful in 2s
Website / Website on Cloudflare (pull_request_target) Has been skipped
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / Python source checks (windows-2022, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (windows-2022, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
to 9ab5201053
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 5s
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Successful in 5s
Website / Website on Cloudflare (pull_request_target) Has been skipped
2026-11-14 14:01:14 +00:00
Compare
HumanBean deleted branch test/mods-romfs-contract 2026-11-14 21:30:51 +00:00
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 5s
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Successful in 5s
Website / Website on Cloudflare (pull_request_target) Has been skipped
Some workflows are waiting to be reviewed.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!93
No description provided.