Repository navigation
feat(libSceNpCppWebApi): fill audited Common/vector/model exports from bundled module - #14122
Conversation
Progress report (813f46c → c94be8a)📈 System libraries: 27.18% (+0.15%, +59 implemented, -1 reverted functions) ✅ 59 implemented
⚪ 10 behaviourally empty (constant return or throw)
|
| Library | Name |
|---|---|
| libSceNpCppWebApi | _ZN3sce2Np9CppWebApi11UserProfile2V112BasicProfileD1Ev |
Changed libraries (implemented exports)
| Library | Before | After | Change |
|---|---|---|---|
| libSceNpCppWebApi | 939/1426 (65.85%) | 997/1426 (69.92%) | +4.07% |
|
Windows CI note: the single failing check is |
MarcZX10
left a comment
There was a problem hiding this comment.
Reviewed — looks good
I found no blocking issue in the reviewed exports at head 12776a9e90adc5c010ec1bc8891ceef7b652c261; the Windows run’s sole failure is guest_filesystem, a separate test executable that links only libkernel and libc.
What I ran
Reviewed the exact PR head against base 121b2e37af75278e3d84a2f43869730030b112ed; the fresh merge preview against current main (59bd3b677d67cb5cfdb4a0092ffe644d27cf1a56) was clean. Environment: Linux x86_64, Python 3.11.2, GCC 12.2.0. No local build or C++ tests were run.
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 14122
python3 tools/pr_abi_audit.py --base 121b2e37af75278e3d84a2f43869730030b112ed --head 12776a9e90adc5c010ec1bc8891ceef7b652c261 --json
gh run view 41235664354 --repo boykopovar/AnyPS5 --log | grep -E 'guest_np_cpp_web_api|guest_filesystem|100% tests passed|99% tests passed|The following tests FAILED' | tail -n 35Results
| Check | Result |
|---|---|
| Diff, conventions, dependency/merge preview | Passed; the PR head merges cleanly |
| ABI source audit | Passed with one warning for DestroyVectorBody; source inspection confirms it is a static implementation helper, not a public export |
| Hosted Windows Web API tests | Changed guest_np_cpp_web_api test targets passed |
| Hosted Windows full suite | 2,529/2,530 passed; guest_filesystem failed with exit 0xc0000409 |
| Hosted Linux and specialized jobs | Skipped |
| Local build and C++ tests | Not run |
Unedited hosted Windows test output
windows Build and run changed guest core/libs tests 2026-10-31T19:53:47.6193586Z 86/2530 Test #504: guest_np_cpp_web_api_intrusive_ptr ............................................. Passed 0.02 sec
windows Build and run changed guest core/libs tests 2026-10-31T19:53:47.6360351Z 87/2530 Test #505: guest_np_cpp_web_api_signed_out ................................................ Passed 0.02 sec
windows Build and run changed guest core/libs tests 2026-10-31T19:53:47.6536348Z 88/2530 Test #506: guest_np_cpp_web_api_offline ................................................... Passed 0.02 sec
windows Build and run changed guest core/libs tests 2026-10-31T19:54:45.2391999Z 1976/2530 Test #2428: guest_np_cpp_web_api_matchmaking ............................................... Passed 0.02 sec
windows Build and run changed guest core/libs tests 2026-10-31T19:54:45.2530784Z 1978/2530 Test #2429: guest_np_cpp_web_api_string .................................................... Passed 0.02 sec
windows Build and run changed guest core/libs tests 2026-10-31T19:54:45.2679240Z 1979/2530 Test #2430: guest_np_cpp_web_api_title_cloud_storage ....................................... Passed 0.02 sec
windows Build and run changed guest core/libs tests 2026-10-31T19:54:56.3960982Z 2231/2530 Test #2687: guest_filesystem ...............................................................Exit code 0xc0000409***Exception: 0.35 sec
windows Build and run changed guest core/libs tests 2026-10-31T19:55:55.4217452Z 99% tests passed, 1 tests failed out of 2530
windows Build and run changed guest core/libs tests 2026-10-31T19:55:55.4595155Z The following tests FAILED:
windows Build and run changed guest core/libs tests 2026-10-31T19:55:55.4595421Z 2687 - guest_filesystem (Exit code 0xc0000409)
The author reports guest_filesystem passes locally 3/3; I did not independently reproduce that result.
Sources
- Reviewed export implementation
- Windows filesystem test links only libkernel and libc
- Hosted Windows run
Not verified
I did not rerun the author-reported differential/sanitizer fixtures, run Linux tests, or test the guest loader, a title, or console behavior. The source ABI audit is lexical and does not prove binary ABI compatibility.
|
@akkadbakkad89 reviewed at
A second build of the module (the copy bundled with PPSA21564) also matches every accessor offset, |
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
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.
|
|
@oneandonlydean Addressed at
All 9 |
|
@akkadbakkad89 Landing order with my #10925 and #11221, which Marc is holding on. #10925 (opened before this PR; Marc's only blocking finding is this order) changes the same code as this PR: Could this PR land after #10925 and declare |
|
@AlexFigas Agreed — #10925 was opened first and covers the same |
b60bf79 to
d52d298
Compare
d52d298 to
a938b47
Compare
855b803 to
3701e17
Compare
3701e17 to
6110e76
Compare
|
Rebased onto One conflict: upstream's Matches implementation block landed where Old-vs-new diff in the PR's files is empty apart from the absorbed upstream work; |
6110e76 to
3cf96b4
Compare
|
Restacked at |
3cf96b4 to
e806c9b
Compare
|
Restacked onto Verified locally: lib builds clean and all 12 |
e806c9b to
743b45c
Compare
|
CI retrigger: the previous Windows run failed on |
|
CI note on the rerun: the Windows job was cancelled again at ~45 min elapsed, inside the guest-tests step. This is the workflow's AI-assisted: yes. |
743b45c to
32e719b
Compare
|
Restacked — head Restacked on current |
…-started transactions as the module does
…m bundled module Ports the title-imported unclaimed stubs decoded from the libSceNpCppWebApi module bundled with PPSA13197: Common iterators and Vector begin/end/ size/empty/copyFrom over the audited IntrusivePtr and unsigned-long families, TransactionBase assignment and start guards, Binary accessors, BasicPresence/BasicProfile model lifecycle and field accessors, Sku, Product, Container and response getters, and the restriction flag. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
32e719b to
c94be8a
Compare
What
Implements the 67
libSceNpCppWebApiexports that are imported by the audited titles, currently stubbed, and not covered by any open pull request, plus the construct/destruct/setter coherence ports those accessors need (BasicPresence,BasicProfile,Binary). Behaviour is ported from thelibSceNpCppWebApimodule bundled with PPSA13197 (Stellar Bladesce_module), unwrapped and disassembled — 79 definitions in all:Common::Iteratoroperator++/operator*/operator!=over the auditedIntrusivePtrelement families andunsigned long: an iterator is a zero 32-bit tag plus the element pointer at +8;++advances by the element size (0x18 forIntrusivePtr, 8 forunsigned long),*returns the element address,!=compares the stored pointersCommon::Vectorbegin/end/size/emptyover the same families andVector<IntrusivePtr<ResponsePlayerSessionPlayer>>::copyFrom: reads and writes host-created bodies; title-provided bodies throw, as before.copyFromfollows the module — releases the old elements through the element reference count, adopts the source context when unset, copies each handle with alock inc, and returns0x80553504on allocation failureTransactionBase<Vector<Container>, ResponseHeaderBase>::operator=(two-word copy) andstart: the module's guard order — null context →0x80553503, unset context →0x80553502, then the request path, which staysSCE_NP_WEBAPI_ERROR_NOT_SIGNED_INofflineBinary::getBinary/size(+8/+0x10),BasicPresenceconstruct/destruct,set{AccountId,InContext,OnlineStatus}and the matching getters/IsSetbytes (0x10/0x18, 0x21/0x22, 0x1c/0x20)BasicProfileconstruct/destruct — the destructor releases the members in the module's order: theVector<String>at 0x90 (reference count at object+0x38), the vector at 0x70 (+0x30), theStringat 0x48, the pointer at 0x28 (+0x00) — plussetOnlineId,setIsOfficiallyVerifiedand theonlineIdIsSet/personalDetailIsSet/isOfficiallyVerifiedIsSetbytes (0x24/0x40/0xaa)Skuprice/label fields and*IsSetbytes,ProductgetId/getType/getDisplayName/getDescription/getReleaseDate/releaseDateIsSet/skusIsSet/getSkus,Container::getChildren(vector handle at 0x228, reference count at +0x30),PlayerSession::getSessionId(string at 0x10),GetPublicProfilesResponse::getProfilesandPostPlayerSessionsResponseBody::getPlayerSessions(vector handle at 0x30), andCommunicationRestrictionStatusResponse::getRestricted(byte at 0x30)The remaining unimplemented exports in the same families still throw, and the debt file now records which offsets were measured and which accessors remain unverified.
Tested
Windows 11 host, MinGW build.
ctest -R np_cpp_web_api: all 9 tests pass (guest_np_cpp_web_api_{intrusive_ptr,signed_out,offline,matchmaking,string,title_cloud_storage}plus the three alias tests). The intrusive-pointer test now constructs realBasicProfile/BasicPresenceobjects and asserts theIsSetflags and getter round-trips. No title run: the accessors are exercised through unit tests only, matching how the surrounding machinery was validated.python3 tools/check_conventions.py --base origin/mainclean;python3 tools/pr_overlap.py --branch feat-npcwa-common-fillreports no overlap with the 100 open PR heads.Checklist
main; no other open PR implements the same functions except the already-disclosed overlaps:Common::Binary::size/getBinaryalso appear in feat(libSceNpCppWebApi): implement Common::Binary as the module does #12808 (same audited offsets) andVector<IntrusivePtr<BasicPresence>>::sizein feat(libSceNpCppWebApi): answer the singular public profile request offline #11631 (with its ownHostVectorSizehelper) — whichever of those lands second reconciles the duplicate helperNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)