Posting this primarily for the public record, with a question for staff at the end…
Symptom
After ~5 minutes of input idle, the display turns off and the foreground app is killed. When the user wakes the device with the remote, they land on the Vega profile picker rather than the previously-foregrounded app. This happens despite:
-
LIFESPAN_POLICY.PERMANENT set via useSetLifespanCallback() from @amazon-devices/react-native-kepler (TimeoutManager)
-
useSetTimeoutCallback(60*60*24*365) (1-year timeout)
-
An actively-playing VideoPlayer session with loop = true, holding a MediaControlFocus, looping a 1-second silent MP4 (the “active media playback exemption” referenced in the certification test [5])
-
An actively-playing AudioPlayer session for alert audio
-
All required media services declared in manifest.toml (media.playersession.service, audio.stream, audio.control, audio.system, etc.)
-
Settings → Display & Sounds → Ambient Experience → Ambient Preferences → Advanced Settings set to maximum (8 hr / 15 min) per the staff guidance
Log excerpt
(DSN redacted, all timestamps in UTC, sequence is unedited.) 12:29:54.093 lcm_service[969]: lcm-idle-handler: Screensaver disabled by policy 12:29:54.094 lcm_service[969]: api:PowerManagerExt:forceDisplayOff be called 12:29:54.097 powerd[1348]: ACE_MW_POWER:ace_power_mgr_disable_subsystem: disable subsys(DISPLAY), power-service-core
12:29:54.098 powerd[1348]: ace_power_mgr_flags_subsystem_vote: name=DISPLAY, isDisable=T, ToZeroStateTransition happened!
12:29:54.111 lcm_service[969]: lcm-display-registry: display[0]: Suspending display, force suspend false
12:29:54.111 lcm_service[969]: lcm-display-context: display[0]: Clearing backstack, clear all true
12:29:54.134 lcm_service[969]: lcm-display-registry: Killed processes in response to display disconnection: 12040 23853
12:29:54.264 lcm_service[969]: lcm-server: Deregistering application with clientPid 12040 and package id after crash
12:29:57.638 hdmiManagerd[1273]: EventHelper: DISPLAY ON ← user pressed remote 12:29:58.085 lcm_service[969]: lcm-server: Received launch request for pkg://com.amazon.vega.profilepicker.main
What the log shows 1. The screensaver path is successfully suppressed: lcm-idle-handler reports Screensaver disabled by policy at 12:29:54.093. So LIFESPAN_POLICY.PERMANENT worked for what it was scoped to do. 2. In the very next millisecond, a separate code path — api:PowerManagerExt:forceDisplayOff, called by the power-service-core actor — directly disables the DISPLAY subsystem.
3. As a downstream effect, LCM clears the backstack and kills the foreground PIDs (12040 = our app, 23853 = the prior launcher).
4. When the user wakes the device, the profile picker is launched as the new foreground because there is no full-screen component left on the backstack.
The two policies are independent. The screensaver-disable knob does not reach the display-power-off path.]
Specific question for staff: Confirming our reading: on the Fire TV Stick 4K Select / Vega OS, there is no public manifest privilege, Kepler API, or vda shell command that overrides power-service-core’s forceDisplayOff invocation. The only path for unattended 24/7 use cases is to choose hardware running Fire OS (e.g., the Amazon Signage Stick). Is that an accurate summary as of May 2026?
If a future Vega SDK release does expose a privileged display-keep-alive mechanism (analogous to Fire OS’s wake lock), a follow-up reply on this thread would help the community a lot. Searches for the power-service-core and forceDisplayOff strings currently surface nothing.