<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/scripts/testing/lib/validation.sh, branch main</title>
<subtitle>Builds a full dev workstation from a bare Arch Linux install.
</subtitle>
<id>https://git.cjennings.net/archsetup/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/archsetup/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/'/>
<updated>2026-06-11T17:57:49+00:00</updated>
<entry>
<title>fix(testing): lingering check could never pass — ls output broke the capture</title>
<updated>2026-06-11T17:57:49+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-11T17:57:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=5b519001a73d98ac7c1ab49256ac34781994f9e0'/>
<id>urn:sha1:5b519001a73d98ac7c1ab49256ac34781994f9e0</id>
<content type='text'>
The check captured 'ls path &amp;&amp; echo yes', so a present linger file produced 'path\nyes', which never string-equals yes — every run warned regardless of actual state. Forensics on a kept VM showed lingering correctly enabled all along (file present mid-install, loginctl Linger=yes, logind healthy): the original VM-artifact hypothesis was wrong, archsetup's enable-linger calls were always fine. test -e captures cleanly; verified returning 'yes' against the live VM.
</content>
</entry>
<entry>
<title>fix(testing): key the portal-query skip on the compositor, close warning tasks</title>
<updated>2026-06-11T00:08:54+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-11T00:08:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=19015c77c7d059d7bbc65270c6985f6cbc2330a3'/>
<id>urn:sha1:19015c77c7d059d7bbc65270c6985f6cbc2330a3</id>
<content type='text'>
The 19:06 verification run showed the portal skip not firing: a socket-activated xdg-desktop-portal process exists even headless, so the process check was the wrong precondition. The skip now keys on a running Hyprland, same as the socket check. That run confirmed the other three skips live (warnings 5 to 2); the remaining counted warnings are this portal case and the lingering question, which stays open.
</content>
</entry>
<entry>
<title>fix(testing): skip environment-impossible checks instead of warning</title>
<updated>2026-06-10T23:19:28+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-10T23:19:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=ced91c43c464d624b3396ae44894022fd33aecaf'/>
<id>urn:sha1:ced91c43c464d624b3396ae44894022fd33aecaf</id>
<content type='text'>
Four warnings fired on every headless VM run, training the reader to ignore the warning count: the Hyprland socket and portal queries (no graphical login), the mDNS ping (slirp passes no multicast), and docker-not-responding (enabled but deliberately not started pre-reboot). Each now detects its precondition and logs a skip that counts nowhere; the warn paths stay for the cases that are real (compositor running without a socket, portal running but unqueryable, mDNS failing on real networking, docker active but dead). The lingering warning stays — it needs its own investigation.
</content>
</entry>
<entry>
<title>fix(testing): expect minimal/ tree for the .zshrc symlink on DESKTOP_ENV=none</title>
<updated>2026-06-10T21:35:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-10T21:35:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=1754a945fa58fbdf71561596e5ddf06dea7428be'/>
<id>urn:sha1:1754a945fa58fbdf71561596e5ddf06dea7428be</id>
<content type='text'>
The dotfiles validation hardcoded .dotfiles/common/.zshrc, but a none install stows the standalone minimal/ tree, so the first none-run ever to reach validation failed on a correct symlink. The expected path now follows DESKTOP_ENV from the VM conf.
</content>
</entry>
<entry>
<title>fix(testing): expect ~/.dotfiles symlink target in dotfiles validation</title>
<updated>2026-05-23T01:34:03+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-23T01:34:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=13c300f6fa8e52c498bf9843f6b8b6f61cab935b'/>
<id>urn:sha1:13c300f6fa8e52c498bf9843f6b8b6f61cab935b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(testing): drop stale plugin checks, count failed validations</title>
<updated>2026-05-11T22:19:56+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-11T22:19:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=14eecb5b8e76cf1b1de20643d496dc94cfdce0ab'/>
<id>urn:sha1:14eecb5b8e76cf1b1de20643d496dc94cfdce0ab</id>
<content type='text'>
validate_hyprland_plugins and validate_hyprpm_hook checked for the hyprland-plugins-setup script and the hyprpm pacman hook, both removed in 4a3056a (Hyprland 0.54 brings the layouts into core). I deleted the two functions and their calls in validate_window_manager.

I also disabled errexit in run-test.sh from the validation phase onward, so one failed check is counted in VALIDATION_FAILED instead of aborting the run before the report or VM cleanup. About 16 validations across the file do a bare `return 1` after `validation_fail`; any of them firing under the previous behavior would have killed the harness mid-run.
</content>
</entry>
<entry>
<title>feat(archsetup): add rustup, log-cleanup cron, update configs</title>
<updated>2026-02-27T16:51:03+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-27T16:51:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=9f1481623d360ec189906ee0d806ec30914f7f24'/>
<id>urn:sha1:9f1481623d360ec189906ee0d806ec30914f7f24</id>
<content type='text'>
Add rustup toolchain manager to developer_workstation (before AUR
packages that need rust to compile). Add log-cleanup cron job with
test validation. Update ISO glob for archangel naming. Add dunst
icon theme, hyprlock animations, waybar log filtering.
</content>
</entry>
<entry>
<title>feat(hyprland): install plugins on first login via setup script</title>
<updated>2026-02-01T21:39:51+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-01T21:39:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=204e39e662dab6389adefaba0f6d6e77ced58a64'/>
<id>urn:sha1:204e39e662dab6389adefaba0f6d6e77ced58a64</id>
<content type='text'>
hyprpm requires running Hyprland to determine version for plugin
compilation. Move plugin installation from archsetup to a first-login
script (hyprland-plugins-setup) that runs via exec-once. Script checks
if plugins are already installed and skips if so. Update validation to
check for setup script presence instead of enabled plugins.
</content>
</entry>
<entry>
<title>fix(hyprland): auto-rebuild plugins and preserve stash master position</title>
<updated>2026-01-31T19:46:56+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-31T19:46:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=f60a1f8431b61b74c8a39fc54ddc6af92bcc294a'/>
<id>urn:sha1:f60a1f8431b61b74c8a39fc54ddc6af92bcc294a</id>
<content type='text'>
- Add pacman hook to rebuild hyprpm plugins after Hyprland updates
- Change startup to hyprpm update -n (rebuilds if needed)
- Fix stash-restore to preserve master window using batch commands
- Add validation tests for plugins and hyprpm hook
</content>
</entry>
<entry>
<title>test(validation): add Settings portal dark mode check</title>
<updated>2026-01-30T14:28:07+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-30T14:28:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=24a280738731a0c7433985b6085dd48258165ef7'/>
<id>urn:sha1:24a280738731a0c7433985b6085dd48258165ef7</id>
<content type='text'>
Validates that portals.conf uses gtk backend for Settings portal
and that the portal returns color-scheme=1 (prefer-dark) for
libadwaita apps like Nautilus.
</content>
</entry>
</feed>
