Read-only generation preparation checkpoint
Observed 2026-09-23. tools/theme_activate.py --prepare-only is a host-side
preparation command. It accepts a direct unchanged theme directory, a built-in
collection member, or a familiar user-theme name; it does not activate the
generation or publish a normal image service. No shell receiver currently
acknowledges these generations, so OpenSpec tasks 2.1 and 2.2 remain unchecked.
The coordinator calls only the byte-verified pinned color, legacy-palette and
template helpers. It copies recognized data into a disposable stage, converts
legacy Alacritty colors in scratch, supplies explicit staging paths, and
restricts generated outputs to shell.toml and foot.ini. It refuses
symlinks, malformed palettes, oversized entries and unresolved templates. It
retains icon theme selection, full raw/resolved palette, section overrides and
background candidates, and reports unknown/unavailable input. A generation ID
binds source content and path, trusted helper/template content and adapter
source; a removed or updated checkout cannot overwrite a previous generation.
The theme checkout is never written. Source inspection caps are recorded in
source-fixtures.md.
python3 tests/test_omarchy_theme_activation.py
PASS: 6 host tests: unchanged direct source, curated outputs, legacy scratch
conversion, path/symlink/size/palette rejection, old-generation retention,
source edit/clone path and trusted helper update invalidation, and rejection
when a checkout changes during preparation before generation publication.
python3 tools/theme_activate.py fuchsblau --source /tmp/k230-omarchy-theme-fixtures/community --state-root /tmp/k230-theme-prep-final --prepare-only
PASS: 58 resolved palette keys, 3 background candidates, Yaru-blue selector.
python3 tools/theme_activate.py catppuccin --source /tmp/k230-omarchy-theme-fixtures/builtins --state-root /tmp/k230-theme-prep-final --prepare-only
PASS: 56 resolved palette keys, 4 background candidates, Yaru-purple selector.
python3 tools/theme_activate.py catppuccin-latte --source /tmp/k230-omarchy-theme-fixtures/builtins --state-root /tmp/k230-theme-prep-final --prepare-only
PASS: 56 resolved palette keys, 2 background candidates, Yaru-blue selector.
These counts are host parse/preparation results, not claims that wallpapers,
icons, gradients, applications or touch surfaces rendered. The next source
boundary is a bounded shell-side prepare/commit/rollback acknowledgement,
followed by a compatible omarchy-theme-set NAME wrapper and Nix service.
An authored foot.ini full-file override is withheld: it may contain terminal
directives beyond appearance data. A safe appearance-only adapter remains
OpenSpec task 3.4, so this checkpoint does not claim full Foot theme support.
Until then the command has an explicit --prepare-only flag and cannot change
the active shell. Card/drawer, Settings, notifications, keyboard and wallpaper
consumers remain separate implementation tasks and need their named gates.