Three root causes for missing XFCE icons found via live-USB hardware test:
1. XFCE plugins do not reliably load absolute icon paths — the Whisker
Start button had button-icon=/usr/local/share/clawdie-iso/icons/...
which silently failed to resolve. Changed to themed name "clawdie-start"
and install the icon files into hicolor/48x48/apps/, 64x64/apps/,
and scalable/apps/ where the icon theme lookup can find them.
2. Brand icons were only installed to /usr/local/share/clawdie-iso/icons/
but XFCE resolves themed icon names by scanning the icon theme
directories. Now install clawdie-start.png/svg into hicolor as well.
3. XFCE creates monitor-specific desktop keys only after xfdesktop starts,
which can override the skeleton wallpaper. Add a post-login visual guard
that re-applies theme, panel, and wallpaper settings at 3/7/15 seconds.
The dynamic icon-cache regeneration (all directories under icons/) is
retained from the previous commit.
Checks: sh -n build.sh clawdie-xfce-visuals-guard.sh clawdie-xfce-session-inner
Replaced hardcoded icon theme list (hicolor/Adwaita/AdwaitaLegacy/Papirus)
with a dynamic directory scan of /usr/local/share/icons/. Applications like
pcmanfm and xfce4-terminal install into hicolor but were missed when the
cache wasn't regenerated for all themes, causing broken launcher icons
(blank/missing glyphs) on the panel and in the Whisker menu.
Root cause: gtk-update-icon-cache was only run for the 4 known themes,
but FreeBSD packages install icons into additional directories that
weren't covered.
The Clawdie visual assets (clawdie-operator-bg.png background +
clawdie-start.png triangle icon) are already committed and referenced
correctly in xfce4-desktop.xml and xfce4-panel.xml — no changes needed.
- shell-system.sh (runs last, step 6): rewrite .profile with agent launcher,
full .bashrc with sudo() shell function that fire-and-forget snapshots
zroot@cli-<ts> before mdo -u root. PATH, prompt, history, aliases (ll/la/lt).
Agent fallback for non-login shells via ~/.ssh-agent-env.
- shell-ssh.sh (step 4): strip to ~/.ssh/config only. Agent/profile/tmux
seeding moved to shell-system.sh so it is not overwritten.
- AGENTS.md: document sudo→mdo decision with rationale table (ISO size,
audit surface, single privilege path, ZFS rollback safety).
- Tier 1: seed ~/.profile with eval $(ssh-agent -s) launcher (FreeBSD,
no systemd). AddKeysToAgent alone does not start an agent; without a
launcher headless/SSH-in shells still get "Could not open connection".
- Tier 3: drop set-option -g update-environment from tmux.conf seed.
tmux default already includes SSH_AUTH_SOCK + DISPLAY/XAUTHORITY.
set -g replaces the entire list, breaking X11 GUI apps on XFCE.
- Remove .graphifyignore per project policy (graph artifacts not
committed, tool not integrated into ISO repo).
shell-ssh.sh now seeds ~/.ssh/config (AddKeysToAgent yes) and
~/.tmux.conf (SSH_AUTH_SOCK persistence) after SSH key install.
Idempotent — appends to existing configs if already present.
Fixes agent-dead-after-tmux-restart for every fresh Clawdie install.
Pass 1 + Pass 2 panel polish is on main and build-ready (XML valid, build.sh install paths + Whisker icon verified). Baton passes from the Claude/Linux config lane to the FreeBSD build host (osa) for an ISO rebuild + a boot on the AMD/ASUS box to check the verification items. No domedog config work remains.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Consolidates the operator-USB work into main now that the AMD ASUS hardware-evidence collection is closed and Codex is parked. Brings the live-session hardware lane (XInput/libinput touchpad guard, internal audio + resolver bootstrap, hw-report with gated public upload, operator-USB branding) and the config-only XFCE panel polish (Pass 1 + Pass 2: branded Whisker PNG, xkb text mode, panel 40px, systray square-icons).
Conflict: doc/LLM-PROVIDER-HARNESS.md was evolved on both sides. Resolved as a union with no content lost — the xfce-side harness/provider/fabric restructure is the base, and main's two unique blocks (Verifying Key Cleanup flow, the 2D Platform x Harness matrix + populate/add procedures) are preserved. The doc owner may later dedupe the overlap between the two 1D matrices and the 2D matrix.
Verification debt stays explicit and open (not closed by this merge): XFCE visual-polish confirmation and the next rebuilt-image hardware retest, per doc/XFCE-PANEL-BUGS-HANDOFF.md and PLAN-OPERATOR-USB-NEXT.md.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Use packages/npm-globals.txt as the source of truth for offline npm CLI tarballs, update Pi to 0.75.5, and keep Claude Code out of the XFCE USB path.
---
Build: not run — ISO build not requested
Tests: pass — sh -n fetch-npm-globals and shell-npm-globals; pinned npm pack smoke passed