Skip to content

Audit shared-architecture bugs from slopsmith's KNOWN_ISSUES.md against this repo #4

Closed

Description

@cchacs

Background

slopsmith-plugin-splitscreen (a sibling repo sharing this plugin's architecture, function names, and CLAUDE.md contract) has a KNOWN_ISSUES.md cataloging 7 UI bugs found in a frontend audit of its screen.js. Because both repos share the same panel lifecycle/state contracts, several of these likely reproduce here unfixed. This repo has since diverged (per-panel names, top-right Pop/Dock, exposed panels API — PR #20), so exact line numbers won't match; each item needs to be independently verified against this repo's current screen.js.

Items to check

  1. Invert state not persisted/restored — panelToPrefs/prefs-restore path may carry lefty/lyrics but drop inverted, even though pop-out/dock/follower-config code paths thread it through. Repro: toggle Invert, reload or trigger rebuildLayout()/pop+dock — check if Invert silently resets.
  2. Lyrics overlay toggle button not hidden in Lyrics-pane / Jumping-Tab-pane mode — CLAUDE.md says Invert/Lyrics/Tab buttons should be hidden in those modes; check if lyricsBtn specifically is exempted, causing overlay-on-overlay duplication.
  3. Per-panel note detector not torn down/rebuilt across mode/arrangement switches — check if toggleDetect's captured panel.hw goes stale after recreatePanelHighway swaps the highway on lyrics/JT/viz/arrangement transitions, leaving an orphaned detector running.
  4. popOutPanel() missing the _starting-style in-flight guard used by rebuildLayout()/redock — check for a race where a second quick pop-out can rip out a still-building startSplitScreen().
  5. Docking a self-split popup only recovers one sub-panel — check whether the popups tracking structure holds one slot per popup window (not per sub-panel), so docking a popup that split itself into multiple panels loses the others.
  6. Section-map offset can go stale outside the documented sizeCanvases() trigger list (activation, controls-bar toggle, window resize, layout change) — check behavior when the section-map bar's own height/visibility changes independently.
  7. getCurrentTime callback missing null-check on #audio in tab-view wiring, inconsistent with the ternary-guarded pattern used elsewhere for #audio access.

Ask

For each item: confirm whether it reproduces in this repo's current code, and if so file/fix as appropriate (or note here if this repo's PR #20 changes already avoid it).

Reference

slopsmith-plugin-splitscreen KNOWN_ISSUES.md (2026-07-22 audit).

Activity

  1. cchacs commented on Jul 22, 2026

    @cchacs
    CollaboratorAuthor

    Progress update from #5 (merged):

    Resolved:

    • Item 1 (invert state not persisted/restored) — already fixed pre-existing in this repo (panelToPrefs/initPanel both handle inverted correctly); not a bug here.
    • Item 2 (lyrics overlay button not hidden in Lyrics-pane/Jumping-Tab-pane mode) — fixed. lyricsBtn/detectBtn/channelBtn are now hidden on mode entry and restored on exit; the per-panel lyrics overlay is now destroyed on entering Lyrics/JT mode and restored on exit if it was on.
    • Item 3 (per-panel note detector not torn down/rebuilt across mode/arrangement switches) — fixed. recreatePanelHighway() now rebuilds the detector against the fresh highway instance instead of leaving it orphaned on the discarded one.
    • Item 4 (popOutPanel() missing the _starting in-flight guard) — fixed. Mirrors the guard already used by rebuildLayout()/_redockPanel().
    • Item 7 (getCurrentTime missing null-check on #audio) — fixed.

    Still open:

    • Item 5 — docking a self-split popup only recovers one sub-panel (the popups Map is keyed one-per-window, not one-per-sub-panel). Architectural, needs its own pass.
    • Item 6 — sizeCanvases()'s section-map offset can go stale if the section-map bar's own height/visibility changes independently of window resize/layout change/controls-toggle.

    Leaving this open until items 5 and 6 are addressed.


    Generated by Claude Code

  2. cchacs commented on Jul 22, 2026

    @cchacs
    CollaboratorAuthor

    Final update — items 5 and 6 are now fixed (branch fix/canvas-identity-notify, PR incoming):

    • Item 5 (docking a self-split popup only recovers one sub-panel) — dockFollowerPanel() now captures every current sub-panel in the popup (finalStates, plural) instead of just the one whose Dock button was clicked. _redockPanel() builds a prefs entry per sub-panel and grows layout to the smallest layout that fits them, with a toast + graceful truncation if even the largest layout can't hold them all.
      • Along the way, found and fixed a related bug: redocking a single panel into an already-full layout previously discarded it silently, since startSplitScreen() only ever builds LAYOUTS[layout].panels slots and ignores anything past that in savedPrefs.
    • Item 6 (sizeCanvases()'s section-map offset can go stale) — sizeCanvases() now lazily attaches a ResizeObserver to #section-map, so panels reflow when that independent plugin changes its bar's height/visibility on its own schedule, not just on the window-resize/activation/layout-change/controls-toggle triggers that were already wired up.

    All 25 unit tests pass. Also separately fixed (see fix/canvas-identity-notify history): recreatePanelHighway() wasn't notifying window.feedBack when it replaced panel.canvas, which could silently break external plugins (e.g. Camera Director) caching a canvas reference across an arrangement switch or viz mode toggle.

    Closing — all 7 audit items plus the two bugs found during the fix passes are resolved.


    Generated by Claude Code

  3. added theissue type on Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions