Release 2.11.4: Cloud Play for fallback regions — full PS3+PS4 catalog restore, Bloodborne launch chain fixed - #50
Merged
Merged
Conversation
Some store regions publish a title's game-streaming sku with license_type=0
instead of 4 (e.g. Bloodborne on the GB store: sku -EC02 carries
EP9000-CUSA00207_00-PSRSVD0000000000, packageType PS4GS). Step 0.5d's
streaming pass missed it, the *GD full-game fallback picked the purchase
entitlement instead, 0.5e saw the user's PS+ copy as "already owned" and
skipped the $0 acquire, and Gaikai rejected the GD entitlement with
002.2026 noGameForEntitlementId ("Cloud Session Failed", GitHub issue #6).
Add a packageType "*GS" pass between the license_type==4 pass and the *GD
fallback (title-matched first, same structural suffix match as the GD
picker). Verified against 997 live store containers (853 US catalog + 144
GB titles from the reporter's entitlements dump): exactly one title changes
resolution -- GB Bloodborne, the bug -- and every license_type==4 pick is
untouched.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… wording The *GS picker never inspects license_type, so drop that claim from its log line; and actually assert the "unchanged" sentinel the no-match test sets up. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…reaming-fallback Fix cloud launch of Bloodborne (EU): pick *GS streaming skus that lack license_type=4
Five workflow_dispatch workflows, one per platform, each building that platform (build-only — no store deploy, no Dropbox, no signing/deploy secrets) and uploading the result as a workflow artifact. Versions come from CMakeLists.txt via the extract-version action. - build-artifact-linux.yml Pylux-Linux-<ver>.AppImage + Pylux-Linux-<ver>.zip - build-artifact-android.yml Pylux-Android-<ver>.apk (debug-signed) - build-artifact-macos.yml Pylux-macOS-<ver>.zip (ad-hoc .app, arm64) - build-artifact-ios.yml Pylux-iOS-<ver>.ipa (UNSIGNED, sideload only) - build-artifact-windows.yml Pylux-Windows-<ver>.exe + Pylux-Windows-<ver>.zip Reuses the deploy/build workflows' build + toolchain steps; drops the signing/deploy tails. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
# Conflicts: # lib/src/cloudsession_kamaji.c # test/cloudsession_kamaji.c
The public fallback paginated a single container expecting product rows, but Sony restructured APOLLOROOT into one level of category containers, so region-unsupported accounts got an empty PS Now catalog. Walking only the PS3 child (as PR #43 proposed) restores 264-330 classics but misses the ~535-title PS4 streamable catalog that lives in the genre/alphabetical children. Walk every child of the regional root once instead, deduped by product id, with per-container completeness so a failed child still blocks caching a partial list. Live-verified against an independent walk of both store families: US 853 titles (537 PS4 + 316 legacy), GB/HU 786 (536 PS4 + 250 legacy), identical id sets, zero duplicates; native-account fetch is byte-identical before/after. Adds apollo-fallback-test, a region harness that runs the anonymous walk as any account country. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…mpleteness) Protocol findings: - Scope the legacy->US/GB Classics remap in km_resolve_store_locale to foreign-catalog (fallback-region) sessions. Native accounts resolve every id in their server-authoritative store exactly as before this branch — a native JP/NL classic must not be re-routed to a GB container that lacks it. - Revert km_pick_streaming to the strict license_type==4 primary pass. The title-matched *GS fallback already catches reservations published with license_type=0 (Bloodborne EU); accepting untitled *GS rows in the primary pass risked acquiring a bundle sibling's sku. - Foreign-catalog safety nets so no region can regress below the old behavior: 0.5d retries the modern-title resolve once via the US/GB store when the account store 404s, and a failed /bin/zsh acquire falls through to Gaikai validation instead of surfacing a possibly-wrong PS+ error. - km_is_legacy_classic_id now examines only the title-id segment between the first '-' and '_' (structural, per the data-handling rules) instead of substring-matching the whole id including the region-varying label tail. Fallback-walk findings: - A container row the walk cannot collect (nested deeper than one level, id missing/over-long, child table full) now marks the list incomplete with a log line, so a silently truncated catalog is never cached for the TTL. - Empty-id product rows are dropped (they dodge the dedupe and the contract's uniqueness guarantee). - One global 200-page budget bounds a misbehaving server to ~5x the observed live request count instead of children x per-container cap. - stream_identifier's disc-rescue path reads product_id before storeProductId (the latter is normalized only after streamIdentifier is stamped). Docs: schema example says 8, v6 changelog no longer overclaims storeProductId, dedupe_contract_product_ids documents the plusCatalog stamp on input rows. Live re-verified: HU walk 788 titles / US 853, complete, id sets matching an independent walk; unit suite 126/126. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
They came along with PR #43's branch but are unrelated to the cloud fixes; they can land separately if wanted. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…egions Cloud Play fixes for fallback regions: full catalog restore + Bloodborne launch (2.11.4)
forward-technologies
force-pushed
the
release/beta
branch
from
August 2, 2026 06:39
5b55c88 to
49b530c
Compare
These are real-account working files for the cloud-catalog probe scripts; a broad git add briefly committed the cached-API baseline captures on 2026-08-02 (purged from history). Ignore them so that cannot recur. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…egions gitignore local API captures and entitlement dumps
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotes
release/betato production. This train carries three bodies of work: the*GSstreaming-pick fix (#40), @nyakaspeter's regional cloud-play fixes (#43 — thank you!), and our integration/extension work on top. Written in full detail so any reviewer (human or agent) can trace every change and its evidence.The problem: Bloodborne (and fallback regions generally) could not stream
For accounts in regions without native PlayStation cloud support (HU and others), cloud play was broken at three independent points — fixing any one was not enough, which is why #40 alone (deployed to beta July 12) didn't resolve the tester's report:
PS4GSstreaming reservation carrieslicense_type=0(verified in every store probed: HU/GB/NL). The picker only acceptedlicense_type==4, fell through to the*GDpurchase entitlement, and Gaikai rejected it (002.2026 noGameForEntitlementId).APOLLOROOTinto category links, which the old pagination filtered out entirely.Scope extension: not just PS3 — the full fallback catalog
#43 restored the catalog by fetching the
APOLLOPS3GAMES/APOLLOPS3child containers. Live probing showed those are ~95% PS3: the PS4 streaming catalog lives in APOLLOROOT's other children (genre lists, A–Z lists, PSP/PS1/PS2, Remasters). We replaced the hardcoded child fetch with a one-level walk of every child of the regional root, discovered structurally viacontainer_type(no hardcoded child ids, no name patterns — survives Sony reshuffling categories):Verified live: the walk's id sets match an independently-written walk exactly (853/853, 786/786, zero duplicates), and every title from #43's PS3-child fix is included (0 missing, both families).
Preservation of #43 (fresh-eyes verified)
A dedicated adversarial review compared our integration against
fix/cloud-play, primed to find any place we regressed the contributor's work. Verdict per fix: PS3 catalog preserved (strict superset), account-store routing preserved (byte-identical envelope code; our 404-retry is additive), acquire gating preserved (acquire still attempted exactly per #43), GS pick strengthened (see below), disc-upgrade rescue and duplicate-productId dedupe preserved (their tests run byte-identical and pass).Hardening applied after three independent review passes
license_type==4primary, with a title-matched*GSfallback pass for lt=0 reservations. Swept all 786 live containers in the fallback catalog: identical entitlement chosen vs Cloud play fixes for HU region (and possibly other non-US regions) #43's widened picker on every single title (Bloodborne = the only GS-dependent title; its real container rows are pinned in a unit test). The strict version additionally can never acquire an untitled bundle-sibling's sku.CUSA/PPSAbetween the first-and_), never the region-varying label tail.Verification summary
build-arm64/lib/apollo-fallback-test <CC>runs the anonymous fallback walk as any country.Release notes / mechanics
workflow_dispatch). Production ships via "Release all platforms" after the fallback-region retest confirms; Flathub follows as a separate manual PR.master, which closes Cloud play fixes for HU region (and possibly other non-US regions) #43 as merged with full credit to @nyakaspeter.🤖 Generated with Claude Code