From 4b5ca9f6ea4747102c6618338aba282a770be067 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 3 Sep 2026 16:23:02 +0000 Subject: [PATCH 1/3] Disambiguate manage.sh controllers wording: client vs controller Live user feedback: "Exactly one client is actively streaming right now" sitting directly above "How many controller slots" read as "only one controller is connected" - an easy misread since "client" (a paired Moonlight session/device) and "controller" (a physical gamepad slot within that session) are conflated by ordinary English but mean completely different things here. The tool has no way to detect controller count at all; it only ever picks which Moonlight session/device to configure. Reworded every message in this flow to say "Moonlight session/device" instead of bare "client", and added an explicit line before the controller-count prompt clarifying it's a separate question the user has to answer themselves. Verified the full flow still runs correctly end to end against the same mocked duplicate-heavy client data used earlier. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01VLX1yYKJExGSXmgUhxKQG6 --- services/wolf.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/services/wolf.sh b/services/wolf.sh index 0d15391..fd203a8 100644 --- a/services/wolf.sh +++ b/services/wolf.sh @@ -3415,14 +3415,17 @@ print(next(iter(ids)) if len(ids) == 1 else '') if [ -n "$ACTIVE_CLIENT_ID" ]; then CLIENT_ID="$ACTIVE_CLIENT_ID" echo "" - echo "Exactly one client is actively streaming right now — using that one." + echo "Exactly one Moonlight session (device/TV) is actively streaming right" + echo "now — using that one. (This is about which SCREEN/DEVICE you're" + echo "configuring, not how many controllers are plugged into it — that's" + echo "the next question.)" elif [ "${#CLIENT_IDS[@]}" -eq 1 ]; then CLIENT_ID="${CLIENT_IDS[0]}" echo "" - echo "Only one paired client — using it." + echo "Only one paired Moonlight device — using it." else echo "" - read -r -p "Which client [1-${#CLIENT_IDS[@]}]: " PICK + read -r -p "Which Moonlight session/device [1-${#CLIENT_IDS[@]}]: " PICK if ! [[ "$PICK" =~ ^[0-9]+$ ]] || [ "$PICK" -lt 1 ] || [ "$PICK" -gt "${#CLIENT_IDS[@]}" ]; then echo "Invalid selection." exit 1 @@ -3431,7 +3434,10 @@ print(next(iter(ids)) if len(ids) == 1 else '') fi echo "" - read -r -p "How many controller slots to force a type for [2]: " NSLOTS + echo "Now, separately: how many physical GAMEPADS/CONTROLLERS do you have" + echo "connected to that device right now (this tool can't detect that —" + echo "count your own controllers)?" + read -r -p "Number of controllers [2]: " NSLOTS NSLOTS="${NSLOTS:-2}" if ! [[ "$NSLOTS" =~ ^[0-9]+$ ]] || [ "$NSLOTS" -lt 1 ]; then echo "Invalid number." From 9ba1d7e9db5bc58b8272876e713242db319a6644 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 3 Sep 2026 17:44:53 +0000 Subject: [PATCH 2/3] manage.sh controllers: poll Wolf's logs, label slots ordinally; document Cemu profile-editing recovery Two follow-ups from live testing that just confirmed the whole controllers_override chain works end to end: 1. manage.sh controllers now polls `docker compose logs wolf` for "Creating joypad for controller " lines (most recent per slot wins) and shows what it last saw before asking anything, using it as the suggested default at each prompt. Every prompt is now labeled "1st controller"/"2nd controller"/etc - always meaning Wolf's own 0-indexed "controller 0"/"controller 1" - instead of asking for a raw slot number, closing the exact client-vs-controller 0-vs-1 confusion surfaced live earlier. Documents plainly that this can show what TYPE a slot last used but can't show or control WHICH physical controller becomes which slot - that's decided by Moonlight client-side, upstream of Wolf's API entirely. 2. Documents a full recovery procedure in the Wii U section for when Cemu's Input Settings Save button is cut off-screen (confirmed live: happens even maximized, at higher resolutions, and closing the window doesn't save) - an Alt-drag/Alt+F7 window-manager fix first, then editing Cemu's own controllerProfiles/controllerN.xml directly on the host (plain XML, not inside the container) as a full GUI bypass. Documents the key insight that made this actually work live: /