# VERIFICATION — dsh-split-screen 1.7.0 follow-up fixes on DSH 0.2.1-rc.2 Date: 2026-10-20. Scope: the four split-view regressions reported after the 1.6.0 install (programmatic session switching, invisible new conversation, pane typing / Ctrl+A / `/` menu after navigation, silent `/compact`). **Artifact under test:** `dsh-split-screen` **1.7.0**, `lib/client.js` SHA256 `3700AF371398AECD3585F7108EB4402B7647AABA83ADD283A923992688202CCB` (427,564 B / 8,180 lines), `package.json` version 1.7.0. **Host under test:** an isolated scratch `DSH_HOME` running the npm-installed `@deepseek-ai/dsh@0.2.1-rc.2` web client — the same client packages as the user's desktop app (0.2.1-rc.2, release commit `332895e`). No live profile or running app was touched; the scratch profile bundles `dsh-split-screen` 1.7.0, `dsh-session-hotkeys` 1.9.5 and `dsh-result-only-view` 1.7.1 and has no model credentials (turns fail fast with `MISSING_CREDENTIAL`, which is useful for notification-path checks). ## Method 1. Full sandboxed suites: `node --check lib/client.js`, `npm test` → **133 ok / 0 not ok** (16 smoke + 117 safety; version fixtures re-pinned to 1.7.0). 2. Isolated Playwright/Chromium scenarios against the real 0.2.1 client (1600×900, split activated deterministically through the plugin's own persisted-layout key: overlay = 1, `health().active === true`, 2 panes). 3. Focused probes for the regression paths: hotkey vs sidebar click, New Session while split, 8 alternating main-view switches, typing/Enter/Ctrl+A in a pane, `/` in a pane composer, `/compact` completion. ## Results (1.7.0) | Check | Result | Evidence | |---|---|---| | Sidebar click swaps the focused pane to a non-pane session | **PASS** | scenario snapshot: root moved, focused pane replaced | | `Alt+ArrowDown/Up` now produces the same pane swap as the click | **PASS** | before: root moved, panes unchanged; after fix: focused leaf swapped to the hotkey target | | Stock **New Session** while split shows the new conversation in the focused pane | **PASS** | before: new row + hidden root only; after fix: focused leaf id becomes the new session id | | Editor-root ownership survives ordinary navigation | **PASS** | `health().editorRoots`: both panes `owned:true, root:"this-pane"` before and after 8 alternating main-view switches | | Guard no longer permanently stands down | **PASS** | **0** `tripped its breaker` warnings, **0** console errors during the switch probes | | Pane typing / Enter handled after navigation | **PASS** | keydown probe: `Enter` `defaultPrevented:true`, target inside the pane | | `/` opens the command-suggestions menu in a pane after navigation | **PASS** | `[role="listbox"]` with the full option list rendered inside the pane (screenshot `4-slash-after-burst.png`) | | `/compact` completion announces itself | **PASS (notification path)** | transient toast "Context compacted — the summary is in the conversation." rendered after the command (`6-compact-toast.png`); success-path compaction could not be exercised without model credentials | | Kill switch / safe mode / crash guard / persistence suites | **PASS** | `npm test` safety suite | ## Pre-fix baseline (same harness, plugin 1.6.0) Recorded before installing 1.7.0 into the scratch profile: - Sidebar click on a non-pane session swapped the focused pane; `Alt+Arrow` moved only the hidden main view / sidebar selection, panes unchanged. - New Session created the session behind the overlay; focused pane unchanged for 6 s+. - The editor-root guard tripped after a few ordinary switches and stood down permanently: pane hosts `rootNow:false`, Enter `defaultPrevented:false`, Ctrl+A could not reach the draft, and typing `/` produced no menu while the `+` button still opened one. - `/compact` feedback rendered only in the covered stock composer; the pane showed no notice. ## Reproduce (generic) ```powershell # isolated scratch home + scratch profile (never the live profile), then: dsh web --profile --port --host 127.0.0.1 --no-open # Playwright scenarios / probes drive the URL printed by the server; split is # activated by writing {"root":{...two leaves...}} into # localStorage["dsh.split-view.tree.v1"] and reloading. ``` ## Residual limits / known gaps - The compact/TUI composer (Alt+T, or panes under ~280 px) is the plugin's own textarea and still has no native slash-suggestion menu; the full composer is the supported surface for `/` suggestions (documented in the README). - Successful compaction was not exercised (scratch home has no credentials); the notification path was verified on the available compaction outcome, and the toast logic keys off the native `manual-compaction` row / composer status text rather than any credential-bound path. - Ctrl/A + editor-root behavior was verified through ownership state, `defaultPrevented` and the post-navigation `/` menu; a live streaming turn on the desktop composition was not re-run for this follow-up. - `dsh-result-only-view` 1.7.1 logs `conversation markers not found — this DSH version may have changed its DOM` on 0.2.1; unrelated to this plugin's fixes, but worth fixing in that plugin.