screen.js:4681-4685 still does:
const _show = window.showScreen;
window.showScreen = function (id) {
if (!FOLLOWER && id !== 'player' && active) stopSplitScreen();
_show(id);
};
Core's static/js/session.js (current showScreen()) documents that this exact pattern — splitscreen (and stems, and the old shell.js) monkey-patching window.showScreen — was the root cause of feedBack#923/#924: three independent patches capturing whatever was installed at load-order-dependent times, causing navigation to intermittently land on a dead legacy screen. The fix moved all such logic into showScreen() itself (one guard every caller routes through) specifically so plugins wouldn't need to patch the global. shell.js:325 confirms this was deliberately reverted for the same reason: "This USED to monkey-patch window.showScreen. It doesn't any more, and that is the point."
splitscreen never got the same cleanup. The patch here is now vestigial — teardown-on-navigate could instead subscribe to the screen:changing event core now emits for exactly this purpose (see session.js's documented event contract), matching the pattern sectionmap's CLAUDE.md already recommends (event-based, not patch-based) for the same "leaving the player screen" use case.
This plugin's own CLAUDE.md (Module structure / "Hooks into core" section, and the playSong wrapper section) documents the window.showScreen wrap as intended current architecture, so the docs and code are self-consistent but both are stale relative to core's current guidance.
Suggest: replace the window.showScreen patch with a screen:changing listener (teardown on leaving 'player'), and update CLAUDE.md's module structure / hooks section accordingly.
screen.js:4681-4685still does:Core's
static/js/session.js(currentshowScreen()) documents that this exact pattern — splitscreen (and stems, and the old shell.js) monkey-patchingwindow.showScreen— was the root cause of feedBack#923/#924: three independent patches capturing whatever was installed at load-order-dependent times, causing navigation to intermittently land on a dead legacy screen. The fix moved all such logic intoshowScreen()itself (one guard every caller routes through) specifically so plugins wouldn't need to patch the global.shell.js:325confirms this was deliberately reverted for the same reason: "This USED to monkey-patch window.showScreen. It doesn't any more, and that is the point."splitscreen never got the same cleanup. The patch here is now vestigial — teardown-on-navigate could instead subscribe to the
screen:changingevent core now emits for exactly this purpose (see session.js's documented event contract), matching the pattern sectionmap's CLAUDE.md already recommends (event-based, not patch-based) for the same "leaving the player screen" use case.This plugin's own CLAUDE.md (Module structure / "Hooks into core" section, and the
playSong wrappersection) documents thewindow.showScreenwrap as intended current architecture, so the docs and code are self-consistent but both are stale relative to core's current guidance.Suggest: replace the
window.showScreenpatch with ascreen:changinglistener (teardown on leaving 'player'), and update CLAUDE.md's module structure / hooks section accordingly.