Skip to content

Fix user-reported issues + dependency bumps (3.3.23)#157

Open
phantomptr wants to merge 5 commits into
mainfrom
fix/user-reported-batch
Open

Fix user-reported issues + dependency bumps (3.3.23)#157
phantomptr wants to merge 5 commits into
mainfrom
fix/user-reported-batch

Conversation

@phantomptr

Copy link
Copy Markdown
Owner

Batch of fixes for issues reported in Discord/bug bundles, plus the four open dependabot PRs folded in. No PS5 hardware was available, so the HW-dependent parts are flagged for confirmation.

Fixes

Updates won't install on FW 11/12 (most-reported)

runPkgInstall already falls through to the DPI daemon for a rejected patch (ee0832e), but the engine's 2.2.55 register-reject cleanup deleted the staged .pkg the instant the in-process register was rejected — so the DPI fallback had nothing to install. HW bug bundle (FW 12.70, v3.3.22) confirms it: register-reject staging cleaned fired right after 0x80b21106, register_path=none, update failed.

New pure predicate preserve_staging_on_reject(package_type) (…DP); the handler skips the auto-clean for a guarded patch. The client owns cleanup after the full cascade (USB fsDeletes unconditionally; queue keeps-for-retry / deletes on success), so no leak. Base/DLC keep the existing idempotent cleanup. (Still open, needs FW-12 HW: in the same bundle the payload went unreachable right after 0x80b21106 — a separate crash/wedge; and both in-process appinst and the DPI daemon now call InstallByPackage, so FW 12.70 may hit the same gate either way.)

"Close game" did nothing on FW 12.20

handleStop did appKill then if (!ack.ok) processKill, but appKill never resolves ok:false — the engine bails so the promise throws, skipping the SIGKILL fallback. On FW 12.20 Sony's sceApplicationKill is rejected → throw → fallback never ran. Wrapped each kill so a throw falls through to the (elevated-ucred) SIGKILL. (Payload sceSystemServiceKillApp hardening left for HW follow-up.)

Upload speed 120→10 MB/s on exfat.ffpfsc dumps

Transfer code is byte-identical since v3.3.5. The one new mgmt-port load is the running-game pollers (InstalledApps 3s, Library 5s) contending with a many-file reconcile's per-file finalize round-trips. Both pollers now pause while transferScreenBusy(host). (Likeliest cause; needs a HW repro — slow upload with only the Upload screen open — to confirm.)

Dependency bumps (dependabot #146#149)

  • engine: tower-http 0.6 → 0.7
  • desktop: tauri 2.11.3 / tauri-build 2.6.3 / tauri-utils 2.9.3 / tray-icon 0.24.1
  • client: @tauri-apps/api 2.11.1, lucide-react 1.21.0, react-router-dom 7.18.0, @vitest/coverage-v8 4.1.9, typescript-eslint 8.61.1
  • CI actions: checkout v7, setup-buildx v4, build-push v7, login v4, metadata v6

Verification (no HW)

engine clippy + full workspace tests, desktop cargo check (tauri 2.11.3), client typecheck + lint + 743 tests + vite build, i18n coverage gate — all green. New unit test preserve_staging_on_reject_only_for_patches.

…stall it

On FW 11/12 the in-process InstallByPackage rejects a PS4 update with 0x80b21106
(an authid gate) — the EXPECTED first step before the client retries through the
standalone DPI daemon, which lands patches the in-process path can't. But the
engine's 2.2.55 register-reject staging cleanup deleted the staged .pkg the
instant that first register was rejected, so the DPI fallback had nothing left to
install (HW bug bundle, FW 12.70: register-reject staging cleaned fired right
after 0x80b21106, register_path=none, update failed).

Add the pure predicate preserve_staging_on_reject(package_type) (ends_with DP)
and skip the auto-clean for a guarded patch, logging staging PRESERVED for DPI
fallback. The client owns cleanup of its transient copy after the FULL cascade
(USB path fs_deletes unconditionally; the queue keeps-for-retry on fail / deletes
on success), so no leak. Base/DLC keep the existing idempotent cleanup.
… (FW 12.20)

handleStop did `ack = appKill(...)` then `if (!ack.ok) processKill(...)`, but
appKill never resolves ok=false — the engine bails when the payload returns
ok=false, so the invoke promise REJECTS. On FW 12.20 sceApplicationKill rejects
the app id, appKill throws, and we jumped straight to the outer catch — the
SIGKILL fallback (which runs with the payload's elevated ucred and does work)
never ran, so the button "did nothing". Wrap each kill in its own try/catch so a
throw falls THROUGH to the pid SIGKILL instead of aborting. Detection is fine
(the badge+button appear, so app_id is valid) — only the kill API fails on 12.20.
…ole runs

InstalledApps (every 3s) and Library's RunningAppsPanel (every 5s) poll the PS5
mgmt port for what's running. A folder reconcile (a many-chunk exfat.ffpfsc dump)
already bursts that same mgmt port with per-file finalize round-trips; the extra
poll contends and can collapse a many-file upload's effective throughput (a single
.pkg is one finalize, so it's immune) — the likeliest cause of the reported
120→10 MB/s exfat regression. Both pollers now skip a tick when
transferScreenBusy(host) and resume the moment the upload ends. Safe regardless of
whether it's THE cause; needs a HW repro (slow upload with only the Upload screen
open) to confirm.
Folds in the four open dependabot PRs (#146#149), reapplied on current main so
the lockfiles regenerate cleanly:
- engine: tower-http 0.6 -> 0.7 (cors feature; CorsLayer unchanged, builds clean)
- desktop: tauri 2.11.3 / tauri-build 2.6.3 / tauri-utils 2.9.3 / tray-icon 0.24.1
- client: @tauri-apps/api 2.11.1, lucide-react 1.21.0, react-router-dom 7.18.0,
  @vitest/coverage-v8 4.1.9, typescript-eslint 8.61.1
- CI: actions/checkout v7, docker/setup-buildx v4, build-push v7, login v4,
  metadata v6

Verified: engine clippy+tests, desktop cargo check, client typecheck/lint/743
tests/vite build, i18n gate — all green.
- Fixed FW11/12 update installs (preserve the staged patch for the DPI fallback)
- Fixed Close game on FW 12.20 (reach the SIGKILL fallback)
- Pause running-game pollers during an upload (exfat speed regression)
- Dependency + CI bumps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant