#!/usr/bin/env bash
# CPU-light static checks for the elizaOS Live overlay.
set -euo pipefail
# This gate is a long `set -e` assertion chain of silent test/grep commands, so
# an unannotated failure exits with no output at all — that silence hid a red
# nightly for over a week. Name the dying assertion on the way out.
trap 'echo "static-smoke: FAILED at ${BASH_SOURCE[0]}:${LINENO}: ${BASH_COMMAND}" >&2' ERR
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
REPO_ROOT="$(cd "${ROOT}/../../.." && pwd)"
SOURCE_ONLY="${ELIZAOS_STATIC_SOURCE_ONLY:-0}"
cd "${ROOT}"
if ! command -v rg >/dev/null 2>&1; then
echo "ripgrep (rg) is required for elizaOS Live static smoke checks." >&2
exit 1
fi
stat_mode() {
local path="$1"
local index_mode
index_mode="$(
git -C "${ROOT}" ls-files -s -- "${path}" 2>/dev/null | awk 'NR == 1 { print $1 }'
)"
case "${index_mode}" in
100755)
printf '755\n'
return 0
;;
100644)
printf '644\n'
return 0
;;
esac
stat -c %a "${path}" 2>/dev/null || stat -f %Mp%Lp "${path}" | sed 's/^0//'
}
echo "==> shell syntax"
test -f tails/data/debootstrap/scripts/debian-common.patch
test -f tails/data/splash.png
test -x tails/data/wrappers/apt-get
test -f docs/riscv64-gui-support.md
test -f tails/config/chroot_local-packageslists/elizaos-riscv64-gui.list
grep -Fq "virtio-gpu-pci" docs/riscv64-gui-support.md
grep -qx "linux-image-riscv64" tails/config/chroot_local-packageslists/elizaos-riscv64-gui.list
grep -qx "gnome-shell" tails/config/chroot_local-packageslists/elizaos-riscv64-gui.list
grep -qx "nodejs" tails/config/chroot_local-packageslists/elizaos-riscv64-gui.list
for tails_build_input in \
tails/config/chroot_local-includes/usr/share/tails/build/customize-ublock-assets \
tails/config/chroot_local-includes/usr/share/tails/build/group \
tails/config/chroot_local-includes/usr/share/tails/build/mksquashfs-excludes \
tails/config/chroot_local-includes/usr/share/tails/build/passwd \
tails/config/chroot_local-includes/usr/share/tails/build/plymouth-theme.diff
do
test -f "${tails_build_input}"
done
for custom_tails_package in \
apparmor \
apparmor-profiles \
evince \
evince-common \
flatpak \
haveged \
libapparmor1 \
libevdocument3-4t64 \
libevview3-3t64 \
libgcrypt20 \
libhavege2 \
libyelp0 \
yelp
do
grep -qx "${custom_tails_package}" tails/config/chroot_local-hooks/99-custom-packages-check
done
bash -n build.sh build-iso.sh tails/auto/build \
scripts/build-cache-contract.test.sh \
scripts/dev-sign-update-manifest.sh \
scripts/usb-write.sh \
scripts/generate-elizaos-brand-assets.sh \
scripts/run-cool-build.sh \
scripts/submodule-checkout.sh \
scripts/security-smoke.sh
grep -Fq 'if [ -f "${SRC}/binary.iso" ]' build-iso.sh
grep -Fq 'find "${SRC}" -maxdepth 1 -name' build-iso.sh
grep -Fq "sort -nr" build-iso.sh
bash scripts/build-cache-contract.test.sh
bash -n scripts/sync-runtime-to-chroot.sh
sh -n \
tails/auto/config \
tails/config/chroot_local-hooks/9100-install-elizaos \
tails/config/chroot_local-hooks/9150-brand-inherited-strings \
tails/config/chroot_local-hooks/99-zzzzzz_permissions \
tails/config/chroot_local-includes/usr/sbin/swapon.tails \
tails/config/chroot_local-includes/usr/local/bin/elizaos \
tails/config/chroot_local-includes/usr/lib/live/config/0001-elizaos-privacy-mode \
tails/config/chroot_local-includes/etc/NetworkManager/dispatcher.d/00-firewall.sh \
tails/config/chroot_local-includes/etc/NetworkManager/dispatcher.d/00-resolv-over-clearnet \
tails/config/chroot_local-includes/etc/NetworkManager/dispatcher.d/10-tor.sh \
tails/config/chroot_local-includes/usr/local/lib/elizaos/capability-runner \
tails/config/chroot_local-includes/usr/local/lib/elizaos/create-persistent-storage-session \
tails/config/chroot_local-includes/usr/local/lib/elizaos/elizaos-keeper \
tails/config/chroot_local-includes/usr/local/lib/elizaos/persistence-maintenance \
tails/config/chroot_local-includes/usr/local/lib/elizaos/runtime-env \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-agent-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-browser-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-pill-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-renderer-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/update-health-check \
tails/config/chroot_local-includes/usr/local/lib/elizaos/update-manager \
tails/config/chroot_local-includes/usr/local/bin/tails-backup \
tails/config/chroot_local-includes/usr/local/lib/tails-report-disk-ioerrors \
tails/config/chroot_local-includes/usr/local/lib/thunderbird \
tails/config/chroot_local-includes/usr/local/lib/persistent-storage/on-activated-hooks/ElizaOSData/10-clean-runtime-state \
tails/config/chroot_local-includes/usr/local/lib/persistent-storage/on-activated-hooks/ElizaOSData/20-restart-elizaos \
tails/config/chroot_local-includes/usr/local/lib/persistent-storage/on-deactivated-hooks/ElizaOSData/20-restart-elizaos
node --check scripts/prepare-elizaos-app-overlay.mjs
node --check scripts/generate-release-evidence.mjs
node --check scripts/validate-model-catalog.mjs
node --check scripts/validate-runtime-overlay.mjs
node --check tails/config/chroot_local-includes/usr/local/lib/elizaos/renderer-server.mjs
grep -q 'ELIZAOS_APP_ARTIFACT' Justfile
grep -q 'ensure_plugin_runtime_dist "plugins/plugin-health" package-js' Justfile
grep -q 'ensure_plugin_runtime_dist "plugins/plugin-calendly" tsup-index' Justfile
python3 -m json.tool schemas/update-manifest.schema.json >/dev/null
python3 -m json.tool schemas/model-catalog.schema.json >/dev/null
python3 - \
tails/config/chroot_local-includes/usr/local/bin/tails-documentation \
tails/config/chroot_local-includes/usr/local/lib/elizaos/elizaos-webkit-shell \
tails/config/chroot_local-includes/usr/local/bin/electrum \
tails/config/chroot_local-includes/usr/local/bin/tails-about \
tails/config/chroot_local-includes/usr/local/bin/tails-upgrade-frontend-wrapper \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tailsgreeter/ui/main_window.py \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tca/ui/main_window.py \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tails_installer/gui.py \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tps/device.py \
tails/config/chroot_local-includes/usr/local/lib/tails-low-ram-notify-user \
tails/config/chroot_local-includes/usr/local/lib/tails-uefi-ca-notify-user \
tails/config/chroot_local-includes/usr/local/lib/tails-virt-notify-user \
tails/config/chroot_local-includes/usr/local/lib/additional-software/asp-handle-package-changes \
tails/config/chroot_local-includes/usr/local/lib/additional-software/asp-install \
tails/config/chroot_local-includes/usr/local/lib/additional-software/asp-update-config <<'PY'
import py_compile
import sys
import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory(prefix="elizaos-pycompile-") as tmp:
for index, path in enumerate(sys.argv[1:]):
py_compile.compile(
path,
cfile=str(Path(tmp) / f"{index}.pyc"),
doraise=True,
)
PY
for unit in \
tails/config/chroot_local-includes/etc/systemd/user/elizaos-agent.service \
tails/config/chroot_local-includes/etc/systemd/user/elizaos-renderer.service \
tails/config/chroot_local-includes/etc/systemd/user/elizaos-pill.service \
tails/config/chroot_local-includes/etc/systemd/user/elizaos.service
do
grep -q '^ConditionUser=1000$' "${unit}"
done
for executable in \
tails/config/chroot_local-includes/usr/local/lib/elizaos/elizaos-webkit-shell \
tails/config/chroot_local-includes/usr/local/lib/elizaos/runtime-env \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-browser-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-agent-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/create-persistent-storage-session \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-pill-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-renderer-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/start-elizaos-user \
tails/config/chroot_local-includes/usr/local/lib/elizaos/update-health-check \
tails/config/chroot_local-includes/usr/local/lib/elizaos/update-manager \
scripts/dev-sign-update-manifest.sh \
scripts/run-cool-build.sh \
scripts/usb-write.sh \
scripts/security-smoke.sh \
scripts/sync-runtime-to-chroot.sh
do
mode="$(stat_mode "${executable}")"
if [ "${mode}" != "755" ]; then
echo "${executable} must be mode 755, got ${mode}" >&2
exit 1
fi
done
echo "==> elizaOS branding"
for font in Poppins-Regular.ttf Poppins-Medium.ttf OFL.txt; do
test -f "tails/config/chroot_local-includes/usr/share/fonts/truetype/elizaos/${font}"
font_mode="$(stat_mode "tails/config/chroot_local-includes/usr/share/fonts/truetype/elizaos/${font}")"
if [ "${font_mode}" != "644" ]; then
echo "${font} must be mode 644, got ${font_mode}" >&2
exit 1
fi
done
grep -q "Poppins 10" \
tails/config/chroot_local-includes/etc/dconf/db/local.d/00_Tails_defaults
grep -q "Poppins Medium 10" \
tails/config/chroot_local-includes/etc/dconf/db/local.d/00_Tails_defaults
grep -q "color-scheme='prefer-light'" \
tails/config/chroot_local-includes/etc/dconf/db/local.d/00_Tails_defaults
grep -q '#0b35f1' \
tails/config/chroot_local-includes/usr/share/gnome-shell/extensions/window-list@gnome-shell-extensions.gcampax.github.com/stylesheet-dark.css
grep -q '^gir1.2-udisks-2.0$' \
tails/config/chroot_local-packageslists/tails-common.list
grep -q '#0B35F1' scripts/generate-elizaos-brand-assets.sh
grep -q 'logo_white_bluebg.svg' scripts/generate-elizaos-brand-assets.sh
if rg -n '#FF5800|#FF0000|#ff5800|#ff0000|ORANGE|RED|#ffe600|#f0b90b|#08080a|#0a0a0a|#03061f' \
scripts/generate-elizaos-brand-assets.sh \
tails/config/chroot_local-includes/usr/share/tails/greeter/greeter.css \
tails/config/chroot_local-includes/usr/share/tails/persistent-storage/style.css \
tails/config/chroot_local-includes/usr/share/doc/elizaos/website/doc.en.html \
tails/config/chroot_local-includes/usr/local/lib/elizaos/elizaos-webkit-shell
then
echo "Core visible elizaOS surfaces must use the blue/white/soft-grey brand palette." >&2
exit 1
fi
grep -q 'font-family: "Poppins"' \
tails/config/chroot_local-includes/usr/share/tails/greeter/greeter.css
if [ "${SOURCE_ONLY}" != "1" ]; then
grep -q 'id="elizaos-live-theme"' \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/index.html
grep -q '#F7F9FF' \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/index.html
grep -q '"theme_color": "#F7F9FF"' \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/site.webmanifest
if rg -n '#08080a|#0a0a0a|black-translucent' \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/index.html \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/site.webmanifest
then
echo "Packaged app renderer must not expose the old dark shell metadata." >&2
exit 1
fi
if rg -n '#FF5800|#ff5800|#FF0000|#ff0000' \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/index.html \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/site.webmanifest
then
echo "Packaged app renderer metadata must use the blue/white elizaOS palette." >&2
exit 1
fi
fi
# StartupShell is a SHARED app-shell component (@elizaos/ui), and the elizaOS OS
# ISO bundles it verbatim — there is no downstream OS theme override for the
# boot splash. Per the per-surface accent system, the *app* surface owns the
# splash and it uses the launch token whose current intentional fallback is
# #000000 — the home shader's black base field, so boot flows seamlessly into
# the home ember glow (#9565). OS chrome such as the greeter/dashboard
# metadata/failure shell stays on the blue/white palette; first-run stays
# inside the launch surface. So this gate asserts the splash's current
# intentional launch token and the neutral bootstrap-gate surface, and only
# rejects the genuinely-stale hardcoded dark/gradient/glow styling from the
# pre-redesign shell (the token fallback is a host-overridable seam, not a
# hardcoded surface).
if rg -n 'bg-\[#08080a\]|bg-\[#0a0a0a\]|radial-gradient|blur-\[' \
"${REPO_ROOT}/packages/ui/src/components/shell/StartupShell.tsx"
then
echo "Startup shell must not reintroduce the old dark/gradient splash." >&2
exit 1
fi
grep -Fq 'bg-[var(--launch-bg,#000000)]' \
"${REPO_ROOT}/packages/ui/src/components/shell/StartupShell.tsx"
grep -q 'bg-\[#F7F6F4\]' \
"${REPO_ROOT}/packages/ui/src/components/shell/StartupShell.tsx"
if rg -n 'bg-danger|text-danger|variant="danger"|radial-gradient' \
"${REPO_ROOT}/packages/ui/src/components/shell/StartupFailureView.tsx"
then
echo "Startup failure shell must stay on the clean elizaOS white/blue surface." >&2
exit 1
fi
grep -q 'bg-bg' \
"${REPO_ROOT}/packages/ui/src/components/shell/StartupFailureView.tsx"
grep -q 'text-txt' \
"${REPO_ROOT}/packages/ui/src/components/shell/StartupFailureView.tsx"
grep -q 'text-destructive' \
"${REPO_ROOT}/packages/ui/src/components/shell/StartupFailureView.tsx"
# First-run onboarding now renders inline in the real floating chat overlay:
# #10302 deleted the dedicated FirstRunChat.tsx surface and seeds the onboarding
# greeting/choices as the same inline widgets the live chat uses. The overlay's
# text runs on the `text-txt` THEME token (hardcoded `text-white` literals were
# retokenized so the surface follows the active theme). Gate that overlay
# against the stale dark/gradient/glow styling from the pre-redesign first-run
# shell (mirrors the #10167 repoint when CompactOnboarding was removed).
first_run_shell="${REPO_ROOT}/packages/ui/src/components/shell/ContinuousChatOverlay.tsx"
grep -q 'text-txt' "${first_run_shell}"
if rg -n 'bg-\[#08080a\]|bg-\[#0a0a0a\]|radial-gradient|blur-\[' \
"${first_run_shell}"
then
echo "First-run onboarding (in-chat overlay) must not reintroduce the old dark/gradient shell." >&2
exit 1
fi
onboarding_states_css="${REPO_ROOT}/packages/ui/src/components/onboarding/states/onboarding.css"
if [ -f "${onboarding_states_css}" ]; then
if rg -n '#ff8a24|#FF5800|#ff5800|#ffe600|#f0b90b' "${onboarding_states_css}"
then
echo "Legacy onboarding states must stay on the blue/white elizaOS palette." >&2
exit 1
fi
fi
if [ "${SOURCE_ONLY}" != "1" ]; then
if rg -n '#FF5800|#ff5800|#ff8a24|#ffe600|#f0b90b' \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/brand \
--glob '*.svg'
then
echo "Packaged renderer SVG brand assets must not expose the old warm palette." >&2
exit 1
fi
if rg -n '#FF5800|#ff5800|#ff8a24|#e54f00|#c94400|#ff6d1f|255, ?88, ?0' \
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/assets \
--glob '*.css'
then
echo "Packaged renderer CSS assets must not expose the old orange palette." >&2
exit 1
fi
fi
grep -q 'export const handleWalletRoutes' \
"${REPO_ROOT}/packages/agent/src/api/index.ts"
# Wallet routes must load via a lazy dynamic import (not a top-level static
# import) at startup. Tolerate an inline /* @vite-ignore */ comment in the call.
rg -q 'await import\((/\* @vite-ignore \*/ )?"@elizaos/plugin-wallet"\)' \
"${REPO_ROOT}/packages/agent/src/api/index.ts"
if rg -n 'handleWalletRoutes,\\n type WalletAddressesSnapshot' \
"${REPO_ROOT}/packages/agent/src/api/index.ts"
then
echo "Agent API barrel must not hard-import plugin-wallet during startup." >&2
exit 1
fi
python3 - <<'PY'
try:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
except (ImportError, ValueError):
print("skip: python gi/gtk unavailable for GTK 3 greeter CSS parser check")
else:
Gtk.CssProvider().load_from_path(
"tails/config/chroot_local-includes/usr/share/tails/greeter/greeter.css"
)
PY
grep -q -- '--iso-application="elizaOS"' tails/auto/config
grep -q -- '--iso-publisher="https://elizaos.ai/"' tails/auto/config
grep -q -- '--iso-volume="ELIZAOS ' tails/auto/config
grep -q 'PRETTY_NAME="elizaOS"' tails/auto/config
grep -q 'SUPPORT_URL="https://elizaos.ai/"' tails/auto/config
grep -q 'BUG_REPORT_URL="https://elizaos.ai/"' tails/auto/config
grep -qx 'elizaOS' tails/config/chroot_local-includes/etc/issue.net
grep -q '^elizaOS \\n \\l$' tails/config/chroot_local-includes/etc/issue
grep -q 'WEBSITE_URL = "https://elizaos.ai"' \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tailslib/website.py
grep -q 'WEBSITE_LOCAL_PATH = "/usr/share/doc/elizaos/website"' \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tailslib/website.py
grep -q 'file:///usr/share/doc/elizaos/website/doc.en.html' \
tails/config/chroot_local-includes/usr/local/bin/tails-documentation
grep -q 'file:///usr/share/doc/elizaos/website/' \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tailsgreeter/ui/main_window.py
if rg -n 'Documentation=https://tails\.net' \
tails/config/chroot_local-includes/usr/lib/systemd/user/*.service
then
echo "User systemd unit documentation must route to elizaOS help." >&2
exit 1
fi
grep -q 'doc.en.html#storage' \
tails/config/chroot_local-includes/usr/share/tails/greeter/main.ui.in
grep -q 'font-family: "Poppins"' \
tails/config/chroot_local-includes/usr/share/doc/elizaos/website/doc.en.html
grep -q '#0B35F1' \
tails/config/chroot_local-includes/usr/share/doc/elizaos/website/doc.en.html
grep -q '"distribution": "elizaOS"' \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tails_installer/config.py
grep -q '"partition_label": "elizaOS"' \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tails_installer/config.py
grep -q 'ConditionPathExists=/etc/elizaos/base-updates-enabled' \
tails/config/chroot_local-includes/usr/lib/systemd/user/tails-upgrade-frontend.service
grep -q 'ELIZAOS_SECURITY_FEED_BASE_URL' \
tails/config/chroot_local-includes/usr/local/bin/tails-security-check
grep -q 'support@elizaos.ai' \
tails/config/chroot_local-includes/etc/whisperback/config.py
grep -q 'elizaOS Feedback' \
tails/config/chroot_local-includes/usr/share/whisperback/whisperback.ui.in
if rg -n 'support@tails|whisperback\.tails|tails\.boum\.org|Tails-Version' \
tails/config/chroot_local-includes/etc/whisperback/config.py
then
echo "WhisperBack config must not route elizaOS reports to inherited Tails endpoints." >&2
exit 1
fi
if command -v identify >/dev/null 2>&1; then
image_paths=(
tails/config/chroot_local-includes/usr/share/tails/desktop_wallpaper.png \
tails/config/chroot_local-includes/usr/share/tails/screensaver_background.png \
tails/config/binary_local-includes/EFI/debian/grub/splash.png \
tails/config/chroot_local-includes/usr/share/tails/greeter/icons/elizaos-logo.png \
tails/config/chroot_local-includes/usr/share/tails/elizaos-about-logo.png \
tails/config/chroot_local-includes/usr/share/plymouth/themes/elizaos/elizaos-wordmark.png \
tails/config/chroot_local-includes/usr/share/tails-installer/tails-liveusb-header.png \
tails/config/chroot_local-includes/usr/share/tails/bootx64.png \
tails/config/chroot_local-includes/usr/share/icons/hicolor/scalable/apps/elizaos.svg \
tails/config/chroot_local-includes/usr/share/pixmaps/elizaos.svg \
tails/config/chroot_local-includes/usr/share/pixmaps/elizaos.png \
)
if [ "${SOURCE_ONLY}" != "1" ]; then
renderer_icon="tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/brand/favicons/android-chrome-512x512.png"
if [ ! -f "${renderer_icon}" ]; then
renderer_icon="tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/renderer/favicon-256x256.png"
fi
image_paths+=(
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/Resources/app/assets/appIcon.png
"${renderer_icon}"
)
fi
identify "${image_paths[@]}" >/dev/null
fi
if rg -n \
'Tails-based|Tails Cloner|Tails Documentation|Connect Tails|Tails USB stick|elizaOS \(Tails-based\)' \
README.md RELEASE_PATH.md docs/user-experience.md docs/mode-parity.md \
PLAN.md docs/build-infrastructure.md \
tails/auto/build tails/auto/config \
tails/config/chroot_local-includes/etc \
tails/config/chroot_local-includes/usr/share/tails \
tails/config/chroot_local-includes/usr/share/applications \
tails/config/chroot_local-includes/usr/share/doc/elizaos \
tails/config/chroot_local-includes/usr/share/tails-installer \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tailsgreeter \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tps_frontend \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tails_installer \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tca \
tails/config/chroot_local-includes/usr/local \
tails/config/binary_local-includes
then
echo "Visible elizaOS branding still contains stale Tails/elizaOS strings." >&2
exit 1
fi
if rg -n \
'Tails is up to date|This version of Tails|Restart Tails|Your Tails|Tails device|your Tails|restart Tails|when starting Tails|from Tails goes through|coming from a Tails user|Tails will|Tails failed|Tails couldn'\''t|improve Tails|Error Reading Data from Tails|reinstall Tails|tails\.net/doc|tails\.net/install|tails\.net/latest|tails\.net/gdm|tails\.net/ioerror|/usr/share/doc/tails/website' \
tails/config/chroot_local-includes/usr/src/iuk/lib/Tails/IUK/Frontend.pm \
tails/config/chroot_local-includes/usr/local/bin/tails-backup \
tails/config/chroot_local-includes/usr/local/bin/tails-security-check \
tails/config/chroot_local-includes/usr/local/bin/tails-upgrade-frontend-wrapper \
tails/config/chroot_local-includes/usr/local/lib/additional-software \
tails/config/chroot_local-includes/usr/local/lib/tails-gdm-error-message \
tails/config/chroot_local-includes/usr/local/lib/tails-low-ram-notify-user \
tails/config/chroot_local-includes/usr/local/lib/tails-uefi-ca-notify-user \
tails/config/chroot_local-includes/usr/local/lib/tails-report-disk-ioerrors \
tails/config/chroot_local-includes/usr/local/lib/tails-virt-notify-user \
tails/config/chroot_local-includes/usr/local/lib/polkit-policy-change-message \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tailsgreeter/ui/main_window.py \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tca/ui/main_window.py \
tails/config/chroot_local-includes/usr/share/tails/tca/main.ui.in \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tails_installer/gui.py \
tails/config/chroot_local-includes/usr/share/tails-installer/tails-installer.ui.in \
tails/config/chroot_local-includes/usr/share/whisperback/whisperback.ui.in \
tails/config/binary_local-includes/isolinux/sorry32.txt
then
echo "High-visibility inherited Tails strings still need elizaOS branding." >&2
exit 1
fi
if rg -n \
'Preparing Tails for first use|Checking the Tails system partition|Configuring Tails|Tails specific tools|Tails live user' \
tails/config/chroot_local-includes/usr/share/initramfs-tools/scripts/init-premount/partitioning \
tails/config/chroot_local-includes/usr/share/initramfs-tools/scripts/init-top/read-and-update-random-seed-sector \
tails/config/chroot_local-includes/usr/lib/live/config/2000-aesthetics \
tails/config/chroot_local-includes/usr/local/bin/elizaos \
tails/config/chroot_local-includes/usr/share/desktop-directories/Tails.directory.in
then
echo "First-boot and launcher polish still exposes inherited Tails wording." >&2
exit 1
fi
launcher_paths=(
tails/config/chroot_local-includes/usr/share/applications/tails-documentation.desktop
tails/config/chroot_local-includes/usr/share/applications/tails-backup.desktop
tails/config/chroot_local-includes/usr/share/applications/tails-installer.desktop
tails/config/chroot_local-includes/usr/share/applications/tca.desktop
tails/config/chroot_local-includes/usr/share/applications/org.boum.tails.AdditionalSoftware.desktop
tails/config/chroot_local-includes/usr/share/applications/whisperback.desktop
)
existing_launcher_paths=()
for launcher_path in "${launcher_paths[@]}"; do
if [ -e "${launcher_path}" ]; then
existing_launcher_paths+=("${launcher_path}")
fi
done
if [ "${#existing_launcher_paths[@]}" -gt 0 ]; then
if rg -n '^(Name|Comment|Keywords)\[' "${existing_launcher_paths[@]}"; then
echo "Brand-sensitive desktop launchers must fall back to curated elizaOS labels." >&2
exit 1
fi
fi
if command -v desktop-file-validate >/dev/null 2>&1; then
echo "==> desktop entries"
desktop-file-validate \
tails/config/chroot_local-includes/usr/share/applications/elizaos.desktop
else
echo "skip: desktop-file-validate not installed"
fi
if [ -e tails/config/chroot_local-includes/etc/xdg/autostart/elizaos.desktop ]; then
echo "elizaOS must be supervised by systemd, not XDG autostart." >&2
exit 1
fi
grep -q '^Name=elizaOS$' \
tails/config/chroot_local-includes/usr/share/applications/elizaos.desktop
grep -q '^Icon=elizaos$' \
tails/config/chroot_local-includes/usr/share/applications/elizaos.desktop
grep -q '^StartupWMClass=elizaOS$' \
tails/config/chroot_local-includes/usr/share/applications/elizaos.desktop
grep -q 'IMG_FOOTPRINTS = "/usr/share/pixmaps/elizaos.svg"' \
tails/config/chroot_local-includes/usr/lib/python3/dist-packages/tca/ui/main_window.py
grep -q '^Icon=elizaos$' \
tails/config/chroot_local-includes/usr/share/applications/org.boum.tails.PersistentStorage.desktop.in
grep -q 'elizaos' \
tails/config/chroot_local-includes/usr/share/tails/greeter/main.ui.in
grep -q '72' \
tails/config/chroot_local-includes/usr/share/tails/greeter/main.ui.in
grep -Fq 'Save documents, browser bookmarks, Wi-Fi passwords, and elizaOS settings in encrypted Persistent Storage.' \
tails/config/chroot_local-includes/usr/share/tails/greeter/main.ui.in
grep -Fq 'Defaults are safe. Use "+" to add settings.' \
tails/config/chroot_local-includes/usr/share/tails/greeter/main.ui.in
grep -q 'elizaos' \
tails/config/chroot_local-includes/usr/share/tails/persistent-storage/window.ui.in
for persistent_storage_view in \
tails/config/chroot_local-includes/usr/share/tails/persistent-storage/locked_view.ui.in \
tails/config/chroot_local-includes/usr/share/tails/persistent-storage/welcome_view.ui.in \
tails/config/chroot_local-includes/usr/share/tails/persistent-storage/passphrase_view.ui.in
do
grep -q '/usr/share/pixmaps/elizaos-persistent-storage.svg' "${persistent_storage_view}"
done
grep -q '