Repository navigation
Releases: SolaneHub/Expedition33_RPC
Releases · SolaneHub/Expedition33_RPC
Release list
v2.0.7
Fixed & Hardened
- Catalog Key Symmetry & Translation Restoration (
assets/game_data.json,tests/detection/test_game_data.py):- Restored 90 missing localized checkpoint alias keys across all 19 non-Italian catalogs, guaranteeing 100% key symmetry and allowing foreign clients to cleanly resolve Italian in-game flags to their localized equivalents.
- Eliminated special-case language exclusions in test assertions (
if lang != "it":), enforcing strict bidirectional catalog symmetry.
- Cross-Platform Bridge Discovery (
integrations.bridge_installer):- Fixed path separator handling on non-Windows environments using
pathlib.Pathjoins, preventing malformed paths with literal backslashes. - Added Linux and Steam Deck standard Steam library discovery roots (
~/.local/share/Steam,~/.steam/steam,~/.var/app/...).
- Fixed path separator handling on non-Windows environments using
- COM STA Initialization for Directory Picker (
ui.tray_app):- Wrapped
SHBrowseForFolderWwithOleInitializeandOleUninitializein_prompt_folder_selection, preventing COM initialization failures withBIF_NEWDIALOGSTYLE.
- Wrapped
- Standalone Execution Bootstrapping (
main.py):- Restored
srcdirectory insertion intosys.pathinmain.py, enabling direct execution without prior virtualenv editable package installation.
- Restored
- Save Games Path Test Coverage (
tests/detection/test_compat_paths.py):- Added full test coverage for
get_save_games_pathsacross Windows, Proton, Wine, and custom overrides.
- Added full test coverage for
Verification & Security
SHA-256 Checksums
169ab2e101b170cd5cc0b6bee82c9526cde7a5ab98929e64009100400bcf547f Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (67/68 Clean)
v2.0.6
Added
- Cross-Platform Save Directory Resolution (
detection.compat_paths,detection.save_reader):- Implemented
get_save_games_paths()andresolve_user_data_path()supporting Proton, Wine, SteamOS, and Linux compat paths (STEAM_COMPAT_DATA_PATH,WINEPREFIX, and standard Steam library roots). - Integrated dynamic user data path resolution into
SaveFileReaderfor robust multi-environment save parsing.
- Implemented
- Dynamic Process & Main Menu Catalog Access (
detection.game_data):- Added
get_target_process_names()andget_main_menu_tokens()dynamically reading custom overrides fromgame_data.jsonwith safe built-in fallbacks.
- Added
Fixed & Hardened
- Safe Bridge Extraction & Path Normalization (
integrations.bridge_installer):- Added zip-slip directory traversal guards (
is_relative_to) during Lua bridge archive decompression. - Switched file extraction to memory-safe
shutil.copyfileobjstreaming and fixed drive-root path formatting across candidate search directories. - Enhanced error diagnostics with explicit permission feedback if the game process is locking files.
- Added zip-slip directory traversal guards (
- Memory-Mapped Save Point Inspection (
detection.save_reader):- Migrated
EXPEDITION_*.savparsing to read-only memory-mapping (mmap.mmap), eliminating complete file loading into memory while searching forLastUsedSavePoint. - Added defensive guards against zero-byte corrupted save files.
- Migrated
- Accurate Tower Trial Matcher (
detection.normalization,detection.detector):- Replaced substring matching with set-based alphanumeric token comparison in
resolve_tower_trial, eliminating false positive collisions between normal enemies and trial bosses. - Refined Endless Tower detection in
GameDetectorto ignore false hits on zones such as "workshop".
- Replaced substring matching with set-based alphanumeric token comparison in
- Discord Presence Fingerprint Completeness (
integrations.discord_rpc):- Extended presence cache fingerprint to track
large_text,small_image,small_text,party_id, andparty_size, ensuring presence updates immediately when secondary metadata changes.
- Extended presence cache fingerprint to track
- Native Win32 Directory Picker (
ui.tray_app):- Replaced Tkinter file dialog with native Win32
SHBrowseForFolderWdialog viactypes, eliminating GUI freezes and window management overhead.
- Replaced Tkinter file dialog with native Win32
- Thread-Safe Settings Persistence (
core.settings):- Protected
SettingsServicestate modifications with reentrant lock (threading.RLock) and isolated temporary file writing using process and thread identifiers.
- Protected
- Win32 Shared File Reading (
core.platform):- Ensured reliable OS file descriptor closure via
closefd=Trueduring shared text reading.
- Ensured reliable OS file descriptor closure via
Changed & Optimized
- Catalog Normalization & Size Optimization (
assets/game_data.json):- Deduplicated punctuation and whitespace variations across all 20 language catalogs, slashing file size by ~40% (~18,500 lines cleaned) without loss of semantic coverage.
- Optimized VirusTotal Upload Streaming (
.github/scripts/virustotal_scan.py):- Optimized multipart payload assembly via preallocated
bytearrayandmemoryviewslice reads. - Standardized JSON report format with structured file verification stats and generated timestamps.
- Optimized multipart payload assembly via preallocated
- Test Suite Expansion & CI Speedup:
- Added unit test suites for VirusTotal scan reporting, save reader mmap/empty file handling, bridge installer zip-slip protection, detector tower edge cases, and normalization token matching.
- Separated fast unit tests fail-fast from integration tests in GitHub Actions CI.
Verification & Security
SHA-256 Checksums
8f5dec31f6d10dde801c90714f4ee1e51a94518b29d975441d60edb1bb7d6f55 Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (67/68 Clean)
v2.0.5
Fixed
- Discord Wire Protocol 128 UTF-8 Bytes Boundary Clamping (
ui.presentation):- Fixed
truncate_presence_fieldto strictly clamp at the 128 byte UTF-8 wire protocol limit instead of character count. - Implemented safe byte-boundary decoding with
errors="ignore", preventing packet rejections and IPC socket crashes when displaying multibyte languages (Chinese, Russian, Japanese, Korean, Arabic, emojis). - Added dedicated test coverage in
tests/ui/test_presentation.py.
- Fixed
Changed & Optimized
- Non-blocking Asynchronous Lua Bridge Auto-Installation (
core.orchestrator):- Offloaded
bridge.zipunzipping and filesystem modifications to a background daemon thread with guard flags and a 30s cooldown. - Eliminated telemetry polling loop jitter (0.5–2s freeze) and Discord socket heartbeat timeouts on game launch.
- Offloaded
- Clean Event Subscription Pattern (
core.orchestrator,ui.tray_app):- Replaced runtime monkey-patching of
orchestrator.on_update_availablewith formalsubscribe_update_available()observer pattern returning an idempotent unsubscribe callback.
- Replaced runtime monkey-patching of
- Simplified Settings Persistence Architecture (
core.settings):- Replaced complex locking and nanosecond temp files with a streamlined typed
Settingsdataclass and atomic.replace()operations, with in-memory rollback on filesystem errors.
- Replaced complex locking and nanosecond temp files with a streamlined typed
Verification & Security
SHA-256 Checksums
9eaf9330d6b953fff56270469aeae7624c9d9095fa724b98e0c4f889f7370489 Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (67/68 Clean)
v2.0.4
Added
- Persistent Checkpoint Save Reader Fallback (
detection.save_reader):- Restored and modernized
SaveFileReader(Python 3.12+, zero external dependencies) to dynamically read the active player save (EXPEDITION_*.sav). - Extracts
LastUsedSavePointand validates semantic zone matching, restoring checkpoint presence display in parentheses (e.g.Verso's Drafts (Candy Land)) even when the in-game save menu is closed. - Implemented cached binary inspection with filesystem
mtimechecking for zero overhead.
- Restored and modernized
Fixed
- Eliminated Engine Game Thread Freezes & Micro-Stutters:
- Fixed severe periodic stutter (0.5–1.0s every 4 seconds) caused by UE4SS Lua bridge debug routines iterating
FindAllOf("UserWidget")across 100,000+ UObjects and all streaming levels on the engine Game Thread. - Streamlined
main.luato O(1) level identification viaUGameplayStatics::GetCurrentLevelName(), eliminating all level iteration and blocking disk I/O. - Updated bundled
src/expedition33_rpc/assets/bridge.zip.
- Fixed severe periodic stutter (0.5–1.0s every 4 seconds) caused by UE4SS Lua bridge debug routines iterating
Verification & Security
SHA-256 Checksums
6d16c7e81a6e3258b0b799445eb43cf116ebdc626b5d7efdfe8218147061aef3 Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report
v2.0.3
Fixed
- Settings Persistence Optimization & Responsiveness:
- Implemented thread-safe in-memory caching and reentrant locking (
RLock) inSettingsService, eliminating redundant disk reads during setting queries and toggles. - Adopted direct binary stream write with EAFP parent directory recreation, cutting hot-path UI toggle latency from ~12.6ms down to ~0.26ms.
- Hardened multi-process temporary filename generation with
os.getpid(), unique thread IDs, and high-precision timestamps to prevent collisions. - Added filesystem modification timestamp (
st_mtime) tracking to automatically detect and merge external configuration file changes. - Suppressed debug standard output in tray menu actions to avoid terminal I/O latency regressions in headless test runners.
- Implemented thread-safe in-memory caching and reentrant locking (
Verification & Security
SHA-256 Checksums
74ae0dfffcb8f397f3adbac06cd425f0b763fe0256381782c69e34b21349a9d8 Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (65/66 Clean)
v2.0.2
Changed
- Optimized Lazy Telemetry Catalog Loading:
- Guarded
game_data.__getattr__with strict_LAZY_ATTRIBUTESwhitelist before reading JSON catalogs, preventing premature 1.26MB file reads during Python module inspection. - Eliminated top-level catalog imports from
normalization.pyandpresentation.pyin favor of deferred module-attribute access.
- Guarded
- Franciscan Architectural Refactoring & Pruning:
- Extracted smoke test logic from
core/app.pyinto dedicatedcore/smoke.pyand registered PyInstaller hidden import. - Pruned unused ghost hash maps, redundant sentinels (
_UnsetType), duplicate parameters, and unused platform lock wrappers. - Streamlined
AppOrchestratorstate change subscriber dispatching to ensure decoupled and concurrent multi-listener delivery.
- Extracted smoke test logic from
Fixed
- Process Lifecycle & Steam AppID Compatibility:
- Decoupled process lifecycle validation from strict AppID dependency, preventing false disconnects on alternative distribution paths.
- Hardened bridge provider injection in
GameDetectorto allow deterministic opt-out viabridge_provider=Noneusing sentinel defaults.
Verification & Security
SHA-256 Checksums
6cadebb40797ffb42ff0f310497cd3c1bff2c5ba9345ac3c739d66c3fc3ee152 Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (65/66 Clean)
v2.0.1
Fixed
- Folder Selection Dialog Lifecycle & Process Isolation:
- Isolated folder selection (
_prompt_folder_selection) into a dedicated worker thread with its own clean Single-Threaded Apartment (STA) and Win32 message pump, eliminating deadlocks withpystray's system tray window message loop. - Bound native directory dialogs explicitly to the Tk root window (
parent=root), ensuring proper window ownership hierarchy under Windows DWM. - Implemented guaranteed cleanup in
finally:blocks withroot.attributes("-topmost", False),root.update_idletasks(),root.update(), androot.destroy(), ensuring the dialog window closes and disappears immediately upon clicking Cancel or the window close (X) button without leaving frozen ghost windows. - Added comprehensive lifecycle and cancellation unit tests for folder selection.
- Isolated folder selection (
Verification & Security
SHA-256 Checksums
c3f537314a951947630545e7225cbe4e60b6c49b9b3d017e7cb212a4cdabdc3f Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (65/66 Clean)
v2.0.0
Added
- Decoupled Presence Engine (
core.presence):- Introduced immutable
PresencePayloadData Transfer Object (DTO) encapsulating all Discord rich presence state fields (state,details,large_image,large_text,small_image,small_text,start_timestamp,pid). - Completely decoupled
DiscordRPCManagerfrom the UI layer (ExpeditionTrayApp) and domain models: the presence client exclusively consumesPresencePayload, enabling pure headless operation and isolated unit testing.
- Introduced immutable
- Native Platform Abstraction Layer (
core.platform):- Consolidated all operating system interactions into a unified platform module (
core.platform):PlatformMutex: Named Win32 Mutex on Windows with automatic POSIX advisory file lock (fcntl.flock) fallback on Linux/macOS.FileLock: Robust cross-platform non-blocking file locking for atomic configuration updates.PlatformRegistry: Safe abstraction over Windows Registry (winreg) with no-op fallbacks for POSIX platforms.
- Completely eliminated direct low-level Win32 ctypes and winreg imports from application business logic.
- Consolidated all operating system interactions into a unified platform module (
- Interactive Telemetry Simulation Harness (
tools/simulate_telemetry.py):- Added standalone developer CLI tool for simulating game lifecycles, combat transitions, Endless Tower trials, and location changes in real-time or automated batch mode.
- Added automated simulation regression tests (
tests/detection/test_simulate_telemetry.pyandtests/e2e/test_process_lifecycle.py), expanding test suite to 175 automated tests.
Changed
- Zero Static Type Suppressions & 100% Pyright Strict Safety:
- Eradicated all 12 static type suppressions (
type: ignore) across production and test code. - Full codebase strict type compliance validated under Python 3.12+ and Pyright with 0 errors and 0 warnings.
- Eradicated all 12 static type suppressions (
- Detection Kernel Purification & LRU Caching:
- Standardized domain combat and exploration states around canonical
Exploringdomain tokens. - Replaced complex lazy data structures with standard Python
functools.lru_cacheand direct protocol bindings (BridgeProviderProtocol). - Implemented adaptive idle polling in detector to minimize background CPU usage when the game is not running.
- Standardized domain combat and exploration states around canonical
- Package Entrypoint Lazy Exports:
- Modernized
src/expedition33_rpc/__init__.pywith PEP 562 module-level__getattr__and__dir__, ensuring fast startup times by deferring heavyweight imports until accessed.
- Modernized
Verification & Security
SHA-256 Checksums
43f0e593e5612ad31bbae3eee3c247805f3c865d41e55d2b73017866d2b2523a Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (65/66 Clean)
v1.9.0
Added
- Universal 20-Language Localization:
- Extracted and normalized official in-game strings across all 20 officially supported languages directly from Unreal Engine
.locresbinary catalogs: English (en), Italian (it), French (fr), German (de), Spanish (es), Latin American Spanish (es-419), Japanese (ja), Korean (ko), Polish (pl), Brazilian Portuguese (pt-BR), Russian (ru), Simplified Chinese (zh-Hans), Traditional Chinese (zh-Hant), and more. - Guaranteed 100% key symmetry across all 765 checkpoint tags and 48 exploration zones in all 20 languages.
- Fully mapped all 33 Endless Tower stages and trials from game data table
ST_BattleTowerStageswith localized stage and trial titles across all languages. - Localized Discord Rich Presence details and state presentation templates across all 20 languages.
- Extracted and normalized official in-game strings across all 20 officially supported languages directly from Unreal Engine
- SSOT Asset Catalog Architecture & Code Style Standards:
- Consolidated presentation templates, localized strings, and domain dictionaries into
src/expedition33_rpc/assets/game_data.jsonas the Single Source of Truth (SSOT). - Integrated Prettier formatting (
.prettierrc.json,.prettierignore) and added automated Prettier validation in GitHub Actions CI.
- Consolidated presentation templates, localized strings, and domain dictionaries into
- Concurrency & IPC Hardening (
FILE_SHARE_DELETE):- Enforced Win32
FILE_SHARE_DELETEsharing flags on Windows file handles when reading bridge telemetry files, eliminating race condition locks during concurrent file writes by the game's Lua thread.
- Enforced Win32
- Lua Bridge Integrity & Syntax Validation:
- Embedded updated authentic UI token names inside the bundled
bridge.zipasset. - Added automated Lua tokenizer and AST syntax validator harness (
tests/harness/lua_validator.py) to prevent bridge script regressions during build time.
- Embedded updated authentic UI token names inside the bundled
Changed
- Dependency Injection & Callback Modernization:
- Completed explicit Protocol-based Dependency Injection across
AppOrchestrator,GameDetector, and UI layers. - Streamlined orchestrator communication from generic multi-consumer pub/sub buses to direct, typed 1-to-1 event callbacks.
- Expanded automated test suite to 148 unit, integration, and E2E tests.
- Completed explicit Protocol-based Dependency Injection across
Verification & Security
SHA-256 Checksums
7a54eb7ff0a1c04f1cc7c2aba14c366167f51e31cae5b0b8f4733ed42af9afc2 Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report (Clean)
v1.8.0
Added
-
Multi-Target Process Unification (Steam & Game Pass WinGDK):
- Added seamless simultaneous detection support for both Steam (
SandFall-Win64-Shipping.exe) and PC Game Pass / Microsoft Store (SandFall-WinGDK-Shipping.exe) game editions. - Unified detection target configuration to
target_process_nameswith dynamic process image resolution.
- Added seamless simultaneous detection support for both Steam (
-
Immutable Process Context (
GameProcessInfo):- Encapsulated PID, executable name, and resolved binary paths within immutable
GameProcessInfoandGameStatedomain structures. - Bound Discord Rich Presence directly to the detected executable PID for both Steam and WinGDK targets, guaranteeing accurate Discord activity association.
- Encapsulated PID, executable name, and resolved binary paths within immutable
-
Discord IPC Protocol Framing (
DiscordFrameCodec):- Extracted binary length-prefix framing and JSON payload encoding into dedicated, unit-tested
DiscordFrameCodec, eliminating nested wrapper abstractions.
- Extracted binary length-prefix framing and JSON payload encoding into dedicated, unit-tested
-
Structural Protocol Typing:
- Introduced clean
typing.Protocoldefinitions forProcessLike,BridgeInstallerProtocol, andStartupProtocol.
- Introduced clean
-
Precompiled Hash Lookup Acceleration:
- Optimized checkpoint tag lookups using precompiled
$O(1)$ dictionary lookups instead of repetitive regular expression scans.
- Optimized checkpoint tag lookups using precompiled
Changed
- Ultra-Fast Test Suite Execution:
- Accelerated full test suite runtimes to under 2.2 seconds by replacing wall-clock sleep loops with deterministic iterations, lowering test HTTP server polling intervals to 0.01s, and injecting virtual
time_providerclocks into telemetry providers.
- Accelerated full test suite runtimes to under 2.2 seconds by replacing wall-clock sleep loops with deterministic iterations, lowering test HTTP server polling intervals to 0.01s, and injecting virtual
- Facade Encapsulation in AppOrchestrator:
- Replaced ceremonial wrapper services with clean atomic facade methods (
install_bridge_to,subscribe_update_available). - Added thread-safe state synchronization and re-entrant update subscription handling.
- Replaced ceremonial wrapper services with clean atomic facade methods (
Fixed
- PyInstaller Bundled UI Smoke Test in CI:
- Hardened GitHub Actions release workflow with automated headless smoke testing of PyInstaller executable binaries, ensuring correct bundling of Tkinter, PIL, pystray, and platform dependencies.
Verification & Security
SHA-256 Checksums
13a3bdb1a276e95a3fd31cfcc14ae4256fd5d0368b9d9b2d694415e8bd639407 Expedition33_RPC.exe
3ba413bb69a8cffd93ecccea82526132957b69a699532c2a4a8d52470d45d2c6 bridge.zip
VirusTotal Analysis Reports
- Expedition33_RPC.exe: VirusTotal Report
- bridge.zip: VirusTotal Report