From 016683cc35576dc1a012886be4a83c2c8aa96d54 Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Thu, 2 Apr 2026 14:00:04 -0500 Subject: [PATCH] =?UTF-8?q?docs:=20sync=20KB=20=E2=80=94=20release-2026.4.?= =?UTF-8?q?02.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gaming/release-2026.4.02.md | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 gaming/release-2026.4.02.md diff --git a/gaming/release-2026.4.02.md b/gaming/release-2026.4.02.md new file mode 100644 index 0000000..b3299f9 --- /dev/null +++ b/gaming/release-2026.4.02.md @@ -0,0 +1,50 @@ +--- +title: "MLB The Show Grind — 2026.4.02" +description: "Pack opening command, full cycle orchestrator, keyboard dismiss fix, package split." +type: reference +domain: gaming +tags: [release-notes, deployment, mlb-the-show, automation] +--- + +# MLB The Show Grind — 2026.4.02 + +**Date:** 2026-04-02 +**Project:** mlb-the-show (`/mnt/NV2/Development/mlb-the-show`) + +## Release Summary + +Added pack opening automation and a full buy→exchange→open cycle command. Fixed a critical bug where KEYCODE_BACK was closing the buy order modal instead of dismissing the keyboard, preventing all order placement. Split the 1600-line single-file script into a proper Python package. + +## Changes + +### New Features +- **`open-packs` command** — navigates to My Packs, finds the target pack by name (default: Exchange - Live Series Gold), rapid-taps Open Next at ~0.3s/pack with periodic verification +- **`cycle` command** — full orchestrated flow: buy silvers for specified OVR tiers → exchange all dupes into gold packs → open all gold packs +- **`DEFAULT_PACK_NAME` constant** — `"Exchange - Live Series Gold"` extracted from inline strings + +### Bug Fixes +- **Keyboard dismiss fix** — `KEYCODE_BACK` was closing the entire buy order modal instead of just dismissing the numeric keyboard. Replaced with `tap(540, 900)` to tap a neutral area. This was the root cause of all buy orders silently failing (0 orders placed despite cards having room). +- **`full_cycle` passed no args to `open_packs()`** — now passes `packs_exchanged` count to bound the open loop +- **`isinstance(result, dict)` dead code** removed from `full_cycle` — `grind_exchange` always returns `int` +- **`_find_nearest_open_button`** — added x-column constraint (200px) and zero-width element filtering to prevent matching ghost buttons from collapsed packs + +### Refactoring +- **Package split** — `scripts/grind.py` (1611 lines) → `scripts/grind/` package: + - `constants.py` (104 lines) — coordinates, price gates, UI element maps + - `adb_utils.py` (125 lines) — ADB shell, tap, swipe, dump_ui, element finders + - `navigation.py` (107 lines) — screen navigation (nav_to, nav_tab, FAB) + - `exchange.py` (283 lines) — gold exchange logic + - `market.py` (469 lines) — market scanning and buy order placement + - `packs.py` (131 lines) — pack opening + - `__main__.py` (390 lines) — CLI entry point and orchestrators (grind_loop, full_cycle) +- `scripts/grind.py` retained as a thin wrapper for `uv run` backward compatibility +- Invocation changed from `uv run scripts/grind.py` to `PYTHONPATH=scripts python3 -m grind` +- Raw `adb("input swipe ...")` calls replaced with `swipe()` helper + +## Session Stats + +- **Buy orders placed:** 532 orders across two runs (474 + 58) +- **Stubs spent:** ~63,655 +- **Gold packs exchanged:** 155 (94 + 61) +- **Gold packs opened:** 275 +- **OVR tiers worked:** 77 (primary), 78 (all above max price)