fix(scripts): the pipeline tour copies the game folder on ext4 too: romfs hard-linked, the rest copied #898

Open
jabbaxipil wants to merge 1 commit from jabbaxipil/Longshot:ext4-tour-copy into main
First-time contributor

Type: fix · Risk: low · Tested on: Linux (Ubuntu 26.04.1, ext4), RTX 4070 · Needs: Linux on btrfs or XFS, any GPU

Why

pipeline_tour.py tour only runs where the game folder can be copied with cp -a --reflink=always, which means btrfs or XFS. On any other drive it stops before the first game. That covers ext4, the default on Ubuntu, Debian, Fedora Workstation and Mint, and it means most Linux PCs can't run the tour at all. mooki's review of #111 flagged this and suggested --reflink=auto. But that makes a full 36 GB copy for every tour, which the refusal message says is deliberately avoided.

The tour needs a copy because it moves the pipeline lists aside, rewrites longshot_options.ini, and plays games that write cache/ in place. But 25 GB of the 36 GB is romfs/, which the game only reads. So a copy that shares romfs/ and really copies the rest keeps the game folder just as safe, without the full-copy cost.

See #111. Related: #360 hard-links romfs/ between game folders made from the same .nup (the builder side).

How to reproduce

Seen on: Linux (Ubuntu 26.04.1, ext4), RTX 4070, driver 615.71.09; also on a second Linux PC on ext4
Settings and switches: defaults
Steps: with the game folder on an ext4 drive, run python -I scripts/pipeline_tour.py tour --game <game folder> --out <tour dir> --name play (main f637b42d). Separately, run python -I -B tests/test_pipeline_tour.py.
Expected: the tour plays its route in a copy of the game folder, and the test passes.
Actual: cp prints failed to clone '<game folder>-tour/...': Operation not supported for each file, then the tour exits 1 before the first game with pipeline_tour: the game folder could not be copied with --reflink=always (a copy-on-write copy, on btrfs or XFS): put it on such a drive, as a full copy of the game per tour is not made. The test fails on every run with pipeline tour: calm took a stale snapshot (game.frame 2635, reply 2637) for control.

What changed

When the reflink copy fails, the tour now hard-links romfs/ and really copies everything else, about 12 GB. This is the layout scripts/dev_packs.py already uses for its runtimes. After the tour, it checks that no romfs/ file changed, and fails if one did. On btrfs and XFS nothing changes: the reflink copy is tried first, exactly as before.

  • scripts: copy_game() in scripts/pipeline_tour.py replaces the inline cp -a --reflink=always. When that copy fails:
    • It refuses if romfs/ is a link or on another drive (a hard link can't cross drives, and copying 25 GB without saying so would be worse), or if the drive lacks room for the rest plus COPY_SPARE (2 GB).
    • It runs cp -al for romfs/ and cp -a --reflink=auto for each other entry. bin/ and cache/ are real files: the game finds its folder through /proc/self/exe, and the program cache is appended to in place (vk_progcache.cpp). It prints tour: no reflinks on this drive: ... gets romfs/ hard-linked and N GB copied.
    • romfs_stamp() records each romfs/ file's size, mtime and inode. In tour()'s finally, romfs_changed() compares them and names any changed file, and the tour exits 1 if one changed.
    • A tour on btrfs or XFS returns None from copy_game(), so there's nothing to check afterwards.
  • tests: game_copy() in tests/test_pipeline_tour.py forces the no-reflink path on a small made-up game folder. It checks that romfs/ is hard-linked, that bin/longshot, the program cache and the options file are files of their own, that both refusals happen, and that a write into the shared romfs/ is found.
  • tests: the bridge test's stale snapshot is now STALE_FRAMES + 1 frames old, not 1. The tour's fresh() accepts a snapshot up to STALE_FRAMES (10) behind, so a 1-frame-old snapshot was taken as fresh. calm() then returned at once, and the test failed on every run with calm took a stale snapshot (game.frame 2635, reply 2637) for control.
  • docs: the tour paragraph in docs/development.md and two docstrings describe the copy instead of "on btrfs or XFS, and refused".

Measurements

Verdict: the tour now runs on ext4: the copy takes about 15 s and 12.3 GB instead of being refused, and the full tour passed with romfs/ unchanged.

Hardware: Linux (Ubuntu 26.04.1, kernel 7.0), RTX 4070 12 GB, driver 615.71.09, Ryzen 7 5800X3D, 64 GB, NVMe, ext4
Scene: the tour's own route and settings (640x360, game upscaler at 50%)
Method: the tour's own output, and find -newermt on the source folder and its romfs/ afterwards
How to reproduce: a game folder built from main on an ext4 drive, then python -I scripts/pipeline_tour.py tour --game <game folder> --out <tour dir> --name play

Before: main @ f637b42d After: this PR @ e8c1c19d
Tour on ext4 refused before the first game runs
Copy step (none) 15 s; romfs/ hard-linked (186,583 files), 12.3 GB copied
Full tour, all four parts (nightly-189-aa95d35f) (none) 31 games, 2,615 s, 10,853 pipelines merged, exit 0
romfs/ files changed by the tour (none) 0
Files changed in the source game folder (none) 0

The game runs were made with this change on main a4ead95c (commit 3f9b3900), before the rebase onto f637b42d. The 48 commits between them don't touch scripts/pipeline_tour.py or tests/test_pipeline_tour.py.

tour: no reflinks on this drive: <game folder>-tour gets romfs/ hard-linked and 12.3 GB copied
<tour dir>/t189f.bin: 10853 pipelines (compute 553, graphics 9542, mesh 758) of 5294 programs, version 2
tour t189f: 2615 s in all, parts opening,child-overworld,dungeons,adult-overworld, 31 runs

Flags and settings

None.

Testing

Tested: all on Linux (Ubuntu 26.04.1, ext4), RTX 4070, driver 615.71.09, Python 3.14.4.

  • python -I -B tests/test_pipeline_tour.py: passes 3 of 3 runs at e8c1c19d. It fails on main every time with the stale-snapshot message above.
    • The new game_copy check fails on two deliberately broken versions: cache/ hard-linked instead of copied (bin/longshot in the copy is not a file of its own), and the romfs/ check switched off (a write into the hard-linked romfs/ was not found).
  • python -I -B tests/run_all.py at e8c1c19d: 529 passed, 16 failed, 78 skipped. The same 16 fail on main f637b42d here:
    • test_appimage_player_build, test_bake_portability (no zstandard here) and test_crash_dialog (clang 21 rejects -x none)
    • test_crt_options, test_env_on, test_lift_cleanup_error, test_linux_preflight and test_linux_update
    • test_make_game_cache, test_missing_nup, test_mods_size_table, test_options_budget_once and test_readback_late
    • test_vk_occlusion_queries, test_vk_pgo and test_walk_key
  • In the game, on nightly-189-aa95d35f built from its release:
    • The copy on its own: copy_game() on a real 36 GB game folder took 15 s. romfs/ files share one inode with the source (3 links), and bin/longshot, cache/longshot_programs.bin and longshot_options.ini have inodes of their own.
    • One game from that copy (a save in Zora's Domain, a teleport to Hyrule Field, 600 frames in each, then quit): exit 0, with no crash and no device loss. The game mounted the copy's own romfs/ (fs: mounted content: -> <game folder>-tour/romfs). romfs_changed() found 0 of 186,583 files changed. The game wrote 16 files, all in the copy's cache/, and none in the source folder.
    • A short tour (--parts opening,child-overworld --stops 2): exit 0, with 2,269 pipelines merged. The copy was removed, and 0 files changed in the source folder.
    • The full tour (all four parts, every stop): exit 0, 31 games, 10,853 pipelines. The romfs/ check passed, the copy was removed, 0 files changed in the source folder, and there were no GPU faults.
  • With #729 in, the tour's games read the settings from their own user folder: options: the settings in <game folder>-tour/longshot_options.ini were copied to <run>/data/user/longshot_options.ini. That file is identical to what the tour set.
  • The same change on nightly-170-6c9edffe, the tour's own commit, passed the same game checks on 2026-11-14 before this rebase.

Not tested:

  • The reflink path on btrfs or XFS. I have no such drive. That path is the same cp -a --reflink=always as on main, but now copy_game() makes it, and romfs_changed() gets None.
  • Windows and macOS. The tour needs cp there either way, so it is Linux-only, as before.
  • AMD and Intel GPUs. The copy doesn't depend on the GPU.

Must be tested:

  • Linux, game folder on btrfs or XFS, any GPU: run python -I scripts/pipeline_tour.py tour --game GAME --out OUT --name t --parts opening --stops 1 (GAME the game folder, OUT a new folder), expecting no no reflinks on this drive line, exit 0 and GAME-tour removed at the end (by hand: a tester with such a drive, reading the tour's output)

Risks

What could break: a tour on a drive without reflinks. A write into romfs/ during a tour would also land in the source folder, because the files are shared. The game mounts romfs/ read-only and refuses writes to it (host/nn_fs.c), and romfs_changed() would name any file that changed anyway. On btrfs and XFS nothing changes.

Turning it off: revert the commit.

Compatibility: Nothing changes. Only scripts/pipeline_tour.py and its test change; the game, the builds and the players' files are untouched.

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named).
  • 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.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • A game-free test added for the fix, failing on main and passing here.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Docs updated.

🤖 Generated with Claude Code

**Type:** fix · **Risk:** low · **Tested on:** Linux (Ubuntu 26.04.1, ext4), RTX 4070 · **Needs:** Linux on btrfs or XFS, any GPU ## Why `pipeline_tour.py tour` only runs where the game folder can be copied with `cp -a --reflink=always`, which means btrfs or XFS. On any other drive it stops before the first game. That covers ext4, the default on Ubuntu, Debian, Fedora Workstation and Mint, and it means most Linux PCs can't run the tour at all. mooki's review of #111 [flagged this](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/111#issuecomment-20298) and suggested `--reflink=auto`. But that makes a full 36 GB copy for every tour, which the refusal message says is deliberately avoided. The tour needs a copy because it moves the pipeline lists aside, rewrites `longshot_options.ini`, and plays games that write `cache/` in place. But 25 GB of the 36 GB is `romfs/`, which the game only reads. So a copy that shares `romfs/` and really copies the rest keeps the game folder just as safe, without the full-copy cost. See #111. Related: #360 hard-links `romfs/` between game folders made from the same .nup (the builder side). ## How to reproduce **Seen on:** Linux (Ubuntu 26.04.1, ext4), RTX 4070, driver 615.71.09; also on a second Linux PC on ext4 **Settings and switches:** defaults **Steps:** with the game folder on an ext4 drive, run `python -I scripts/pipeline_tour.py tour --game <game folder> --out <tour dir> --name play` (main f637b42d). Separately, run `python -I -B tests/test_pipeline_tour.py`. **Expected:** the tour plays its route in a copy of the game folder, and the test passes. **Actual:** `cp` prints `failed to clone '<game folder>-tour/...': Operation not supported` for each file, then the tour exits 1 before the first game with `pipeline_tour: the game folder could not be copied with --reflink=always (a copy-on-write copy, on btrfs or XFS): put it on such a drive, as a full copy of the game per tour is not made`. The test fails on every run with `pipeline tour: calm took a stale snapshot (game.frame 2635, reply 2637) for control`. ## What changed When the reflink copy fails, the tour now hard-links `romfs/` and really copies everything else, about 12 GB. This is the layout `scripts/dev_packs.py` already uses for its runtimes. After the tour, it checks that no `romfs/` file changed, and fails if one did. On btrfs and XFS nothing changes: the reflink copy is tried first, exactly as before. - scripts: `copy_game()` in `scripts/pipeline_tour.py` replaces the inline `cp -a --reflink=always`. When that copy fails: - It refuses if `romfs/` is a link or on another drive (a hard link can't cross drives, and copying 25 GB without saying so would be worse), or if the drive lacks room for the rest plus `COPY_SPARE` (2 GB). - It runs `cp -al` for `romfs/` and `cp -a --reflink=auto` for each other entry. `bin/` and `cache/` are real files: the game finds its folder through `/proc/self/exe`, and the program cache is appended to in place (`vk_progcache.cpp`). It prints `tour: no reflinks on this drive: ... gets romfs/ hard-linked and N GB copied`. - `romfs_stamp()` records each `romfs/` file's size, mtime and inode. In `tour()`'s `finally`, `romfs_changed()` compares them and names any changed file, and the tour exits 1 if one changed. - A tour on btrfs or XFS returns `None` from `copy_game()`, so there's nothing to check afterwards. - tests: `game_copy()` in `tests/test_pipeline_tour.py` forces the no-reflink path on a small made-up game folder. It checks that `romfs/` is hard-linked, that `bin/longshot`, the program cache and the options file are files of their own, that both refusals happen, and that a write into the shared `romfs/` is found. - tests: the bridge test's stale snapshot is now `STALE_FRAMES + 1` frames old, not 1. The tour's `fresh()` accepts a snapshot up to `STALE_FRAMES` (10) behind, so a 1-frame-old snapshot was taken as fresh. `calm()` then returned at once, and the test failed on every run with `calm took a stale snapshot (game.frame 2635, reply 2637) for control`. - docs: the tour paragraph in `docs/development.md` and two docstrings describe the copy instead of "on btrfs or XFS, and refused". ## Measurements **Verdict:** the tour now runs on ext4: the copy takes about 15 s and 12.3 GB instead of being refused, and the full tour passed with `romfs/` unchanged. Hardware: Linux (Ubuntu 26.04.1, kernel 7.0), RTX 4070 12 GB, driver 615.71.09, Ryzen 7 5800X3D, 64 GB, NVMe, ext4 Scene: the tour's own route and settings (640x360, game upscaler at 50%) Method: the tour's own output, and `find -newermt` on the source folder and its `romfs/` afterwards How to reproduce: a game folder built from main on an ext4 drive, then `python -I scripts/pipeline_tour.py tour --game <game folder> --out <tour dir> --name play` | | Before: main @ f637b42d | After: this PR @ e8c1c19d | |---|---|---| | Tour on ext4 | refused before the first game | runs | | Copy step | (none) | 15 s; `romfs/` hard-linked (186,583 files), 12.3 GB copied | | Full tour, all four parts (nightly-189-aa95d35f) | (none) | 31 games, 2,615 s, 10,853 pipelines merged, exit 0 | | `romfs/` files changed by the tour | (none) | 0 | | Files changed in the source game folder | (none) | 0 | The game runs were made with this change on main a4ead95c (commit 3f9b3900), before the rebase onto f637b42d. The 48 commits between them don't touch `scripts/pipeline_tour.py` or `tests/test_pipeline_tour.py`. ``` tour: no reflinks on this drive: <game folder>-tour gets romfs/ hard-linked and 12.3 GB copied <tour dir>/t189f.bin: 10853 pipelines (compute 553, graphics 9542, mesh 758) of 5294 programs, version 2 tour t189f: 2615 s in all, parts opening,child-overworld,dungeons,adult-overworld, 31 runs ``` ### Flags and settings None. ## Testing **Tested:** all on Linux (Ubuntu 26.04.1, ext4), RTX 4070, driver 615.71.09, Python 3.14.4. - `python -I -B tests/test_pipeline_tour.py`: passes 3 of 3 runs at e8c1c19d. It fails on main every time with the stale-snapshot message above. - The new `game_copy` check fails on two deliberately broken versions: `cache/` hard-linked instead of copied (`bin/longshot in the copy is not a file of its own`), and the `romfs/` check switched off (`a write into the hard-linked romfs/ was not found`). - `python -I -B tests/run_all.py` at e8c1c19d: 529 passed, 16 failed, 78 skipped. The same 16 fail on main f637b42d here: - `test_appimage_player_build`, `test_bake_portability` (no `zstandard` here) and `test_crash_dialog` (clang 21 rejects `-x none`) - `test_crt_options`, `test_env_on`, `test_lift_cleanup_error`, `test_linux_preflight` and `test_linux_update` - `test_make_game_cache`, `test_missing_nup`, `test_mods_size_table`, `test_options_budget_once` and `test_readback_late` - `test_vk_occlusion_queries`, `test_vk_pgo` and `test_walk_key` - In the game, on nightly-189-aa95d35f built from its release: - **The copy on its own:** `copy_game()` on a real 36 GB game folder took 15 s. `romfs/` files share one inode with the source (3 links), and `bin/longshot`, `cache/longshot_programs.bin` and `longshot_options.ini` have inodes of their own. - **One game from that copy** (a save in Zora's Domain, a teleport to Hyrule Field, 600 frames in each, then quit): exit 0, with no crash and no device loss. The game mounted the copy's own `romfs/` (`fs: mounted content: -> <game folder>-tour/romfs`). `romfs_changed()` found 0 of 186,583 files changed. The game wrote 16 files, all in the copy's `cache/`, and none in the source folder. - **A short tour** (`--parts opening,child-overworld --stops 2`): exit 0, with 2,269 pipelines merged. The copy was removed, and 0 files changed in the source folder. - **The full tour** (all four parts, every stop): exit 0, 31 games, 10,853 pipelines. The `romfs/` check passed, the copy was removed, 0 files changed in the source folder, and there were no GPU faults. - With #729 in, the tour's games read the settings from their own user folder: `options: the settings in <game folder>-tour/longshot_options.ini were copied to <run>/data/user/longshot_options.ini`. That file is identical to what the tour set. - The same change on nightly-170-6c9edffe, the tour's own commit, passed the same game checks on 2026-11-14 before this rebase. **Not tested:** - **The reflink path on btrfs or XFS.** I have no such drive. That path is the same `cp -a --reflink=always` as on main, but now `copy_game()` makes it, and `romfs_changed()` gets `None`. - **Windows and macOS.** The tour needs `cp` there either way, so it is Linux-only, as before. - **AMD and Intel GPUs.** The copy doesn't depend on the GPU. **Must be tested:** - Linux, game folder on btrfs or XFS, any GPU: run `python -I scripts/pipeline_tour.py tour --game GAME --out OUT --name t --parts opening --stops 1` (GAME the game folder, OUT a new folder), expecting no `no reflinks on this drive` line, exit 0 and `GAME-tour` removed at the end (by hand: a tester with such a drive, reading the tour's output) ## Risks **What could break:** a tour on a drive without reflinks. A write into `romfs/` during a tour would also land in the source folder, because the files are shared. The game mounts `romfs/` read-only and refuses writes to it (`host/nn_fs.c`), and `romfs_changed()` would name any file that changed anyway. On btrfs and XFS nothing changes. **Turning it off:** revert the commit. **Compatibility:** Nothing changes. Only `scripts/pipeline_tour.py` and its test change; the game, the builds and the players' files are untouched. ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). - [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. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] A game-free test added for the fix, failing on `main` and passing here. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [x] Docs updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(scripts): the pipeline tour copies the game folder on ext4 too: romfs hard-linked, the rest copied
Some checks failed
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
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 / 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
Guide screenshots / Guide images and local UI source review (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
e8c1c19d6a
The tour refused any drive without reflinks, so it ran on no ext4 PC. Where cp --reflink=always fails, it now
hard-links romfs/ (the game mounts it read-only, as scripts/dev_packs.py's runtimes have it) and copies the
rest, which the game writes in place (the program cache) or finds its folder through (bin/). It refuses a
linked romfs/ or a drive without room, and checks after the tour that no romfs/ file changed.

Also: the stale-snapshot check of the bridge test makes the snapshot older than STALE_FRAMES; one frame
behind was within the tolerance, so the test failed on every run.

Assisted-by: Claude Opus 5.5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Rsud93pkyqbpFmD6UmG1Bu
jabbaxipil changed title from WIP: fix(scripts): the pipeline tour copies the game folder on ext4 too: romfs hard-linked, the rest copied to fix(scripts): the pipeline tour copies the game folder on ext4 too: romfs hard-linked, the rest copied 2026-11-15 19:51:05 +00:00
jabbaxipil force-pushed ext4-tour-copy from e8c1c19d6a
Some checks failed
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
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 / 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
Guide screenshots / Guide images and local UI source review (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 5b5b140377
Some checks failed
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) 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 / 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
Guide screenshots / Guide images and local UI source review (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-15 20:24:41 +00:00
Compare
jabbaxipil force-pushed ext4-tour-copy from 5b5b140377
Some checks failed
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) 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 / 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
Guide screenshots / Guide images and local UI source review (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 691d85a681
Some checks are pending
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Guide screenshots / Guide images and local UI source review (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 5s
2026-11-15 20:26:18 +00:00
Compare
Some checks are pending
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Guide screenshots / Guide images and local UI source review (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 5s
This pull request doesn't have enough approvals yet. 0 of 1 approvals granted.
Some workflows are waiting to be reviewed.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'ext4-tour-copy:jabbaxipil-ext4-tour-copy'
git switch 'jabbaxipil-ext4-tour-copy'
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!898
No description provided.