fix(signage): recover from stalled plugins, hung recovery and failed boot - #518
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
This was referenced Oct 1, 2026
|
…boot - Watchdog: the server check before a cache clear times out after 15 s, and every recovery arms a 2 minute fallback reload. A server that never answered latched the watchdog off until a power cycle. - Play-through plugins advance after a bound when they never report finished. A plugin that 404ed or hung held the screen forever and blocked update reloads. - Interactive content is not preloaded while the current item waits to be revealed. The preload replaced the pending item. - Pause, resume and template preview messages are accepted only from the parent frame. Content on screen could freeze the player. The preview request is sent only in debug mode. - A failed application start reloads with a capped backoff. The watchdog starts inside the application, so nothing recovered it.
- A lone play-through plugin that never sent a plugin message is retried once it passes its limit, the same way as a fatal plugin error. It was held on screen forever, and an error page still counted as content shown, so the watchdog never recovered it. - The cache clear no longer reloads. `recover` does the single reload, guarded by a recovery generation. The fallback timer and stopWatchdog advance the generation, so a cache clear from an abandoned attempt cannot start a second reload.
MrYuion
force-pushed
the
fix/signage-stalls
branch
from
October 2, 2026 00:24
f3621c0 to
83655e4
Compare
Comment on lines
+111
to
+112
| | Guard | Value | | ||
| | Stall thresholds | poll 10 min, schedule 5 min, playback 3 min, visible 5 min | |
There was a problem hiding this comment.
|
Want your agent to iterate on Greptile's feedback? Try greploops. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The player could freeze with no way to recover except a power cycle:
_recoveringlatch, then waited on a server check with no timeout. A server that accepted the connection but never answered stopped all later checks.finishedstayed on screen forever. It also blocked update reloads, and the watchdog did not see a stall.signage:pause. A paused player looks healthy to the watchdog.Changes
watchdog.ts:media-player.component.ts:finished.isMidPlayThroughItem()is false after the limit.signage.component.ts,template.component.ts:window.parent.recoverdoes the single reload, guarded by a recovery generation.main.ts: a failed start reloads after 10 s, doubling to 5 min. The count is insessionStorage["SIGNAGE.boot_failures"]and is cleared after a successful start.USER_STORIES.md(US-SIG-002, 009, 010, 024, 027) andDEBUGGING.mdare updated.Testing
develop.reloadmock now stops the watchdog, as a real reload does. Four tests depended on the watchdog not acting after a recovery, which was the bug.nx test signagepasses (385 tests).nx build signagepasses.nx lint signagehas 12 errors that are also ondevelop.finishedadvances after 5 min./that never answer. The fallback fired at 120 s, and the server check timed out at exactly 15 s.Merge order
Independent of #517 and #519, but all three add rows to the symptom table in
apps/signage/DEBUGGING.md. The second and third to merge need a rebase. Based ondevelop.Changes made by Claude Opus 5.5 (1M context) in Claude Code, running in T3 Code.
🤖 Generated with Claude Code