Logs the full output of the 9-agent deep-dive run on 2026-05-05 to
docs/research/2026-05-05-agent-wave/. Pulls every actionable finding
into one indexed location so v0.5.32 planning has a paper trail.
Files:
docs/research/2026-05-05-agent-wave/README.md — index
docs/research/2026-05-05-agent-wave/01-...real-hardware.md — Plymouth + LUKS edge cases
docs/research/2026-05-05-agent-wave/02-...firstboot-ux.md — SDDM + first-boot UX
docs/research/2026-05-05-agent-wave/03-...spike-plan.md — bootc-image-builder 1-week spike
docs/research/2026-05-05-agent-wave/04-...tier-2.md — AppArmor + nftables + audit + homed
docs/research/2026-05-05-agent-wave/05-...launch.md — threat model + v0.7 launch checklist
docs/research/2026-05-05-agent-wave/06-...log-capture.md — virtio-9p host-share for anaconda logs
docs/research/2026-05-05-agent-wave/07-...skel-branding.md — /etc/skel gap audit
docs/research/2026-05-05-agent-wave/08-...ci-hardening.md — SHA-pin actions + SBOM + SLSA L3
docs/research/2026-05-05-agent-wave/09-...failure-modes.md — real-hardware pessimistic audit
Plus the prior linter-applied:
docs/ROADMAP.md — Lessons learned section, v0.5.32 active block,
v0.6 promotion of veilor-postinstall + veilor-doctor,
v0.7 bootc spike scheduled
docs/THREAT-MODEL.md — drafted by Agent 5; in/out scope, comparison
matrix, v0.7 launch checklist
Top blockers identified for v0.5.32 (cross-cited in README):
1. Suspend/resume wifi death (kernel.modules_disabled=1)
2. veilor-firstboot.service WantedBy=graphical.target
3. kernel-upgrade grub drift
4. USBGuard hash-rules problem (already learned on onyx)
5. firewalld blocks tailscale0
6. /etc/skel/ empty
7. virtio-9p log capture replaces broken virtio-serial path
Wave + verifier pattern (per ROADMAP lessons learned #4) validated:
9 parallel agents on distinct topics produced converging blocker
list. The same pattern landed v0.5.31 four-bug fix from the prior
4-agent verification wave on v0.5.30 outcome.
5.1 KiB
KDE theme + DuckSans + /etc/skel branding audit
Agent 7 of 9-agent wave, 2026-05-05.
Catalog: what's currently shipped
| Component | Status | Path |
|---|---|---|
| Color scheme | shipped | assets/kde/veilor-black.colors → /usr/share/color-schemes/ |
| System kdeglobals | shipped | assets/kde/veilor-default.kdeglobals → /etc/xdg/kdedefaults/kdeglobals |
| Breeze decoration override | shipped | assets/kde/breezerc → /etc/xdg/breezerc |
| Plasma containment defaults | shipped | written by 30-apply-v03-theme.sh → /etc/xdg/kdedefaults/plasma-org.kde.plasma.desktop-appletsrc |
| Wallpaper (PNG+SVG) | shipped | assets/wallpapers/veilor-black.{png,svg} → /usr/share/wallpapers/veilor-black/ |
| SDDM theme | shipped (full QML) | assets/sddm/veilor-black/ → /usr/share/sddm/themes/veilor-black/ |
| SDDM theme activation | shipped | 30-apply-v03-theme.sh writes /etc/sddm.conf.d/veilor-theme.conf (Current=veilor-black) |
| Konsole profile + colorscheme | shipped | assets/konsole/veilor.{profile,colorscheme} → /usr/share/konsole/Veilor.* + /etc/xdg/konsolerc |
| Plymouth theme | shipped | assets/plymouth/veilor/ |
| os-release branding | shipped | PRETTY_NAME="veilor-os 0.5.27", LOGO=veilor-logo |
| Fira Code fontconfig | shipped | /etc/fonts/conf.d/55-veilor-firacode.conf |
| DuckSans font | DEFERRED — empty dir, README only |
Drift inside active configs
overlay/etc/sddm.conf.d/veilor.confsets[Theme] Current=breeze.30-apply-v03-theme.shthen writes/etc/sddm.conf.d/veilor-theme.confwithCurrent=veilor-black.- SDDM merges alphabetically →
veilor-theme.confwins (loads after). - Shipping a
Current=breezeline in the overlay is misleading drift.
Specific gaps preventing visual brand consistency
-
No
/etc/skel/whatsoever.overlay/etc/skel/does not exist. All KDE config lives in/etc/xdg/kdedefaults/and/etc/xdg/*rc. Works for fresh boots, but the moment the user clicks anything in System Settings, KDE writes~/.config/kdeglobalsand silently shadows the system defaults. Zero per-user seeding = one click away from losing all branding. -
No PRETTY_NAME secondaries.
/etc/system-release,/etc/issue,/etc/issue.net,/etc/lsb-releasenever written.lsb_release -areports Fedora. KDE About dialog uses os-release (OK) but TTY login banner + many user-space tools read/etc/system-release. -
No
kwinrcshipped. Plasma 6 Wayland-specific defaults (TitlebarDoubleClick, Compositor backend, FocusPolicy, animation speed) not seeded. Vanilla Fedora KDE animations + click-to-focus prevail. -
No panel layout (
plasma-org.kde.plasma.desktop-appletsrccontainment for panel). The file written by30-apply-v03-theme.shonly seeds[Containments][1](desktop containment) for wallpaper. Actual Plasma panel containment (taskbar, system tray, clock, kickoff icon) is unseeded → users get stock Fedora panel with Fedora-blue kickoff button. -
DuckSans deferred but README claims it as the brand font.
kdeglobals, Konsole, SDDM all hardcodeFira Code. If DuckSans ever ships, ten files need synchronized edits. -
overlay/etc/sddm.conf.d/veilor.confsaysCurrent=breeze— internal contradiction with script-writtenveilor-theme.conf. Cosmetic but confusing. -
kde-theme-apply.shhaswarn()undefined (line 64) — callswarnbut onlyok/infodefined. If os-release source ever goes missing, script crashes withcommand not found.
Top 5 /etc/skel/ additions (highest impact, lowest effort)
-
/etc/skel/.config/kdeglobals— copy ofassets/kde/veilor-default.kdeglobals. Single highest-impact file: locks ColorScheme, AccentColor, Font, Icons.Theme, LookAndFeelPackage into the user's first-write file so System Settings interaction won't revert anything to Breeze defaults. -
/etc/skel/.config/konsolerc—[Desktop Entry] DefaultProfile=Veilor.profileplus[KonsoleWindow] ShowMenuBarByDefault=false. Per-user override of system konsolerc; ensures first konsole launch is branded even if user's home pre-exists. -
/etc/skel/.config/kwinrc— Plasma 6 Wayland defaults:[Compositing] AnimationSpeed=0,[Windows] FocusPolicy=ClickToFocus,[Plugins] blurEnabled=false(mirrors the no-animations Breeze override). -
/etc/skel/.config/plasma-org.kde.plasma.desktop-appletsrc— full containment file with both desktop containment (wallpaper=veilor-black) AND panel containment (kickoff icon =/usr/share/pixmaps/veilor-logo.svg, panel height/position). Without this, the taskbar is vanilla Fedora. -
/etc/skel/.local/share/konsole/Veilor.profile— local copy so user-local konsole sees the profile in its dropdown without needing/usr/share/konsole/walk. Pair with #2.
Bonus near-zero-effort: write /etc/system-release, /etc/issue,
and /etc/lsb-release in kde-theme-apply.sh to close the
lsb_release/TTY-banner gap. And fix the undefined warn() in
kde-theme-apply.sh:64.