Symptom

The Kraken demo-video pipeline had to patch App.kt to hardcode darkTheme = true before building, then revert — a brittle, CI-unfriendly workaround. First-run TOS and PIN screens also required blind xdotool coordinate clicks that break whenever the layout shifts.

Root cause

Two missing seams:

  1. DarkBlueGrayTheme defaulted to isSystemInDarkTheme() with no way to override it from outside the process. Under bare Xvfb there is no desktop colour scheme, so the result was always light.
  2. JvmOnboardingStore and JvmClientPinStore only accepted TOS / stored a PIN through the interactive UI. There was no non-interactive path to seed them before the app opened.

Fix

Prevention