fix(shell): stop double-dispatching post-play/playback footer keybinds#13
Closed
KitsuneKode wants to merge 9 commits into
Closed
fix(shell): stop double-dispatching post-play/playback footer keybinds#13KitsuneKode wants to merge 9 commits into
KitsuneKode wants to merge 9 commits into
Conversation
…assets GitHub resolves local composite actions from the workspace before any step runs, so nesting checkout inside setup-bun-monorepo made every CI/release/ build-binaries job fail instantly since that action landed. Callers now checkout first; the composite only sets up Bun/caches/install. Also: native smoke matrix for host binaries, fail_on_unmatched_files + asset-count assert on release upload, clearer empty-release installer errors, and fix install.ps1 returning early after mpv so yt-dlp is offered. Co-authored-by: Manash Pratim Bhuyan <bhuyanmanash2002@gmail.com>
v0.2.6.json has an empty sections array (changelog body has no ### headings). The docs test required sections and failed once CI actually ran again after the checkout fix. Co-authored-by: Manash Pratim Bhuyan <bhuyanmanash2002@gmail.com>
These failures only surfaced once CI started executing the full suite again (#8). Fix the durable diagnostics retention time bomb, make install.ps1 dry-run succeed without LOCALAPPDATA/network, stop mock.module leaking from palette tests into history/overlay tests, and gate live Miruro network checks.
Typecheck failed because openSetupWizardFromShell was mocked as Promise<void> instead of Promise<SetupWizardResult>, which also broke Format (turbo depends on typecheck for fmt:check).
…rship Make the deprecated preferred-source unit test mock network instead of live fetch, and harden Videasy so deprecated preferred ids never bias cycle order or probe Sanji/1movies. Document that resolveEscTransition stays unused at runtime because root-overlay-shell + resolveOverlayBackStack already own Esc.
Replace mock.module in watch-genre-stats with a restored spy so later tmdb-proxy/title-detail/recommendation tests see the real module, and use relative timestamps in stats-service so windowed averages stay valid.
ShellFrame resolved footer letters via useShellInput and then forwarded the same key to onUnhandledInput. Post-play wires both paths, so o/r/n opened tracks / replayed / continued twice — first press looked dead. Skip footer-owned keys in the unhandled path unless the surface opts into letterKeysHandledExternally (LoadingShell).
Owner
Author
|
Superseded: footer key double-dispatch fixed on main in d6ed4b3 with coverage in shell-frame-input-bridge.test.tsx. Closing to keep the queue honest — reopen if any behaviour here is missing from main. |
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.
Summary
Post-play (and any
ShellFramesurface that wires both footer actions andonUnhandledInput) was double-firing footer accelerators on the first press. That madeo/r/n/mfeel like they “don’t trigger in one go” — the first press opened tracks (or replayed / continued) twice, so the UI often looked unchanged until a second press.Root cause
ShellFramehas two input owners:useShellInput— resolves footer letter shortcuts viaonResolveuseInput— always forwarded the same key toonUnhandledInputPost-play mounts both: footer actions and
onUnhandledInput→resolvePostPlayUnhandledInput. So pressingoboth resolvedsourceand re-entered the unhandled path (open tracks again).Loading/playback already opted out of footer resolution with
letterKeysHandledExternallyand owns letters in its ownuseInput— that path is unchanged.Fix
In
ShellFrame, skip footer-owned (enabled) letters in the unhandled path unlessletterKeysHandledExternallyis set. Unbound keys (j/k/1–3, arrows) still reachonUnhandledInput.Tests
shell-frame-input-bridge.test.tsxwith a no-double-delivery assertionpost-play-keybind-once.useinput.test.tsxcoveringo/r/nonce +j/k/1still unhandledMerge notes
Based on #12 (shared CI green tip). Independent of product PRs #6/#7/#9/#10.
Test plan
oopens tracks once; firstrreplays once; firstncontinues once