From 1e41031964fc4a79919dc566b3a54853ec24a805 Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Thu, 1 Oct 2026 19:20:36 +0000 Subject: [PATCH 1/2] docs: document the per-feature minimum host matrix (splitscreen#69) Splitscreen's features span several core API generations, so a single version string cannot describe them and no minHost is declared. README now carries the per-feature matrix instead: basic split view is the required floor (source-level check at v0.3.0-alpha.1), while LAN sharing (core 03e1c1d, on canonical and fork main), coordinated/offline frame rendering (f7c761c, fork only) and per-player identity (7633211, fork only) each need their own newer host. Because every optional feature is capability-checked, an older core ran the plugin fine but silently: an unsupported LAN relay, a non-exportable panel set and a missing player-context namespace were indistinguishable from a bug. Each now says so once, naming the commit that added the API it wants, and hostFeatures() exposes the same answers to consumers: - _warnOnce() for the three gated features, plus a toast for the relay - _recordHostFrameApi() and _hasPlayerContextApi(), one predicate per feature shared by the probe and the guarded call site, so the probe cannot disagree with the path that uses it - a relay socket that never opens is counted across every attempt, including a WebSocket the browser refuses to construct at all, and diagnosed after three; the reconnect loop is untouched, so a server upgraded mid-share still recovers Bumps to 1.15.0 for the new public API and diagnostics; no minHost is declared (see README 'Why there is no minHost'). --- CLAUDE.md | 24 ++++ README.md | 56 +++++++++- plugin.json | 2 +- screen.js | 136 ++++++++++++++++++++++- tests/screen.test.js | 256 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 462 insertions(+), 12 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index abfa63e..54fc838 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,6 +18,7 @@ screen.js ├── Teardown / rebuild — teardownPanels, rebuildLayout, captureCurrentPrefs ├── Start / stop — startSplitScreen, stopSplitScreen, toggle ├── Time sync — startTimeSync, stopTimeSync +├── Host-feature diagnostics — _warnOnce, hostFeatures(), _hostFramesSeen, _lanRelayOk ├── Toolbar buttons — createLayoutBtn, createHideBtn, createFloatingShowBtn, │ togglePanelBar, toggleControlsVisibility, updateBtn, injectBtn └── Hooks into core — wraps window.playSong, listens for screen:changing @@ -36,6 +37,7 @@ screen.js | `VIZ_PREFIX` | `'__viz__'` | Prefix for generic viz-plugin entries. Select value: `__viz__::`; saved pref: `__viz__::` | | `DETECT_CHANNEL_CYCLE` | `['mono','left','right']` | Channel cycle order | | `DETECT_CHANNEL_LABELS` | `{mono:'M',left:'L',right:'R'}` | Channel button labels | +| `LAN_SHARE_DIAG_FAILURES` | `3` | Consecutive `/ws/sync` connect attempts that never open before splitscreen reports the relay missing (splitscreen#69) | ## Module-level state @@ -55,6 +57,9 @@ screen.js | `layoutBtn` | element\|null | The layout `