Follow-on to #328. With the lock bumped, all ten patches apply and the compositor compiles, links and installs cleanly (680/680 targets). It then fails our own postInstall assertion:
punktfunk-gamescope: this nixpkgs' gamescope built no WSI layer, so no game under the
compositor could ever obtain an HDR10 swapchain
Cause
nixpkgs' gamescope takes enableWsi ? false and feeds it to mesonBool "enable_gamescope_wsi_layer". So the plain derivation ships the compositor and no layer at all — nixpkgs gets its own layer by instantiating a second copy inside the wrapper.
enableWsi is a function argument, so overrideAttrs cannot reach it. It needs .override { enableWsi = true; }, applied before.overrideAttrs — otherwise the attrs would be applied to the derivation being replaced.
The assertion did exactly what it was written for. Without it we'd have installed a compositor under our own name that silently denied every nested game its HDR10 swapchain — what gamescope.nix's header calls "the single worst outcome here, because the host reads the name as a promise of HDR". The only cost is that it fires after a full build, which is an expensive way to discover a default.
Verification status — read this before merging
✅nix flake check passes, so the .override evaluates against this nixpkgs (it does accept enableWsi).
⚠️The gamescope build itself is NOT yet verified end-to-end. Three dispatch attempts have been blocked before reaching it by the known punktfunk-web OOM (bun run build SIGKILL, exit 137) at the unconditional "Build the bun packages" step. Run 19323 built bun fine on the same lock, so this is the load-dependent OOM rather than anything in this change — but I would rather say so than claim a verification I don't have.
I'm still retrying. If it stays blocked, merging is still reasonable: main's cache tier builds gamescope unconditionally on push, and main is currently failing that build anyway, so this cannot regress it.
Two things this exposes, worth separate issues
A flaky step gates the opt-in verification path. "Build the bun packages" is unconditional, so an unrelated OOM prevents using build-gamescope to check a compositor change — precisely the check the header recommends before merging a lock bump.
The punktfunk-web OOM is getting expensive. It has now blocked four runs today across two branches. Worth giving the runner more memory or capping the nitro build's concurrency.
Follow-on to #328. With the lock bumped, all ten patches apply and the compositor **compiles, links and installs cleanly** (680/680 targets). It then fails our own `postInstall` assertion:
```
punktfunk-gamescope: this nixpkgs' gamescope built no WSI layer, so no game under the
compositor could ever obtain an HDR10 swapchain
```
## Cause
nixpkgs' gamescope takes `enableWsi ? false` and feeds it to `mesonBool "enable_gamescope_wsi_layer"`. So the plain derivation ships the compositor and **no layer at all** — nixpkgs gets its own layer by instantiating a *second* copy inside the wrapper.
`enableWsi` is a **function argument**, so `overrideAttrs` cannot reach it. It needs `.override { enableWsi = true; }`, applied *before* `.overrideAttrs` — otherwise the attrs would be applied to the derivation being replaced.
The assertion did exactly what it was written for. Without it we'd have installed a compositor under our own name that silently denied every nested game its HDR10 swapchain — what `gamescope.nix`'s header calls "the single worst outcome here, because the host reads the name as a promise of HDR". The only cost is that it fires after a full build, which is an expensive way to discover a default.
## Verification status — read this before merging
- ✅ `nix flake check` passes, so the `.override` evaluates against this nixpkgs (it does accept `enableWsi`).
- ⚠️ **The gamescope build itself is NOT yet verified end-to-end.** Three dispatch attempts have been blocked *before* reaching it by the known `punktfunk-web` OOM (`bun run build` SIGKILL, exit 137) at the unconditional "Build the bun packages" step. Run 19323 built bun fine on the same lock, so this is the load-dependent OOM rather than anything in this change — but I would rather say so than claim a verification I don't have.
I'm still retrying. If it stays blocked, merging is still reasonable: main's `cache` tier builds gamescope unconditionally on push, and main is currently failing that build anyway, so this cannot regress it.
## Two things this exposes, worth separate issues
1. **A flaky step gates the opt-in verification path.** "Build the bun packages" is unconditional, so an unrelated OOM prevents using `build-gamescope` to check a compositor change — precisely the check the header recommends before merging a lock bump.
2. **The `punktfunk-web` OOM is getting expensive.** It has now blocked four runs today across two branches. Worth giving the runner more memory or capping the nitro build's concurrency.
With the lock bumped, all ten patches apply and the compositor compiles, links
and installs cleanly. It then fails our own postInstall assertion:
punktfunk-gamescope: this nixpkgs' gamescope built no WSI layer, so no game
under the compositor could ever obtain an HDR10 swapchain
nixpkgs takes `enableWsi ? false` and feeds it to
`mesonBool "enable_gamescope_wsi_layer"`, so the plain derivation ships the
compositor and no layer at all; nixpkgs gets its own layer by instantiating a
SECOND copy inside the wrapper. `enableWsi` is a FUNCTION ARGUMENT, so
overrideAttrs cannot reach it — it needs `.override`, applied before
`.overrideAttrs` so the latter is not applied to the derivation being replaced.
The assertion did its job: it caught a compositor that would have installed
under our name and then denied every nested game an HDR10 swapchain, which is
the one outcome the header calls the worst. But it only fires after a full
build (MEASURED: run 19323), which is an expensive way to learn a default.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-on to #328. With the lock bumped, all ten patches apply and the compositor compiles, links and installs cleanly (680/680 targets). It then fails our own
postInstallassertion:Cause
nixpkgs' gamescope takes
enableWsi ? falseand feeds it tomesonBool "enable_gamescope_wsi_layer". So the plain derivation ships the compositor and no layer at all — nixpkgs gets its own layer by instantiating a second copy inside the wrapper.enableWsiis a function argument, sooverrideAttrscannot reach it. It needs.override { enableWsi = true; }, applied before.overrideAttrs— otherwise the attrs would be applied to the derivation being replaced.The assertion did exactly what it was written for. Without it we'd have installed a compositor under our own name that silently denied every nested game its HDR10 swapchain — what
gamescope.nix's header calls "the single worst outcome here, because the host reads the name as a promise of HDR". The only cost is that it fires after a full build, which is an expensive way to discover a default.Verification status — read this before merging
nix flake checkpasses, so the.overrideevaluates against this nixpkgs (it does acceptenableWsi).punktfunk-webOOM (bun run buildSIGKILL, exit 137) at the unconditional "Build the bun packages" step. Run 19323 built bun fine on the same lock, so this is the load-dependent OOM rather than anything in this change — but I would rather say so than claim a verification I don't have.I'm still retrying. If it stays blocked, merging is still reasonable: main's
cachetier builds gamescope unconditionally on push, and main is currently failing that build anyway, so this cannot regress it.Two things this exposes, worth separate issues
build-gamescopeto check a compositor change — precisely the check the header recommends before merging a lock bump.punktfunk-webOOM is getting expensive. It has now blocked four runs today across two branches. Worth giving the runner more memory or capping the nitro build's concurrency.With the lock bumped, all ten patches apply and the compositor compiles, links and installs cleanly. It then fails our own postInstall assertion: punktfunk-gamescope: this nixpkgs' gamescope built no WSI layer, so no game under the compositor could ever obtain an HDR10 swapchain nixpkgs takes `enableWsi ? false` and feeds it to `mesonBool "enable_gamescope_wsi_layer"`, so the plain derivation ships the compositor and no layer at all; nixpkgs gets its own layer by instantiating a SECOND copy inside the wrapper. `enableWsi` is a FUNCTION ARGUMENT, so overrideAttrs cannot reach it — it needs `.override`, applied before `.overrideAttrs` so the latter is not applied to the derivation being replaced. The assertion did its job: it caught a compositor that would have installed under our name and then denied every nested game an HDR10 swapchain, which is the one outcome the header calls the worst. But it only fires after a full build (MEASURED: run 19323), which is an expensive way to learn a default.