Repository navigation
GlowberryClient BETA5 - Radial Wheel Rebuild, Replay Flight & Hook Reliability
Pre-release
Pre-release
GlowberryClient BETA5
The last beta before the official OV.3 release. This build lands the preloader Phase 3 work
(hook reliability, verified installs, honest diagnostics), the radial wheel rebuild, replay
spectator flight, and auto sign-in on the working Bedrock auth path.
Everything below is what changed since BETA4.
✨ Added
Radial wheel — rebuilt around profiles
- Hold-to-open gesture. The wheel is now a hold-to-open menu: the press opens it, you point or
flick while holding, and the release commits. The old press-to-toggle shape is still available. - Player-authored profiles. One to eight entries per ring, each with its own label, icon and
colour, instead of a fixed four-destination ring. - Nested sub-wheels. A ring can open another ring in place, so the action count is no longer
capped at one wheel. - Profile manager. Create, rename, delete and reorder profiles on the fly. Deleting a profile
repoints any sub-wheel that opened it, and the last profile is never deleted.
Replay — interactive spectator flight
- The free camera can now be flown directly: a single-finger drag over the video looks around, and a
flight stick (with boost) moves the camera. The flight tick only integrates the stick in
interactive spectator mode, so an authored cinematic still plays untouched.
Sign-in
- Auto sign-in on the working Bedrock auth path. The launcher refreshes the active account's
stored auth blob on a background thread at launch, instead of depending on the MSAL silent path
whose placeholder client id can never succeed. A failed refresh opens the sign-in screen with the
reason already shown, rather than leaving you signed out with no prompt.
Launch tab
- The head pod's sync indicator is now driven by the real cosmetic-sync state: running reads as
synced, enabled-but-not-yet-up reads as loading (the sockets open on a background thread), and
off reads as hidden rather than claiming a link that does not exist.
Tooling
- One-step signature-rule generation (
tools/gen-rules): download the APK, extract the library,
analyze it, derive the RTTI rules and merge them with a revision bump — in one command, with host
tests and a CI run.
🔧 Fixed
Hook reliability (preloader Phase 3)
- Detours no longer drop return values. The cosmetics seams forward every volatile register, so
a return value inx0or ansretpointer inx8survives the detour exactly as if the hook were
not installed. The old passthroughs preserved them only by accident. - Hook installs retry instead of giving up. A deferral now re-arms the install with backoff
rather than sealing it for the session; only after three give-ups does it stay vanilla. - Patched prologues are verified. After every install the first instruction is read back and
confirmed to be a branch; an unverified patch is backed out, so a session never runs half-hooked. - A live probe replaces the version window. The render hook resolves its slot from the diagnostic
string the function body references and refuses a target that is not executable code, so newer
builds keep the attempt and still fail closed. - Generated rules carry their own probe, and a rule whose probe did not resolve is refused at
merge time instead of looking like a working one.
Diagnostics honesty
- The report now names the device, the process ABI, the render-hook refusal reason (which
exact gate refused it), the skin-path seam stage, and the frame-pacing reading — with
"unknown" for anything the build genuinely cannot read, never a confident wrong answer. - The render-distance route and the persona accessor names are now reported per build, so the
launcher can say a route is possible instead of guessing.
Optifine
- An item the crash guard switched off now says why (clear / retrying / last attempt / quarantined)
instead of looking identical to one you turned off yourself. Re-enabling an item by hand clears its
counter.
Tooling
- The analyzer's
ADRPreference scan no longer silently returns nothing when numpy is absent; it
has an equivalent pure-Python path, so a machine without numpy is no longer a quiet wrong answer.
Cosmetics
- The GLES mesh rasteriser's Java surface is retired. Every cosmetic route is now backend-agnostic,
and a test pins that the graphics backend never blocks a piece — so a preview-only piece is never
blamed on Vulkan.
✅ Verification
:app:assembleDebuggreen; APK shipsarm64-v8awithlibgxcore.soandlibpreloader.so.- Unit tests pass (pure logic, no mocks).
- Preloader host tests and the Python tooling tests now run on every commit in CI.
- Cosmetics, preview and the native seams are still unverified on device; the pure pipeline is
covered by the tests and the diagnostics report names which route is live.