heks-linux-ce18c080-e338

job succeeded

starting new job...


→ running command: cd "/etc/byggsteg/job-clone//heks-linux/trunk" && git reset --hard && git pull

HEAD is now at 625dd0a feat: Improve waybar
From https://codeberg.org/jjba23/heks-linux
   625dd0a..4f09678  trunk      -> origin/trunk
 * [new tag]         v1.17.0    -> v1.17.0
Updating 625dd0a..4f09678
Fast-forward
 channels.scm | 4 ++--
 maak.scm     | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

→ running command: cd /etc/byggsteg/job-clone/heks-linux/trunk && uname -a

Linux wolk-jjba 7.2.11-gnu #1 SMP PREEMPT_DYNAMIC 1 x86_64 GNU/Linux

→ running command: cd /etc/byggsteg/job-clone/heks-linux/trunk && git log --name-status HEAD^..HEAD

commit 4f09678445bd6c3098f48982bab3d5168a6517df
Author: Josep Bigorra <jjbigorra@gmail.com>
Date:   Mon Oct 26 16:34:17 2026 +0100

    feat: Pin jointhefreeworld at lambdock 0.12.1
    
    The trash item now trashes files and folders dropped on it, so both halves of
    the collection follow the new release: the channel pin for the Guix packages
    and the Nix revision for the dock.
    
    🤖 Generated with Codebuff
    Co-Authored-By: Codebuff <noreply@codebuff.com>

M       channels.scm
M       maak.scm

→ running command: cd /etc/byggsteg/job-clone/heks-linux/trunk && maak test



--------------------------------------------------------------

Maak 0.14.0: the infinitely extensible command runner

Loading tasks from Maak file: /etc/byggsteg/job-clone/heks-linux/trunk/maak.scm

Executing Maak tasks: test


--------------------------------------------------------------

=> Running Maak task: test

  Unit tests, run in a hermetic container.

Executing: rm -rfv reports/lcov/coverage*
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/maak.scm
;;;       newer than compiled /tmp/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/maak.scm.go
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/maak.scm
;;; compiled /tmp/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/maak.scm.go
channels.scm:54:6: warning: channel 'jointhefreeworld' is not trusted
Updating channel 'guix' from Git repository at 'https://codeberg.org/guix/guix.git'...
Updating channel 'jointhefreeworld' from Git repository at 'https://codeberg.org/jjba23/guix-jointhefreeworld'...
Authenticating channel 'jointhefreeworld', commits b0ac3f0 to 4a94201 (1 new commit)...
warning: 'uv' is deprecated, use '(@ (gnu packages build-tools) uv)' instead
warning: 'uv' is deprecated, use '(@ (gnu packages build-tools) uv)' instead
warning: 'oniguruma' is deprecated, use '(@ (gnu packages regex) oniguruma)' instead
warning: 'oniguruma' is deprecated, use '(@ (gnu packages regex) oniguruma)' instead
Computing Guix derivation for 'x86_64-linux'...  
substitute: looking for substitutes on 'https://bordeaux.guix.gnu.org'... 100.0%
substitute: looking for substitutes on 'https://ci.guix.gnu.org'... 100.0%
The following derivations will be built:
  /gnu/store/6fd09ahvgh241g55x8psmj21aqymgzcl-inferior-script.scm.drv
  /gnu/store/1wxmk2352gbnqngafjy7kl0phvfbb1rr-jointhefreeworld.drv
  /gnu/store/vgx5p78im9bj1zg03314az6088lm5858-profile.drv
  /gnu/store/xhh8hy73k5h01py2mhdrq9hjndjprvpj-inferior-script.scm.drv
  /gnu/store/wck7pnjdfmixcikg5dxh59m0dv35y77z-profile.drv

building /gnu/store/6fd09ahvgh241g55x8psmj21aqymgzcl-inferior-script.scm.drv...
building /gnu/store/1wxmk2352gbnqngafjy7kl0phvfbb1rr-jointhefreeworld.drv...
building CA certificate bundle...
listing Emacs sub-directories...
building fonts directory...
building directory of Info manuals...
building profile with 2 packages...
building /gnu/store/xhh8hy73k5h01py2mhdrq9hjndjprvpj-inferior-script.scm.drv...
building package cache...
building profile with 2 packages...

scanning directories for unit tests...
scanning present working directory for unit tests...

shuffled the files with seed 229799313 (replay with VERITAS_SEED=229799313)

found unit tests: (image-spec.scm wallpaper-spec.scm niri-spec.scm dconf-spec.scm gtk-spec.scm flatpak-spec.scm waybar-spec.scm palette-spec.scm toon-spec.scm rofi-spec.scm prelude-spec.scm fontconfig-spec.scm bridges-spec.scm wezterm-spec.scm zen-spec.scm mako-spec.scm)


running unit tests from file: image-spec.scm, entrypoint: spec

[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: Attempting override resolution for module (heks-linux user-settings) with profile 'local-settings'
[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: $XDG_CONFIG_HOME empty/unset, falling back to $HOME/.config
[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: Checking for override file at: /root/.config/heks-linux/local-settings.scm
[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: No override file found at /root/.config/heks-linux/local-settings.scm. Skipping.

ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Heks-Linux Live Image Suite
  [🧪 test] Guix And Nix Are On It
    [⚙️ assert] The image should carry Guix
    ✅ got: #t
    [⚙️ assert] The image should carry Nix
    ✅ got: #t
    [⚙️ assert] The Guix daemon should be enabled, or the store cannot be added to
    ✅ got: #t
    [⚙️ assert] Publishing the store on the network is not a desktop's job
    ✅ got: #t
    [⚙️ assert] The store should stay writable, so its read-only mount is masked
    ✅ got: #t
    [⚙️ assert] The nix daemon should start when something asks it to
    ✅ got: #t
    [⚙️ assert] The build should wait for its own nix daemon
    ✅ got: #t
    [⚙️ assert] The build should wait for its own guix daemon
    ✅ got: #t
  [🧪 test] It Installs As Well As Boots
    [⚙️ assert] The description should produce a live ISO and an installable image
    ✅ got: 2
    [⚙️ assert] One of them should be an OEM image
    ✅ got: #t
    [⚙️ assert] The OEM image should ship an install ISO
    ✅ got: true
    [⚙️ assert] An installed image should grow to the disk it lands on
    ✅ got: true
    [⚙️ assert] The initrd module that grows it should be on the image
    ✅ got: #t
  [🧪 test] The Build Checks Itself
    [⚙️ assert] The build should know what a ready system looks like
    ✅ got: #t
    [⚙️ assert] It should check programs as well as files
    ✅ got: #t
    [⚙️ assert] Guix should be one of the programs a ready image has
    ✅ got: #t
    [⚙️ assert] Nix should be one of them too
    ✅ got: #t
    [⚙️ assert] The build should have a phase that asks
    ✅ got: #t
    [⚙️ assert] And it should refuse to produce an image that fails it
    ✅ got: #t
  [🧪 test] The Image Follows The Desktop's Settings
    [⚙️ assert] The image should be in the timezone the desktop declares
    ✅ got: Europe/Amsterdam
    [⚙️ assert] The image should be in the locale the desktop declares
    ✅ got: nl_NL
    [⚙️ assert] The image should carry the desktop's hostname
    ✅ got: #t
  [🧪 test] The Live Account Is The One That Logs In
    [⚙️ assert] The image should create the user it is named after
    ✅ got: heks
    [⚙️ assert] The live user's home should be the one the checkouts are cloned into
    ✅ got: /home/heks
    [⚙️ assert] The live user should be able to use sudo
    ✅ got: #t
    [⚙️ assert] GDM should log in the same user the image creates
    ✅ got: #t
    [⚙️ assert] The autologin should be enabled, not merely configured
    ✅ got: #t
    [⚙️ assert] The display manager should be enabled
    ✅ got: #t
    [⚙️ assert] The image should boot to the graphical target
    ✅ got: #t
  [🧪 test] The Three Projects Are Pre-Loaded
    [⚙️ assert] The image should clone heks-linux
    ✅ got: #t
    [⚙️ assert] The image should clone heks-emacs
    ✅ got: #t
    [⚙️ assert] The image should clone heks-bash
    ✅ got: #t
    [⚙️ assert] The editor's configuration directory should be created
    ✅ got: #t
    [⚙️ assert] The editor's configuration should be installed, not only checked out
    ✅ got: #t
    [⚙️ assert] The editor's modules and snippets should be copied with it
    ✅ got: #t
  [🧪 test] It Is Rendered Before It Ships
    [⚙️ assert] heks-render should run maak home-reconfigure
    ✅ got: #t
    [⚙️ assert] heks-render should run maak install-bash
    ✅ got: #t
    [⚙️ assert] heks-render should run maak install-icon-files
    ✅ got: #t
    [⚙️ assert] heks-render should run maak install-heks-toon
    ✅ got: #t
    [⚙️ assert] heks-render should run maak install-lambdock
    ✅ got: #t
    [⚙️ assert] The build should run maak home-reconfigure
    ✅ got: #t
    [⚙️ assert] The build should run maak install-bash
    ✅ got: #t
    [⚙️ assert] The build should run maak install-icon-files
    ✅ got: #t
    [⚙️ assert] The build should run maak install-heks-toon
    ✅ got: #t
    [⚙️ assert] The build should run maak install-lambdock
    ✅ got: #t
    [⚙️ assert] heks-render should refuse to render another user's home as a user
    ✅ got: #t
    [⚙️ assert] The unit should skip itself once the desktop is rendered
    ✅ got: #t
    [⚙️ assert] The build should leave the marker the unit reads
    ✅ got: #t
    [⚙️ assert] It is a one-shot, not a daemon
    ✅ got: #t
    [⚙️ assert] Rendering downloads, so it should wait for the network
    ✅ got: #t
  [🧪 test] The Session Is On The Image
    [⚙️ assert] The image should carry the bar
    ✅ got: #t
    [⚙️ assert] The image should carry the compositor
    ✅ got: #t
    [⚙️ assert] The image should carry the display manager
    ✅ got: #t
    [⚙️ assert] The image should carry the editor
    ✅ got: #t
    [⚙️ assert] The image should carry the language the desktop is written in
    ✅ got: #t
    [⚙️ assert] The image should carry the audio server
    ✅ got: #t
    [⚙️ assert] The image should carry the portals a Wayland session needs
    ✅ got: #t
    [⚙️ assert] A live ISO boots from KIWI's own initrd module
    ✅ got: #t
    [⚙️ assert] The image should carry the git its build clones with
    ✅ got: #t
    [⚙️ assert] The image should carry the curl its first boot downloads with
    ✅ got: #t
    [⚙️ assert] The image should carry the gpg that verifies the download
    ✅ got: #t
  [🧪 test] The Distribution Is Slowroll
    [⚙️ assert] The image should be built from exactly two repositories
    ✅ got: 2
    [⚙️ assert] The first repository should be Slowroll's open source one
    ✅ got: https://download.opensuse.org/slowroll/repo/oss/
    [⚙️ assert] The repository should be included in the image, not only used to build it
    ✅ got: true
    [⚙️ assert] The bootstrap set should carry the release package, or zypper cannot tell what it is
    ✅ got: #t
    [⚙️ assert] The bootstrap set should carry the tools that create the live user
    ✅ got: #t
  [🧪 test] The Description Is A Live Image
    [⚙️ assert] The image should be an ISO
    ✅ got: iso
    [⚙️ assert] The ISO should boot from an overlay, so the medium stays read-only
    ✅ got: overlay
    [⚙️ assert] The same file should keep a session when it is written to a stick
    ✅ got: true
    [⚙️ assert] The description should have preferences at all
    ✅ got: #t
  [🧪 test] What The Image Leaves Out
    [⚙️ assert] The image should not carry a typesetting system
    ✅ got: #t
    [⚙️ assert] The image should not carry a 3D suite
    ✅ got: #t
    [⚙️ assert] The image should not carry a compiler toolchain
    ✅ got: #t
    [⚙️ assert] The image should not carry an image editor
    ✅ got: #t
    [⚙️ assert] The image should carry one network applet
    ✅ got: #t
    [⚙️ assert] The one it carries should be the GNOME applet
    ✅ got: #t
    [⚙️ assert] The workstation list should still carry the typesetting system
    ✅ got: #t
  [🧪 test] The Description Is Well Formed XML
    [⚙️ assert] The description should declare itself as UTF-8 XML
    ✅ got: #t
    [⚙️ assert] The schema version should be the one KIWI 10.3 validates against
    ✅ got: #t
    [⚙️ assert] Every element the description opens should be closed
    ✅ got: 24
    [⚙️ assert] The renderer should not double-escape
    ✅ got: #f
ℹ️ info - ran 1 tasks in: 0 seconds, 50054 microseconds

running unit tests from file: wallpaper-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)[INFO] [2026-10-26 15:37:19 UTC] Creating directory: /tmp/heks-wallpaper-spec-2
[INFO] [2026-10-26 15:37:19 UTC] Creating directory: /tmp/heks-wallpaper-spec-2/bin
[INFO] [2026-10-26 15:37:19 UTC] Installing wallpaper management configuration
[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: Attempting override resolution for module (heks-linux wallpaper) with profile 'wallpaper-settings'
[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: $XDG_CONFIG_HOME empty/unset, falling back to $HOME/.config
[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: Checking for override file at: /root/.config/heks-linux/wallpaper-settings.scm
[INFO] [2026-10-26 15:37:19 UTC] load-local-overrides: No override file found at /root/.config/heks-linux/wallpaper-settings.scm. Skipping.
[INFO] [2026-10-26 15:37:19 UTC] Writing config to file: /tmp/heks-wallpaper-spec-2/bin/heks-wallpaper
[INFO] [2026-10-26 15:37:19 UTC] Removed the retired Rofi wallpaper picker: /tmp/heks-wallpaper-spec-2/bin/heks-wallpaper-chooser
[INFO] [2026-10-26 15:37:19 UTC] Creating directory: /tmp/heks-wallpaper-spec-2/systemd
[INFO] [2026-10-26 15:37:19 UTC] Writing config to file: /tmp/heks-wallpaper-spec-2/systemd/heks-wallpaper.service
[INFO] [2026-10-26 15:37:19 UTC] Writing config to file: /tmp/heks-wallpaper-spec-2/systemd/heks-wallpaper.timer
[SUCCESS] [2026-10-26 15:37:19 UTC] Installed wallpaper management configuration

+----------------------------------------------+
[📑 suite] Wallpaper Engine Suite
  [🧪 test] Installing Writes Every Artefact
    [⚙️ assert] The engine should be installed
    ✅ got: #t
    [⚙️ assert] The engine should be executable
    ✅ got: #t
    [⚙️ assert] The retired Rofi wallpaper picker should not be installed
    ✅ got: #t
    [⚙️ assert] The service should be installed
    ✅ got: #t
    [⚙️ assert] The timer should be installed
    ✅ got: #t
  [🧪 test] Tinted Operandi Reaches The macOS Set
    [⚙️ assert] modus-operandi-tinted must not be swallowed by the generic operandi clause
    ✅ got: #t
    [⚙️ assert] The macOS wallpaper set should not be empty
    ✅ got: #t
  [🧪 test] The Engine Remembers And Restores
    [⚙️ assert] The engine should keep the wallpaper it set
    ✅ got: #t
    [⚙️ assert] The compositor should be able to re-apply that wallpaper
    ✅ got: #t
    [⚙️ assert] next and prev need to know where the current image sits
    ✅ got: #t
  [🧪 test] The Timer Rotates Every Ninety Minutes
    [⚙️ assert] The timer needs the first change to be scheduled
    ✅ got: #t
    [⚙️ assert] And every change after it to repeat
    ✅ got: #t
    [⚙️ assert] The schedule should be the configured interval
    ✅ got: #t
    [⚙️ assert] The wallpaper should change every ninety minutes by default
    ✅ got: 1h30m
    [⚙️ assert] A calendar entry cannot say ninety minutes, so there should not be one
    ✅ got: #f
    [⚙️ assert] The timer should name the service it starts
    ✅ got: #t
    [⚙️ assert] The timer should be enable-able
    ✅ got: #t
  [🧪 test] Unknown Palettes Are Rejected
    [⚙️ assert] An unregistered palette should raise instead of picking nothing
    ✅ success catching error: %exception: (#<&message message: "exception occurred! unknown palette selected (not-a-real-palette), could not determine wallpaper set.">)
  [🧪 test] Every Palette Resolves To Absolute Paths
    [⚙️ assert] No palette may end up without a wallpaper set
    ✅ got: #t
  [🧪 test] The Service Finishes So The Timer Can Fire Again
    [⚙️ assert] The service should be a unit file
    ✅ got: #t
    [⚙️ assert] A simple unit around a renderer that never exits cannot be re-triggered
    ✅ got: #t
    [⚙️ assert] The detached renderer must survive the oneshot finishing
    ✅ got: #t
    [⚙️ assert] The service should run the installed engine
    ✅ got: #t
  [🧪 test] The Engine Finds The Compositor Instead Of Guessing It
    [⚙️ assert] The engine should read WAYLAND_DISPLAY
    ✅ got: #t
    [⚙️ assert] The engine should discover the socket in XDG_RUNTIME_DIR
    ✅ got: #t
    [⚙️ assert] The old guess at the display name must be gone
    ✅ got: #t
    [⚙️ assert] Waiting for the compositor should fail loudly
    ✅ got: #t
  [🧪 test] The Engine Is A POSIX Shell Script
    [⚙️ assert] The engine should run under any sh
    ✅ got: #t
    [⚙️ assert] The engine must not use bash test syntax
    ✅ got: #t
    [⚙️ assert] The engine must not read the bash-only RANDOM
    ✅ got: #t
  [🧪 test] Generic Operandi Uses The Bergen Set
    [⚙️ assert] modus-operandi should stay inside the shared wallpaper tree
    ✅ got: #t
    [⚙️ assert] modus-operandi should include the Bergen backgrounds
    ✅ got: #t
  [🧪 test] The Engine Carries The Whole Palette Set
    [⚙️ assert] One quoted wallpaper per line, and no more
    ✅ got: 2
    [⚙️ assert] Every palette wallpaper should be reachable from the engine
    ✅ got: #t
  [🧪 test] The Engine Detaches Its Renderer
    [⚙️ assert] The renderer should outlive the service that started it
    ✅ got: #t
    [⚙️ assert] The previous swaybg should be replaced, by exact name
    ✅ got: #t
    [⚙️ assert] A renderer that died on connect must be noticed
    ✅ got: #t
    [⚙️ assert] The layer-shell renderer should be selectable
    ✅ got: #t
  [🧪 test] Catalogued Palettes Use Their Own Directories
    [⚙️ assert] catppuccin-mocha should use its own artwork
    ✅ got: #t
    [⚙️ assert] ayu-dark should use the space artwork
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 42924 microseconds

running unit tests from file: niri-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Niri Configuration Suite
  [🧪 test] WezTerm Is The Main Terminal
    [⚙️ assert] Super+T should launch WezTerm
    ✅ got: #t
    [⚙️ assert] The terminal binding should spawn wezterm
    ✅ got: #t
    [⚙️ assert] Alacritty must no longer be referenced
    ✅ got: #t
    [⚙️ assert] kitty must no longer be referenced
    ✅ got: #t
  [🧪 test] Extra Keyboard Options Are Composed With Caps To Ctrl
    [⚙️ assert] Extra XKB options should be comma-joined with ctrl:nocaps
    ✅ got: #t
    [⚙️ assert] A single extra option should still compose with ctrl:nocaps
    ✅ got: #t
    [⚙️ assert] Without ctrl:nocaps the extra options stand alone
    ✅ got: #t
    [⚙️ assert] Repeated configuration does not generate redundancies
    ✅ got: #t
  [🧪 test] Springy macOS Style Motion
    [⚙️ assert] Window opening should be animated
    ✅ got: #t
    [⚙️ assert] Animations should be spring driven
    ✅ got: #t
    [⚙️ assert] Workspace switches should be animated
    ✅ got: #t
  [🧪 test] The Reference Window Opens Focused And Blurred
    [⚙️ assert] The window should be matched by its application id
    ✅ got: #t
    [⚙️ assert] The window should be focused the moment it opens
    ✅ got: #t
    [⚙️ assert] The compositor should blur what is behind the glass
    ✅ got: #t
  [🧪 test] Startup Scripts Exist Under ~/.local/bin
    [⚙️ assert] The startup entry must name the script that the dconf module installs
    ✅ got: #t
    [⚙️ assert] The stale, non-existent startup script name must be gone
    ✅ got: #t
  [🧪 test] Natural Scrolling Follows Its Setting
    [⚙️ assert] Natural scrolling should stay off while the setting is disabled
    ✅ got: #t
    [⚙️ assert] Enabling the setting should emit natural-scroll into the config
    ✅ got: #t
  [🧪 test] Rounded Windows And Soft Shadows
    [⚙️ assert] Windows should get a rounded corner radius
    ✅ got: #t
    [⚙️ assert] Windows should cast a drop shadow
    ✅ got: #t
  [🧪 test] Configuration Serializes To KDL
    [⚙️ assert] The generated config should start with the Heks header
    ✅ got: #t
    [⚙️ assert] An input block should be emitted
    ✅ got: #t
    [⚙️ assert] A binds block should be emitted
    ✅ got: #t
  [🧪 test] Clipboard History Is Recorded
    [⚙️ assert] The clipboard watcher should be started with the session
    ✅ got: #t
  [🧪 test] macOS And Omarchy Parity Bindings
    [⚙️ assert] Super+Space should open the spotlight launcher
    ✅ got: #t
    [⚙️ assert] Toggling floating mode should move to Super+Shift+Space
    ✅ got: #t
    [⚙️ assert] Super+Return should open a terminal, as in Omarchy
    ✅ got: #t
    [⚙️ assert] Super+Q should close the focused window
    ✅ got: #t
    [⚙️ assert] Super+V should browse the clipboard history
    ✅ got: #t
    [⚙️ assert] The palette chooser should be reachable from a binding, on its own view
    ✅ got: #t
    [⚙️ assert] Do-not-disturb should be reachable from a binding
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 1 seconds, -765095 microseconds

running unit tests from file: dconf-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] dconf test suite
  [🧪 test] mk-nested-dconf-writer-commands
    [⚙️ assert] Nested settings should flatten into dconf write commands
    ✅ got: (echo "/org/gnome/desktop/interface/gtk-key-theme --> 'Emacs'" && dconf write "/org/gnome/desktop/interface/gtk-key-theme" "'Emacs'" echo "/org/gnome/desktop/interface/cursor-size --> 24" && dconf write "/org/gnome/desktop/interface/cursor-size" "24" echo "/org/gnome/desktop/interface/enable-animations --> true" && dconf write "/org/gnome/desktop/interface/enable-animations" "true")
  [🧪 test] caps-to-ctrl follows its parameter
    [⚙️ assert] Disabling caps-to-ctrl must write false, not a hardcoded true
    ✅ got: #t
    [⚙️ assert] Enabling caps-to-ctrl must write true
    ✅ got: #t
  [🧪 test] Heks settings are namespaced and complete
    [⚙️ assert] The language should be written under /heks-linux
    ✅ got: #t
    [⚙️ assert] The palette should be exported to dconf
    ✅ got: #t
    [⚙️ assert] The mono font should be exported to dconf
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 4848 microseconds

running unit tests from file: gtk-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] GTK Configuration Suite
  [🧪 test] GTK 3 Settings
    [⚙️ assert] The GTK 3 settings should be an association list
    ✅ got: #t
    [⚙️ assert] GTK 3 windows should show macOS style traffic lights
    ✅ got: close,minimize,maximize:
    [⚙️ assert] The sans font should be configured
    ✅ got: #t
  [🧪 test] dconf Theme Names Come From The Palette
    [⚙️ assert] The icon theme should be palette derived
    ✅ got: 'skeu-icons-violet'
    [⚙️ assert] An accent colour should always be exported
    ✅ got: #t
  [🧪 test] dconf Button Layout
    [⚙️ assert] The window manager should place the traffic lights on the left
    ✅ got: 'close,minimize,maximize:'
  [🧪 test] GTK 4 Settings
    [⚙️ assert] The GTK 4 settings should be an association list
    ✅ got: #t
    [⚙️ assert] GTK 4 windows should show macOS style traffic lights
    ✅ got: close,minimize,maximize:
  [🧪 test] dconf Colour Scheme Follows The Palette
    [⚙️ assert] Dark palettes should request the dark GTK scheme
    ✅ got: 'prefer-dark'
    [⚙️ assert] Light palettes should request the light GTK scheme
    ✅ got: 'prefer-light'
ℹ️ info - ran 1 tasks in: 0 seconds, 16248 microseconds

running unit tests from file: flatpak-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Overrides
  [🧪 test] Extra Applications Join The Union
    [⚙️ assert] An extra application joins the union
    ✅ got: #t
  [🧪 test] A Duplicate Extra Entry Is Installed Once
    [⚙️ assert] The first declaration wins
    ✅ got: 1
  [🧪 test] Category Parameters Are Read At Call Time
    [⚙️ assert] Replacing a category removes its apps
    ✅ got: #f
    [⚙️ assert] The default category is back afterwards
    ✅ got: #t
  [🧪 test] An Extra Can Change An Existing Remote
    [⚙️ assert] The extra declaration wins over the category
    ✅ got: flathub-beta
+----------------------------------------------+
[📑 suite] Catalog
  [🧪 test] The Union Is Sorted And Duplicate-Free
    [⚙️ assert] Applications are sorted by id
    ✅ got: #t
    [⚙️ assert] No id is declared twice
    ✅ got: 61
  [🧪 test] Every Entry Is Installable
    [⚙️ assert] Every id passes the form check
    ✅ got: #t
    [⚙️ assert] Every remote can be bootstrapped
    ✅ got: #t
  [🧪 test] The Curated Additions Are Present
    [⚙️ assert] LibreOffice fills the office gap
    ✅ got: #t
    [⚙️ assert] KeePassXC fills the password-manager gap
    ✅ got: #t
    [⚙️ assert] Telegram is declared
    ✅ got: #t
    [⚙️ assert] DejaDup covers backups
    ✅ got: #t
    [⚙️ assert] qBittorrent covers torrents
    ✅ got: #t
    [⚙️ assert] Krita covers digital painting
    ✅ got: #t
    [⚙️ assert] HandBrake covers video conversion
    ✅ got: #t
    [⚙️ assert] Steam is declared for gaming
    ✅ got: #t
    [⚙️ assert] RustDesk covers remote support
    ✅ got: #t
    [⚙️ assert] Warehouse manages the Flatpak installation
    ✅ got: #t;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling ./test/veritas/unit/image-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/image-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/image-spec.scm"
;;; compiling ./src/heks-linux/image.scm
;;; WARNING: compilation of ./src/heks-linux/image.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/image.scm"
;;; compiling ./src/heks-linux/prelude.scm
;;; WARNING: compilation of ./src/heks-linux/prelude.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/prelude.scm"
;;; compiling ./src/heks-linux/user-settings.scm
;;; WARNING: compilation of ./src/heks-linux/user-settings.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/user-settings.scm"
;;; compiling ./src/heks-linux/packages/zypper.scm
;;; WARNING: compilation of ./src/heks-linux/packages/zypper.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/packages/zypper.scm"
;;; compiling ./test/veritas/unit/wallpaper-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/wallpaper-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/wallpaper-spec.scm"
;;; compiling ./src/heks-linux/wallpaper.scm
;;; WARNING: compilation of ./src/heks-linux/wallpaper.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/wallpaper.scm"
;;; compiling ./src/heks-linux/palette.scm
;;; WARNING: compilation of ./src/heks-linux/palette.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/palette.scm"
;;; compiling ./test/veritas/unit/niri-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/niri-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/niri-spec.scm"
;;; compiling ./src/heks-linux/niri.scm
;;; WARNING: compilation of ./src/heks-linux/niri.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/niri.scm"
;;; compiling ./src/heks-linux/toon.scm
;;; WARNING: compilation of ./src/heks-linux/toon.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/toon.scm"
;;; compiling ./test/veritas/unit/dconf-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/dconf-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/dconf-spec.scm"
;;; compiling ./src/heks-linux/dconf.scm
;;; WARNING: compilation of ./src/heks-linux/dconf.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/dconf.scm"
;;; compiling ./test/veritas/unit/gtk-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/gtk-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/gtk-spec.scm"
;;; compiling ./src/heks-linux/gtk.scm
;;; WARNING: compilation of ./src/heks-linux/gtk.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/gtk.scm"
;;; compiling ./test/veritas/unit/flatpak-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/flatpak-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/flatpak-spec.scm"
;;; compiling ./src/heks-linux/packages/flatpak.scm
;;; WARNING: compilation of ./src/heks-linux/packages/flatpak.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/packages/flatpak.scm"
;;; compiling ./test/veritas/unit/waybar-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/waybar-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/waybar-spec.scm"
;;; compiling ./src/heks-linux/waybar.scm
;;; WARNING: compilation of ./src/heks-linux/waybar.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/waybar.scm"
;;; compiling ./src/heks-linux/rofi.scm
;;; WARNING: compilation of ./src/heks-linux/rofi.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/rofi.scm"
;;; compiling ./src/heks-linux/bridges.scm

    [⚙️ assert] Zen Browser is still declared
    ✅ got: #t
  [🧪 test] Applications Installed By Hand Are Now Declared
    [⚙️ assert] Cantata is in the music category
    ✅ got: #t
    [⚙️ assert] ytdn is in the media category
    ✅ got: #t
    [⚙️ assert] Boxes is in the development category
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Command Vectors
  [🧪 test] Remote Addition Uses The Registered URL
    [⚙️ assert] remote-add carries the .flatpakrepo URL
    ✅ got: (flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo)
    [⚙️ assert] The beta repository is known
    ✅ got: https://dl.flathub.org/beta-repo/flathub-beta.flatpakrepo
    [⚙️ assert] An unknown remote is an error
    ✅ success catching error: misc-error: (#f ~A ~S (flatpak-remote-url: unknown remote: not-a-remote) #f)
  [🧪 test] Install Arguments Are Separate Strings
    [⚙️ assert] The id and remote are never one shell string
    ✅ got: (flatpak install --user --assumeyes flathub org.gnome.Boxes)
    [⚙️ assert] A custom remote is passed through
    ✅ got: (flatpak install --user --assumeyes flathub-beta org.gnome.Boxes)
+----------------------------------------------+
[📑 suite] Application Declarations
  [🧪 test] Malformed Ids Are Rejected
    [⚙️ assert] An underscore in a segment is allowed
    ✅ got: #t
    [⚙️ assert] A bare name is not an id
    ✅ got: #f
    [⚙️ assert] The constructor refuses a bare name
    ✅ success catching error: misc-error: (#f ~A ~S (flatpak-app: not a Flatpak application id: Boxes) #f)
    [⚙️ assert] The constructor refuses whitespace
    ✅ success catching error: misc-error: (#f ~A ~S (flatpak-app: not a Flatpak application id: org.gnome Boxes) #f)
  [🧪 test] The Default Remote Is Flathub
    [⚙️ assert] A declaration produces an application record
    ✅ got: #t
    [⚙️ assert] The ordinary entry needs no remote
    ✅ got: flathub
    [⚙️ assert] An application can name another remote
    ✅ got: flathub-beta
  [🧪 test] Symbols And Strings Are Both Accepted
    [⚙️ assert] A symbol is coerced to the id string
    ✅ got: org.gnome.Boxes
    [⚙️ assert] Ids are always strings in the catalog
    ✅ got: #t
ℹ️ info - ran 4 tasks in: 0 seconds, 40255 microseconds

running unit tests from file: waybar-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Waybar Configuration Suite
  [🧪 test] About This Heks
    [⚙️ assert] The window should read what the machine says it runs
    ✅ got: #t
    [⚙️ assert] It should name the palette the desktop is wearing
    ✅ got: #t
    [⚙️ assert] The uptime should not depend on a flag uptime may not have
    ✅ got: #t
    [⚙️ assert] It should open a window rather than a second Rofi menu
    ✅ got: #t
    [⚙️ assert] A machine with no GTK dialog should still say something
    ✅ got: #t
  [🧪 test] Keyboard Layout Item
    [⚙️ assert] The layout should be the bar's own custom item
    ✅ got: custom/heks-language
    [⚙️ assert] The label should repaint on the bar's layout signal
    ✅ got: 8
    [⚙️ assert] The label is not a poll: the menu pokes it
    ✅ got: once
    [⚙️ assert] The label reads the layouts from the compositor
    ✅ got: #t
    [⚙️ assert] The label bakes in the configured layouts, in the compositor's order
    ✅ got: #t
    [⚙️ assert] The menu switches the layout through the compositor
    ✅ got: #t
    [⚙️ assert] The menu pokes the bar so the label repaints at once
    ✅ got: #t
    [⚙️ assert] The menu is only as tall as the layouts it lists
    ✅ got: #t
  [🧪 test] System Menu Rows
    [⚙️ assert] The menu should answer what this machine is
    ✅ got: #t
    [⚙️ assert] About should open the generated About window
    ✅ got: heks-about
    [⚙️ assert] Spotlight should be reachable from the menu too
    ✅ got: #t
    [⚙️ assert] Search should open the Rofi launcher
    ✅ got: #t
    [⚙️ assert] The second Rofi should wait for the menu to close
    ✅ got: #t
    [⚙️ assert] The session rows are the power menu's own, not a second copy
    ✅ got: systemctl poweroff
    [⚙️ assert] Locking the session should be one row away
    ✅ got: #t
    [⚙️ assert] So should logging out
    ✅ got: #t
    [⚙️ assert] The groups should be separated by rules nobody can pick
    ✅ got: #t
    [⚙️ assert] A rule should be printed as a row Rofi cannot select
    ✅ got: #t
    [⚙️ assert] The menu should be a Rofi script-mode menu
    ✅ got: #t
    [⚙️ assert] The script should hand itself to Rofi as the mode it opens
    ✅ got: #t
    [⚙️ assert] The menu should drop from the top left, under the logo
    ✅ got: #t
    [⚙️ assert] The window should be exactly as tall as its rows
    ✅ got: #t
    [⚙️ assert] Every action should be detached from the menu's stdout
    ✅ got: #t
  [🧪 test] The Bar Wears The Mac Menu Bar
    [⚙️ assert] The bar should carry a gloss, not a flat fill
    ✅ got: #t
    [⚙️ assert] The top edge should be lit
    ✅ got: #t
    [⚙️ assert] The foot of the bar should be shaded
    ✅ got: #t
    [⚙️ assert] The items should carry the menu bar's text shadow
    ✅ got: #t
    [⚙️ assert] Items should keep the menu bar's tight spacing
    ✅ got: 0px 8px
  [🧪 test] Spotlight Glyph
    [⚙️ assert] The launcher should keep a place on the bar
    ✅ got: #t
    [⚙️ assert] It should be the app grid, a glyph no text font claims
    ✅ got: #t
    [⚙️ assert] It should name the solid face instead of trusting fallback
    ✅ got: <span font_family="Font Awesome 6 Free Solid"></span>
    [⚙️ assert] The family belongs on the rule waybar's labels carry
    ✅ got: #t
    [⚙️ assert] A family on the module never reaches the labels
    ✅ got: #f
    [⚙️ assert] A quoted comma list is one family name, so icons are left to fallback
    ✅ got: #f
    [⚙️ assert] A click should open the launcher
    ✅ got: #t
    [⚙️ assert] An open launcher should be replaced, not left to refuse the click
    ✅ got: #t
    [⚙️ assert] The right button should be the window switcher
    ✅ got: #t
    [⚙️ assert] The launcher should be pointable at another one from the settings file
    ✅ got: #t
    [⚙️ assert] The app grid should wear the actions' style
    ✅ got: ((color . #ffffff) (padding . 0px 8px) (margin . 0px) (font-size . 12pt) (font-style . normal))
  [🧪 test] Main Configuration (JSON Source)
    [⚙️ assert] Waybar config should be a list (convertible to JSON)
    ✅ got: #t
    [⚙️ assert] Waybar position should be top by default
    ✅ got: top
    [⚙️ assert] Modules should be represented as vectors for JSON arrays
    ✅ got: #t
    [⚙️ assert] The do-not-disturb indicator should sit on the bar
    ✅ got: #t
  [🧪 test] Clipboard Button
    [⚙️ assert] The clipboard button should sit on the bar
    ✅ got: #t
    [⚙️ assert] The button should be the bar's own custom item
    ✅ got: custom/heks-clipboard
    [⚙️ assert] The glyph should be the clipboard, named in the solid face
    ✅ got: <span font_family="Font Awesome 6 Free Solid"></span>
    [⚙️ assert] Clicking it should browse the clipboard history
    ✅ got: #t
    [⚙️ assert] An open rofi should be replaced, not left to refuse the click
    ✅ got: #t
    [⚙️ assert] The picker should be pointable at another one from the settings file
    ✅ got: #t
    [⚙️ assert] The clipboard glyph should wear the actions' style
    ✅ got: ((color . #ffffff) (padding . 0px 8px) (margin . 0px) (font-size . 12pt) (font-style . normal))
  [🧪 test] Rounded Bar Styling
    [⚙️ assert] The floating bar should carry the configured corner radius
    ✅ got: 0px
    [⚙️ assert] The bar corner radius should be overridable
    ✅ got: 0px
  [🧪 test] Do Not Disturb Indicator
    [⚙️ assert] Clicking the indicator should toggle the mako DND mode
    ✅ got: #t
  [🧪 test] System Menu At The Far Left
    [⚙️ assert] The system menu should be the first thing on the bar
    ✅ got: custom/heks-system-menu
    [⚙️ assert] The power glyph at the end of the row should be gone
    ✅ got: #f
    [⚙️ assert] Its stylesheet rule should be gone with it
    ✅ got: #f
    [⚙️ assert] The first item should say the machine's name, not a glyph
    ✅ got: Heks
    [⚙️ assert] A machine should be able to wear a penguin instead
    ✅ got: 🐧
    [⚙️ assert] A click should open the system menu
    ✅ got: #t
    [⚙️ assert] The right button should still reach the session in one click
    ✅ got: #t
    [⚙️ assert] The logo should be styled as the bar's one bold item
    ✅ got: #t
  [🧪 test] One Ink, No Accent
    [⚙️ assert] The palette's accent should appear nowhere in the bar
    ✅ got: #f
    [⚙️ assert] The bar should not keep a second, dimmer ink
    ✅ got: #f
    [⚙️ assert] Every item should be painted in the palette's one ink
    ✅ got: ()
    [⚙️ assert] The low battery should still be the one exception
    ✅ got: #t
    [⚙️ assert] Every background should be the strip or a veil of the ink
    ✅ got: ()
  [🧪 test] CSS Rules Generation
    [⚙️ assert] CSS list should not be empty
    ✅ got: #t
    [⚙️ assert] CSS should contain a rule for the waybar window
    ✅ got: #t
    [⚙️ assert] Module background should be transparent in CSS
    ✅ got: transparent
  [🧪 test] Wallpaper Button
    [⚙️ assert] The wallpaper button should sit beside the palette
    ✅ got: #t
    [⚙️ assert] Clicking it should open the wall chooser
    ✅ got: #t
    [⚙️ assert] The button is a glyph, not a label
    ✅ got: #t
    [⚙️ assert] The glyph should be the picture icon, named in the solid face
    ✅ got: <span font_family="Font Awesome 6 Free Solid"></span>
    [⚙️ assert] The appearance buttons should share one rule
    ✅ got: #t
    [⚙️ assert] The palette and the wall chooser should wear one style
    ✅ got: ((color . #ffffff) (padding . 0px 8px) (margin . 0px) (font-size . 12pt) (font-style . normal))
  [🧪 test] Documentation Button
    [⚙️ assert] The documentation button should sit on the bar
    ✅ got: #t
    [⚙️ assert] Clicking it should open the documentation view
    ✅ got: #t
    [⚙️ assert] It should ask the compositor for the activation a bar click cannot prove
    ✅ got: #t
    [⚙️ assert] The glyph should be the book, in the solid face that has it
    ✅ got: <span font_family="Font Awesome 6 Free Solid"></span>
    [⚙️ assert] The tooltip should say what the book opens
    ✅ got: #t
  [🧪 test] Every Item Explains Itself On Hover
    [⚙️ assert] A string in tooltip is a bool waybar ignores
    ✅ got: #f
    [⚙️ assert] The reference says what its two buttons do
    ✅ got: #t
    [⚙️ assert] So does the clipboard
    ✅ got: #t
    [⚙️ assert] So does the system menu's logo
    ✅ got: #t
    [⚙️ assert] So does the launcher
    ✅ got: #t
    [⚙️ assert] So does the wall chooser
    ✅ got: #t
    [⚙️ assert] So does the documentation
    ✅ got: #t
    ✅ got: ()
    [⚙️ assert] The volume follows the wheel
    ✅ got: #t
    [⚙️ assert] So does the brightness
    ✅ got: #t
    [⚙️ assert] The music glyph can play and pause without a menu
    ✅ got: #t
    [⚙️ assert] The battery reaches the session menu
    ✅ got: #t
  [🧪 test] Keybinding Reference Button
    [⚙️ assert] The question-mark button should sit on the bar
    ✅ got: #t
    [⚙️ assert] The bar should carry only the new question mark
    ✅ got: #t
    [⚙️ assert] The button should be a circled question mark glyph, in the solid face
    ✅ got: <span font_family="Font Awesome 6 Free Solid"></span>
    [⚙️ assert] Clicking it should ask the compositor to activate it
    ✅ got: #t
    [⚙️ assert] Clicking it should open the keyboard reference
    ✅ got: #t
    [⚙️ assert] The button should be styled like the rest of the bar
    ✅ got: #t
    [⚙️ assert] A right click should still reach the project page
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 106907 microseconds

running unit tests from file: palette-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Palette Registry Suite
  [🧪 test] Every Palette Exposes Its Downstream Themes
    [⚙️ assert] Each palette must map to a GTK, icon, cursor and accent theme
    ✅ got: #t
    [⚙️ assert] Each palette must map to a supported lambdock theme
    ✅ got: #t
  [🧪 test] Every Palette Wears A Skeu Icons Theme
    [⚙️ assert] Every icon theme should come from the Skeu Icons pack
    ✅ got: #t
    [⚙️ assert] A dark palette should ask for the light-ink variant and a light one for the plain variant
    ✅ got: #t
    [⚙️ assert] The icon theme should follow the palette's own accent
    ✅ got: #t
    [⚙️ assert] A light palette should take the bare accent theme
    ✅ got: skeu-icons-green
    [⚙️ assert] GTK's purple accent should map to the violet enamel
    ✅ got: skeu-icons-violet-dark
  [🧪 test] Registry Is Non Empty And Symbolic
    [⚙️ assert] At least one palette should be registered
    ✅ got: #t
    [⚙️ assert] Every palette name should be a symbol
    ✅ got: #t
    [⚙️ assert] Every palette name should be convertible to a string
    ✅ got: #t
  [🧪 test] Golden Gate Is More Transparent
    [⚙️ assert] Both Golden Gate variants must be more transparent than every other palette
    ✅ got: #t
  [🧪 test] Unknown Palettes Are Rejected
    [⚙️ assert] Looking up an unregistered palette should raise
    ✅ success catching error: %exception: (#<&message message: "exception ocurred! unknown palette selected: definitely-not-a-palette">)
  [🧪 test] Every Palette Exposes App Opacities
    [⚙️ assert] Each palette must declare a 0-1 opacity for every app
    ✅ got: #t
  [🧪 test] Every Palette Exposes A Full Colour Set
    [⚙️ assert] Each palette must define primary/text/background colours
    ✅ got: #t
  [🧪 test] Colour Converters
    [⚙️ assert] hex-to-rgba should convert a hex colour
    ✅ got: rgba(255, 0, 0, 1)
    [⚙️ assert] hex-to-rgba should honour the alpha argument
    ✅ got: rgba(0, 0, 255, 0.5)
    [⚙️ assert] hex-to-rgb should convert a hex colour
    ✅ got: rgb(0, 255, 0)
    [⚙️ assert] hex-to-rgba should fall back on bad input
    ✅ got: rgba(0, 0, 0, 1)
  [🧪 test] Dark And Light Classification
    [⚙️ assert] catppuccin-mocha should be a dark palette
    ✅ got: #t
    [⚙️ assert] catppuccin-latte should be a light palette
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 26630 microseconds

running unit tests from file: toon-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-toon-spec-2
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-toon-spec-2/bin
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-toon-spec-2/config
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-toon-spec-2/config/heks-linux
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-toon-spec-2/config/heks-linux/keybindings
[INFO] [2026-10-26 15:37:20 UTC] Retiring the HTML pages heks-toon replaces
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: Attempting override resolution for module (heks-linux toon) with profile 'toon-settings'
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: $XDG_CONFIG_HOME empty/unset, falling back to $HOME/.config
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: Checking for override file at: /root/.config/heks-linux/toon-settings.scm
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: No override file found at /root/.config/heks-linux/toon-settings.scm. Skipping.
[INFO] [2026-10-26 15:37:20 UTC] Removed the retired page launcher: /tmp/heks-toon-spec-2/bin/heks-keybindings
[INFO] [2026-10-26 15:37:20 UTC] Removed the retired page launcher: /tmp/heks-toon-spec-2/bin/heks-wallpaper-gallery
[INFO] [2026-10-26 15:37:20 UTC] Removed the retired page launcher: /tmp/heks-toon-spec-2/bin/heks-palette-gallery
[INFO] [2026-10-26 15:37:20 UTC] Removed the retired page: /tmp/heks-toon-spec-2/config/heks-linux/keybindings/index.html
[INFO] [2026-10-26 15:37:20 UTC] Removed the retired page directory: /tmp/heks-toon-spec-2/config/heks-linux/keybindings
[SUCCESS] [2026-10-26 15:37:20 UTC] Installed heks-toon configuration
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-toon-spec-2
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-toon-spec-2/again
[INFO] [2026-10-26 15:37:20 UTC] Retiring the HTML pages heks-toon replaces
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: Attempting override resolution for module (heks-linux toon) with profile 'toon-settings'
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: $XDG_CONFIG_HOME empty/unset, falling back to $HOME/.config
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: Checking for override file at: /root/.config/heks-linux/toon-settings.scm
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: No override file found at /root/.config/heks-linux/toon-settings.scm. Skipping.
[INFO] [2026-10-26 15:37:20 UTC] Removed the retired page launcher: /tmp/heks-toon-spec-2/again/heks-keybindings
[SUCCESS] [2026-10-26 15:37:20 UTC] Installed heks-toon configuration
[INFO] [2026-10-26 15:37:20 UTC] Retiring the HTML pages heks-toon replaces
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: Attempting override resolution for module (heks-linux toon) with profile 'toon-settings'
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: $XDG_CONFIG_HOME empty/unset, falling back to $HOME/.config
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: Checking for override file at: /root/.config/heks-linux/toon-settings.scm
[INFO] [2026-10-26 15:37:20 UTC] load-local-overrides: No override file found at /root/.config/heks-linux/toon-settings.scm. Skipping.
[SUCCESS] [2026-10-26 15:37:20 UTC] Installed heks-toon configuration

+----------------------------------------------+
[📑 suite] heks-toon Suite
  [🧪 test] The Bar Launches The Views
    [⚙️ assert] The question mark opens the reference
    ✅ got: #t
    [⚙️ assert] The palette glyph opens the palette chooser
    ✅ got: #t
    [⚙️ assert] The picture glyph opens the wall chooser
    ✅ got: #t
  [🧪 test] The Command Is A Parameter
    [⚙️ assert] An overridden command keeps its view
    ✅ got: /tmp/heks-toon palettes
    [⚙️ assert] An overridden command needs no argument
    ✅ got: /tmp/heks-toon
  [🧪 test] The Bar Asks The Compositor To Spawn The Window
    [⚙️ assert] The command should go through niri's spawn first
    ✅ got: #t
    [⚙️ assert] It should fall back to running the program
    ✅ got: #t
  [🧪 test] The Views Are One Program
    [⚙️ assert] The keyboard reference is the default view
    ✅ got: heks-toon
    [⚙️ assert] The wall chooser names its view
    ✅ got: heks-toon walls
    [⚙️ assert] The palette chooser names its view
    ✅ got: heks-toon palettes
    [⚙️ assert] The documentation view names its view
    ✅ got: heks-toon docs
  [🧪 test] The Pages Are Retired
    [⚙️ assert] Every launcher the pages installed should be gone
    ✅ got: #t
    [⚙️ assert] The generated keyboard reference should be gone
    ✅ got: #t
    [⚙️ assert] A launcher this configuration still owns should stay
    ✅ got: #t
    [⚙️ assert] The window is a program, not a generated launcher
    ✅ got: #t
  [🧪 test] Retiring A Second Time Is Harmless
    [⚙️ assert] The launcher should be gone after both runs
    ✅ got: #t
  [🧪 test] The Window Rule Matches The Program
    [⚙️ assert] The application id is the program's own
    ✅ got: org.jointhefreeworld.heks-toon
    [⚙️ assert] Niri should match the window by that id
    ✅ got: #t
    [⚙️ assert] The window should be focused the moment it opens
    ✅ got: #t
    [⚙️ assert] The compositor should blur what is behind the glass
    ✅ got: #t
    [⚙️ assert] Every block should serialize as KDL, not as a record
    ✅ got: #t
    [⚙️ assert] The browser window rule the pages needed should be gone
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 95207 microseconds

running unit tests from file: rofi-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Rofi Configuration and Theming
  [🧪 test] Theme Picker Script
    [⚙️ assert] The theme picker must be a Bash script
    ✅ got: #t
    [⚙️ assert] Choosing a palette must re-render the palette-dependent configs
    ✅ got: #t
    [⚙️ assert] Choosing a palette must persist itself as a local override
    ✅ got: #t
  [🧪 test] Rofi Script Modes Registered
    [⚙️ assert] The launcher, window switcher and power menu modes should be registered
    ✅ got: #t
    [⚙️ assert] The theme picker mode should be registered
    ✅ got: #t
    [⚙️ assert] The power mode should point at the generated script
    ✅ got: #t
  [🧪 test] Rofi Config String Template
    [⚙️ assert] Configuration should inject the configured sans font
    ✅ got: #t
    [⚙️ assert] Icons should be enabled by default
    ✅ got: #t
    [⚙️ assert] Config must reference the generated theme file
    ✅ got: #t
  [🧪 test] Theme Picker Reports Its Progress
    [⚙️ assert] The picker should write its stages in the order it does them
    ✅ got: #t
    [⚙️ assert] A switch that fails should say so
    ✅ got: #t
    [⚙️ assert] The stage should be written where the gallery page reads it
    ✅ got: #t
    [⚙️ assert] The picker should keep the id of the notification it opened
    ✅ got: #t
    [⚙️ assert] The picker should edit that notification rather than add another
    ✅ got: #t
    [⚙️ assert] The id prefix fyi prints should be stripped before reuse
    ✅ got: #t
  [🧪 test] Theme Picker Knows Which Palette Is Running
    [⚙️ assert] The picker should know which palette is currently active
    ✅ got: #t
  [🧪 test] Power Menu Script
    [⚙️ assert] The power menu must be a Bash script
    ✅ got: #t
    [⚙️ assert] The first entry must use the rofi \0icon\x1f separator
    ✅ got: #t
    [⚙️ assert] The power menu should expose a shutdown action
    ✅ got: #t
  [🧪 test] The Inputbar Carries One Button
    [⚙️ assert] The inputbar should carry the red close dot
    ✅ got: #t
    [⚙️ assert] The yellow clear dot should be gone
    ✅ got: #f
    [⚙️ assert] The green mode dot should be gone
    ✅ got: #f
    [⚙️ assert] The clear dot's rule should be gone too
    ✅ got: #f
    [⚙️ assert] The mode dot's rule should be gone too
    ✅ got: #f
    [⚙️ assert] The close dot should still be a real button
    ✅ got: #t
  [🧪 test] Theme Picker Caches Its Swatches
    [⚙️ assert] The swatches should be cached outside the config
    ✅ got: #t
    [⚙️ assert] A palette change should invalidate the cached swatches exactly once
    ✅ got: #t
    [⚙️ assert] ImageMagick should draw the swatches
    ✅ got: #t
  [🧪 test] Theme Picker Wears The Right Emacs Theme
    [⚙️ assert] A palette should carry the Emacs theme it wears, not a rename of its own name
    ✅ got: #t
    [⚙️ assert] The running Emacs should be told about the theme instead of waiting for a restart
    ✅ got: #t
  [🧪 test] Rofi Theme (AList Structure)
    [⚙️ assert] Theme should be a list (AList)
    ✅ got: #t
    [⚙️ assert] Should contain a global wildcard '*' section
    ✅ got: #t
    [⚙️ assert] Global background-color should be transparent
    ✅ got: transparent
    [⚙️ assert] The spotlight panel should be softly rounded
    ✅ got: 18px
    [⚙️ assert] The launcher should carry a one-pixel hairline
    ✅ got: 1px
    [⚙️ assert] The hairline should be the secondary text colour at 15% opacity
    ✅ got: rgba(152, 152, 152, 0.15)
  [🧪 test] Theme Picker Offers Every Palette With A Swatch
    [⚙️ assert] Every registered palette should get a swatch table row
    ✅ got: 41
    [⚙️ assert] Every registered palette should be listed
    ✅ got: #t
    [⚙️ assert] A swatch should be painted from the palette's own colours
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 475168 microseconds

running unit tests from file: prelude-spec.scm, entrypoint: spec

[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/symlinked
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/symlinked/repo
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/symlinked/conf
[INFO] [2026-10-26 15:37:20 UTC] Writing config to file: /tmp/heks-prelude-spec-2/symlinked/conf/linked.conf

ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/installed
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/installed/nested
[INFO] [2026-10-26 15:37:20 UTC] Writing config to file: /tmp/heks-prelude-spec-2/installed/nested/deep.conf
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/bin
[INFO] [2026-10-26 15:37:20 UTC] Writing config to file: /tmp/heks-prelude-spec-2/bin/script.sh
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/a
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/a/b
[INFO] [2026-10-26 15:37:20 UTC] Creating directory: /tmp/heks-prelude-spec-2/a/b/c

+----------------------------------------------+
[📑 suite] Prelude Helper Suite
  [🧪 test] Key Value Rendering
    [⚙️ assert] Pairs should render with the default template
    ✅ got: host=localhost
port=80

    [⚙️ assert] The template should be overridable
    ✅ got: host = localhost

    [⚙️ assert] CSS pairs should render indented
    ✅ got:   color: black;

  [🧪 test] List Flattening
    [⚙️ assert] Nested lists should be flattened
    ✅ got: (1 2 3 4 5)
    [⚙️ assert] Flattening the empty list should stay empty
    ✅ got: ()
  [🧪 test] Nested Structures Render As Ini Sections
    [⚙️ assert] A nested list should become an INI section header
    ✅ got: 
[settings]
port=8080

  [🧪 test] Config Files Install Into Missing Directories
    [⚙️ assert] The installer should create its directory tree
    ✅ got: #t
    [⚙️ assert] The installer should write the contents
    ✅ got: hello

    [⚙️ assert] The default permissions should be #o644
    ✅ got: 420
  [🧪 test] Executable Config Files Get Executable Permissions
    [⚙️ assert] Passing #o755 should make the file executable
    ✅ got: 493
  [🧪 test] Config Files Are Written Through Symlinks
    [⚙️ assert] A dotfile linked into a repository should stay linked
    ✅ got: symlink
    [⚙️ assert] Reading through the link should give the new contents
    ✅ got: new

    [⚙️ assert] The file the link points at should be the one rewritten
    ✅ got: new

  [🧪 test] Directory Trees Are Created Recursively
    [⚙️ assert] Missing parents should be created, not just the leaf
    ✅ got: #t
    [⚙️ assert] The created leaf should really be a directory
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 9482 microseconds

running unit tests from file: fontconfig-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Fontconfig Configuration Suite
  [🧪 test] Text Is Smoothed The Way A Mac Smooths It
    [⚙️ assert] Text should be smoothed in grey, not in subpixels
    ✅ got: none
    [⚙️ assert] Glyphs should be hinted lightly, so the design survives
    ✅ got: hintslight
    [⚙️ assert] The LCD filter should leave the glyphs alone
    ✅ got: lcdnone
    [⚙️ assert] Antialiasing should be a boolean, not a keyword
    ✅ got: bool
    [⚙️ assert] Antialiasing should be on
    ✅ got: true
  [🧪 test] The File Is Valid Fontconfig XML
    [⚙️ assert] The file should open with an XML declaration
    ✅ got: #t
    [⚙️ assert] It should carry the DOCTYPE fontconfig's own files carry
    ✅ got: #t
    [⚙️ assert] It should not carry a namespace fontconfig rejects
    ✅ got: #f
    [⚙️ assert] The rules should be one font-targeted match
    ✅ got: #t
    [⚙️ assert] The renderer should return the fontconfig element
    ✅ got: fontconfig
  [🧪 test] Emboldening Is Off Unless Asked For
    [⚙️ assert] One match by default: the size-gated rule is not written
    ✅ got: 1
    [⚙️ assert] A second, size-gated match appears when faking bold
    ✅ got: 2
    [⚙️ assert] By default there is no size gate to read
    ✅ got: #t
    [⚙️ assert] The faking should be gated on the point size
    ✅ got: #t
    [⚙️ assert] The gate should use the configured size
    ✅ got: #t
  [🧪 test] Every Rule Assigns
    [⚙️ assert] Every edit should assign, not merely prefer
    ✅ got: ()
  [🧪 test] The Rules Are Overridable
    [⚙️ assert] A machine that wants subpixel rendering should be able to ask for it
    ✅ got: rgb
    [⚙️ assert] And a machine that wants no smoothing at all
    ✅ got: false
ℹ️ info - ran 1 tasks in: 0 seconds, 20247 microseconds

running unit tests from file: bridges-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] bridges test suite
  [🧪 test] Bash Bridge String Generation
    [⚙️ assert] Bash bridge should start with correct shebang
    ✅ got: #t
    [⚙️ assert] Bash bridge should export the highlight variable
    ✅ got: #t
  [🧪 test] Emacs Bridge Elisp Generation
    [⚙️ assert] Bridge output should be a list (S-expression)
    ✅ got: #t
    [⚙️ assert] Bridge output should be wrapped in a 'progn
    ✅ got: progn
    [⚙️ assert] Should configure mono font
    ✅ got: #t
    [⚙️ assert] Should configure the sans font
    ✅ got: #t
    [⚙️ assert] Should configure the Emacs theme
    ✅ got: #t
  [🧪 test] Emacs Bridge Carries The Settings Values
    [⚙️ assert] The mono font setting should travel across the bridge
    ✅ got: Intel One Mono
    [⚙️ assert] The clone directory should travel across the bridge
    ✅ got: ~/Hacking/heks-linux
ℹ️ info - ran 1 tasks in: 0 seconds, 4469 microseconds

running unit tests from file: wezterm-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Binding Serialization
  [🧪 test] Bindings Render As Inline Lua Tables
    [⚙️ assert] A key assignment is one inline table
    ✅ got: { key = 'y', mods = 'CTRL', action = act.PasteFrom 'Clipboard' }
    [⚙️ assert] A named key keeps its WezTerm spelling
    ✅ got: { key = 'PageUp', mods = 'SHIFT', action = act.ScrollByPage(-1) }
  [🧪 test] Prefix Entries Carry No Modifier
    [⚙️ assert] The runtime adds the modifiers a prefix needs
    ✅ got: { key = '2', action = act.TogglePaneZoomState }
+----------------------------------------------+
[📑 suite] Emacs Prefix
  [🧪 test] Control+X Opens The Prefix Table
    [⚙️ assert] Control+X activates the table
    ✅ got: #t
    [⚙️ assert] An unknown second key leaves the table
    ✅ got: #t
    [⚙️ assert] An abandoned prefix gives up on its own
    ✅ got: #t
  [🧪 test] A Prefix Matches With Control Held Or Released
    [⚙️ assert] Each entry is expanded into both spellings
    ✅ got: #t
  [🧪 test] Emacs Commands Keep Their Keys
    [⚙️ assert] Control+X 2 splits below
    ✅ got: #t
    [⚙️ assert] Control+X 3 splits right
    ✅ got: #t
    [⚙️ assert] Control+X 0 closes the tab
    ✅ got: #t
    [⚙️ assert] Control+X t opens a new tab
    ✅ got: #t
    [⚙️ assert] Control+X 1 leaves one pane
    ✅ got: #t
    [⚙️ assert] Control+X o moves to the other tab
    ✅ got: #t
    [⚙️ assert] Control+X b picks a tab like a buffer
    ✅ got: #t
    [⚙️ assert] Control+X g quits the prefix
    ✅ got: #t
    [⚙️ assert] Control+X <right> moves to the next tab
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Passthrough
  [🧪 test] Emacs And The Pager Own The Keyboard
    [⚙️ assert] Emacs is declared as an owning application
    ✅ got: #t
    [⚙️ assert] less is declared as an owning application
    ✅ got: #t
    [⚙️ assert] Emacs is in the default application list
    ✅ got: #t
    [⚙️ assert] less is in the default application list
    ✅ got: #t
  [🧪 test] The Application List Is Matched On The Base Name
    [⚙️ assert] A full path such as /usr/bin/less still matches
    ✅ got: #t
    [⚙️ assert] The directory part of the process name is dropped
    ✅ got: #t
    [⚙️ assert] A version suffix is allowed, so python3.13 matches python
    ✅ got: #t
    [⚙️ assert] The base name is matched against the compiled patterns
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Lua Value Serialization
  [🧪 test] Tables Are Laid Out One Entry Per Line
    [⚙️ assert] An object becomes an indented table
    ✅ got: {
  foreground = '#ffffff',
  background = '#1d2021',
}
    [⚙️ assert] An array becomes an indented table
    ✅ got: {
  'bash',
}
    [⚙️ assert] A compact table stays on one line
    ✅ got: { left = 16, top = 4 }
  [🧪 test] Scalars Render As Lua Literals
    [⚙️ assert] Booleans render unquoted
    ✅ got: true
    [⚙️ assert] False renders unquoted
    ✅ got: false
    [⚙️ assert] Numbers render unquoted
    ✅ got: 12
    [⚙️ assert] Strings are single-quoted so they need no escapes
    ✅ got: 'bash'
  [🧪 test] Table Names Are Bracketed When Lua Needs It
    [⚙️ assert] A valid identifier is emitted bare
    ✅ got: scrollback_lines
    [⚙️ assert] A name with a dash is bracketed
    ✅ got: ['emacs-cx']
  [🧪 test] Literal Lua Passes Through
    [⚙️ assert] A raw fragment is emitted verbatim
    ✅ got: act.TogglePaneZoomState
    [⚙️ assert] Raw fragments are recognisable
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Guarded Bindings
  [🧪 test] The Bare Defaults Are Re-Registered Through The Guard
    [⚙️ assert] Control+Tab still switches tabs
    ✅ got: #t
    [⚙️ assert] Alt+Enter still toggles full screen
    ✅ got: #t
    [⚙️ assert] Control+Insert still copies the selection
    ✅ got: #t
    [⚙️ assert] Every guarded default is registered exactly once
    ✅ got: 6
  [🧪 test] The Emacs Chords Are Registered
    [⚙️ assert] Control+Y pastes
    ✅ got: #t
    [⚙️ assert] Alt+W copies
    ✅ got: #t
    [⚙️ assert] Control+= grows the font, as text-scale-increase does
    ✅ got: #t
    [⚙️ assert] Control+- shrinks the font, as text-scale-decrease does
    ✅ got: #t
    [⚙️ assert] Shift+Left moves to the previous tab
    ✅ got: #t
    [⚙️ assert] Shift+Right moves to the next tab
    ✅ got: #t
    [⚙️ assert] Shift+Up also moves to the previous tab
    ✅ got: #t
    [⚙️ assert] Shift+Down also moves to the next tab
    ✅ got: #t
    [⚙️ assert] Shift+PageUp pages the scrollback
    ✅ got: #t
  [🧪 test] The Emacs Page Keys Are Claimed
    [⚙️ assert] Control+V pages the scrollback forward
    ✅ got: #t
    [⚙️ assert] Alt+V pages the scrollback back
    ✅ got: #t
  [🧪 test] Every Chord Is Guarded
    [⚙️ assert] Chords are dispatched through a callback
    ✅ got: #t
    [⚙️ assert] The callback asks the pane which process is in front
    ✅ got: #t
    [⚙️ assert] The chord is re-sent to the application
    ✅ got: #t
    [⚙️ assert] The terminal only acts when the keyboard is free
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Modifier Translation
  [🧪 test] Short Modifiers Use WezTerm Spelling
    [⚙️ assert] Modifiers are joined with a vertical bar
    ✅ got: CTRL|SHIFT
    [⚙️ assert] Alt and Super are spelled out
    ✅ got: ALT|SUPER
    [⚙️ assert] Unknown modifiers pass through
    ✅ got: CTRL|Custom
+----------------------------------------------+
[📑 suite] Generated File
  [🧪 test] Settings And Colours Follow The System
    [⚙️ assert] Scrollback matches the other terminals
    ✅ got: #t
    [⚙️ assert] Opacity is set
    ✅ got: #t
    [⚙️ assert] The font is a fallback list
    ✅ got: #t
    [⚙️ assert] Padding is applied on every side
    ✅ got: #t
    [⚙️ assert] The shell is bash, as in the other terminals
    ✅ got: #t
    [⚙️ assert] The background follows the selected palette
    ✅ got: #t
    [⚙️ assert] The foreground follows the selected palette
    ✅ got: #t
  [🧪 test] Title Bar And Resize Border Are Requested
    [⚙️ assert] A title bar and a resize border are requested
    ✅ got: #t
    [⚙️ assert] No window is undecorated
    ✅ got: #f
    [⚙️ assert] The title bar is not dropped for the border
    ✅ got: #f
    [⚙️ assert] No window buttons are drawn into the tab bar
    ✅ got: #f
    [⚙️ assert] The decorations do not depend on the platform
    ✅ got: #f
    [⚙️ assert] The tab bar is enabled
    ✅ got: #t
    [⚙️ assert] The tab bar is the one WezTerm paints itself
    ✅ got: #t
    [⚙️ assert] The tab bar stays visible for a single pane, as the title bar
    ✅ got: #t
    [⚙️ assert] The tab bar carries a close button
    ✅ got: #t
  [🧪 test] Meta And The Keyboard Protocol Are Configured
    [⚙️ assert] Left Option sends Meta
    ✅ got: #t
    [⚙️ assert] Right Option sends Meta
    ✅ got: #t
    [⚙️ assert] The kitty keyboard protocol is left available to applications
    ✅ got: #t
  [🧪 test] Control+C Stays The Interrupt
    [⚙️ assert] Control+C is never taken by the terminal
    ✅ got: #f
  [🧪 test] The File Is Self-Describing
    [⚙️ assert] The file carries a generated-file header
    ✅ got: #t
    [⚙️ assert] The header says not to edit the file
    ✅ got: #t
    [⚙️ assert] The header names the source of truth
    ✅ got: #t
    [⚙️ assert] The configuration is built from the builder
    ✅ got: #t
    [⚙️ assert] The file returns the configuration
    ✅ got: #t
    [⚙️ assert] Every section banner is the same width
    ✅ got: #t
ℹ️ info - ran 7 tasks in: 1 seconds, -681390 microseconds

running unit tests from file: zen-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Generated File
  [🧪 test] The File Is Self-Describing
    [⚙️ assert] The file carries a generated-file header
    ✅ got: #t
    [⚙️ assert] The header says not to edit the file
    ✅ got: #t
    [⚙️ assert] The header names the source of truth
    ✅ got: #t
  [🧪 test] The DevTools Theme Follows The Palette
    [⚙️ assert] A dark palette asks for the dark theme
    ✅ got: #t
    [⚙️ assert] A light palette asks for the light theme
    ✅ got: #t
  [🧪 test] The Browser Toolbox Is Enabled With A Prompt
    [⚙️ assert] Chrome debugging is available
    ✅ got: #t
    [⚙️ assert] Remote debugging is available
    ✅ got: #t
    [⚙️ assert] Connecting still asks for confirmation
    ✅ got: #t
    [⚙️ assert] The external editor is off by default
    ✅ got: #f
  [🧪 test] Vertical Tabs Are Declared
    [⚙️ assert] The tab bar is vertical
    ✅ got: #t
    [⚙️ assert] The tab bar stays on the left
    ✅ got: #t
    [⚙️ assert] The sidebar starts expanded
    ✅ got: #t
    [⚙️ assert] The sidebar has a laptop-friendly width
    ✅ got: #t
  [🧪 test] uBlock Origin Is Allowed To Start Enabled
    [⚙️ assert] Side-loaded extensions are not disabled
    ✅ got: #t
    [⚙️ assert] The profile scope is enabled
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Value Serialization
  [🧪 test] Strings Are Quoted And Escaped
    [⚙️ assert] A plain string is double-quoted
    ✅ got: "dark"
    [⚙️ assert] A quote inside the value is escaped
    ✅ got: "a \"quoted\" path"
    [⚙️ assert] A backslash inside the value is escaped
    ✅ got: "C:\\tmp"
  [🧪 test] Scalars Render As JavaScript Literals
    [⚙️ assert] Booleans render unquoted
    ✅ got: true
    [⚙️ assert] False renders unquoted
    ✅ got: false
    [⚙️ assert] Zero is a pref value, not an absence
    ✅ got: 0
    [⚙️ assert] Integers render without Scheme punctuation
    ✅ got: 300
  [🧪 test] Preference Lines Are user_pref Calls
    [⚙️ assert] A boolean pref keeps its name and literal
    ✅ got: user_pref("zen.tabs.vertical", true);
    [⚙️ assert] A numeric pref has no quotes
    ✅ got: user_pref("zen.view.sidebar-expanded.max-width", 300);
+----------------------------------------------+
[📑 suite] Parameters
  [🧪 test] Hardening Can Be Turned Off
    [⚙️ assert] Turning hardening off drops the block
    ✅ got: #f
    [⚙️ assert] The layout is still declared
    ✅ got: #t
  [🧪 test] DevTools Can Be Turned Off
    [⚙️ assert] The Toolbox prefs disappear together
    ✅ got: #f
    [⚙️ assert] The external editor is enabled by its parameter
    ✅ got: #t
    [⚙️ assert] The editor path follows its parameter
    ✅ got: #t
    [⚙️ assert] The editor receives the line number
    ✅ got: #t
    [⚙️ assert] The editor prefs disappear once it is unset
    ✅ got: #f
  [🧪 test] The Site-Breaking Prefs Are Opt-In
    [⚙️ assert] Fingerprinting protection is off, and says so
    ✅ got: #t
    [⚙️ assert] It is rendered when asked for
    ✅ got: #t
    [⚙️ assert] The fingerprinting blocker travels with it
    ✅ got: #t
    [⚙️ assert] HTTPS-Only mode is off, and says so
    ✅ got: #t
    [⚙️ assert] It is rendered when asked for
    ✅ got: #t
    [⚙️ assert] A trimmed profile is put back to Firefox's own policy
    ✅ got: #t
  [🧪 test] Adblock Prefs Can Be Turned Off
    [⚙️ assert] The sideload scopes disappear
    ✅ got: #f
  [🧪 test] Local Overrides Are Rendered Last
    [⚙️ assert] The override line is present
    ✅ got: #t
    [⚙️ assert] The generated line stays, so the override wins on load
    ✅ got: #t
  [🧪 test] Tracking Protection Is On By Default
    [⚙️ assert] The custom ETP category keeps the individual prefs in charge
    ✅ got: #t
    [⚙️ assert] Tracking protection is on
    ✅ got: #t
    [⚙️ assert] Cryptominer blocking is on
    ✅ got: #t
    [⚙️ assert] Link prefetching is off
    ✅ got: #t
  [🧪 test] Compact Mode Is Opt-In
    [⚙️ assert] Compact mode is off by default
    ✅ got: #f
    [⚙️ assert] Turning it on adds the master preference
    ✅ got: #t
    [⚙️ assert] The address bar stays visible
    ✅ got: #t
ℹ️ info - ran 3 tasks in: 0 seconds, 123409 microseconds

running unit tests from file: mako-spec.scm, entrypoint: spec


ℹ️ info - shuffled with seed 229799313 (replay with VERITAS_SEED=229799313)
+----------------------------------------------+
[📑 suite] Mako Notification Suite
  [🧪 test] Banners Match The macOS Look
    [⚙️ assert] Notification banners should be rounded
    ✅ got: #t
    [⚙️ assert] Notification banners should carry a one-pixel hairline edge
    ✅ got: #t;;; WARNING: compilation of ./src/heks-linux/bridges.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/bridges.scm"
;;; compiling ./test/veritas/unit/palette-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/palette-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/palette-spec.scm"
;;; compiling ./test/veritas/unit/toon-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/toon-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/toon-spec.scm"
;;; compiling ./test/veritas/unit/rofi-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/rofi-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/rofi-spec.scm"
;;; compiling ./test/veritas/unit/prelude-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/prelude-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/prelude-spec.scm"
;;; compiling ./test/veritas/unit/fontconfig-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/fontconfig-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/fontconfig-spec.scm"
;;; compiling ./src/heks-linux/fontconfig.scm
;;; WARNING: compilation of ./src/heks-linux/fontconfig.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/fontconfig.scm"
;;; compiling ./test/veritas/unit/bridges-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/bridges-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/bridges-spec.scm"
;;; compiling ./test/veritas/unit/wezterm-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/wezterm-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/wezterm-spec.scm"
;;; compiling ./src/heks-linux/wezterm.scm
;;; WARNING: compilation of ./src/heks-linux/wezterm.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/wezterm.scm"
;;; compiling ./test/veritas/unit/zen-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/zen-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/zen-spec.scm"
;;; compiling ./src/heks-linux/zen.scm
;;; WARNING: compilation of ./src/heks-linux/zen.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/zen.scm"
;;; compiling ./test/veritas/unit/mako-spec.scm
;;; WARNING: compilation of ./test/veritas/unit/mako-spec.scm failed:
;;; failed to create path for auto-compiled file "./test/veritas/unit/mako-spec.scm"
;;; compiling ./src/heks-linux/mako.scm
;;; WARNING: compilation of ./src/heks-linux/mako.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/mako.scm"

    [⚙️ assert] The edge should be the secondary text colour at 15% opacity
    ✅ got: #t
  [🧪 test] Do Not Disturb Mode Is Declared
    [⚙️ assert] A do-not-disturb mode section should exist so makoctl can toggle it
    ✅ got: #t
    [⚙️ assert] While in do-not-disturb, notifications must not be drawn
    ✅ got: #t
  [🧪 test] Notification behaviour is configured
    [⚙️ assert] Notification history should be kept
    ✅ got: #t
    [⚙️ assert] A default timeout should be set
    ✅ got: #t
    [⚙️ assert] Left click should dismiss a notification
    ✅ got: #t
  [🧪 test] Banner Background Follows Palette Opacity
    [⚙️ assert] The default banner should use its palette mako-opacity
    ✅ got: #t
    [⚙️ assert] Golden Gate should render its own, more transparent banner
    ✅ got: #t
ℹ️ info - ran 1 tasks in: 0 seconds, 18568 microseconds

finished running tests

  Execute command:
guix time-machine --channels=channels.scm -- shell -m manifest.scm --container -- guile -L ./src -L ./test -c '((@ (veritas runner) run-tests))'

Executing: guix time-machine --channels=channels.scm -- shell -m manifest.scm --container -- guile -L ./src -L ./test -c '((@ (veritas runner) run-tests))'

Executing: genhtml reports/lcov/*.info --output-directory reports/html >/dev/null 2>&1

→ running command: cd /etc/byggsteg/job-clone/heks-linux/trunk && sudo maak deploy



--------------------------------------------------------------

Maak 0.14.0: the infinitely extensible command runner

Loading tasks from Maak file: /etc/byggsteg/job-clone/heks-linux/trunk/maak.scm

Executing Maak tasks: deploy


--------------------------------------------------------------

=> Running Maak task: deploy

  Deploy the project's documentation.
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/maak.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/maak.scm.go
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/maak.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/maak.scm.go
channels.scm:54:6: warning: channel 'jointhefreeworld' is not trusted
[INFO] [2026-10-26 16:37:22 CET] load-local-overrides: Attempting override resolution for module (heks-linux user-settings) with profile 'local-settings'
[INFO] [2026-10-26 16:37:22 CET] load-local-overrides: $XDG_CONFIG_HOME empty/unset, falling back to $HOME/.config
[INFO] [2026-10-26 16:37:22 CET] load-local-overrides: Checking for override file at: /root/.config/heks-linux/local-settings.scm
[INFO] [2026-10-26 16:37:22 CET] load-local-overrides: No override file found at /root/.config/heks-linux/local-settings.scm. Skipping.
API documentation saved to doc/api
channels.scm:54:6: warning: channel 'jointhefreeworld' is not trusted
index.texi:2529: warning: @end should only appear at the beginning of a line
index.texi:2543: warning: @end should only appear at the beginning of a line
index.texi:2558: warning: @end should only appear at the beginning of a line
index.texi: warning: must specify a title with a title command or @top

  Execute command:
guix time-machine --channels=channels.scm -- shell -m manifest.scm -- documenta api ./src/heks-linux

Executing: guix time-machine --channels=channels.scm -- shell -m manifest.scm -- documenta api ./src/heks-linux

  Execute command:
guix time-machine --channels=channels.scm -- shell -m manifest.scm -- texi2any -v --html --css-ref=https://jointhefreeworld.org/static/css/jointhefreeworld.css -o index_html ./doc/api/index.texi

Executing: guix time-machine --channels=channels.scm -- shell -m manifest.scm -- texi2any -v --html --css-ref=https://jointhefreeworld.org/static/css/jointhefreeworld.css -o index_html ./doc/api/index.texi
renamed './index_html' -> './doc/api-dist'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/API.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fbridges.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fbtop.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fcontainers.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fdconf.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005ffastfetch.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005ffontconfig.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fgif.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fgit.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fgtk.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fimage.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005flambdock.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fmako.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fniri.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fpackages_005fflatpak.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fpackages_005fzypper.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fpalette.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fprelude.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005frmpc.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005frofi.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005ftoon.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fuser_002dsettings.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fwallpaper.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fwaybar.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fwezterm.html'
removed '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fzen.html'
removed directory '/srv/http/jointhefreeworld.org/api-docs/heks-linux'
mkdir: created directory '/srv/http/jointhefreeworld.org/api-docs/heks-linux'
renamed 'doc/api-dist/API.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/API.html'
renamed 'doc/api-dist/heks_002dlinux_005fbridges.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fbridges.html'
renamed 'doc/api-dist/heks_002dlinux_005fbtop.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fbtop.html'
renamed 'doc/api-dist/heks_002dlinux_005fcontainers.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fcontainers.html'
renamed 'doc/api-dist/heks_002dlinux_005fdconf.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fdconf.html'
renamed 'doc/api-dist/heks_002dlinux_005ffastfetch.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005ffastfetch.html'
renamed 'doc/api-dist/heks_002dlinux_005ffontconfig.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005ffontconfig.html'
renamed 'doc/api-dist/heks_002dlinux_005fgif.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fgif.html'
renamed 'doc/api-dist/heks_002dlinux_005fgit.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fgit.html'
renamed 'doc/api-dist/heks_002dlinux_005fgtk.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fgtk.html'
renamed 'doc/api-dist/heks_002dlinux_005fimage.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fimage.html'
renamed 'doc/api-dist/heks_002dlinux_005flambdock.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005flambdock.html'
renamed 'doc/api-dist/heks_002dlinux_005fmako.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fmako.html'
renamed 'doc/api-dist/heks_002dlinux_005fniri.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fniri.html'
renamed 'doc/api-dist/heks_002dlinux_005fpackages_005fflatpak.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fpackages_005fflatpak.html'
renamed 'doc/api-dist/heks_002dlinux_005fpackages_005fzypper.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fpackages_005fzypper.html'
renamed 'doc/api-dist/heks_002dlinux_005fpalette.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fpalette.html'
renamed 'doc/api-dist/heks_002dlinux_005fprelude.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fprelude.html'
renamed 'doc/api-dist/heks_002dlinux_005frmpc.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005frmpc.html'
renamed 'doc/api-dist/heks_002dlinux_005frofi.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005frofi.html'
renamed 'doc/api-dist/heks_002dlinux_005ftoon.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005ftoon.html'
renamed 'doc/api-dist/heks_002dlinux_005fuser_002dsettings.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fuser_002dsettings.html'
renamed 'doc/api-dist/heks_002dlinux_005fwallpaper.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fwallpaper.html'
renamed 'doc/api-dist/heks_002dlinux_005fwaybar.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fwaybar.html'
renamed 'doc/api-dist/heks_002dlinux_005fwezterm.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fwezterm.html'
renamed 'doc/api-dist/heks_002dlinux_005fzen.html' -> '/srv/http/jointhefreeworld.org/api-docs/heks-linux/heks_002dlinux_005fzen.html'

Executing: mv -v doc/api-dist/* /srv/http/jointhefreeworld.org/api-docs/heks-linux
removed 'doc/api/index.texi'
removed directory 'doc/api'
removed directory 'doc/api-dist'
removed directory 'doc'
inspect the job's lambda expression
(lambda()
  `((task . ("maak-test" "maak-deploy"))
    (project . "heks-linux")
    (branch-name . "trunk")
    (clone-url . "https://codeberg.org/jjba23/heks-linux.git")
    (env . ((HOME . "/tmp")))))