Skip to content

feat(libSceAppContent): implement sceAppContentGetDownloadedStoreCountry contract - #14014

Merged
oneandonlydean merged 3 commits into
boykopovar:mainfrom
akkadbakkad89:feat/appcontent-accessors
Nov 5, 2026
Merged

oneandonlydean merged 3 commits into
boykopovar:mainfrom
akkadbakkad89:feat/appcontent-accessors

Conversation

@akkadbakkad89

@akkadbakkad89 akkadbakkad89 commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

What

sceAppContentGetDownloadedStoreCountry (TCqT7kPuGx0) gets a real body, transliterated from its firmware 4.03 libSceAppContent.sprx export (SHA-256 36039805…, inner body at VA 0x1d20):

  • The export thunk forwards three arguments — uint32_t serviceLabel, const NpUnifiedEntitlementLabel* entitlementLabel, void* storeCountry — replacing the inventory () placeholder in Api.hpp.
  • Verified contract shell: two-word initialization guard (0x80d90001), null checks on the label and output (0x80d90002), and the entitlement-label padding gate at SDK 0x01500000 (cmp DWORD [rbp-0x34],0x1500000 @0x1d8c, bytes +0x11..+0x13 — exactly the module's validEntitlementLabel check).
  • The real body then mutexes and marshals a system-service RPC: selector 0x20005, request {serviceLabel} (4 bytes), the 0x14-byte label in, and a 0x18-byte reply buffer at storeCountry.
  • The firmware error translator (0x1b60) passes 0x80d9xxxx family replies through, maps 0x80020010 to BUSY, turns unknowns into 0x80d9000a, and explicitly passes 0x80d91000 GET_STORE_COUNTRY through unchanged — the dedicated error reserved for this query.
  • No system service exists on host, so after the verified checks the export returns SCE_APP_CONTENT_ERROR_GET_STORE_COUNTRY (0x80d91000) and leaves the output untouched — the honest "cannot get store country" answer rather than a fabricated country or a generic NOT_FOUND claiming the label was checked. The 0x18-byte reply layout stays unverified (debt file).
  • sceAppContentCheckBundleLicenseOnDisc and sceAppContentGetGameTrialsFlag are already implemented in open feat(libSceAppContent): answer bundle license, playable status and game trials queries #13673 and are deliberately not duplicated here.

Tested

Windows 11, guest_appcontent (extended in GuestAppContent.cpp): not-initialized guard, null label/output PARAMETER, valid label returns GET_STORE_COUNTRY across service labels 0 and 7 without writing the 24-byte output, and the SDK-version loop now asserts padded labels yield PARAMETER at SDK ≥ 0x01500000 but GET_STORE_COUNTRY below it. objdump confirms TCqT7kPuGx0 still exports.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: n/a
  • AI-assisted: yes

@github-actions github-actions Bot added the unblocks title Names a title ID on the Unblocks line label Oct 31, 2026
@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Progress report (a644edf → bf382bf)

📈 System libraries: 26.24% (+0.01%, +1 implemented functions)

✅ 1 implemented
Library Name
libSceAppContent sceAppContentGetDownloadedStoreCountry

Changed libraries (implemented exports)

Library Before After Change
libSceAppContent 27/36 (75.00%) 28/36 (77.78%) +2.78%

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — changes requested

The implementation matches the contract described in the PR, but its Unblocks claim omits the required Game bring-up discussion and the observed title stop it resolves.

What I ran

Reviewed head 54bf0d6058e06abae56bcf0c52acb3ca0a735422 against base 474030e58424fefdb65e5df9f3820810fbb4553c; the precheck's individual merge preview was clean and both revisions were unchanged at completion. Environment: Linux x86_64, Python 3.11.2, GCC 12.2.0. I did not build locally.

python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 14014
git diff --check 474030e58424fefdb65e5df9f3820810fbb4553c...54bf0d6058e06abae56bcf0c52acb3ca0a735422
python3 tools/pr_abi_audit.py --repo . --base 474030e58424fefdb65e5df9f3820810fbb4553c --head 54bf0d6058e06abae56bcf0c52acb3ca0a735422 --json | python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps({"status":d["status"],"symbol":next((s for s in d["symbols"] if s["name"]=="sceAppContentGetDownloadedStoreCountry"),None),"findings":d["findings"]},indent=2))'
python3 /marc/AnyPS5/tools/pr_test_quality.py --root /tmp/anyps5-review-14014 --json core/libs/tests/GuestAppContent.cpp
git -C /tmp/anyps5-review-14014 grep -n 'GuestAppContent.cpp' -- '*CMakeLists.txt' 'CMakeLists.txt' '*.cmake'
gh search issues --repo boykopovar/AnyPS5 'PPSA13197' --json number,title,state,url --limit 30

I also read the current PR discussion, inspected the changed implementation/tests and the repository's title-unblock requirements, and refreshed the hosted check status before posting.

Results

Check Result
Diff check Passed; no output.
Conventions and template Hosted check passed. The precheck reported one non-failing debt-length warning (1,005 characters).
Export/NID audit Passed for sceAppContentGetDownloadedStoreCountry: one public declaration, one definition, computed NID TCqT7kPuGx0, no findings. This lexical check does not certify runtime ABI. The precheck could not invoke its copies of the ABI and test-quality helpers because those scripts are absent from the PR head; I ran the current local helpers separately against the exact head.
Test registration The heuristic warned that it could not find the source path literally; manual CMake search confirmed registration through ${LIBS_INCLUDE_DIR}.
Hosted checks Conventions, library portability, eligibility, intake, labels, and report passed. Windows was still in progress at the final refresh; Linux and relinker jobs were skipped.
Author-reported tests PR body reports the Windows 11 guest_appcontent checks and an objdump export check. I did not independently run them.
Local build/tests Not run.
Relevant unedited outputs

Precheck convention warning:

docs/dev/debt/libSceAppContent.md:21: warning: [debt-length] Technical debt entry over 1000 characters: state the gap first (what differs from the console, what is unverified, what throws) and keep only the behaviour it needs: 1005 characters
1 findings, 0 errors; GitHub shows at most 10 error annotations, the job summary lists all

Focused ABI-audit result:

{
  "status": "passed",
  "symbol": {
    "name": "sceAppContentGetDownloadedStoreCountry",
    "computed_nid": "TCqT7kPuGx0",
    "declarations": [
      "core/libs/prx/libSceAppContent/include/Api.hpp"
    ],
    "definitions": [
      "core/libs/prx/libSceAppContent/Export.cpp"
    ],
    "explicit_aliases": [],
    "version": "not encoded by these source declarations; not verified"
  },
  "findings": []
}

Test-quality heuristic and the manual CMake registration search:

{
  "findings": [
    {
      "path": "core/libs/tests/GuestAppContent.cpp",
      "line": 1,
      "kind": "possible-unregistered-cpp-test",
      "message": "Changed C++ test source path was not found literally in CMake files; inspect registration, generated source lists, and workflow coverage."
    }
  ],
  "negative_control_candidates": [],
  "limits": [
    "Heuristics can miss weak assertions and can flag valid tests; inspect every finding.",
    "A test that passes against base is not by itself proof that the PR test is inadequate.",
    "Negative controls are only candidates until the test actually runs against base and fails by assertion rather than import/setup error."
  ]
}
core/libs/prx/libSceAppContent/CMakeLists.txt:6:    add_test_executable(guest_appcontent_tests ${LIBS_INCLUDE_DIR}/tests/GuestAppContent.cpp)

Findings

Blocking

  • The checklist says Unblocks: PPSA13197 (Stellar Blade) imports TCqT7kPuGx0, but the repository requires a Game bring-up discussion reference when a PR fixes a title stop or wrong result. The PR body only says the title imports the NID; please link the discussion and identify the observed stop this change resolves. If it does not unblock an observed title stop, set Unblocks: none and remove the title-unblock label.

Non-blocking

The new debt entry is 1,005 characters and triggers the conventions warning. Consider trimming it to the unresolved gap and its evidence; the hosted conventions check itself passed.

Sources

Not verified

The firmware 4.03 binary analysis and its reported hash/address are author-provided; I did not independently inspect that module or measure the behavior on a PS5. The PR body does not identify the exact revision used for its reported Windows 11 run. The real system-service reply, output layout, Linux behavior, and title-level unblock remain unverified. I did not build or run local C++ tests.

To get this to a good state

Add the matching Game bring-up discussion and the observed title blocker to Unblocks, or remove the title-unblock claim if no observed stop is being addressed. I will rerun the same relevant checks on the updated head.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Reviewed at 54bf0d6058. The source preserves the described check order and leaves the output untouched, but the firmware contract needs checkable evidence.

Please provide the full SHA-256 of the cited 4.03 module and a compact byte/disassembly excerpt showing the export thunk and three arguments, initialization guard, null and SDK-dependent padding checks, RPC request/reply sizes, and the translator case for 0x80d91000. The current abbreviated digest and address descriptions do not let another reviewer verify those claims; a full module upload is unnecessary.

Please also state whether the 4.03 body was compared with 13.60. The existing 13.60 export inventory check establishes symbol presence, not body or ABI equivalence. If no body comparison was made, record that limitation explicitly. Keep GET_STORE_COUNTRY described as the chosen host fallback for an absent service, rather than a measured native no-store-data result.

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 14212 docs/dev/debt/libSceAppContent.md

@github-actions github-actions Bot removed the unblocks title Names a title ID on the Unblocks line label Oct 31, 2026
Split the entry under the length warning, add the module SHA-256 in
full, state that no 13.60 body comparison exists (the inventory check
is symbol presence only), and describe GET_STORE_COUNTRY as the chosen
host fallback for an absent service rather than a measured result.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@akkadbakkad89

Copy link
Copy Markdown
Contributor Author

@oneandonlydean @MarcZX10 Both reviews addressed at e4e041f62257.

Unblocks — corrected to none. The claim was only that PPSA13197 imports the NID (from its module inventory); no Game bring-up discussion documents an observed stop on this export, so the title-unblock claim was wrong.

Checkable firmware evidence — module libSceAppContent.sprx (4.03), SHA-256 36039805f77483b32861b7936ddcd859708b764682984a4625cb7f8d1efdabc4:

Export thunk 0x12f9 (the TCqT7kPuGx0 table entry):

0x12f9: lea edi, [rip+0xad19]      ; module context -> rdi
0x12ff: jmp 0x1d20                 ; esi=serviceLabel rdx=label rcx=out

Inner body 0x1d20 (head + checks):

0x1d31: mov r14, rcx               ; r14 = out
0x1d48: cmp dword [rdi], 0         ; init word 0
0x1d4b: jle 0x1df1                 ; -> 0x80d90001
0x1d51: cmp dword [rdi+4], 0
0x1d55: je  0x1df1                 ; -> 0x80d90001
0x1d61: mov r13d, 0x80d90002
0x1d67: test rdx, rdx              ; label null
0x1d6a: je  0x1df1
0x1d70: test r14, r14              ; out null
0x1d73: je  0x1df1
0x1d75: lea rdi, [rbp-0x34]
0x1d7c: mov dword [rbp-0x34], 0x1000000
0x1d83: call 0x3030                ; sceKernelGetCompiledSdkVersion
0x1d8c: cmp dword [rbp-0x34], 0x1500000
0x1d93: jb  0x1db8                 ; older SDK: skip padding check
0x1d95: cmp byte [r15+0x11], 0     ; r15 = label
0x1d9a: jne 0x1daa
0x1d9c: cmp byte [r15+0x12], 0
0x1da1: jne 0x1daa
0x1da3: cmp byte [r15+0x13], 0
0x1da8: je  0x1db8                 ; padding zero: proceed
0x1daa: lea rdi, [rip+0x3520]      ; log fmt
0x1db1: call 0x3040                ; log
0x1db6: jmp 0x1dea                 ; -> r13d = 0x80d90002
0x1dd2: call 0x390                 ; RPC (under mutex 0x2ff0/0x3000)
0x1dd9: call 0x1b60                ; translate status

RPC marshal 0x390 (selector 0x20005, in {ptr,len} x2, out 0x18):

0x03b3: mov [rbp-0x50], rcx        ; out ptr
0x03b7: mov qword [rbp-0x28], 4    ; in[0].len = 4 (serviceLabel)
0x03bf: mov [rbp-0x20], rdx        ; in[1].ptr = label
0x03c6: mov dword [rbp-0x54], 0
0x03cd: mov qword [rbp-0x18], 0x14 ; in[1].len = 0x14
0x03d5: mov qword [rbp-0x48], 0x18 ; reply size = 0x18
0x03e5: mov esi, 0x20005           ; selector
0x03ea: mov ecx, 2                 ; 2 input elems

Translator 0x1b60 (SDK >= 0x1500000 gate):

0x1b99: cmp ebx, 0x80d90fff
0x1b9f: jg  0x1bca
0x1ba1: lea ecx, [rbx+0x7f26ffff]  ; ebx - 0x80d90000
0x1ba7: cmp ecx, 0x18
0x1baa: ja  0x1bf0                 ; out of range -> remap
0x1bac: mov edx, 0x1f37fff
0x1bb1: bt  edx, ecx
0x1bb4: jae 0x1bd8                 ; bitmask miss -> remap
0x1bb6: mov eax, ebx               ; pass through
0x1bca: cmp ebx, 0x80d91000
0x1bd0: je  0x1bb6                 ; GET_STORE_COUNTRY passes through

13.60 — no body comparison was made; the 13.60 export inventory establishes symbol presence only, and the debt entry now says so explicitly. GET_STORE_COUNTRY is described as the chosen host fallback for an absent service, not a measured native result — the entry and this note now reflect that.

Generated with Devin

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — changes requested

The updated firmware evidence addresses the earlier review comments, but this PR still needs an agreed landing order because its debt-file change conflicts with open #13909 and #14141.

What I ran

Reviewed head e4e041f6225758efaa10c8aae8dee95b3f56f0fd against recorded PR base 474030e58424fefdb65e5df9f3820810fbb4553c; its merge preview against current main 5c9837bfe7c5533f2c77c968dd8193157a8c342a was clean. Pairwise previews used #13909 head ab1bcdda95a8f17e13af99e2a9caaab500468d9d, #14141 head 26cf05e66383ffee7a07807cbad66a8163934438, #11588 head 7f390a37e83769bfd9eebb1c16a34d06bdb83c96, #13589 head 4f5b8b7d75bebb121aec2f41aa7430cf08967949, and #14212 head 6cdd76ba7ac99fbf9e8fc0b167e79a998d001694. Environment: Debian 12, Python 3.11.2, Git 2.39.5; GCC 12.2.0 was not invoked.

python3 tools/check_conventions.py --base 474030e58424fefdb65e5df9f3820810fbb4553c --head e4e041f6225758efaa10c8aae8dee95b3f56f0fd --title 'feat(libSceAppContent): implement sceAppContentGetDownloadedStoreCountry contract' --body /tmp/pr-14014-body.md
git diff --check 474030e58424fefdb65e5df9f3820810fbb4553c...e4e041f6225758efaa10c8aae8dee95b3f56f0fd
python3 core/libs/tests/test_public_headers.py --audit-only
rg -n 'GuestAppContent\.cpp|guest_appcontent' core/libs/prx/libSceAppContent/CMakeLists.txt
git merge-tree --write-tree 5c9837bfe7c5533f2c77c968dd8193157a8c342a e4e041f6225758efaa10c8aae8dee95b3f56f0fd
git fetch upstream refs/pull/13909/head:refs/review/13909-current
git fetch upstream refs/pull/14141/head:refs/review/14141-current
git fetch upstream refs/pull/11588/head:refs/review/11588-current
git fetch upstream refs/pull/13589/head:refs/review/13589-current
git fetch upstream refs/pull/14212/head:refs/review/14212-current
git merge-tree --write-tree e4e041f6225758efaa10c8aae8dee95b3f56f0fd refs/review/13909-current
git merge-tree --write-tree e4e041f6225758efaa10c8aae8dee95b3f56f0fd refs/review/14141-current
git merge-tree --write-tree e4e041f6225758efaa10c8aae8dee95b3f56f0fd refs/review/11588-current
git merge-tree --write-tree e4e041f6225758efaa10c8aae8dee95b3f56f0fd refs/review/13589-current
git merge-tree --write-tree e4e041f6225758efaa10c8aae8dee95b3f56f0fd refs/review/14212-current
gh pr checks 14014 -R boykopovar/AnyPS5

Results

Check Result
Conventions and PR template Passed.
Diff check Passed; exit status 0, no output.
Public-header audit Passed: 394 libraries and 24,929 exports.
Test registration Passed: GuestAppContent.cpp is added to guest_appcontent_tests, which is registered as guest_appcontent.
Current-main merge preview Clean against 5c9837bfe7c5533f2c77c968dd8193157a8c342a.
Pairwise merge with #13909 Conflict in docs/dev/debt/libSceAppContent.md.
Pairwise merge with #14141 Conflict in docs/dev/debt/libSceAppContent.md; #14141 already depends on #13909.
Other checked overlapping PRs Pairwise previews with #11588, #13589, and #14212 were clean at the exact heads listed above.
Hosted CI Windows, conventions, labels, report, eligibility, and library-portability passed. Linux, register-context, relinker, relinker-asan, and write-watch were skipped.
Local C++ tests Not run; this review did not build the project. The author reports the Windows guest_appcontent test and objdump check. Hosted Windows CI passed.
Unedited selected command output

python3 tools/check_conventions.py ...:

All conventions checks passed.

python3 core/libs/tests/test_public_headers.py --audit-only:

394 libraries, 24929 exports: unique declarations and umbrella coverage verified

CMake registration inspection:

/tmp/anyps5-review-14014-current/core/libs/prx/libSceAppContent/CMakeLists.txt:6:    add_test_executable(guest_appcontent_tests ${LIBS_INCLUDE_DIR}/tests/GuestAppContent.cpp)
/tmp/anyps5-review-14014-current/core/libs/prx/libSceAppContent/CMakeLists.txt:10:    add_test(NAME guest_appcontent COMMAND guest_appcontent_tests)

Current-main merge preview (git merge-tree --write-tree <main> <head>; exit status 0):

1bbaa87d20b77c207ac56a3e8e9bda1093f1991d

Pairwise preview with #13909 (exit status 1):

c666dbeee4bf401c2d659959a59326900984fdf1
100644 c75f621a36a94b8ce07b54067607a36c8ecce6e4 1	docs/dev/debt/libSceAppContent.md
100644 d511282b57619052f3debec073c0da3cfda02ac3 2	docs/dev/debt/libSceAppContent.md
100644 d3293fed108745a36657570e2027a2fcbb00b7ad 3	docs/dev/debt/libSceAppContent.md

Auto-merging core/libs/prx/libSceAppContent/Export.cpp
Auto-merging core/libs/prx/libSceAppContent/include/Api.hpp
Auto-merging core/libs/tests/GuestAppContent.cpp
Auto-merging docs/dev/debt/libSceAppContent.md
CONFLICT (content): Merge conflict in docs/dev/debt/libSceAppContent.md

Pairwise preview with #14141 (exit status 1):

2abd066b9395417169639ba6083a949a5bd6e0a0
100644 c75f621a36a94b8ce07b54067607a36c8ecce6e4 1	docs/dev/debt/libSceAppContent.md
100644 d511282b57619052f3debec073c0da3cfda02ac3 2	docs/dev/debt/libSceAppContent.md
100644 f41d5f79e2b40eb3b3159a479550a655ff35b2ec 3	docs/dev/debt/libSceAppContent.md

Auto-merging core/libs/prx/libSceAppContent/Export.cpp
Auto-merging core/libs/prx/libSceAppContent/include/Api.hpp
Auto-merging core/libs/tests/GuestAppContent.cpp
Auto-merging docs/dev/debt/libSceAppContent.md
CONFLICT (content): Merge conflict in docs/dev/debt/libSceAppContent.md

Hosted checks (gh pr checks 14014 -R boykopovar/AnyPS5):

labels	pass	9s	https://github.com/boykopovar/AnyPS5/actions/runs/41222881184/job/124600914369
windows	pass	9m17s	https://github.com/boykopovar/AnyPS5/actions/runs/41222883139/job/124600950376
linux	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41222883139/job/124600951733
register-context	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41222883139/job/124600951797
relinker	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41222883139/job/124600951819
relinker-asan	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41222883139/job/124600952083
write-watch	skipping	0	https://github.com/boykopovar/AnyPS5/actions/runs/41222883139/job/124600952183
conventions	pass	21s	https://github.com/boykopovar/AnyPS5/actions/runs/41222881150/job/124600914119
eligibility	pass	6s	https://github.com/boykopovar/AnyPS5/actions/runs/41222883139/job/124600919079
library-portability	pass	1m6s	https://github.com/boykopovar/AnyPS5/actions/runs/41222883250/job/124600919147
report	pass	52s	https://github.com/boykopovar/AnyPS5/actions/runs/41222883230/job/124600919169

Negative control

Assertion Mutation Result
The new test rejects invalid SDK-padding behavior Not attempted; this requires a built test binary. Not exercised.

Findings

Blocking: The checklist says Depends on: none, but pairwise previews of the exact open heads show this debt-file change conflicts with both #13909 and #14141. #14141 already depends on #13909. The repository requires authors to agree on the landing order for overlapping PRs and record the order/dependency. Please coordinate the sequence with the author of #13909/#14141 and update the relevant checklist or discussion; whichever PR lands second must reconcile the debt-file edit. No functional-code change is requested for this finding.

Non-blocking: The earlier Unblocks claim is now none; the author supplied a full firmware-module SHA-256 and disassembly excerpts, and the debt entry now states that no 13.60 body comparison was made and that the host error is a chosen fallback. These points resolve the previous review comments. The firmware excerpt remains author-provided; I did not independently reproduce it.

Sources

Not verified

I did not build or run C++ tests locally. Linux CI was skipped. I did not independently verify the 4.03 firmware-module hash or disassembly; the author states the body was not compared with 13.60. Console behavior and the 0x18-byte service reply layout remain unverified, as recorded in the PR’s debt entry.

To get this to a good state

Agree and record an order with the author of #13909/#14141, then reconcile the debt-file edit in the second PR in that sequence. I will rerun the same merge previews and relevant checks on the updated head.

…ion end

boykopovar#13909 and boykopovar#14141 both extend the debt entries around the Functional
heading; placing this entry at the end of the list keeps all three PRs
textually mergeable in any order.
@akkadbakkad89

Copy link
Copy Markdown
Contributor Author

@MarcZX10 Resolved at bf382bf104 — moved the sceAppContentGetDownloadedStoreCountry debt entry from the ### Functional heading down to the end of the bullet list (after [Temporary app-content storage]).

Verified textually: git merge-tree --write-tree against the #13909 head and the #14141 head now reports no conflicts in either merge order — previously the entry sat inside both siblings' hunk context. No Depends on needed since the merges are clean regardless of landing order.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked — new head, no blocking findings

The new head moves one debt-file bullet, and its merges with #13909 and #14141 at their current heads are now clean, which resolves the debt-file conflict named in the changes-requested review at e4e041f6.

What I ran

Exact head bf382bf10401215daf5f0a2ccb498b724391818d, PR base 474030e58424fefdb65e5df9f3820810fbb4553c, current main e67cc818696fd6e6c58ac80adc6550c54aed68e8. Environment: Debian 12, Linux x86-64, Python 3.11.2, git 2.39.5. No compiler was invoked and no build was run.

python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 14014
git diff --stat e4e041f6225758efaa10c8aae8dee95b3f56f0fd bf382bf10401215daf5f0a2ccb498b724391818d
git merge-tree --write-tree bf382bf10401215daf5f0a2ccb498b724391818d 8495054a3ea36307b40660fc2c3ce0940020c544   # #13909 head
git merge-tree --write-tree bf382bf10401215daf5f0a2ccb498b724391818d 26cf05e66383ffee7a07807cbad66a8163934438   # #14141 head
git merge-tree --write-tree bf382bf10401215daf5f0a2ccb498b724391818d e67cc818696fd6e6c58ac80adc6550c54aed68e8   # current main
python3 tools/pr_abi_audit.py --repo /marc/AnyPS5 --base 474030e58424fefdb65e5df9f3820810fbb4553c --head bf382bf10401215daf5f0a2ccb498b724391818d --json
git archive bf382bf10401215daf5f0a2ccb498b724391818d core/libs/tests/GuestAppContent.cpp core/libs/prx/libSceAppContent | tar -x -C <new empty directory>
python3 tools/pr_test_quality.py --root <that directory> --json core/libs/tests/GuestAppContent.cpp

The precheck ran once at this head. Its ABI and test-quality helpers could not find tools/pr_abi_audit.py and tools/pr_test_quality.py in its isolated head tree, so I ran both by hand as listed above.

Results

Check Result
Delta from e4e041f6 One file, docs/dev/debt/libSceAppContent.md: 3 insertions, 2 deletions. The sceAppContentGetDownloadedStoreCountry bullet and its sub-bullet move from under ### Functional to after Temporary app-content storage. The text is identical on both sides. No C++ file changed.
Merge with #13909 at 8495054a Clean (exit 0).
Merge with #14141 at 26cf05e6 Clean (exit 0).
Merge with current main e67cc818 Clean (exit 0).
Precheck: diff check, conventions and PR template, live stack and mergeability Passed.
Precheck overall verdict Reported "checks failed" only because the ABI and test-quality helpers were missing from the isolated head tree. Both were run by hand (rows below).
pr_abi_audit.py (by hand) Passed: 36 symbols, 0 findings.
pr_test_quality.py (by hand) One heuristic finding, possible-unregistered-cpp-test on core/libs/tests/GuestAppContent.cpp. This is a false positive: the head's CMake registers it as add_test_executable(guest_appcontent_tests ${LIBS_INCLUDE_DIR}/tests/GuestAppContent.cpp) and add_test(NAME guest_appcontent ...).
Hosted CI (precheck snapshot) Passed: windows, eligibility, conventions, labels, report, library-portability. Skipped: linux, register-context, relinker, relinker-asan, write-watch.
Build and CTest Not run.
Unedited command output
$ git diff --stat e4e041f6225758efaa10c8aae8dee95b3f56f0fd bf382bf10401215daf5f0a2ccb498b724391818d
 docs/dev/debt/libSceAppContent.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

$ git merge-tree --write-tree bf382bf10401215daf5f0a2ccb498b724391818d 8495054a3ea36307b40660fc2c3ce0940020c544
exit=0

$ git merge-tree --write-tree bf382bf10401215daf5f0a2ccb498b724391818d 26cf05e66383ffee7a07807cbad66a8163934438
exit=0

$ git merge-tree --write-tree bf382bf10401215daf5f0a2ccb498b724391818d e67cc818696fd6e6c58ac80adc6550c54aed68e8
exit=0

$ python3 tools/pr_abi_audit.py ... --json
"status": "passed", 36 entries in "symbols", "findings": []

$ python3 tools/pr_test_quality.py --root <archive> --json core/libs/tests/GuestAppContent.cpp
"findings": [{"path": "core/libs/tests/GuestAppContent.cpp", "line": 1, "kind": "possible-unregistered-cpp-test", ...}]

Findings

Blocking: None.

Non-blocking: None.

Sources

Not verified

  • The C++ tests, including guest_appcontent, and the Windows guest_appcontent run were not re-run here. The delta is documentation only, and hosted Windows CI passed at this head in the precheck snapshot.
  • The pairwise previews with #11588, #13589 and #14212, which the earlier review also named, were not re-run at their current heads.
  • The landing order beyond these clean merges is not decided here.

@akkadbakkad89

Copy link
Copy Markdown
Contributor Author

Hosted checks are all green at bf382bf10401 (windows, conventions, labels, report, eligibility, library-portability — the rest skipped as on all PRs). The two earlier findings (Unblocks claim, debt-file merge with #13909/#14141) remain resolved at this unchanged head.

@oneandonlydean oneandonlydean self-assigned this Nov 5, 2026
@oneandonlydean
oneandonlydean dismissed stale reviews from MarcZX10 and MarcZX10 November 5, 2026 23:02

Resolved: the debt-file landing-order conflict with #13909 and #14141 is fixed at bf382bf, as the re-check review on that head confirms (no blocking findings).

@oneandonlydean
oneandonlydean merged commit c454d7b into boykopovar:main Nov 5, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants