Skip to content

feat(libSceNpCppWebApi): bring up Matches V1 offline - #13194

Merged
oneandonlydean merged 4 commits into
boykopovar:mainfrom
edubox:feat/npcpp-matches
Nov 3, 2026
Merged

oneandonlydean merged 4 commits into
boykopovar:mainfrom
edubox:feat/npcpp-matches

Conversation

@edubox

@edubox edubox commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

What

Brings up sce::Np::CppWebApi::Matches::V1 offline. 88 NIDs imported by the dumps had no implementation:

Group Exports Behaviour
MatchApi::{createMatch,joinMatch,leaveMatch,reportResults,updateMatchDetail,updateMatchStatus} 6 SCE_NP_WEBAPI_ERROR_NOT_SIGNED_IN, as offline request paths
Factories 22 unsupported: throw NotImplemented_nid_no_patch instead of returning a fake signed-out result
ParameterTo{CreateMatch,JoinMatch,LeaveMatch,ReportResults,UpdateMatchDetail,UpdateMatchStatus} ctor/initialize/terminate/dtor 23 actual string and IntrusivePtr request-body arguments; host implementation of the module layout. initialize returns 0x80553503 for a null context or text, 0x80553502 for an unset context, 0x8055350f when already initialized, 0x80553504 on allocation failure and 0x80553512 for an empty request body; terminate returns 0x80553510
Request/model setters 34 store the value and the is-set flag at the measured offsets
Response/model accessors (get*, *IsSet) 3 read the measured fields (+0x30 pointer, +0x48/+0x28 bytes)

Evidence: the module bundled with PPSA21564/PPSA23732 (builds J03093737/J03341606). The 10 vector setters copy the vector handle and increment the body reference count at +0x30 instead of deep-copying the elements; that difference and the host allocator are recorded in the debt. Response layouts beyond the measured fields are unverified.

Tested

Linux x86-64, GCC 16.2.1, Release with BUILD_TESTING=ON, rebased on main ab6f5d32ed:

  • ctest --test-dir build -R '^guest_np_cpp_web_api': 11/11 passed, including the new guest_np_cpp_web_api_matches. It pins every setter's measured offset and is-set flag, the vector/IntrusivePtr reference counts, the three accessors and the parameter lifecycle with actual ABI arguments and error codes.
  • python3 tools/check_conventions.py --base origin/main passes.
  • python3 tools/pr_overlap.py --branch feat/npcpp-matches --jobs 32: no overlap with active open pull requests. The tool could not compare a set of stale pull requests that already conflict with main in core/libs/CMakeLists.txt.
  • No title run.

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 commented Oct 30, 2026 •

Copy link
Copy Markdown

Progress report (096c455 → daa15bc)

📈 System libraries: 26.29% (+0.06%, +47 implemented, +41 declared functions)

✅ 47 implemented
Library Name
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V111AddedPlayer12setAccountIdEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V111AddedPlayer13setPlayerNameEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V111AddedPlayer9setTeamIdEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V113RemovedPlayer9setReasonERKNS3_11LeaveReasonE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V116JoinMatchRequest17setNpServiceLabelERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V116RequestMatchTeam11setTeamNameEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V117LeaveMatchRequest17setNpServiceLabelERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118CreateMatchRequest17setExpirationTimeERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118CreateMatchRequest17setNpServiceLabelERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118CreateMatchRequest9setZoneIdEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118RequestMatchPlayer12setAccountIdEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118RequestMatchPlayer13setPlayerNameEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118RequestTeamResults8setScoreERKd
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V119RequestMatchResults20setCooperativeResultERKNS3_24RequestCooperativeResultE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V120ReportResultsRequest17setNpServiceLabelERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V120RequestPlayerResults8setScoreERKd
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124UpdateMatchDetailRequest17setExpirationTimeERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124UpdateMatchDetailRequest17setNpServiceLabelERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124UpdateMatchDetailRequest9setZoneIdEPKc
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124UpdateMatchStatusRequest17setNpServiceLabelERKi
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi10leaveMatchEiRKNS4_21ParameterToLeaveMatchERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi11createMatchEiRKNS4_22ParameterToCreateMatchERNS1_6Common11TransactionINS8_12IntrusivePtrINS3_19CreateMatchResponseEEENSA_INS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi13reportResultsEiRKNS4_24ParameterToReportResultsERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi17updateMatchDetailEiRKNS4_28ParameterToUpdateMatchDetailERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi17updateMatchStatusEiRKNS4_28ParameterToUpdateMatchStatusERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi20ParameterToJoinMatch10initializeEPNS1_6Common10LibContextEPKcNS6_12IntrusivePtrINS3_16JoinMatchRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi20ParameterToJoinMatchC1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi20ParameterToJoinMatchD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi21ParameterToLeaveMatch10initializeEPNS1_6Common10LibContextEPKcNS6_12IntrusivePtrINS3_17LeaveMatchRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi21ParameterToLeaveMatchC1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi21ParameterToLeaveMatchD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi22ParameterToCreateMatch10initializeEPNS1_6Common10LibContextENS6_12IntrusivePtrINS3_18CreateMatchRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi22ParameterToCreateMatchC1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi22ParameterToCreateMatchD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi24ParameterToReportResults10initializeEPNS1_6Common10LibContextEPKcNS6_12IntrusivePtrINS3_20ReportResultsRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi24ParameterToReportResultsC1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi24ParameterToReportResultsD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchDetail10initializeEPNS1_6Common10LibContextEPKcNS6_12IntrusivePtrINS3_24UpdateMatchDetailRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchDetailC1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchDetailD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchStatus10initializeEPNS1_6Common10LibContextEPKcNS6_12IntrusivePtrINS3_24UpdateMatchStatusRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchStatusC1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchStatusD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi9joinMatchEiRKNS4_20ParameterToJoinMatchERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZNK3sce2Np9CppWebApi7Matches2V119CreateMatchResponse10getMatchIdEv
libSceNpCppWebApi _ZNK3sce2Np9CppWebApi7Matches2V119RequestInGameRoster10teamsIsSetEv
libSceNpCppWebApi _ZNK3sce2Np9CppWebApi7Matches2V119RequestInGameRoster12playersIsSetEv
⚪ 12 behaviourally empty (constant return or throw)
Library Name
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi10leaveMatchEiRKNS4_21ParameterToLeaveMatchERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi11createMatchEiRKNS4_22ParameterToCreateMatchERNS1_6Common11TransactionINS8_12IntrusivePtrINS3_19CreateMatchResponseEEENSA_INS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi13reportResultsEiRKNS4_24ParameterToReportResultsERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi17updateMatchDetailEiRKNS4_28ParameterToUpdateMatchDetailERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi17updateMatchStatusEiRKNS4_28ParameterToUpdateMatchStatusERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi20ParameterToJoinMatchD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi21ParameterToLeaveMatchD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi22ParameterToCreateMatchD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi24ParameterToReportResultsD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchDetailD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchStatusD1Ev
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi9joinMatchEiRKNS4_20ParameterToJoinMatchERNS1_6Common11TransactionINS8_15DefaultResponseENS8_12IntrusivePtrINS8_18ResponseHeaderBaseEEEEE
🆕 41 declared as stubs
Library Name
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V116RequestMatchTeam10setMembersERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_13RequestMemberEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118AddedPlayerFactory6createEPNS1_6Common10LibContextEPKcNS3_10PlayerTypeEPNS5_12IntrusivePtrINS3_11AddedPlayerEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118CreateMatchRequest15setInGameRosterERKNS1_6Common12IntrusivePtrINS3_19RequestInGameRosterEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V118RequestTeamResults20setTeamMemberResultsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_23RequestTeamMemberResultEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V119RequestInGameRoster10setPlayersERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_18RequestMatchPlayerEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V119RequestInGameRoster8setTeamsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_16RequestMatchTeamEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V119RequestMatchResults20setCompetitiveResultERKNS1_6Common12IntrusivePtrINS3_24RequestCompetitiveResultEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V120RemovedPlayerFactory6createEPNS1_6Common10LibContextEPKcPNS5_12IntrusivePtrINS3_13RemovedPlayerEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V120ReportResultsRequest18setMatchStatisticsERKNS1_6Common12IntrusivePtrINS3_22RequestMatchStatisticsEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V120RequestMemberFactory6createEPNS1_6Common10LibContextEPKcPNS5_12IntrusivePtrINS3_13RequestMemberEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V120RequestTeamStatistic23setTeamMemberStatisticsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_26RequestTeamMemberStatisticEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V120RequestTeamStatistic8setStatsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_19AdditionalStatisticEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V122RequestMatchStatistics17setTeamStatisticsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_20RequestTeamStatisticEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V122RequestMatchStatistics19setPlayerStatisticsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_22RequestPlayerStatisticEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V123JoinMatchRequestFactory6createEPNS1_6Common10LibContextERKNS5_6VectorINS5_12IntrusivePtrINS3_11AddedPlayerEEEEEPNS9_INS3_16JoinMatchRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V123RequestMatchTeamFactory6createEPNS1_6Common10LibContextEPKcPNS5_12IntrusivePtrINS3_16RequestMatchTeamEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124LeaveMatchRequestFactory6createEPNS1_6Common10LibContextERKNS5_6VectorINS5_12IntrusivePtrINS3_13RemovedPlayerEEEEEPNS9_INS3_17LeaveMatchRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124RequestCompetitiveResult14setTeamResultsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_18RequestTeamResultsEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124RequestCompetitiveResult16setPlayerResultsERKNS1_6Common6VectorINS5_12IntrusivePtrINS3_20RequestPlayerResultsEEEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V124UpdateMatchDetailRequest15setInGameRosterERKNS1_6Common12IntrusivePtrINS3_19RequestInGameRosterEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V125CreateMatchRequestFactory6createEPNS1_6Common10LibContextEPKcPNS5_12IntrusivePtrINS3_18CreateMatchRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V125RequestMatchPlayerFactory6createEPNS1_6Common10LibContextEPKcNS3_10PlayerTypeEPNS5_12IntrusivePtrINS3_18RequestMatchPlayerEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V125RequestTeamResultsFactory6createEPNS1_6Common10LibContextEPKciPNS5_12IntrusivePtrINS3_18RequestTeamResultsEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V126AdditionalStatisticFactory6createEPNS1_6Common10LibContextEPKcS9_PNS5_12IntrusivePtrINS3_19AdditionalStatisticEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V126RequestInGameRosterFactory6createEPNS1_6Common10LibContextEPNS5_12IntrusivePtrINS3_19RequestInGameRosterEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V126RequestMatchResultsFactory6createEPNS1_6Common10LibContextENS3_14ResultsVersionEPNS5_12IntrusivePtrINS3_19RequestMatchResultsEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V127ReportResultsRequestFactory6createEPNS1_6Common10LibContextENS5_12IntrusivePtrINS3_19RequestMatchResultsEEEPNS8_INS3_20ReportResultsRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V127RequestPlayerResultsFactory6createEPNS1_6Common10LibContextEPKciPNS5_12IntrusivePtrINS3_20RequestPlayerResultsEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V127RequestTeamStatisticFactory6createEPNS1_6Common10LibContextEPKcPNS5_12IntrusivePtrINS3_20RequestTeamStatisticEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V129RequestMatchStatisticsFactory6createEPNS1_6Common10LibContextEPNS5_12IntrusivePtrINS3_22RequestMatchStatisticsEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V129RequestPlayerStatisticFactory6createEPNS1_6Common10LibContextEPKcRKNS5_6VectorINS5_12IntrusivePtrINS3_19AdditionalStatisticEEEEEPNSB_INS3_22RequestPlayerStatisticEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V130RequestTeamMemberResultFactory6createEPNS1_6Common10LibContextEPKcdPNS5_12IntrusivePtrINS3_23RequestTeamMemberResultEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V131RequestCompetitiveResultFactory6createEPNS1_6Common10LibContextEPNS5_12IntrusivePtrINS3_24RequestCompetitiveResultEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V131UpdateMatchDetailRequestFactory6createEPNS1_6Common10LibContextEPNS5_12IntrusivePtrINS3_24UpdateMatchDetailRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V131UpdateMatchStatusRequestFactory6createEPNS1_6Common10LibContextENS3_12UpdateStatusEPNS5_12IntrusivePtrINS3_24UpdateMatchStatusRequestEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V133RequestTeamMemberStatisticFactory6createEPNS1_6Common10LibContextEPKcRKNS5_6VectorINS5_12IntrusivePtrINS3_19AdditionalStatisticEEEEEPNSB_INS3_26RequestTeamMemberStatisticEEE
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi20ParameterToJoinMatch9terminateEv
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi21ParameterToLeaveMatch9terminateEv
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi22ParameterToCreateMatch9terminateEv
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi24ParameterToReportResults9terminateEv
libSceNpCppWebApi _ZN3sce2Np9CppWebApi7Matches2V18MatchApi28ParameterToUpdateMatchStatus9terminateEv

Changed libraries (implemented exports)

Library Before After Change
libSceNpCppWebApi 823/1275 (64.55%) 870/1363 (63.83%) -0.72%

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Thanks @edubox. I checked the retained PPSA21564 J03093737 module (SHA-256 0666df3c089dc49b1231ceeedb8a86b1e740f80ef91563d5f57d65734b8167c2). The blanket offline behavior needs correction:

  • AddedPlayerFactory::create (shsyj1FfVkQ, 0xf5660) returns 0x80553503 directly for a null context/output pointer, allocates and populates an object on its normal path, and has 0x80553504 allocation failure. It does not match an unconditional NOT_SIGNED_IN return. Please establish factories separately from network request verbs and preserve their argument/output/ownership behavior, or keep unsupported paths explicit.
  • ParameterToJoinMatch::initialize (r+bobzRe1IM, 0x1445e0) consumes the string and intrusive request body; an empty body reaches 0x80553512 at 0x1447d2. The new reduced (self, context) signature and argumentsPresent=true cannot reproduce that. Please check each initializer's actual arguments and error precedence. A static-byte handle cannot reproduce the claimed allocation failure.
  • The 34 setters return success while discarding state, and there is no Matches Silent stubs debt entry. RequestInGameRoster::teamsIsSet/playersIsSet are request-model queries, so they are not justified as response-only unreachable calls. Implement locally observable state or keep unsupported paths explicit; document any supported limited offline exception with its reachability evidence.
  • Please remove the test loop pinning NotImplemented throws for the three accessors. Keep genuine validation/lifecycle tests, using actual ABI arguments and sourced results rather than setter(nullptr) == 0.

The sampled constructor does zero two words and its destructor is a no-op; those are consistent. The unresolved parts are factory/setup semantics, local state and the tests above, not a request for network implementation.

  • Debt file. The PR doesn't touch docs/dev/debt/libSceNpCppWebApi.md. Please add a Matches::V1 entry like the other namespaces have: any remaining silent setters under Silent stubs, and the provenance line naming which dumps import these exports (PPSA21564 / PPSA23732, builds J03093737 / J03341606).

@JJenkx

JJenkx commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Windows run of this head (759cdd9a22), merged onto main 7d4006607a (clean merge, local only). Windows 11 Enterprise 10.0.22621, Ryzen 9 5950X, WinLibs GCC 15.2.0 UCRT r7, Ninja, Release, BUILD_TESTING=ON, no Vulkan driver visible.

  • This PR: guest_np_cpp_web_api_matches passes 3 of 3 (ctest --repeat until-fail:3).
  • Negative control: not possible. With this PR's source files (core/libs/prx/libSceNpCppWebApi/Export.cpp, core/libs/prx/libSceNpCppWebApi/include/Api.hpp) put back to main's version, the build fails against the rest of the PR, so there is no source-only control.

AI-assisted: yes (Claude Code).

@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

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.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 12447 docs/dev/debt/libSceNpCppWebApi.md L30-31
PR 14122 core/libs/prx/libSceNpCppWebApi/Export.cpp L3780-3783
PR 14136 core/libs/prx/libSceNpCppWebApi/Export.cpp L3780-3783
PR 14273 core/libs/prx/libSceNpCppWebApi/Export.cpp L3780-3783

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 5021 core/libs/CMakeLists.txt
PR 7275 core/libs/CMakeLists.txt
PR 8650 core/libs/CMakeLists.txt
PR 9156 core/libs/CMakeLists.txt
PR 9162 core/libs/CMakeLists.txt
PR 9293 core/libs/CMakeLists.txt
PR 9297 core/libs/CMakeLists.txt
PR 9302 core/libs/CMakeLists.txt
PR 9383 core/libs/CMakeLists.txt
PR 12130 core/libs/CMakeLists.txt
PR 12642 core/libs/CMakeLists.txt
PR 13253 core/libs/CMakeLists.txt
PR 13256 core/libs/CMakeLists.txt
PR 13486 core/libs/CMakeLists.txt
core/libs/prx/libSceNpCppWebApi/Export.cpp
core/libs/prx/libSceNpCppWebApi/include/Api.hpp
docs/dev/debt/libSceNpCppWebApi.md
PR 14212 docs/dev/debt/libSceNpCppWebApi.md
PR 14213 core/libs/CMakeLists.txt
PR 14299 core/libs/CMakeLists.txt

@edubox

edubox commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (91db3f79f7); head is now 695e14d0bf (was 759cdd9a22). The commit reapplied cleanly with no code changes. This branch had no worktree, so I created one under .anyps5-work to do the rebase and the build.

Verified on this exact head (Linux x86-64, GCC 16.2.1, Release):

  • ctest --test-dir build -R '^guest_np_cpp_web_api' passes 10/10, including guest_np_cpp_web_api_matches.
  • python3 tools/check_conventions.py --base origin/main: All conventions checks passed.
  • git diff --check origin/main...HEAD: clean.

AI-assisted: yes

@edubox

edubox commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (73ffb45110); head is now 34e64ec216 (was 695e14d0b). The commit reapplied cleanly with no code changes.

Verified on this exact head (Linux x86-64, GCC 16.2.1, Release):

  • ctest --test-dir build -R '^guest_np_cpp_web_api' passes 10/10, including guest_np_cpp_web_api_matches.
  • python3 tools/check_conventions.py --base origin/main: All conventions checks passed.
  • git diff --check origin/main...HEAD: clean.

AI-assisted: yes

@edubox
edubox force-pushed the feat/npcpp-matches branch 2 times, most recently from 34e64ec to 7be0456 Compare October 30, 2026 21:19
@edubox

edubox commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (e584b5a7eb); head is now 7be0456763 (was 34e64ec216). The commit reapplied cleanly with no code changes.

Verified on this exact head (Linux x86-64, GCC 16.2.1, Release):

  • ctest --test-dir build -R '^guest_np_cpp_web_api' passes 10/10, including guest_np_cpp_web_api_matches.
  • python3 tools/check_conventions.py --base origin/main: All conventions checks passed.
  • git diff --check origin/main...HEAD: clean.

AI-assisted: yes

@edubox

edubox commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (9605300f29); head is now 8d31a69aa2d. No source changes in the rebase.

Focused tests pass: ctest --test-dir build -R '^guest_np_cpp_web_api' 10/10 (including the new guest_np_cpp_web_api_matches). python3 tools/check_conventions.py --base origin/main and git diff --check origin/main...HEAD are clean. Pushed with --force-with-lease.

AI-assisted: yes (Claude Code).

@edubox
edubox force-pushed the feat/npcpp-matches branch from 7be0456 to 8d31a69 Compare October 30, 2026 22:22
@edubox

edubox commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (6b48aee) since the branch was 62 commits behind.

  • ctest --test-dir build -R '^guest_np_cpp_web_api': 10/10 passed.
  • python3 tools/check_conventions.py --base origin/main: passed.

Head is now 01e5e5f8837.

@edubox
edubox force-pushed the feat/npcpp-matches branch 2 times, most recently from 01e5e5f to dec95cf Compare October 31, 2026 02:04
@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (4b7af94e1d); the branch was 213 commits behind.

  • ctest --test-dir build -R '^guest_np_cpp_web_api': 10/10 passed.
  • python3 tools/check_conventions.py --base origin/main: passed.

Head is now dec95cfb45a.

@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (2364892547); head is now c74e2ea02f. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from dec95cf to c74e2ea Compare October 31, 2026 04:01
@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (3d1330179a); head is now 1f8ddcda66. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from c74e2ea to 1f8ddcd Compare October 31, 2026 05:02
@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (de83e8f270); head is now d1390b777a. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from 1f8ddcd to d1390b7 Compare October 31, 2026 07:02
@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (45f4f82449); head is now a7a826cdee. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from d1390b7 to a7a826c Compare October 31, 2026 10:01
@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (1847a6f9da); head is now d7548df847. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from a7a826c to d7548df Compare October 31, 2026 11:02
@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (b8f0a6b202); head is now fe8678afd8. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from d7548df to fe8678a Compare October 31, 2026 12:02
@edubox

edubox commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (ca073ec3ad); head is now 491c8ce259. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from fe8678a to 491c8ce Compare October 31, 2026 18:01
@akkadbakkad89

Copy link
Copy Markdown
Contributor

Datapoint from a second machine — validated 491c8ce2 standalone.

  • Env: Windows 11, MinGW/WinLibs GCC 15.2.0, Release (RTX 3070; n/a — this suite is CPU-only)
  • Built libSceNpCppWebApi + guest_np_cpp_web_api_matches_tests from a clean configure; the Matches test exe linked against the new implib without missing imports
  • ctest -R np_cpp_web_api: 10/10 pass, including guest_np_cpp_web_api_matches and the pre-existing intrusive_ptr/string/signed_out/offline tests — the new Matches exports don't disturb the earlier suites

One audit-derived datapoint on coverage: this PR's export set accounts for 83 of the 113 title-imported libSceNpCppWebApi NIDs that still had no export after the #14122/#14136/#14273 stack — matching the Matches V1 scope.

@edubox

edubox commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (ab6f5d32ed); head is now f056c4af54. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from 491c8ce to f056c4a Compare November 1, 2026 13:01
@edubox

edubox commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto main ab6f5d32ed at c61ee17635.

  • The 34 request/model setters now store the value plus the is-set flag at the offsets measured in the module (PPSA21564/PPSA23732, builds J03093737/J03341606). The 10 vector setters copy the vector handle and increment the body reference count at +0x30 instead of deep-copying the elements; that host choice is in the debt.
  • The six ParameterTo* initializers now take their actual string and IntrusivePtr request-body arguments. ParameterToJoinMatch::initialize (and the other string-bearing ones) return 0x80553512 for an empty request body, 0x80553503 for a null context/text, 0x80553502 for an unset context, 0x8055350f when already initialized and 0x80553504 on allocation failure; terminate returns 0x80553510. The 0x40-byte string layout and the 0x20-byte ParameterToCreateMatch layout come from the module; the host allocator stands in for LibContext.
  • The 22 factories no longer return a fake signed-out result: they throw NotImplemented_nid_no_patch and are recorded as unsupported. Only the six API verbs keep SCE_NP_WEBAPI_ERROR_NOT_SIGNED_IN.
  • RequestInGameRoster::teamsIsSet/playersIsSet read +0x48/+0x28; CreateMatchResponse::getMatchId returns +0x30.
  • The test no longer pins the three accessors to throws. It pins every setter's offset/flag, the refcounts and the parameter lifecycle with actual ABI arguments and sourced error codes.
  • Debt has a Matches::V1 entry with the remaining host choices (shallow vector copy, host allocator, unsupported factories) and the dump provenance.

Tests: ctest -R '^guest_np_cpp_web_api' 11/11 passed; check_conventions.py --base origin/main passed.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Thanks for the ABI/state repair. One valid-input case remains at c61ee1763505da60618cf155c4cddeca58a8fcdf: the ten vector setters treat a constructor-created empty Common::Vector as a missing request body.

For example, core/libs/prx/libSceNpCppWebApi/Export.cpp:3876 makes RequestMatchTeam::setMembers return 0x80553512 when value->object is null. Main's existing Vector<IntrusivePtr<RequestMember>> constructor initializes that backing pointer to null, so an ordinary newly constructed empty vector reaches this branch. An isolated probe using those exact constructor/setter bodies returns 0x80553512 and leaves the set flag clear; the replacement PR test only supplies a fabricated nonempty backing object.

I independently re-read the bundled module at NID qu8vIEhVfZg, address 0x104bd0: it compares the source begin/end at +0x18 and +0x28, permits them to be equal, then takes the normal allocation/copy path. It does not reject an empty element range as a missing request body. This is static module evidence, not a new console run.

Please handle valid empty vectors consistently in these setters, or keep genuinely unsupported vector semantics explicit, and add a constructor-to-setter empty-vector case alongside the nonempty state checks. Keep the corrected scalar/string offsets, initializer arguments/errors and removal of unsupported-call throw pins. The declared host representation choice does not make a valid empty vector an invalid request body.

@edubox

edubox commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (f2d874c1fd); head is now 40e3ffc948. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from c61ee17 to 40e3ffc Compare November 1, 2026 16:02
@edubox

edubox commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the empty-vector case at 8ee180c261.

  • The ten Matches vector setters now accept a constructor-created empty Common::Vector (an IntrusivePtr handle with a null backing pointer) and set the is-set flag instead of returning 0x80553512; only a null argument is rejected as a missing body.
  • The test now constructs each of the ten vectors through its exported C1(LibContext*) constructor and checks the empty-vector setter and flag, alongside the existing nonempty state checks.
  • The Matches debt entry records the empty-vector handling.

Validation on this head:

  • ctest --test-dir build -R 'guest_np_cpp_web_api' -V: 11/11 passed, including guest_np_cpp_web_api_matches.
  • python3 tools/check_conventions.py --base origin/main: 0 errors. The pre-existing libSceNpCppWebApi.md debt-length warning remains (the Matches entry was already over 1000 characters before this change).

@github-actions github-actions Bot added the docs label Nov 2, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

❌ AMD GPU test: failed

PR head 8ee180c merged onto main f2d874c · tested 2026-11-02 19:22 UTC · 36 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ❌ 3,031 passed · 16 failed (1 new: 1 fail on main with the PR's tests too, 9 also fail on main, 6 unstable on main) · 122 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Vulkan validation ✅ no new validation IDs vs main (1314 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.2 s, ⚠️ agc_driver_graphics_maps_fallback 94.3 s, ⚠️ agc_driver_graphics 84.9 s, ⚠️ unwrap_self 72.6 s, ⚠️ public_headers 66.6 s

Failing tests

This PR changes test files, so each failing test was also built and run on main with only the PR's test changes applied. ✅ there means the failure comes from the PR's other changes; ❌ means the test fails on main too, so this run does not show the PR caused it.

Test With this PR Same test on main f2d874c (main + this PR's test changes only)
public_headers ❌ failed ❌ also fails
public_headers: Failed (also failed when re-run alone), assertion and diagnostics
ctest: Failed

RuntimeError: _ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V113RequestMemberEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1223, core/libs/tests/GuestNpCppWebApiMatches.cpp:12
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V118RequestMatchPlayerEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1229, core/libs/tests/GuestNpCppWebApiMatches.cpp:14
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V122RequestPlayerStatisticEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1244, core/libs/tests/GuestNpCppWebApiMatches.cpp:19
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V120RequestPlayerResultsEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1238, core/libs/tests/GuestNpCppWebApiMatches.cpp:17
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V116RequestMatchTeamEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1226, core/libs/tests/GuestNpCppWebApiMatches.cpp:13
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V120RequestTeamStatisticEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1241, core/libs/tests/GuestNpCppWebApiMatches.cpp:18
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V119AdditionalStatisticEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1235, core/libs/tests/GuestNpCppWebApiMatches.cpp:16
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V123RequestTeamMemberResultEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1247, core/libs/tests/GuestNpCppWebApiMatches.cpp:20
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V126RequestTeamMemberStatisticEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1250, core/libs/tests/GuestNpCppWebApiMatches.cpp:21
_ZN3sce2Np9CppWebApi6Common6VectorINS2_12IntrusivePtrINS1_7Matches2V118RequestTeamResultsEEEEC1EPNS2_10LibContextE: expected exactly one header declaration; found 2: core/libs/prx/libSceNpCppWebApi/include/Api.hpp:1232, core/libs/tests/GuestNpCppWebApiMatches.cpp:15
Unstable on main (6, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_array_layer_target_cpu: failed in 1 of the last 6 main runs
agc_driver_job_manager_compute_capacity: failed in 5 of the last 6 main runs
agc_driver_pipeline_journal: failed in 4 of the last 6 main runs
agc_driver_submit_progress: failed in 4 of the last 6 main runs
agc_submit_progress: failed in 5 of the last 6 main runs
agc_submit_progress_no_timeline: failed in 5 of the last 6 main runs
Failing on main too (9, not counted against this PR)
agc_driver_guest_memory_lifetime_direct
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_idle_publish_wait
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (68, not in the main baseline's validation pass)
guest_job_manager_worker_spin
guest_job_manager_worker_spin_scale_0.1
guest_job_manager_worker_spin_scale_10
public_headers
public_headers_compile_0
public_headers_compile_1
public_headers_compile_10
public_headers_compile_11
public_headers_compile_12
public_headers_compile_13
public_headers_compile_14
public_headers_compile_15
public_headers_compile_16
public_headers_compile_17
public_headers_compile_18
public_headers_compile_19
public_headers_compile_2
public_headers_compile_20
public_headers_compile_21
public_headers_compile_22
public_headers_compile_23
public_headers_compile_24
public_headers_compile_25
public_headers_compile_26
public_headers_compile_27
public_headers_compile_28
public_headers_compile_29
public_headers_compile_3
public_headers_compile_30
public_headers_compile_31
public_headers_compile_32
public_headers_compile_33
public_headers_compile_34
public_headers_compile_35
public_headers_compile_36
public_headers_compile_37
public_headers_compile_38
public_headers_compile_39
public_headers_compile_4
public_headers_compile_40
public_headers_compile_41
public_headers_compile_42
public_headers_compile_43
public_headers_compile_44
public_headers_compile_45
public_headers_compile_46
public_headers_compile_47
public_headers_compile_48
public_headers_compile_49
public_headers_compile_5
public_headers_compile_50
public_headers_compile_51
public_headers_compile_52
public_headers_compile_53
public_headers_compile_54
public_headers_compile_55
public_headers_compile_56
public_headers_compile_57
public_headers_compile_58
public_headers_compile_59
public_headers_compile_6
public_headers_compile_60
public_headers_compile_61
public_headers_compile_62
public_headers_compile_63
public_headers_compile_7
public_headers_compile_8
public_headers_compile_9
Validation IDs already present on main (5 IDs in 717 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (717 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_passes, agc_driver_address_passes_draw_transitions, agc_driver_address_passes_targets_split, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, and 709 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_storage_dispatch, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_storage_dispatch, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (122)
usage: check_skips.py [-h] [--job {linux,windows}] [--list] [--require-tests]
                      junit
check_skips.py: error: /home/ben/anyps5-gpu-ci/data/runs/pr-13194/8ee180c2613a-f2d874c1fdcc/ctest.xml: testcase 'public_headers_compile_0' is notrun and was not run
Reproduce
git fetch origin 8ee180c2613aeb2b95dae318a47769599181dda3 f2d874c1fdccf781c0fa5d86619bb5dd8894b958
git checkout f2d874c1fdccf781c0fa5d86619bb5dd8894b958 && git merge --no-ff 8ee180c2613aeb2b95dae318a47769599181dda3
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 12 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 16 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1
# the failing tests, on this merge and on main:
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(public_headers)$' --parallel 1 -V

Automated build and test on a contributor's AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Hi edubox, thanks for the quick fix. At 8ee180c2613aeb2b95dae318a47769599181dda3 the ten Matches vector setters now accept a constructor-created empty Common::Vector, and the new test covers each of them. The assign/copy/release helpers already handle a null backing pointer, so that point is resolved.

One follow-up from the AMD GPU run on this head (19:22 UTC): public_headers fails with "expected exactly one header declaration; found 2" for the Common::Vector<IntrusivePtr<Matches::V1::...>> constructors. The new extern "C" block at core/libs/tests/GuestNpCppWebApiMatches.cpp:11-22 re-declares ten constructors that prx/libSceNpCppWebApi/include/Api.hpp already declares (lines 1217-1250), and the test already includes that header on line 1. Removing the block should clear the check without other changes. The GitHub linux job is skipped on this PR, so this check doesn't show up there, but it would fail once the change reaches main.

…eal initialize ABI

The 34 Matches request/model setters now store the value and the is-set
flag at the offsets measured in the module bundled with
PPSA21564/PPSA23732 (builds J03093737/J03341606). The 10 vector setters
copy the vector handle and increment the body reference count at +0x30
instead of deep-copying the elements; that difference is a host choice and
is recorded in the debt.

The six ParameterTo* initializers now take their actual string and
IntrusivePtr request-body arguments. They allocate a host implementation
of the module layout, keep the string and body, and return 0x80553503 for a
null context or text, 0x80553502 for an unset context, 0x8055350f when
already initialized, 0x80553504 on allocation failure and 0x80553512 for
an empty request body. terminate releases the state and returns 0x80553510.

The 22 factories no longer return a fake signed-out result: they throw
NotImplemented_nid_no_patch and are recorded as unsupported. The six API
verbs keep SCE_NP_WEBAPI_ERROR_NOT_SIGNED_IN as offline request paths. The
three accessors read the measured fields. The test pins the measured
offsets, flags, reference counts and lifecycle/error codes instead of
asserting null-self success or NotImplemented throws.
@edubox

edubox commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Rebased automatically onto current main (096c45570f); head is now d5dc4bd548. Focused tests pass; check_conventions.py --base origin/main and git diff --check are clean.

@edubox
edubox force-pushed the feat/npcpp-matches branch from 8ee180c to d5dc4bd Compare November 2, 2026 20:01
@edubox

edubox commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Applied the follow-up: removed the redundant extern "C" block in core/libs/tests/GuestNpCppWebApiMatches.cpp that re-declared the ten Common::Vector<IntrusivePtr<Matches::V1::...>> constructors already declared by the included Api.hpp. No other changes.

Verification on the pushed head:

  • guest_np_cpp_web_api_matches: passed.
  • public_headers: passed (was failing with "expected exactly one header declaration; found 2").
  • python3 tools/check_conventions.py --base origin/main: 0 errors (one pre-existing debt-length warning in docs/dev/debt/libSceNpCppWebApi.md).

AI-assisted: yes (opencode)

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.

5 participants