heks-linux-99d08709-596f

job succeeded

starting new job...


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

HEAD is now at 8a6b317 feat: Improve lambdock look
From https://codeberg.org/jjba23/heks-linux
   8a6b317..defee08  trunk      -> origin/trunk
Updating 8a6b317..defee08
Fast-forward
 channels.scm | 6 +++---
 maak.scm     | 8 ++++----
 2 files changed, 7 insertions(+), 7 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 defee08180c5e0fc0924913dc2475e26e45cae5f
Author: Josep Bigorra <jjbigorra@gmail.com>
Date:   Mon Oct 26 10:59:43 2026 +0100

    feat: Pin jointhefreeworld at veritas 0.9.0
    
    Move the Guix channel and the nix-jointhefreeworld revision together, so the
    two halves of the collection stay on the same release.  veritas 0.9.0 is the
    release that makes coverage work (LCOV, JSON, Cobertura, JaCoCo and a one-page
    HTML report) and fixes two fiber-safety bugs in the test helpers.
    
    🤖 Generated with [ECA](https://eca.dev) (deepseek/deepseek-flash)
    
    Co-Authored-By: eca-agent <git@eca.dev>

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: 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'...
Authenticating channel 'guix', commits 9edb3f6 to 973dbc8 (1,387 new commits)...
Updating channel 'jointhefreeworld' from Git repository at 'https://codeberg.org/jjba23/guix-jointhefreeworld'...
Authenticating channel 'jointhefreeworld', commits b0ac3f0 to e3ab05f (45 new commits)...
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%
looking for substitutes on 'https://ci.guix.gnu.org'... 100.0%
The following derivations will be built:
  /gnu/store/hb9z8c3s2jmn5zhnq777maa0iqz3bd5a-inferior-script.scm.drv
  /gnu/store/i15lw9wn5i0qcqngnxqvbc0j60fz51yj-jointhefreeworld.drv
  /gnu/store/h7wpqjaqk24hnbpdqpiinpvxqpjj88sr-profile.drv
  /gnu/store/q1slgyjzl71h71c54c1azjgi3gjrg50n-inferior-script.scm.drv
  /gnu/store/idib620knjqyh0n732vz6vkw4y5ybcf0-profile.drv

building /gnu/store/hb9z8c3s2jmn5zhnq777maa0iqz3bd5a-inferior-script.scm.drv...
building /gnu/store/i15lw9wn5i0qcqngnxqvbc0j60fz51yj-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/q1slgyjzl71h71c54c1azjgi3gjrg50n-inferior-script.scm.drv...
building package cache...
building profile with 2 packages...
The following derivation will be built:
  /gnu/store/6gswpvxcpvyh3bf0q3c2gdnhmxa4f8zs-profile.drv

building CA certificate bundle...
listing Emacs sub-directories...
building fonts directory...
building directory of Info manuals...
building profile with 12 packages...

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

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

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


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

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

ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 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] 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
  [🧪 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
ℹ️ info - ran 1 tasks in: 0 seconds, 6511 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 suite] Mako Notification Suite
  [🧪 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] 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
  [🧪 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
    [⚙️ assert] The edge should be the secondary text colour at 15% opacity
    ✅ 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
ℹ️ info - ran 1 tasks in: 0 seconds, 12774 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 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] Lua Value Serialization
  [🧪 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] 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] Literal Lua Passes Through
    [⚙️ assert] A raw fragment is emitted verbatim
    ✅ got: act.TogglePaneZoomState
    [⚙️ assert] Raw fragments are recognisable
    ✅ got: #t
  [🧪 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'
+----------------------------------------------+
[📑 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] 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
  [🧪 test] A Prefix Matches With Control Held Or Released
    [⚙️ assert] Each entry is expanded into both spellings
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Binding Serialization
  [🧪 test] Prefix Entries Carry No Modifier
    [⚙️ assert] The runtime adds the modifiers a prefix needs
    ✅ got: { key = '2', action = act.TogglePaneZoomState }
  [🧪 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) }
+----------------------------------------------+
[📑 suite] Guarded Bindings
  [🧪 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
  [🧪 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 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 Page Keys Are Claimed
    [⚙️ assert] Control+V pages the scrollback forward
    ✅ got: #t
    [⚙️ assert] Alt+V pages the scrollback back
    ✅ got: #t
+----------------------------------------------+
[📑 suite] Generated File
  [🧪 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] 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] 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
+----------------------------------------------+
[📑 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
ℹ️ info - ran 7 tasks in: 1 seconds, -806824 microseconds

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

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

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

+----------------------------------------------+
[📑 suite] Prelude Helper Suite
  [🧪 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] Nested Structures Render As Ini Sections
    [⚙️ assert] A nested list should become an INI section header
    ✅ got: 
[settings]
port=8080

  [🧪 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
  [🧪 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] Executable Config Files Get Executable Permissions
    [⚙️ assert] Passing #o755 should make the file executable
    ✅ got: 493
  [🧪 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] 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
ℹ️ info - ran 1 tasks in: 0 seconds, 14924 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 suite] Rofi Configuration and Theming
  [🧪 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] 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 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] 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 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] 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 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] 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 Knows Which Palette Is Running
    [⚙️ assert] The picker should know which palette is currently active
    ✅ got: #t
  [🧪 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, 332034 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 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 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
  [🧪 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
ℹ️ info - ran 1 tasks in: 0 seconds, 4897 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 suite] GTK Configuration Suite
  [🧪 test] dconf Button Layout
    [⚙️ assert] The window manager should place the traffic lights on the left
    ✅ got: 'close,minimize,maximize:'
  [🧪 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] 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'
  [🧪 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
ℹ️ info - ran 1 tasks in: 0 seconds, 5157 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 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] 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
  [🧪 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
+----------------------------------------------+
[📑 suite] Parameters
  [🧪 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] 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] 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] 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
  [🧪 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] Hardening Can Be Turned Off
    [⚙️ assert] Turning hardening off drops the block
    ✅ got: #f
    [⚙️ assert] The layout is still declared
    ✅ 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] 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);
  [🧪 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
ℹ️ info - ran 3 tasks in: 0 seconds, 97705 microseconds

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


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

+----------------------------------------------+
[📑 suite] Wallpaper Engine Suite
  [🧪 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] 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] 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] 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] 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] 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
  [🧪 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;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; 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 ./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 ./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"
;;; 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/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/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/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 ./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
;;; WARNING: compilation of ./src/heks-linux/bridges.scm failed:
;;; failed to create path for auto-compiled file "./src/heks-linux/bridges.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 ./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/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/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/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 ./test/veritas/unit/toon-spec.scm

    [⚙️ assert] The layer-shell renderer should be selectable
    ✅ 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] 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 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
ℹ️ info - ran 1 tasks in: 0 seconds, 57274 microseconds

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


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

+----------------------------------------------+
[📑 suite] heks-toon Suite
  [🧪 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] 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] Retiring A Second Time Is Harmless
    [⚙️ assert] The launcher should be gone after both runs
    ✅ got: #t
  [🧪 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 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, 74290 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 suite] Application Declarations
  [🧪 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
  [🧪 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] 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)
+----------------------------------------------+
[📑 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] Catalog
  [🧪 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
  [🧪 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
    [⚙️ assert] Zen Browser is still declared
    ✅ got: #t
  [🧪 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
+----------------------------------------------+
[📑 suite] Overrides
  [🧪 test] An Extra Can Change An Existing Remote
    [⚙️ assert] The extra declaration wins over the category
    ✅ got: flathub-beta
  [🧪 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] A Duplicate Extra Entry Is Installed Once
    [⚙️ assert] The first declaration wins
    ✅ got: 1
  [🧪 test] Extra Applications Join The Union
    [⚙️ assert] An extra application joins the union
    ✅ got: #t
ℹ️ info - ran 4 tasks in: 0 seconds, 39287 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 suite] Niri Configuration Suite
  [🧪 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] Clipboard History Is Recorded
    [⚙️ assert] The clipboard watcher should be started with the session
    ✅ 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] 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] 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] 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] 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] 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] 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, -616342 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 suite] Waybar Configuration Suite
  [🧪 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 the bar's first font can draw
    ✅ got: #t
    [⚙️ 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 10px) (margin . 0px) (font-size . 12pt) (font-weight . 600) (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 the bar's font can draw
    ✅ got: 
    [⚙️ assert] The tooltip should say what the book opens
    ✅ got: #t
  [🧪 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] 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 the bar's font can draw
    ✅ got: 
    [⚙️ 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 10px) (margin . 0px) (font-size . 12pt) (font-weight . 600) (font-style . normal))
  [🧪 test] Dynamic Start Button
    [⚙️ assert] Start button should return a list
    ✅ got: #t
    [⚙️ assert] Start button should respect the content keyword argument
    ✅ got: λ test
  [🧪 test] Power Menu SXML Structure
    [⚙️ assert] Power menu should start with SXML TOP node
    ✅ got: *TOP*
    [⚙️ assert] Power menu should contain an interface definition
    ✅ got: #t
    [⚙️ assert] Power menu should contain a logout GtkMenuItem
    ✅ got: #t
    [⚙️ assert] The logout entry should carry a readable label
    ✅ got: #t
  [🧪 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] Do Not Disturb Indicator
    [⚙️ assert] Clicking the indicator should toggle the mako DND mode
    ✅ got: #t
  [🧪 test] Power Menu Actions
    [⚙️ assert] The logout entry should terminate the login session
    ✅ got: loginctl terminate-session $XDG_SESSION_ID
    [⚙️ assert] The shutdown entry should power the machine off
    ✅ got: systemctl poweroff
  [🧪 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] 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
    ✅ got: 
    [⚙️ 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
  [🧪 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] 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] 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 wider spacing, and changing it should be deliberate
    ✅ got: 0px 10px
ℹ️ info - ran 1 tasks in: 0 seconds, 44496 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 suite] Palette Registry Suite
  [🧪 test] Golden Gate Is More Transparent
    [⚙️ assert] Both Golden Gate variants must be more transparent than every other palette
    ✅ got: #t
  [🧪 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
  [🧪 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] 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 A Full Colour Set
    [⚙️ assert] Each palette must define primary/text/background colours
    ✅ got: #t
  [🧪 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] 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] Every Palette Exposes App Opacities
    [⚙️ assert] Each palette must declare a 0-1 opacity for every app
    ✅ 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
ℹ️ info - ran 1 tasks in: 0 seconds, 19734 microseconds

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


ℹ️ info - shuffled with seed 225622710 (replay with VERITAS_SEED=225622710)
+----------------------------------------------+
[📑 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] 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 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 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] 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 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] 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 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 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 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 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, 96149 microseconds

finished running tests
;;; 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 ./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 ./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/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 ./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/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 ./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 ./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/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/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"

  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 11:15:47 CET] load-local-overrides: Attempting override resolution for module (heks-linux user-settings) with profile 'local-settings'
[INFO] [2026-10-26 11:15:47 CET] load-local-overrides: $XDG_CONFIG_HOME empty/unset, falling back to $HOME/.config
[INFO] [2026-10-26 11:15:47 CET] load-local-overrides: Checking for override file at: /root/.config/heks-linux/local-settings.scm
[INFO] [2026-10-26 11:15:47 CET] load-local-overrides: No override file found at /root/.config/heks-linux/local-settings.scm. Skipping.
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/bridges.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/bridges.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/src/heks-linux/bridges.scm
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/prelude.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/prelude.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/prelude.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/prelude.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/user-settings.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/user-settings.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/user-settings.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/user-settings.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/bridges.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/btop.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/btop.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/btop.scm
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/palette.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/palette.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/palette.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/palette.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/btop.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/containers.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/containers.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/containers.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/containers.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/dconf.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/dconf.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/dconf.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/dconf.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/fastfetch.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/fastfetch.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/fastfetch.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/fastfetch.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gif.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gif.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gif.scm
;;; heks-linux/gif.scm:164:10: warning: non-literal format string
;;; heks-linux/gif.scm:168:10: warning: non-literal format string
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gif.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/git.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/git.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/git.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/git.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gtk.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gtk.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gtk.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/gtk.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/image.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/image.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/image.scm
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/zypper.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/zypper.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/zypper.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/zypper.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/image.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/lambdock.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/lambdock.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/lambdock.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/lambdock.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/mako.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/mako.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/mako.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/mako.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/niri.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/niri.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/niri.scm
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/toon.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/toon.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/toon.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/toon.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wallpaper.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wallpaper.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wallpaper.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wallpaper.scm.go
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/niri.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/flatpak.scmAPI documentation saved to doc/api

;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/flatpak.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/flatpak.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/packages/flatpak.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rmpc.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rmpc.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rmpc.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rmpc.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rofi.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rofi.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rofi.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/rofi.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/waybar.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/waybar.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/waybar.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/waybar.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wezterm.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wezterm.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wezterm.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/wezterm.scm.go
;;; note: source file /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/zen.scm
;;;       newer than compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/zen.scm.go
;;; compiling /etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/zen.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-8-4.6/etc/byggsteg/job-clone/heks-linux/trunk/src/heks-linux/zen.scm.go
channels.scm:54:6: warning: channel 'jointhefreeworld' is not trusted
index.texi:2263: warning: @end should only appear at the beginning of a line
index.texi:2277: warning: @end should only appear at the beginning of a line
index.texi:2292: 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_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_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")))))