Status for Dolphin Central

Recent events

2026-02-24T20:41:34.010218	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-osx-universal', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/7/builds/9232', 'description': 'Auto build in progress on builder pr-osx-universal', 'type': 'build_status'}
2026-02-24T20:41:33.703409	{'source': 'webserver', 'raw': {'buildid': 163094, 'number': 9232, 'builderid': 7, 'buildrequestid': 163204, 'workerid': 8, 'masterid': 1, 'started_at': 1771965693, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'pr_id': [14416, 'Change'], 'workername': ['osx-m1', 'Worker'], 'codebase': ['', 'Build'], 'branchname': ['pr-14416', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [9232, 'Build'], 'project': ['', 'Build'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'shortrev': ['7b372d', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [7, 'Builder'], 'branch': ['refs/pull/14416/head', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'buildername': ['pr-osx-universal', 'Builder'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build']}, 'buildrequest': {'buildrequestid': 163204, 'buildsetid': 37253, 'builderid': 7, 'priority': 0, 'claimed': True, 'claimed_at': 1771965693, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 7, 'name': 'pr-osx-universal', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/7/builds/9232'}, 'type': 'raw_bb_hook'}
2026-02-24T20:41:33.585837	{'source': 'webserver', 'raw': {'buildid': 163093, 'number': 2214, 'builderid': 17, 'buildrequestid': 163193, 'workerid': 8, 'masterid': 1, 'started_at': 1771965601, 'complete_at': 1771965693, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['master', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'builderid': [17, 'Builder'], 'repository': ['', 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'owners': [['JosJuice'], 'Build'], 'author': ['JosJuice', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [2214, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mtl-osx-m1', 'Worker'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'shortrev': ['2512-433', 'Change'], 'workername': ['osx-m1', 'Worker'], 'codebase': ['', 'Build'], 'warnings-count': [5, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 163193, 'buildsetid': 37252, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965601, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2214'}, 'type': 'raw_bb_hook'}
2026-02-24T20:40:20.540386	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:40:19.304298	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:40:01.286734	{'source': 'webserver', 'raw': {'buildid': 163093, 'number': 2214, 'builderid': 17, 'buildrequestid': 163193, 'workerid': 8, 'masterid': 1, 'started_at': 1771965601, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['master', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'builderid': [17, 'Builder'], 'repository': ['', 'Build'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'owners': [['JosJuice'], 'Build'], 'author': ['JosJuice', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [2214, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'shortrev': ['2512-433', 'Change'], 'workername': ['osx-m1', 'Worker'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163193, 'buildsetid': 37252, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965601, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2214'}, 'type': 'raw_bb_hook'}
2026-02-24T20:40:01.202751	{'source': 'webserver', 'raw': {'buildid': 163092, 'number': 2213, 'builderid': 17, 'buildrequestid': 163182, 'workerid': 8, 'masterid': 1, 'started_at': 1771965509, 'complete_at': 1771965600, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['2512-431', 'Change'], 'description': ['Translation resources sync with Transifex', 'Change'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'project': ['', 'Build'], 'warnings-count': [5, 'WarningCountingShellCommand'], 'author': ['JosJuice', 'Change'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mtl-osx-m1', 'Worker'], 'branchname': ['master', 'Change'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'workername': ['osx-m1', 'Worker'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [17, 'Builder'], 'buildnumber': [2213, 'Build'], 'repository': ['', 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker']}, 'buildrequest': {'buildrequestid': 163182, 'buildsetid': 37251, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965509, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2213'}, 'type': 'raw_bb_hook'}
2026-02-24T20:38:30.119645	{'source': 'webserver', 'raw': {'buildid': 163092, 'number': 2213, 'builderid': 17, 'buildrequestid': 163182, 'workerid': 8, 'masterid': 1, 'started_at': 1771965509, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'shortrev': ['2512-431', 'Change'], 'description': ['Translation resources sync with Transifex', 'Change'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'project': ['', 'Build'], 'author': ['JosJuice', 'Change'], 'branchname': ['master', 'Change'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'workername': ['osx-m1', 'Worker'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [17, 'Builder'], 'buildnumber': [2213, 'Build'], 'repository': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163182, 'buildsetid': 37251, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965509, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2213'}, 'type': 'raw_bb_hook'}
2026-02-24T20:38:29.948911	{'source': 'webserver', 'raw': {'buildid': 163091, 'number': 2216, 'builderid': 8, 'buildrequestid': 163192, 'workerid': 8, 'masterid': 1, 'started_at': 1771965406, 'complete_at': 1771965509, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'workername': ['osx-m1', 'Worker'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'project': ['', 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'warnings-count': [5, 'WarningCountingShellCommand'], 'buildername': ['fifoci-mvk-osx-m1', 'Builder'], 'buildnumber': [2216, 'Build'], 'repository': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker'], 'shortrev': ['2512-433', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [8, 'Builder'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mvk-osx-m1', 'Worker'], 'branchname': ['master', 'Change'], 'author': ['JosJuice', 'Change']}, 'buildrequest': {'buildrequestid': 163192, 'buildsetid': 37252, 'builderid': 8, 'priority': 0, 'claimed': True, 'claimed_at': 1771965406, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 8, 'name': 'fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/8/builds/2216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:46.452104	{'source': 'webserver', 'raw': {'buildid': 163091, 'number': 2216, 'builderid': 8, 'buildrequestid': 163192, 'workerid': 8, 'masterid': 1, 'started_at': 1771965406, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'workername': ['osx-m1', 'Worker'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'project': ['', 'Build'], 'buildername': ['fifoci-mvk-osx-m1', 'Builder'], 'buildnumber': [2216, 'Build'], 'repository': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'shortrev': ['2512-433', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [8, 'Builder'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'branchname': ['master', 'Change'], 'author': ['JosJuice', 'Change']}, 'buildrequest': {'buildrequestid': 163192, 'buildsetid': 37252, 'builderid': 8, 'priority': 0, 'claimed': True, 'claimed_at': 1771965406, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 8, 'name': 'fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/8/builds/2216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:46.247653	{'source': 'webserver', 'raw': {'buildid': 163083, 'number': 2215, 'builderid': 8, 'buildrequestid': 163181, 'workerid': 8, 'masterid': 1, 'started_at': 1771965301, 'complete_at': 1771965406, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['2512-431', 'Change'], 'author': ['JosJuice', 'Change'], 'builderid': [8, 'Builder'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [5, 'WarningCountingShellCommand'], 'description': ['Translation resources sync with Transifex', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [2215, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mvk-osx-m1', 'Worker'], 'branchname': ['master', 'Change'], 'buildername': ['fifoci-mvk-osx-m1', 'Builder'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch']}, 'buildrequest': {'buildrequestid': 163181, 'buildsetid': 37251, 'builderid': 8, 'priority': 0, 'claimed': True, 'claimed_at': 1771965301, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 8, 'name': 'fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/8/builds/2215'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:23.285929	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-ubu-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/27/builds/9216', 'description': 'Auto build in progress on builder pr-ubu-x64', 'type': 'build_status'}
2026-02-24T20:36:22.961242	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'lint', 'pr': 14416, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/9/builds/9216', 'description': 'Build succeeded on builder lint', 'type': 'build_status'}
2026-02-24T20:36:22.777259	{'source': 'webserver', 'raw': {'buildid': 163090, 'number': 9216, 'builderid': 27, 'buildrequestid': 163210, 'workerid': 10, 'masterid': 1, 'started_at': 1771965382, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'branch': ['refs/pull/14416/head', 'Build'], 'branchname': ['pr-14416', 'Change'], 'shortrev': ['7b372d', 'Change'], 'builderid': [27, 'Builder'], 'repository': ['', 'Build'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'pr_id': [14416, 'Change'], 'buildername': ['pr-ubu-x64', 'Builder'], 'workername': ['ubuntu-lts', 'Worker'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'codebase': ['', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [9216, 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163210, 'buildsetid': 37253, 'builderid': 27, 'priority': 0, 'claimed': True, 'claimed_at': 1771965382, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/27/builds/9216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:22.619510	{'source': 'webserver', 'raw': {'buildid': 163084, 'number': 9216, 'builderid': 9, 'buildrequestid': 163205, 'workerid': 10, 'masterid': 1, 'started_at': 1771965377, 'complete_at': 1771965382, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14416', 'Change'], 'pr_id': [14416, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['lint', 'Builder'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'shortrev': ['7b372d', 'Change'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'builderid': [9, 'Builder'], 'workername': ['ubuntu-lts', 'Worker'], 'buildnumber': [9216, 'Build'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build'], 'got_revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'GitNoBranch'], 'basedir': ['/buildbot', 'Worker'], 'builddir': ['/buildbot/lint', 'Worker']}, 'buildrequest': {'buildrequestid': 163205, 'buildsetid': 37253, 'builderid': 9, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 9, 'name': 'lint', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/9/builds/9216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:19.539715	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-freebsd-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/11/builds/9217', 'description': 'Auto build in progress on builder pr-freebsd-x64', 'type': 'build_status'}
2026-02-24T20:36:19.164829	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-flatpak-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/43/builds/4363', 'description': 'Auto build in progress on builder pr-flatpak-x64', 'type': 'build_status'}
2026-02-24T20:36:18.854254	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-flatpak-arm64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/44/builds/4307', 'description': 'Auto build in progress on builder pr-flatpak-arm64', 'type': 'build_status'}
2026-02-24T20:36:18.566336	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-deb-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/26/builds/9215', 'description': 'Auto build in progress on builder pr-deb-x64', 'type': 'build_status'}
2026-02-24T20:36:18.286749	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-win-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/2/builds/9219', 'description': 'Auto build in progress on builder pr-win-x64', 'type': 'build_status'}
2026-02-24T20:36:17.987794	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'lint', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/9/builds/9216', 'description': 'Auto build in progress on builder lint', 'type': 'build_status'}
2026-02-24T20:36:17.974016	{'source': 'webserver', 'raw': {'buildid': 163089, 'number': 9217, 'builderid': 11, 'buildrequestid': 163206, 'workerid': 1, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-freebsd-x64', 'Builder'], 'builderid': [11, 'Builder'], 'workername': ['freebsd', 'Worker'], 'branchname': ['pr-14416', 'Change'], 'shortrev': ['7b372d', 'Change'], 'pr_id': [14416, 'Change'], 'repository': ['', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [9217, 'Build'], 'branch': ['refs/pull/14416/head', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build']}, 'buildrequest': {'buildrequestid': 163206, 'buildsetid': 37253, 'builderid': 11, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 11, 'name': 'pr-freebsd-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/11/builds/9217'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.889986	{'source': 'webserver', 'raw': {'buildid': 163088, 'number': 4363, 'builderid': 43, 'buildrequestid': 163212, 'workerid': 13, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'repository': ['', 'Build'], 'branchname': ['pr-14416', 'Change'], 'builderid': [43, 'Builder'], 'workername': ['altair-flatpak', 'Worker'], 'buildnumber': [4363, 'Build'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'shortrev': ['7b372d', 'Change'], 'pr_id': [14416, 'Change'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'buildername': ['pr-flatpak-x64', 'Builder'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'project': ['', 'Build'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163212, 'buildsetid': 37253, 'builderid': 43, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 43, 'name': 'pr-flatpak-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/43/builds/4363'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.811165	{'source': 'webserver', 'raw': {'buildid': 163086, 'number': 4307, 'builderid': 44, 'buildrequestid': 163213, 'workerid': 14, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14416', 'Change'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'shortrev': ['7b372d', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'codebase': ['', 'Build'], 'pr_id': [14416, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-flatpak-arm64', 'Builder'], 'builderid': [44, 'Builder'], 'workername': ['deneb-flatpak', 'Worker'], 'buildnumber': [4307, 'Build'], 'repository': ['', 'Build'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build']}, 'buildrequest': {'buildrequestid': 163213, 'buildsetid': 37253, 'builderid': 44, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 44, 'name': 'pr-flatpak-arm64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/44/builds/4307'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.806909	{'source': 'webserver', 'raw': {'buildid': 163087, 'number': 9215, 'builderid': 26, 'buildrequestid': 163209, 'workerid': 9, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14416', 'Change'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'pr_id': [14416, 'Change'], 'workername': ['debian', 'Worker'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'builderid': [26, 'Builder'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'shortrev': ['7b372d', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-deb-x64', 'Builder'], 'buildnumber': [9215, 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build']}, 'buildrequest': {'buildrequestid': 163209, 'buildsetid': 37253, 'builderid': 26, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 26, 'name': 'pr-deb-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/26/builds/9215'}, 'type': 'raw_bb_hook'}

Recent 'build_status' events

2026-02-24T20:41:34.010218	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-osx-universal', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/7/builds/9232', 'description': 'Auto build in progress on builder pr-osx-universal', 'type': 'build_status'}
2026-02-24T20:36:23.285929	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-ubu-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/27/builds/9216', 'description': 'Auto build in progress on builder pr-ubu-x64', 'type': 'build_status'}
2026-02-24T20:36:22.961242	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'lint', 'pr': 14416, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/9/builds/9216', 'description': 'Build succeeded on builder lint', 'type': 'build_status'}
2026-02-24T20:36:19.539715	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-freebsd-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/11/builds/9217', 'description': 'Auto build in progress on builder pr-freebsd-x64', 'type': 'build_status'}
2026-02-24T20:36:19.164829	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-flatpak-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/43/builds/4363', 'description': 'Auto build in progress on builder pr-flatpak-x64', 'type': 'build_status'}
2026-02-24T20:36:18.854254	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-flatpak-arm64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/44/builds/4307', 'description': 'Auto build in progress on builder pr-flatpak-arm64', 'type': 'build_status'}
2026-02-24T20:36:18.566336	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-deb-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/26/builds/9215', 'description': 'Auto build in progress on builder pr-deb-x64', 'type': 'build_status'}
2026-02-24T20:36:18.286749	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-win-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/2/builds/9219', 'description': 'Auto build in progress on builder pr-win-x64', 'type': 'build_status'}
2026-02-24T20:36:17.987794	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'lint', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/9/builds/9216', 'description': 'Auto build in progress on builder lint', 'type': 'build_status'}
2026-02-24T20:36:17.128521	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'lint', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:16.785405	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-flatpak-arm64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:16.388742	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-flatpak-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:16.059417	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-freebsd-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:15.750680	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-win-dbg-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:15.427514	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-win-arm64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:15.036586	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-win-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:14.712879	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-ubu-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:14.374077	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-osx-universal', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:14.019448	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-deb-dbg-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:13.663341	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-deb-x64', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:13.325432	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'pr-android', 'pr': 14416, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/', 'description': 'Auto build pending', 'type': 'build_status'}
2026-02-24T20:36:12.956539	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '7b372db5593ddc92dd442e57170f13072b43ade8', 'shortrev': '7b372d', 'service': 'default', 'pr': 14416, 'success': True, 'pending': False, 'url': '', 'description': 'Very basic checks passed, handed off to Buildbot.', 'type': 'build_status'}
2026-02-24T11:51:37.029837	{'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'hash': '2b24798394090553974f7b98d6abbebf634ca4ea', 'shortrev': '2b2479', 'service': 'default', 'pr': 14401, 'success': False, 'pending': False, 'url': '', 'description': 'PR not built because naari3 is not auto-trusted.', 'type': 'build_status'}
2026-02-24T09:08:08.129416	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'shortrev': '8843c1', 'service': 'pr-android', 'pr': 14417, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/22/builds/9218', 'description': 'Build succeeded on builder pr-android', 'type': 'build_status'}
2026-02-24T09:02:10.814023	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'shortrev': '8843c1', 'service': 'pr-osx-universal', 'pr': 14417, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/7/builds/9231', 'description': 'Build succeeded on builder pr-osx-universal', 'type': 'build_status'}

Recent 'command_message' events

2026-02-23T18:15:36.831847	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14391', 'type': 'command_message'}
2026-02-23T18:12:29.577747	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14380', 'type': 'command_message'}
2026-02-23T18:12:14.955902	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14373', 'type': 'command_message'}
2026-02-23T18:11:36.886633	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14363', 'type': 'command_message'}
2026-02-23T18:10:37.749336	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14359', 'type': 'command_message'}
2026-02-23T18:10:28.470622	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14354', 'type': 'command_message'}
2026-02-23T18:10:12.990671	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14348', 'type': 'command_message'}
2026-02-23T12:21:36.228672	{'source': 'ircclient', 'who': 'JosJuice', 'what': 'irrawaddy: please rebuild 14392', 'type': 'command_message'}
2026-02-21T22:21:08.889406	{'source': 'discord', 'who': 'billiard26', 'what': '<@1320924779556900984> please rebuild PR 14401', 'type': 'command_message'}
2026-02-19T19:19:13.897654	{'source': 'discord', 'who': 'smasher2', 'what': '<@1320924779556900984> please rebuild 14401', 'type': 'command_message'}
2026-02-19T18:59:48.139387	{'source': 'discord', 'who': 'smasher2', 'what': '<@1320924779556900984> please rebuild 14401', 'type': 'command_message'}
2026-02-17T19:48:23.311516	{'source': 'discord', 'who': 'iwubcode', 'what': '<@1320924779556900984>  please rebuild 14392', 'type': 'command_message'}
2026-02-16T19:57:00.226373	{'source': 'discord', 'who': 'mayimilae', 'what': '', 'type': 'command_message'}
2026-02-16T19:54:17.846481	{'source': 'ircclient', 'who': 'JosJuice', 'what': 'irrawaddy: please rebuild 14353', 'type': 'command_message'}
2026-02-16T19:53:51.005737	{'source': 'ircclient', 'who': 'JosJuice', 'what': 'irrawaddy: please rebuild 14352', 'type': 'command_message'}
2026-02-16T19:47:08.982438	{'source': 'ircclient', 'who': 'JosJuice', 'what': 'irrawaddy: please rebuild 14349', 'type': 'command_message'}
2026-02-16T19:46:49.419958	{'source': 'ircclient', 'who': 'JosJuice', 'what': 'irrawaddy: please rebuild 14347', 'type': 'command_message'}
2026-02-16T19:45:23.224340	{'source': 'ircclient', 'who': 'JosJuice', 'what': 'irrawaddy: please rebuild 14346', 'type': 'command_message'}
2026-02-15T20:41:23.563056	{'source': 'ircclient', 'who': 'JosJuice', 'what': 'irrawaddy: please rebuild 14389', 'type': 'command_message'}
2026-02-15T18:47:02.794918	{'source': 'discord', 'who': 'joshuavandaele', 'what': '<@1320924779556900984> please rebuild 14281', 'type': 'command_message'}
2026-02-14T20:52:20.842492	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14348', 'type': 'command_message'}
2026-02-14T20:51:55.133528	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14352', 'type': 'command_message'}
2026-02-14T20:51:36.694076	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14349', 'type': 'command_message'}
2026-02-14T20:51:12.799783	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14347', 'type': 'command_message'}
2026-02-14T20:50:48.039215	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14374', 'type': 'command_message'}

Recent 'gh_commit_comment' events

2026-02-03T16:08:06.874133	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'pizzzza19', 'commit': '128a6454b6247c0c2a2cafb2d91d03f71fc112e0', 'url': 'https://github.com/dolphin-emu/dolphin/commit/128a6454b6247c0c2a2cafb2d91d03f71fc112e0#commitcomment-176299891', 'type': 'gh_commit_comment'}

Recent 'gh_issue_comment' events

2026-02-24T06:29:11.788146	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'deleted', 'id': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401#issuecomment-3949516077', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'id': 3963867081, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'number': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T06:29:00Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'merged_at': None}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#issuecomment-3949516077', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'id': 3949516077, 'node_id': 'IC_kwDOALCn2M7raNUt', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-24T06:29:00Z', 'updated_at': '2026-02-24T06:29:00Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-24T06:29:02.494398	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'created', 'id': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401#issuecomment-3949516077', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'id': 3963867081, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'number': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T06:29:00Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'merged_at': None}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#issuecomment-3949516077', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'id': 3949516077, 'node_id': 'IC_kwDOALCn2M7raNUt', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-24T06:29:00Z', 'updated_at': '2026-02-24T06:29:00Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-23T21:38:35.818311	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JulienBernard3383279', 'action': 'created', 'id': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3947471056', 'safe_author': False, 'body': "Notes of things to check (asked @JMC47)\r\n- Resident evil 2\r\n- A Zelda ucode game (Wind waker, luigi's mansion, mario galaxy)\r\n- Some Wii games", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'id': 3954360119, 'node_id': 'PR_kwDOALCn2M7EcPp1', 'number': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 8, 'created_at': '2026-02-17T19:40:46Z', 'updated_at': '2026-02-23T21:38:33Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14392', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.patch', 'merged_at': None}, 'body': 'In the UpdateAudioDMA routine, when we read the last block of the \'current\' DMA transfer, we read the registers for the DMA address & block count, then generate an AID interrupt to say the DMA transfer is finished.\r\n\r\nThat doesn\'t make sense. That interrupt will trigger the new DMA transfer - at least in the Nintendo SDK used by SSBM, but I reckon this is a quasi-universal rule - so the address is about to be updated to the \'new\' samples, and we read the address just before that, and always transmit data one full DMA transfer old.\r\n\r\nThis PR modifies the behavior to read the address on the UpdateAudioDMA call after the interrupt. Note this is not a race; the routine is CPU-ticks bound, so the interrupt is guaranteed to run before.\r\n\r\nThis should save ~4.75ms of audio latency in anything that uses the default GC games behavior of producing 5ms worth of audio every 5ms (the DSP processes 5ms at a time). I don\'t know whether that behavior changed on Wii/Triforce, but I expect it to also fix the equivalent problem there if it also uses this code.\r\n\r\nTested the audio doesn\'t break on WW, SSBM & TTYD, will test on Wii games when I acquire an iso.\r\nMeasured on SSBM using an input-to-line-in lag tester:\r\n\r\n<img width="435" height="760" alt="image" src="https://github.com/user-attachments/assets/4cf35cdc-38d8-487d-a749-783b61a04a23" />\r\n\r\n6ms difference here, probably lucky draw, should be 4.75ms in theory.\r\nI could test other games, but only those where we can turn off music separately or with some clean input-to-sound scenario available.\r\n\r\nSome notes for the future: the current code for how the audio DMA is handled is dubious and hasn\'t undergone major changes in >a decade. We have an MMIO handler for writing to the START bit of the DMA register, but we don\'t have anything, as far as I can tell, that handles the fact that this register, both block count and START bit, is supposed to get updated by the hardware.\r\nThen we have code that appears to reason based on the values in the registers, that are wrong.\r\n\r\nThe MMIO handler appears to check "if a DMA was already running", but currently, past the very first one, a "DMA is always running", since nothing models the fact the hardware is expected to clear the START bit on its own (not that I\'ve verified inside the GC, but that\'s virtually always how DMAs in chips usually go for single-shot transfers; and a dual buffer DMA explicitly has registers to update the currently unused buffer address).\r\nSo the MMIO handler code currently just affects the behavior of the initial DMA transfer. And indeed it would not work at all when used in steady state e.g. if right now we just started marking the DMA transfer as finished before calling the interrupt, as it schedules another interrupt and thus another DMA transfer 200 cycles (~0.4ms) into the future when on GC they\'re supposed to be spaced 5ms apart.\r\n\r\nGiven the comments about games relying on said behavior, I just went the easy way here and didn\'t refactor it all to not take any chances with compatibility.\r\nFor the record, over at the SSBM-focused fork where we don\'t have such concerns, I got rid of the entire updateAudioDMA routine, and we just react to the MMIO START bit write and forward the full buffer immediately: https://github.com/project-slippi/Ishiiruka/pull/451/changes\r\n\r\nLooking at git history @Pokechu22 you should have a look\r\nWhile we\'re at it, I see 4 years ago you switched to forwarding the samples every 0.25ms instead of the whole DMA buffer because of a game that does a huge DMA transfer which would overflow the Dolphin buffer; what do you think of an approach where we allocate a larger buffer and adjust the logic if a game dumps a huge DMA transfer on us, so we can keep just forwarding everything ASAP?', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3947471056', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3947471056', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'id': 3947471056, 'node_id': 'IC_kwDOALCn2M7rSaDQ', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-23T21:38:33Z', 'updated_at': '2026-02-23T21:38:33Z', 'body': "Notes of things to check (asked @JMC47)\r\n- Resident evil 2\r\n- A Zelda ucode game (Wind waker, luigi's mansion, mario galaxy)\r\n- Some Wii games", 'author_association': 'NONE', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3947471056/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 416, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 416, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-23T20:13:30.242024	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'created', 'id': 14410, 'title': 'AMMediaboard: Fix setsockopt timeout parameters', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14410#issuecomment-3947061828', 'safe_author': True, 'body': "I'm switching this PR back to draft.\r\n\r\nAfter further investigation, I expect the timeout values to be in milliseconds instead of microseconds. It also seems suggested by a [previous comment in the old code](https://github.com/dolphin-emu/dolphin/blob/2c62214875e4d409136229421c44aa8b88fbb635/Source/Core/Core/HW/DVD/AMMediaboard.cpp#L913-L918) (sic) albeit the code using microseconds. Here is the corresponding log:\r\n```\r\n32:14:185 Core/HW/DVD/AMMediaboard.cpp:1692 I[AMMB_NET]: GC-AM: SetTimeOuts( 132(51), 1800, 1800, 1800 ):0\r\n```\r\n\r\nMoreover, some other games are using timeout values like 0, 1, 1000. While 0 and 1000 would make sense from a microsecond perspective, the value 1 doesn't but 1 millisecond would make way more sense. Ditto, for connect timeout of 60000 (i.e. 1 minute).\r\n\r\nLastly, I think my suggested change will fail on Windows because it expects the timeout in milliseconds as an `int` for both [WSAPoll](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsapoll) and [setsockopt](https://learn.microsoft.com/en-us/windows/win32/winsock/sol-socket-socket-options), unlike Linux's [setsockopt](https://pubs.opengroup.org/onlinepubs/009695099/functions/setsockopt.html)/[select](https://pubs.opengroup.org/onlinepubs/7908799/xsh/select.html) expecting a [struct timeval](https://pubs.opengroup.org/onlinepubs/7908799/xsh/systime.h.html).", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14410', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14410/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14410/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14410/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14410', 'id': 3973085501, 'node_id': 'PR_kwDOALCn2M7FZA6t', 'number': 14410, 'title': 'AMMediaboard: Fix setsockopt timeout parameters', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-21T23:48:02Z', 'updated_at': '2026-02-23T20:13:28Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': True, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14410', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14410', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14410.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14410.patch', 'merged_at': None}, 'body': 'This PR fixes `setsockopt` returning 22 (EINVAL) when setting timeout values.\r\n\r\nReady to be reviewed and tested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14410/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14410/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3947061828', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14410#issuecomment-3947061828', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14410', 'id': 3947061828, 'node_id': 'IC_kwDOALCn2M7rQ2JE', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-23T20:13:28Z', 'updated_at': '2026-02-23T20:13:28Z', 'body': "I'm switching this PR back to draft.\r\n\r\nAfter further investigation, I expect the timeout values to be in milliseconds instead of microseconds. It also seems suggested by a [previous comment in the old code](https://github.com/dolphin-emu/dolphin/blob/2c62214875e4d409136229421c44aa8b88fbb635/Source/Core/Core/HW/DVD/AMMediaboard.cpp#L913-L918) (sic) albeit the code using microseconds. Here is the corresponding log:\r\n```\r\n32:14:185 Core/HW/DVD/AMMediaboard.cpp:1692 I[AMMB_NET]: GC-AM: SetTimeOuts( 132(51), 1800, 1800, 1800 ):0\r\n```\r\n\r\nMoreover, some other games are using timeout values like 0, 1, 1000. While 0 and 1000 would make sense from a microsecond perspective, the value 1 doesn't but 1 millisecond would make way more sense. Ditto, for connect timeout of 60000 (i.e. 1 minute).\r\n\r\nLastly, I think my suggested change will fail on Windows because it expects the timeout in milliseconds as an `int` for both [WSAPoll](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsapoll) and [setsockopt](https://learn.microsoft.com/en-us/windows/win32/winsock/sol-socket-socket-options), unlike Linux's [setsockopt](https://pubs.opengroup.org/onlinepubs/009695099/functions/setsockopt.html)/[select](https://pubs.opengroup.org/onlinepubs/7908799/xsh/select.html) expecting a [struct timeval](https://pubs.opengroup.org/onlinepubs/7908799/xsh/systime.h.html).", 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3947061828/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T18:16:20Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14659, 'watchers_count': 14659, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 416, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 416, 'watchers': 14659, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-23T19:20:03.563446	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'AnthonyRyuki', 'action': 'deleted', 'id': 14391, 'title': 'Set Triforce region setting to Export', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14391#issuecomment-3915305627', 'safe_author': False, 'body': "But I just noticed a problem. If you enter the game's test menu, it will immediately jump back to the Triforce test menu. So you won't actually be able to change the setting on VS4 I mentioned.", 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14391', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14391/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14391/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14391/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14391', 'id': 3953252269, 'node_id': 'PR_kwDOALCn2M7EYl_V', 'number': 14391, 'title': 'Set Triforce region setting to Export', 'user': {'login': 'AnthonyRyuki', 'id': 62845774, 'node_id': 'MDQ6VXNlcjYyODQ1Nzc0', 'avatar_url': 'https://avatars.githubusercontent.com/u/62845774?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/AnthonyRyuki', 'html_url': 'https://github.com/AnthonyRyuki', 'followers_url': 'https://api.github.com/users/AnthonyRyuki/followers', 'following_url': 'https://api.github.com/users/AnthonyRyuki/following{/other_user}', 'gists_url': 'https://api.github.com/users/AnthonyRyuki/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/AnthonyRyuki/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/AnthonyRyuki/subscriptions', 'organizations_url': 'https://api.github.com/users/AnthonyRyuki/orgs', 'repos_url': 'https://api.github.com/users/AnthonyRyuki/repos', 'events_url': 'https://api.github.com/users/AnthonyRyuki/events{/privacy}', 'received_events_url': 'https://api.github.com/users/AnthonyRyuki/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 7, 'created_at': '2026-02-17T15:10:01Z', 'updated_at': '2026-02-19T22:53:45Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14391', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14391', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14391.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14391.patch', 'merged_at': None}, 'body': 'While this still isn\'t ideal as the user has no way to modify the setting himself (and can\'t have the language displayed in Japanese in F-Zero AX as a result), this adds an option to the Export version of Virtua Striker 4 (vanilla version): the announcer\'s language can be set to Italian.\r\n\r\nBy the way, here\'s my idea on how a region switch should be implemented. If you enter the Triforce test menu, choose "System Information" then push the service button a few times, an option is enabled allowing you to change the region setting. It doesn\'t work as it\'s hardcoded, but it would be nice if it could be functional.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14391/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14391/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3915305627', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14391#issuecomment-3915305627', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14391', 'id': 3915305627, 'node_id': 'IC_kwDOALCn2M7pXtKb', 'user': {'login': 'AnthonyRyuki', 'id': 62845774, 'node_id': 'MDQ6VXNlcjYyODQ1Nzc0', 'avatar_url': 'https://avatars.githubusercontent.com/u/62845774?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/AnthonyRyuki', 'html_url': 'https://github.com/AnthonyRyuki', 'followers_url': 'https://api.github.com/users/AnthonyRyuki/followers', 'following_url': 'https://api.github.com/users/AnthonyRyuki/following{/other_user}', 'gists_url': 'https://api.github.com/users/AnthonyRyuki/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/AnthonyRyuki/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/AnthonyRyuki/subscriptions', 'organizations_url': 'https://api.github.com/users/AnthonyRyuki/orgs', 'repos_url': 'https://api.github.com/users/AnthonyRyuki/repos', 'events_url': 'https://api.github.com/users/AnthonyRyuki/events{/privacy}', 'received_events_url': 'https://api.github.com/users/AnthonyRyuki/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-17T15:14:52Z', 'updated_at': '2026-02-17T15:14:52Z', 'body': "But I just noticed a problem. If you enter the game's test menu, it will immediately jump back to the Triforce test menu. So you won't actually be able to change the setting on VS4 I mentioned.", 'author_association': 'NONE', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3915305627/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T18:16:20Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14659, 'watchers_count': 14659, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 415, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 415, 'watchers': 14659, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'AnthonyRyuki', 'id': 62845774, 'node_id': 'MDQ6VXNlcjYyODQ1Nzc0', 'avatar_url': 'https://avatars.githubusercontent.com/u/62845774?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/AnthonyRyuki', 'html_url': 'https://github.com/AnthonyRyuki', 'followers_url': 'https://api.github.com/users/AnthonyRyuki/followers', 'following_url': 'https://api.github.com/users/AnthonyRyuki/following{/other_user}', 'gists_url': 'https://api.github.com/users/AnthonyRyuki/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/AnthonyRyuki/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/AnthonyRyuki/subscriptions', 'organizations_url': 'https://api.github.com/users/AnthonyRyuki/orgs', 'repos_url': 'https://api.github.com/users/AnthonyRyuki/repos', 'events_url': 'https://api.github.com/users/AnthonyRyuki/events{/privacy}', 'received_events_url': 'https://api.github.com/users/AnthonyRyuki/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-23T12:07:54.448324	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'pizzzza19', 'action': 'deleted', 'id': 13844, 'title': 'Core: Triforce support', 'url': 'https://github.com/dolphin-emu/dolphin/pull/13844#issuecomment-3847521807', 'safe_author': False, 'body': "> All revisions of all games may not be supported initially. We'll continue to work on it as we go, but support should be considered a work in progress.\r\n\r\n@JMC47 \r\nOK. It's work in progress so if you are ready to adjust for specific titles I'll see the detail.\r\n\r\n@sepalani \r\nIt's the same result with builtbot exe. \r\nHere is just reference of frozen state log but i know you are not focusing for specific titles now.\r\nHope this will help something improvement in the future.\r\n`Core\\HW\\EXI\\EXI_DeviceIPL.cpp:306 N[OSREPORT]: Instruction at 0x80080554 (read from SRR0) attempted to access invalid address 0x191a1b34 (read from DAR)`", 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13844', 'id': 3286480944, 'node_id': 'PR_kwDOALCn2M6h2r1s', 'number': 13844, 'title': 'Core: Triforce support', 'user': {'login': 'crediar', 'id': 145270593, 'node_id': 'U_kgDOCKinQQ', 'avatar_url': 'https://avatars.githubusercontent.com/u/145270593?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/crediar', 'html_url': 'https://github.com/crediar', 'followers_url': 'https://api.github.com/users/crediar/followers', 'following_url': 'https://api.github.com/users/crediar/following{/other_user}', 'gists_url': 'https://api.github.com/users/crediar/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/crediar/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/crediar/subscriptions', 'organizations_url': 'https://api.github.com/users/crediar/orgs', 'repos_url': 'https://api.github.com/users/crediar/repos', 'events_url': 'https://api.github.com/users/crediar/events{/privacy}', 'received_events_url': 'https://api.github.com/users/crediar/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'closed', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 113, 'created_at': '2025-08-02T23:06:09Z', 'updated_at': '2026-02-23T12:07:18Z', 'closed_at': '2026-02-16T19:17:22Z', 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13844', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13844', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/13844.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/13844.patch', 'merged_at': '2026-02-16T19:17:22Z'}, 'body': 'All the required changes to make Triforce games bootable.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/reactions', 'total_count': 85, '+1': 15, '-1': 0, 'laugh': 0, 'hooray': 37, 'confused': 0, 'heart': 13, 'rocket': 14, 'eyes': 6}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3847521807', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13844#issuecomment-3847521807', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844', 'id': 3847521807, 'node_id': 'IC_kwDOALCn2M7lVIYP', 'user': {'login': 'pizzzza19', 'id': 183198342, 'node_id': 'U_kgDOCutihg', 'avatar_url': 'https://avatars.githubusercontent.com/u/183198342?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/pizzzza19', 'html_url': 'https://github.com/pizzzza19', 'followers_url': 'https://api.github.com/users/pizzzza19/followers', 'following_url': 'https://api.github.com/users/pizzzza19/following{/other_user}', 'gists_url': 'https://api.github.com/users/pizzzza19/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/pizzzza19/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/pizzzza19/subscriptions', 'organizations_url': 'https://api.github.com/users/pizzzza19/orgs', 'repos_url': 'https://api.github.com/users/pizzzza19/repos', 'events_url': 'https://api.github.com/users/pizzzza19/events{/privacy}', 'received_events_url': 'https://api.github.com/users/pizzzza19/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-04T13:39:35Z', 'updated_at': '2026-02-04T13:40:15Z', 'body': "> All revisions of all games may not be supported initially. We'll continue to work on it as we go, but support should be considered a work in progress.\r\n\r\n@JMC47 \r\nOK. It's work in progress so if you are ready to adjust for specific titles I'll see the detail.\r\n\r\n@sepalani \r\nIt's the same result with builtbot exe. \r\nHere is just reference of frozen state log but i know you are not focusing for specific titles now.\r\nHope this will help something improvement in the future.\r\n`Core\\HW\\EXI\\EXI_DeviceIPL.cpp:306 N[OSREPORT]: Instruction at 0x80080554 (read from SRR0) attempted to access invalid address 0x191a1b34 (read from DAR)`", 'author_association': 'NONE', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3847521807/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T09:39:35Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14657, 'watchers_count': 14657, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 415, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 415, 'watchers': 14657, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'pizzzza19', 'id': 183198342, 'node_id': 'U_kgDOCutihg', 'avatar_url': 'https://avatars.githubusercontent.com/u/183198342?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/pizzzza19', 'html_url': 'https://github.com/pizzzza19', 'followers_url': 'https://api.github.com/users/pizzzza19/followers', 'following_url': 'https://api.github.com/users/pizzzza19/following{/other_user}', 'gists_url': 'https://api.github.com/users/pizzzza19/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/pizzzza19/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/pizzzza19/subscriptions', 'organizations_url': 'https://api.github.com/users/pizzzza19/orgs', 'repos_url': 'https://api.github.com/users/pizzzza19/repos', 'events_url': 'https://api.github.com/users/pizzzza19/events{/privacy}', 'received_events_url': 'https://api.github.com/users/pizzzza19/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-23T12:07:18.742699	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'pizzzza19', 'action': 'deleted', 'id': 13844, 'title': 'Core: Triforce support', 'url': 'https://github.com/dolphin-emu/dolphin/pull/13844#issuecomment-3842552882', 'safe_author': False, 'body': 'Tested with manually built exe as guided by official dolphin readme.\nPrevious PR also had a same error. It is a known issue and may have discussed by other people outside this PR.', 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13844', 'id': 3286480944, 'node_id': 'PR_kwDOALCn2M6h2r1s', 'number': 13844, 'title': 'Core: Triforce support', 'user': {'login': 'crediar', 'id': 145270593, 'node_id': 'U_kgDOCKinQQ', 'avatar_url': 'https://avatars.githubusercontent.com/u/145270593?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/crediar', 'html_url': 'https://github.com/crediar', 'followers_url': 'https://api.github.com/users/crediar/followers', 'following_url': 'https://api.github.com/users/crediar/following{/other_user}', 'gists_url': 'https://api.github.com/users/crediar/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/crediar/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/crediar/subscriptions', 'organizations_url': 'https://api.github.com/users/crediar/orgs', 'repos_url': 'https://api.github.com/users/crediar/repos', 'events_url': 'https://api.github.com/users/crediar/events{/privacy}', 'received_events_url': 'https://api.github.com/users/crediar/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'closed', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 114, 'created_at': '2025-08-02T23:06:09Z', 'updated_at': '2026-02-18T15:47:36Z', 'closed_at': '2026-02-16T19:17:22Z', 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13844', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13844', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/13844.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/13844.patch', 'merged_at': '2026-02-16T19:17:22Z'}, 'body': 'All the required changes to make Triforce games bootable.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/reactions', 'total_count': 85, '+1': 15, '-1': 0, 'laugh': 0, 'hooray': 37, 'confused': 0, 'heart': 13, 'rocket': 14, 'eyes': 6}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3842552882', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13844#issuecomment-3842552882', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13844', 'id': 3842552882, 'node_id': 'IC_kwDOALCn2M7lCLQy', 'user': {'login': 'pizzzza19', 'id': 183198342, 'node_id': 'U_kgDOCutihg', 'avatar_url': 'https://avatars.githubusercontent.com/u/183198342?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/pizzzza19', 'html_url': 'https://github.com/pizzzza19', 'followers_url': 'https://api.github.com/users/pizzzza19/followers', 'following_url': 'https://api.github.com/users/pizzzza19/following{/other_user}', 'gists_url': 'https://api.github.com/users/pizzzza19/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/pizzzza19/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/pizzzza19/subscriptions', 'organizations_url': 'https://api.github.com/users/pizzzza19/orgs', 'repos_url': 'https://api.github.com/users/pizzzza19/repos', 'events_url': 'https://api.github.com/users/pizzzza19/events{/privacy}', 'received_events_url': 'https://api.github.com/users/pizzzza19/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-03T17:08:17Z', 'updated_at': '2026-02-03T17:08:17Z', 'body': 'Tested with manually built exe as guided by official dolphin readme.\nPrevious PR also had a same error. It is a known issue and may have discussed by other people outside this PR.', 'author_association': 'NONE', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3842552882/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T09:39:35Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14657, 'watchers_count': 14657, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 415, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 415, 'watchers': 14657, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'pizzzza19', 'id': 183198342, 'node_id': 'U_kgDOCutihg', 'avatar_url': 'https://avatars.githubusercontent.com/u/183198342?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/pizzzza19', 'html_url': 'https://github.com/pizzzza19', 'followers_url': 'https://api.github.com/users/pizzzza19/followers', 'following_url': 'https://api.github.com/users/pizzzza19/following{/other_user}', 'gists_url': 'https://api.github.com/users/pizzzza19/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/pizzzza19/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/pizzzza19/subscriptions', 'organizations_url': 'https://api.github.com/users/pizzzza19/orgs', 'repos_url': 'https://api.github.com/users/pizzzza19/repos', 'events_url': 'https://api.github.com/users/pizzzza19/events{/privacy}', 'received_events_url': 'https://api.github.com/users/pizzzza19/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T19:55:35.836121	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'edited', 'id': 14207, 'title': 'mingw: lower case windows includes', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14207#issuecomment-3941594618', 'safe_author': True, 'body': 'How would you feel about updating the linter to reflect these changes? Something like this: 09da97b0aae9d8de70fd6f418769f2675f6c77a0\r\n\r\nAlso, running this script across Source/ reveals two missed spots:\r\n```\r\n!!! Source/Core/Common/QoSSession.cpp not compliant to coding style:\r\nWindows system includes must be lowercase: Qos2.h\r\n!!! Source/Core/WinUpdater/Main.cpp not compliant to coding style:\r\nWindows system includes must be lowercase: ShlObj.h\r\n```', 'raw': {'action': 'edited', 'changes': {'body': {'from': 'How would you feel about updating the linter to reflect these changes? Something like this: 09da97b0aae9d8de70fd6f418769f2675f6c77a0'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207', 'id': 3716793270, 'node_id': 'PR_kwDOALCn2M64OWX-', 'number': 14207, 'title': 'mingw: lower case windows includes', 'user': {'login': 'cscd98', 'id': 1188869, 'node_id': 'MDQ6VXNlcjExODg4Njk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1188869?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/cscd98', 'html_url': 'https://github.com/cscd98', 'followers_url': 'https://api.github.com/users/cscd98/followers', 'following_url': 'https://api.github.com/users/cscd98/following{/other_user}', 'gists_url': 'https://api.github.com/users/cscd98/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/cscd98/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/cscd98/subscriptions', 'organizations_url': 'https://api.github.com/users/cscd98/orgs', 'repos_url': 'https://api.github.com/users/cscd98/repos', 'events_url': 'https://api.github.com/users/cscd98/events{/privacy}', 'received_events_url': 'https://api.github.com/users/cscd98/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 7, 'created_at': '2025-12-10T21:12:26Z', 'updated_at': '2026-02-22T19:43:07Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14207', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14207.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14207.patch', 'merged_at': None}, 'body': 'Make all Windows includes lower case as ming on Linux only provides them in lower case and fails to compile otherwise', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941594618', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207#issuecomment-3941594618', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207', 'id': 3941594618, 'node_id': 'IC_kwDOALCn2M7q7_X6', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T19:43:07Z', 'updated_at': '2026-02-22T19:55:34Z', 'body': 'How would you feel about updating the linter to reflect these changes? Something like this: 09da97b0aae9d8de70fd6f418769f2675f6c77a0\r\n\r\nAlso, running this script across Source/ reveals two missed spots:\r\n```\r\n!!! Source/Core/Common/QoSSession.cpp not compliant to coding style:\r\nWindows system includes must be lowercase: Qos2.h\r\n!!! Source/Core/WinUpdater/Main.cpp not compliant to coding style:\r\nWindows system includes must be lowercase: ShlObj.h\r\n```', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941594618/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T19:41:13Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14655, 'watchers_count': 14655, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 414, 'watchers': 14655, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T19:43:10.108622	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14207, 'title': 'mingw: lower case windows includes', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14207#issuecomment-3941594618', 'safe_author': True, 'body': 'How would you feel about updating the linter to reflect these changes? Something like this: 09da97b0aae9d8de70fd6f418769f2675f6c77a0', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207', 'id': 3716793270, 'node_id': 'PR_kwDOALCn2M64OWX-', 'number': 14207, 'title': 'mingw: lower case windows includes', 'user': {'login': 'cscd98', 'id': 1188869, 'node_id': 'MDQ6VXNlcjExODg4Njk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1188869?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/cscd98', 'html_url': 'https://github.com/cscd98', 'followers_url': 'https://api.github.com/users/cscd98/followers', 'following_url': 'https://api.github.com/users/cscd98/following{/other_user}', 'gists_url': 'https://api.github.com/users/cscd98/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/cscd98/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/cscd98/subscriptions', 'organizations_url': 'https://api.github.com/users/cscd98/orgs', 'repos_url': 'https://api.github.com/users/cscd98/repos', 'events_url': 'https://api.github.com/users/cscd98/events{/privacy}', 'received_events_url': 'https://api.github.com/users/cscd98/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 7, 'created_at': '2025-12-10T21:12:26Z', 'updated_at': '2026-02-22T19:43:07Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14207', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14207.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14207.patch', 'merged_at': None}, 'body': 'Make all Windows includes lower case as ming on Linux only provides them in lower case and fails to compile otherwise', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941594618', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207#issuecomment-3941594618', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14207', 'id': 3941594618, 'node_id': 'IC_kwDOALCn2M7q7_X6', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T19:43:07Z', 'updated_at': '2026-02-22T19:43:07Z', 'body': 'How would you feel about updating the linter to reflect these changes? Something like this: 09da97b0aae9d8de70fd6f418769f2675f6c77a0', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941594618/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T19:41:13Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14655, 'watchers_count': 14655, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 414, 'watchers': 14655, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T19:19:46.161283	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'mbc07', 'action': 'deleted', 'id': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941561399', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'id': 3954360119, 'node_id': 'PR_kwDOALCn2M7EcPp1', 'number': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 8, 'created_at': '2026-02-17T19:40:46Z', 'updated_at': '2026-02-22T19:19:37Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14392', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.patch', 'merged_at': None}, 'body': 'In the UpdateAudioDMA routine, when we read the last block of the \'current\' DMA transfer, we read the registers for the DMA address & block count, then generate an AID interrupt to say the DMA transfer is finished.\r\n\r\nThat doesn\'t make sense. That interrupt will trigger the new DMA transfer - at least in the Nintendo SDK used by SSBM, but I reckon this is a quasi-universal rule - so the address is about to be updated to the \'new\' samples, and we read the address just before that, and always transmit data one full DMA transfer old.\r\n\r\nThis PR modifies the behavior to read the address on the UpdateAudioDMA call after the interrupt. Note this is not a race; the routine is CPU-ticks bound, so the interrupt is guaranteed to run before.\r\n\r\nThis should save ~4.75ms of audio latency in anything that uses the default GC games behavior of producing 5ms worth of audio every 5ms (the DSP processes 5ms at a time). I don\'t know whether that behavior changed on Wii/Triforce, but I expect it to also fix the equivalent problem there if it also uses this code.\r\n\r\nTested the audio doesn\'t break on WW, SSBM & TTYD, will test on Wii games when I acquire an iso.\r\nMeasured on SSBM using an input-to-line-in lag tester:\r\n\r\n<img width="435" height="760" alt="image" src="https://github.com/user-attachments/assets/4cf35cdc-38d8-487d-a749-783b61a04a23" />\r\n\r\n6ms difference here, probably lucky draw, should be 4.75ms in theory.\r\nI could test other games, but only those where we can turn off music separately or with some clean input-to-sound scenario available.\r\n\r\nSome notes for the future: the current code for how the audio DMA is handled is dubious and hasn\'t undergone major changes in >a decade. We have an MMIO handler for writing to the START bit of the DMA register, but we don\'t have anything, as far as I can tell, that handles the fact that this register, both block count and START bit, is supposed to get updated by the hardware.\r\nThen we have code that appears to reason based on the values in the registers, that are wrong.\r\n\r\nThe MMIO handler appears to check "if a DMA was already running", but currently, past the very first one, a "DMA is always running", since nothing models the fact the hardware is expected to clear the START bit on its own (not that I\'ve verified inside the GC, but that\'s virtually always how DMAs in chips usually go for single-shot transfers; and a dual buffer DMA explicitly has registers to update the currently unused buffer address).\r\nSo the MMIO handler code currently just affects the behavior of the initial DMA transfer. And indeed it would not work at all when used in steady state e.g. if right now we just started marking the DMA transfer as finished before calling the interrupt, as it schedules another interrupt and thus another DMA transfer 200 cycles (~0.4ms) into the future when on GC they\'re supposed to be spaced 5ms apart.\r\n\r\nGiven the comments about games relying on said behavior, I just went the easy way here and didn\'t refactor it all to not take any chances with compatibility.\r\nFor the record, over at the SSBM-focused fork where we don\'t have such concerns, I got rid of the entire updateAudioDMA routine, and we just react to the MMIO START bit write and forward the full buffer immediately: https://github.com/project-slippi/Ishiiruka/pull/451/changes\r\n\r\nLooking at git history @Pokechu22 you should have a look\r\nWhile we\'re at it, I see 4 years ago you switched to forwarding the samples every 0.25ms instead of the whole DMA buffer because of a game that does a huge DMA transfer which would overflow the Dolphin buffer; what do you think of an approach where we allocate a larger buffer and adjust the logic if a game dumps a huge DMA transfer on us, so we can keep just forwarding everything ASAP?', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941561399', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941561399', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'id': 3941561399, 'node_id': 'IC_kwDOALCn2M7q73Q3', 'user': {'login': 'mbc07', 'id': 8005966, 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8005966?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/mbc07', 'html_url': 'https://github.com/mbc07', 'followers_url': 'https://api.github.com/users/mbc07/followers', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T19:19:37Z', 'updated_at': '2026-02-22T19:19:37Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941561399/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T17:10:44Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14654, 'watchers_count': 14654, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 414, 'watchers': 14654, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'mbc07', 'id': 8005966, 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8005966?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/mbc07', 'html_url': 'https://github.com/mbc07', 'followers_url': 'https://api.github.com/users/mbc07/followers', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T19:19:39.122543	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'mbc07', 'action': 'created', 'id': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941561399', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'id': 3954360119, 'node_id': 'PR_kwDOALCn2M7EcPp1', 'number': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 8, 'created_at': '2026-02-17T19:40:46Z', 'updated_at': '2026-02-22T19:19:37Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14392', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.patch', 'merged_at': None}, 'body': 'In the UpdateAudioDMA routine, when we read the last block of the \'current\' DMA transfer, we read the registers for the DMA address & block count, then generate an AID interrupt to say the DMA transfer is finished.\r\n\r\nThat doesn\'t make sense. That interrupt will trigger the new DMA transfer - at least in the Nintendo SDK used by SSBM, but I reckon this is a quasi-universal rule - so the address is about to be updated to the \'new\' samples, and we read the address just before that, and always transmit data one full DMA transfer old.\r\n\r\nThis PR modifies the behavior to read the address on the UpdateAudioDMA call after the interrupt. Note this is not a race; the routine is CPU-ticks bound, so the interrupt is guaranteed to run before.\r\n\r\nThis should save ~4.75ms of audio latency in anything that uses the default GC games behavior of producing 5ms worth of audio every 5ms (the DSP processes 5ms at a time). I don\'t know whether that behavior changed on Wii/Triforce, but I expect it to also fix the equivalent problem there if it also uses this code.\r\n\r\nTested the audio doesn\'t break on WW, SSBM & TTYD, will test on Wii games when I acquire an iso.\r\nMeasured on SSBM using an input-to-line-in lag tester:\r\n\r\n<img width="435" height="760" alt="image" src="https://github.com/user-attachments/assets/4cf35cdc-38d8-487d-a749-783b61a04a23" />\r\n\r\n6ms difference here, probably lucky draw, should be 4.75ms in theory.\r\nI could test other games, but only those where we can turn off music separately or with some clean input-to-sound scenario available.\r\n\r\nSome notes for the future: the current code for how the audio DMA is handled is dubious and hasn\'t undergone major changes in >a decade. We have an MMIO handler for writing to the START bit of the DMA register, but we don\'t have anything, as far as I can tell, that handles the fact that this register, both block count and START bit, is supposed to get updated by the hardware.\r\nThen we have code that appears to reason based on the values in the registers, that are wrong.\r\n\r\nThe MMIO handler appears to check "if a DMA was already running", but currently, past the very first one, a "DMA is always running", since nothing models the fact the hardware is expected to clear the START bit on its own (not that I\'ve verified inside the GC, but that\'s virtually always how DMAs in chips usually go for single-shot transfers; and a dual buffer DMA explicitly has registers to update the currently unused buffer address).\r\nSo the MMIO handler code currently just affects the behavior of the initial DMA transfer. And indeed it would not work at all when used in steady state e.g. if right now we just started marking the DMA transfer as finished before calling the interrupt, as it schedules another interrupt and thus another DMA transfer 200 cycles (~0.4ms) into the future when on GC they\'re supposed to be spaced 5ms apart.\r\n\r\nGiven the comments about games relying on said behavior, I just went the easy way here and didn\'t refactor it all to not take any chances with compatibility.\r\nFor the record, over at the SSBM-focused fork where we don\'t have such concerns, I got rid of the entire updateAudioDMA routine, and we just react to the MMIO START bit write and forward the full buffer immediately: https://github.com/project-slippi/Ishiiruka/pull/451/changes\r\n\r\nLooking at git history @Pokechu22 you should have a look\r\nWhile we\'re at it, I see 4 years ago you switched to forwarding the samples every 0.25ms instead of the whole DMA buffer because of a game that does a huge DMA transfer which would overflow the Dolphin buffer; what do you think of an approach where we allocate a larger buffer and adjust the logic if a game dumps a huge DMA transfer on us, so we can keep just forwarding everything ASAP?', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941561399', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941561399', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'id': 3941561399, 'node_id': 'IC_kwDOALCn2M7q73Q3', 'user': {'login': 'mbc07', 'id': 8005966, 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8005966?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/mbc07', 'html_url': 'https://github.com/mbc07', 'followers_url': 'https://api.github.com/users/mbc07/followers', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T19:19:37Z', 'updated_at': '2026-02-22T19:19:37Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941561399/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T17:10:44Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14654, 'watchers_count': 14654, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 414, 'watchers': 14654, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'mbc07', 'id': 8005966, 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8005966?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/mbc07', 'html_url': 'https://github.com/mbc07', 'followers_url': 'https://api.github.com/users/mbc07/followers', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T19:03:50.600251	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JulienBernard3383279', 'action': 'edited', 'id': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941536582', 'safe_author': False, 'body': '@Pokechu22 After investigating, here\'s what I gather Maxplay really does. It doesn\'t race the DMA - as far as I\'ve seen, nothing does. It doesn\'t get interrupted when the "DMA complete" bit is set (the AID interrupt). Instead, it reads that register at 59.94Hz, in sync with the rest of its video pipeline. And when the DMA did complete, it schedules another. This means that an approach that tries to play the DMA contents shortly after the previous DMA completes will fail, because when the DMA completes, there is up to 16.67ms during which we don\'t have the next audio data.\r\n\r\nSo how does anything work then? On real hardware, it seems likely to me the DMA is using shadow registers; and when a DMA completes, it automatically starts again with the values currently in the public DMA registers, so if a DMA completes just after the bus passes, it\'s OK so long as the buffered DMA (the one in public values) covers the frame length up to the next check of the DMA completion bit. And the old logic, loading the DMA values just before generating the AID interrupt (= saying the DMA finished) are essentially emulating shadow register behavior. So it works, just slowly.\r\n\r\nWhereas the logic in the first commit of this PR, loading the DMA address 0.25ms (in CPU ticks) after the DMA completes, would have a 0.25/16.68 chance of seeing the value updated by the 59.94Hz event i.e not being one DMA late => random double-playing of part of the song. Any strategy that updates the value less than 16.68ms into the transfer would see this randomness.\r\n\r\nProblem is, in being locally console accurate by emulating shadow registers, the current logic is not globally accurate to console, since after that we have audio buffering from Dolphin, then from Windows, so people really end up with substantially higher lag than on console. So we\'d really like to save a little audio latency here if we can.\r\n\r\nIn this new version, I do the following:\r\n- The MMIO write handler is the only one that updates the DMA transfer address, and it does so instantly\r\n- The UpdateAudioDMA routine still runs every 0.25ms worth of CPU ticks, drip-feeding samples in the buffer to avoid problems with the queue sizes\r\n- When the UpdateAudioDMA runs after a DMA completion, for a short while it doesn\'t output neutral samples, instead counting the number of iterations where it didn\'t get data.\r\n- When a new DMA transfer starts, it catches up, and sets the values addressed to the update routine as if the update routine has had these samples when it needed them.\r\n\r\nThis means:\r\n- The overwhelming majority of games, scheduling another DMA when the current one stops, benefits from the 5ms latency gain from not shadow-buffering the DMA, and they never see the catch-up logic.\r\n- Maxplay, or any game that polls the DMA transfer completion, still work, and get as good latency as the game affords (in Maxplay\'s menu\'s case, a ~170ms gain..) Assuming they poll at 59.94Hz, the catch-up logic will send at most 16.75ms worth of samples at once, in the worst case catch up. The downstream audio pipeline will absorb the jitter in buffer fill level.\r\n\r\nFinally, Maxplay has a weird behavior (bug?) where it double writes to the DMA start register... normally, that wouldn\'t matter, but it conflicts with our catch-up logic. So I had to add a guard that explicitly says, if it\'s the same write at the beginning of the DMA transfer, ignore it.\r\n\r\nTested again:\r\n\r\n<img width="477" height="375" alt="image" src="https://github.com/user-attachments/assets/4a56b647-611f-42f9-a9b1-aab8627b09c2" />\r\n', 'raw': {'action': 'edited', 'changes': {'body': {'from': '@Pokechu22 After investigating, here\'s what I gather Maxplay really does. It doesn\'t race the DMA - as far as I\'ve seen, nothing does. It doesn\'t get interrupted when the "DMA complete" bit is set (the AID interrupt). Instead, it reads that register at 59.94Hz, in sync with the rest of its video pipeline. And when the DMA did complete, it schedules another. This means that an approach that tries to play the DMA contents shortly after the previous DMA completes will fail, because when the DMA completes, there is up to 16.67ms during which we don\'t have the next audio data.\r\n\r\nSo how does anything work then? On real hardware, it seems likely to me the DMA is using shadow registers; and when a DMA completes, it automatically starts again with the values currently in the public DMA registers, so if a DMA completes just after the bus passes, it\'s OK so long as the buffered DMA (the one in public values) covers the frame length up to the next check of the DMA completion bit. And the old logic, loading the DMA values just before generating the AID interrupt (= saying the DMA finished) are essentially emulating shadow register behavior. So it works, just slowly.\r\n\r\nWhereas the logic in the first commit of this PR, loading the DMA address 0.25ms (in CPU ticks) after the DMA completes, would have a 0.25/16.68 chance of seeing the value updated by the 59.94Hz event i.e not being one DMA late => random double-playing of part of the song. Any strategy that updates the value less than 16.68ms into the transfer would see this randomness.\r\n\r\nProblem is, in being locally console accurate by emulating shadow registers, the current logic is not globally accurate to console, since after that we have audio buffering from Dolphin, then from Windows, so people really end up with substantially higher lag than on console. So we\'d really like to save a little audio latency here if we can.\r\n\r\nIn this new version, I do the following:\r\n- The MMIO write handler is the only one that updates the DMA transfer address, and it does so instantly\r\n- The UpdateAudioDMA routine still runs every 0.25ms worth of CPU ticks, drip-feeding samples in the buffer to avoid problems with the queue sizes\r\n- When the UpdateAudioDMA runs after a DMA completion, for a short while it doesn\'t output neutral samples, instead counting the number of iterations where it didn\'t get data.\r\n- When a new DMA transfer starts, it catches up, and sets the values addressed to the update routine as if the update routine has had these samples when it needed them.\r\n\r\nThis means:\r\n- The overwhelming majority of games, scheduling another DMA when the current one stops, benefits from the 5ms latency gain from not shadow-buffering the DMA, and they never see the catch-up logic.\r\n- Maxplay, or any game that polls the DMA transfer completion, still work, and get as good latency as the game affords (in Maxplay\'s menu\'s case, a ~170ms gain..) Assuming they poll at 59.94Hz, the catch-up logic will send at most 16.75ms worth of samples at once, in the worst case catch up. The downstream audio pipeline will absorb the jitter in buffer fill level.\r\n\r\nFinally, Maxplay has a weird behavior (bug?) where it double writes to the DMA start register... normally, that wouldn\'t matter, but it conflicts with our catch-up logic. So I had to add a guard that explicitly says, if it\'s the same write at the beginning of the DMA transfer, ignore it.\r\n\r\nTested again:\r\n\r\n<img width="318" height="372" alt="image" src="https://github.com/user-attachments/assets/84c11d9b-a48a-4b99-b562-63ecf51231b1" />\r\n'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'id': 3954360119, 'node_id': 'PR_kwDOALCn2M7EcPp1', 'number': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 7, 'created_at': '2026-02-17T19:40:46Z', 'updated_at': '2026-02-22T19:02:49Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14392', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.patch', 'merged_at': None}, 'body': 'In the UpdateAudioDMA routine, when we read the last block of the \'current\' DMA transfer, we read the registers for the DMA address & block count, then generate an AID interrupt to say the DMA transfer is finished.\r\n\r\nThat doesn\'t make sense. That interrupt will trigger the new DMA transfer - at least in the Nintendo SDK used by SSBM, but I reckon this is a quasi-universal rule - so the address is about to be updated to the \'new\' samples, and we read the address just before that, and always transmit data one full DMA transfer old.\r\n\r\nThis PR modifies the behavior to read the address on the UpdateAudioDMA call after the interrupt. Note this is not a race; the routine is CPU-ticks bound, so the interrupt is guaranteed to run before.\r\n\r\nThis should save ~4.75ms of audio latency in anything that uses the default GC games behavior of producing 5ms worth of audio every 5ms (the DSP processes 5ms at a time). I don\'t know whether that behavior changed on Wii/Triforce, but I expect it to also fix the equivalent problem there if it also uses this code.\r\n\r\nTested the audio doesn\'t break on WW, SSBM & TTYD, will test on Wii games when I acquire an iso.\r\nMeasured on SSBM using an input-to-line-in lag tester:\r\n\r\n<img width="435" height="760" alt="image" src="https://github.com/user-attachments/assets/4cf35cdc-38d8-487d-a749-783b61a04a23" />\r\n\r\n6ms difference here, probably lucky draw, should be 4.75ms in theory.\r\nI could test other games, but only those where we can turn off music separately or with some clean input-to-sound scenario available.\r\n\r\nSome notes for the future: the current code for how the audio DMA is handled is dubious and hasn\'t undergone major changes in >a decade. We have an MMIO handler for writing to the START bit of the DMA register, but we don\'t have anything, as far as I can tell, that handles the fact that this register, both block count and START bit, is supposed to get updated by the hardware.\r\nThen we have code that appears to reason based on the values in the registers, that are wrong.\r\n\r\nThe MMIO handler appears to check "if a DMA was already running", but currently, past the very first one, a "DMA is always running", since nothing models the fact the hardware is expected to clear the START bit on its own (not that I\'ve verified inside the GC, but that\'s virtually always how DMAs in chips usually go for single-shot transfers; and a dual buffer DMA explicitly has registers to update the currently unused buffer address).\r\nSo the MMIO handler code currently just affects the behavior of the initial DMA transfer. And indeed it would not work at all when used in steady state e.g. if right now we just started marking the DMA transfer as finished before calling the interrupt, as it schedules another interrupt and thus another DMA transfer 200 cycles (~0.4ms) into the future when on GC they\'re supposed to be spaced 5ms apart.\r\n\r\nGiven the comments about games relying on said behavior, I just went the easy way here and didn\'t refactor it all to not take any chances with compatibility.\r\nFor the record, over at the SSBM-focused fork where we don\'t have such concerns, I got rid of the entire updateAudioDMA routine, and we just react to the MMIO START bit write and forward the full buffer immediately: https://github.com/project-slippi/Ishiiruka/pull/451/changes\r\n\r\nLooking at git history @Pokechu22 you should have a look\r\nWhile we\'re at it, I see 4 years ago you switched to forwarding the samples every 0.25ms instead of the whole DMA buffer because of a game that does a huge DMA transfer which would overflow the Dolphin buffer; what do you think of an approach where we allocate a larger buffer and adjust the logic if a game dumps a huge DMA transfer on us, so we can keep just forwarding everything ASAP?', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941536582', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941536582', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'id': 3941536582, 'node_id': 'IC_kwDOALCn2M7q7xNG', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T19:02:49Z', 'updated_at': '2026-02-22T19:03:49Z', 'body': '@Pokechu22 After investigating, here\'s what I gather Maxplay really does. It doesn\'t race the DMA - as far as I\'ve seen, nothing does. It doesn\'t get interrupted when the "DMA complete" bit is set (the AID interrupt). Instead, it reads that register at 59.94Hz, in sync with the rest of its video pipeline. And when the DMA did complete, it schedules another. This means that an approach that tries to play the DMA contents shortly after the previous DMA completes will fail, because when the DMA completes, there is up to 16.67ms during which we don\'t have the next audio data.\r\n\r\nSo how does anything work then? On real hardware, it seems likely to me the DMA is using shadow registers; and when a DMA completes, it automatically starts again with the values currently in the public DMA registers, so if a DMA completes just after the bus passes, it\'s OK so long as the buffered DMA (the one in public values) covers the frame length up to the next check of the DMA completion bit. And the old logic, loading the DMA values just before generating the AID interrupt (= saying the DMA finished) are essentially emulating shadow register behavior. So it works, just slowly.\r\n\r\nWhereas the logic in the first commit of this PR, loading the DMA address 0.25ms (in CPU ticks) after the DMA completes, would have a 0.25/16.68 chance of seeing the value updated by the 59.94Hz event i.e not being one DMA late => random double-playing of part of the song. Any strategy that updates the value less than 16.68ms into the transfer would see this randomness.\r\n\r\nProblem is, in being locally console accurate by emulating shadow registers, the current logic is not globally accurate to console, since after that we have audio buffering from Dolphin, then from Windows, so people really end up with substantially higher lag than on console. So we\'d really like to save a little audio latency here if we can.\r\n\r\nIn this new version, I do the following:\r\n- The MMIO write handler is the only one that updates the DMA transfer address, and it does so instantly\r\n- The UpdateAudioDMA routine still runs every 0.25ms worth of CPU ticks, drip-feeding samples in the buffer to avoid problems with the queue sizes\r\n- When the UpdateAudioDMA runs after a DMA completion, for a short while it doesn\'t output neutral samples, instead counting the number of iterations where it didn\'t get data.\r\n- When a new DMA transfer starts, it catches up, and sets the values addressed to the update routine as if the update routine has had these samples when it needed them.\r\n\r\nThis means:\r\n- The overwhelming majority of games, scheduling another DMA when the current one stops, benefits from the 5ms latency gain from not shadow-buffering the DMA, and they never see the catch-up logic.\r\n- Maxplay, or any game that polls the DMA transfer completion, still work, and get as good latency as the game affords (in Maxplay\'s menu\'s case, a ~170ms gain..) Assuming they poll at 59.94Hz, the catch-up logic will send at most 16.75ms worth of samples at once, in the worst case catch up. The downstream audio pipeline will absorb the jitter in buffer fill level.\r\n\r\nFinally, Maxplay has a weird behavior (bug?) where it double writes to the DMA start register... normally, that wouldn\'t matter, but it conflicts with our catch-up logic. So I had to add a guard that explicitly says, if it\'s the same write at the beginning of the DMA transfer, ignore it.\r\n\r\nTested again:\r\n\r\n<img width="477" height="375" alt="image" src="https://github.com/user-attachments/assets/4a56b647-611f-42f9-a9b1-aab8627b09c2" />\r\n', 'author_association': 'NONE', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941536582/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T17:10:44Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14654, 'watchers_count': 14654, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 414, 'watchers': 14654, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T19:02:51.483467	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JulienBernard3383279', 'action': 'created', 'id': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941536582', 'safe_author': False, 'body': '@Pokechu22 After investigating, here\'s what I gather Maxplay really does. It doesn\'t race the DMA - as far as I\'ve seen, nothing does. It doesn\'t get interrupted when the "DMA complete" bit is set (the AID interrupt). Instead, it reads that register at 59.94Hz, in sync with the rest of its video pipeline. And when the DMA did complete, it schedules another. This means that an approach that tries to play the DMA contents shortly after the previous DMA completes will fail, because when the DMA completes, there is up to 16.67ms during which we don\'t have the next audio data.\r\n\r\nSo how does anything work then? On real hardware, it seems likely to me the DMA is using shadow registers; and when a DMA completes, it automatically starts again with the values currently in the public DMA registers, so if a DMA completes just after the bus passes, it\'s OK so long as the buffered DMA (the one in public values) covers the frame length up to the next check of the DMA completion bit. And the old logic, loading the DMA values just before generating the AID interrupt (= saying the DMA finished) are essentially emulating shadow register behavior. So it works, just slowly.\r\n\r\nWhereas the logic in the first commit of this PR, loading the DMA address 0.25ms (in CPU ticks) after the DMA completes, would have a 0.25/16.68 chance of seeing the value updated by the 59.94Hz event i.e not being one DMA late => random double-playing of part of the song. Any strategy that updates the value less than 16.68ms into the transfer would see this randomness.\r\n\r\nProblem is, in being locally console accurate by emulating shadow registers, the current logic is not globally accurate to console, since after that we have audio buffering from Dolphin, then from Windows, so people really end up with substantially higher lag than on console. So we\'d really like to save a little audio latency here if we can.\r\n\r\nIn this new version, I do the following:\r\n- The MMIO write handler is the only one that updates the DMA transfer address, and it does so instantly\r\n- The UpdateAudioDMA routine still runs every 0.25ms worth of CPU ticks, drip-feeding samples in the buffer to avoid problems with the queue sizes\r\n- When the UpdateAudioDMA runs after a DMA completion, for a short while it doesn\'t output neutral samples, instead counting the number of iterations where it didn\'t get data.\r\n- When a new DMA transfer starts, it catches up, and sets the values addressed to the update routine as if the update routine has had these samples when it needed them.\r\n\r\nThis means:\r\n- The overwhelming majority of games, scheduling another DMA when the current one stops, benefits from the 5ms latency gain from not shadow-buffering the DMA, and they never see the catch-up logic.\r\n- Maxplay, or any game that polls the DMA transfer completion, still work, and get as good latency as the game affords (in Maxplay\'s menu\'s case, a ~170ms gain..) Assuming they poll at 59.94Hz, the catch-up logic will send at most 16.75ms worth of samples at once, in the worst case catch up. The downstream audio pipeline will absorb the jitter in buffer fill level.\r\n\r\nFinally, Maxplay has a weird behavior (bug?) where it double writes to the DMA start register... normally, that wouldn\'t matter, but it conflicts with our catch-up logic. So I had to add a guard that explicitly says, if it\'s the same write at the beginning of the DMA transfer, ignore it.\r\n\r\nTested again:\r\n\r\n<img width="318" height="372" alt="image" src="https://github.com/user-attachments/assets/84c11d9b-a48a-4b99-b562-63ecf51231b1" />\r\n', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'id': 3954360119, 'node_id': 'PR_kwDOALCn2M7EcPp1', 'number': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 7, 'created_at': '2026-02-17T19:40:46Z', 'updated_at': '2026-02-22T19:02:49Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14392', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.patch', 'merged_at': None}, 'body': 'In the UpdateAudioDMA routine, when we read the last block of the \'current\' DMA transfer, we read the registers for the DMA address & block count, then generate an AID interrupt to say the DMA transfer is finished.\r\n\r\nThat doesn\'t make sense. That interrupt will trigger the new DMA transfer - at least in the Nintendo SDK used by SSBM, but I reckon this is a quasi-universal rule - so the address is about to be updated to the \'new\' samples, and we read the address just before that, and always transmit data one full DMA transfer old.\r\n\r\nThis PR modifies the behavior to read the address on the UpdateAudioDMA call after the interrupt. Note this is not a race; the routine is CPU-ticks bound, so the interrupt is guaranteed to run before.\r\n\r\nThis should save ~4.75ms of audio latency in anything that uses the default GC games behavior of producing 5ms worth of audio every 5ms (the DSP processes 5ms at a time). I don\'t know whether that behavior changed on Wii/Triforce, but I expect it to also fix the equivalent problem there if it also uses this code.\r\n\r\nTested the audio doesn\'t break on WW, SSBM & TTYD, will test on Wii games when I acquire an iso.\r\nMeasured on SSBM using an input-to-line-in lag tester:\r\n\r\n<img width="435" height="760" alt="image" src="https://github.com/user-attachments/assets/4cf35cdc-38d8-487d-a749-783b61a04a23" />\r\n\r\n6ms difference here, probably lucky draw, should be 4.75ms in theory.\r\nI could test other games, but only those where we can turn off music separately or with some clean input-to-sound scenario available.\r\n\r\nSome notes for the future: the current code for how the audio DMA is handled is dubious and hasn\'t undergone major changes in >a decade. We have an MMIO handler for writing to the START bit of the DMA register, but we don\'t have anything, as far as I can tell, that handles the fact that this register, both block count and START bit, is supposed to get updated by the hardware.\r\nThen we have code that appears to reason based on the values in the registers, that are wrong.\r\n\r\nThe MMIO handler appears to check "if a DMA was already running", but currently, past the very first one, a "DMA is always running", since nothing models the fact the hardware is expected to clear the START bit on its own (not that I\'ve verified inside the GC, but that\'s virtually always how DMAs in chips usually go for single-shot transfers; and a dual buffer DMA explicitly has registers to update the currently unused buffer address).\r\nSo the MMIO handler code currently just affects the behavior of the initial DMA transfer. And indeed it would not work at all when used in steady state e.g. if right now we just started marking the DMA transfer as finished before calling the interrupt, as it schedules another interrupt and thus another DMA transfer 200 cycles (~0.4ms) into the future when on GC they\'re supposed to be spaced 5ms apart.\r\n\r\nGiven the comments about games relying on said behavior, I just went the easy way here and didn\'t refactor it all to not take any chances with compatibility.\r\nFor the record, over at the SSBM-focused fork where we don\'t have such concerns, I got rid of the entire updateAudioDMA routine, and we just react to the MMIO START bit write and forward the full buffer immediately: https://github.com/project-slippi/Ishiiruka/pull/451/changes\r\n\r\nLooking at git history @Pokechu22 you should have a look\r\nWhile we\'re at it, I see 4 years ago you switched to forwarding the samples every 0.25ms instead of the whole DMA buffer because of a game that does a huge DMA transfer which would overflow the Dolphin buffer; what do you think of an approach where we allocate a larger buffer and adjust the logic if a game dumps a huge DMA transfer on us, so we can keep just forwarding everything ASAP?', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941536582', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3941536582', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'id': 3941536582, 'node_id': 'IC_kwDOALCn2M7q7xNG', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T19:02:49Z', 'updated_at': '2026-02-22T19:02:49Z', 'body': '@Pokechu22 After investigating, here\'s what I gather Maxplay really does. It doesn\'t race the DMA - as far as I\'ve seen, nothing does. It doesn\'t get interrupted when the "DMA complete" bit is set (the AID interrupt). Instead, it reads that register at 59.94Hz, in sync with the rest of its video pipeline. And when the DMA did complete, it schedules another. This means that an approach that tries to play the DMA contents shortly after the previous DMA completes will fail, because when the DMA completes, there is up to 16.67ms during which we don\'t have the next audio data.\r\n\r\nSo how does anything work then? On real hardware, it seems likely to me the DMA is using shadow registers; and when a DMA completes, it automatically starts again with the values currently in the public DMA registers, so if a DMA completes just after the bus passes, it\'s OK so long as the buffered DMA (the one in public values) covers the frame length up to the next check of the DMA completion bit. And the old logic, loading the DMA values just before generating the AID interrupt (= saying the DMA finished) are essentially emulating shadow register behavior. So it works, just slowly.\r\n\r\nWhereas the logic in the first commit of this PR, loading the DMA address 0.25ms (in CPU ticks) after the DMA completes, would have a 0.25/16.68 chance of seeing the value updated by the 59.94Hz event i.e not being one DMA late => random double-playing of part of the song. Any strategy that updates the value less than 16.68ms into the transfer would see this randomness.\r\n\r\nProblem is, in being locally console accurate by emulating shadow registers, the current logic is not globally accurate to console, since after that we have audio buffering from Dolphin, then from Windows, so people really end up with substantially higher lag than on console. So we\'d really like to save a little audio latency here if we can.\r\n\r\nIn this new version, I do the following:\r\n- The MMIO write handler is the only one that updates the DMA transfer address, and it does so instantly\r\n- The UpdateAudioDMA routine still runs every 0.25ms worth of CPU ticks, drip-feeding samples in the buffer to avoid problems with the queue sizes\r\n- When the UpdateAudioDMA runs after a DMA completion, for a short while it doesn\'t output neutral samples, instead counting the number of iterations where it didn\'t get data.\r\n- When a new DMA transfer starts, it catches up, and sets the values addressed to the update routine as if the update routine has had these samples when it needed them.\r\n\r\nThis means:\r\n- The overwhelming majority of games, scheduling another DMA when the current one stops, benefits from the 5ms latency gain from not shadow-buffering the DMA, and they never see the catch-up logic.\r\n- Maxplay, or any game that polls the DMA transfer completion, still work, and get as good latency as the game affords (in Maxplay\'s menu\'s case, a ~170ms gain..) Assuming they poll at 59.94Hz, the catch-up logic will send at most 16.75ms worth of samples at once, in the worst case catch up. The downstream audio pipeline will absorb the jitter in buffer fill level.\r\n\r\nFinally, Maxplay has a weird behavior (bug?) where it double writes to the DMA start register... normally, that wouldn\'t matter, but it conflicts with our catch-up logic. So I had to add a guard that explicitly says, if it\'s the same write at the beginning of the DMA transfer, ignore it.\r\n\r\nTested again:\r\n\r\n<img width="318" height="372" alt="image" src="https://github.com/user-attachments/assets/84c11d9b-a48a-4b99-b562-63ecf51231b1" />\r\n', 'author_association': 'NONE', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3941536582/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T17:10:44Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14654, 'watchers_count': 14654, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 414, 'watchers': 14654, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T00:42:19.655933	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'edited', 'id': 14393, 'title': 'Triforce: Integrated Camera Support', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14393#issuecomment-3939796675', 'safe_author': True, 'body': '> Tested on Windows with both debug and release builds. The image preview seems to work. However, the server part keeps spamming the following error messages when I disable the Integrated server:\r\n> \r\n> ```\r\n> 04:26:657 Common\\HttpRequest.cpp:283 E[COMMON]: Failed to GET http://127.0.0.1:0/img.jpg: Failed to connect to 127.0.0.1 port 0 after 0 ms: Could not connect to server\r\n> ```\r\n\r\nThis is because with the preview enabled, it tries to connect to a camera server using the configured IP Redirection to fetch a frame, and you do not have a running webcam server on `127.0.0.1`.', 'raw': {'action': 'edited', 'changes': {'body': {'from': '> Tested on Windows with both debug and release builds. The image preview seems to work. However, the server part keeps spamming the following error messages when I disable the Integrated server:\r\n> \r\n> ```\r\n> 04:26:657 Common\\HttpRequest.cpp:283 E[COMMON]: Failed to GET http://127.0.0.1:0/img.jpg: Failed to connect to 127.0.0.1 port 0 after 0 ms: Could not connect to server\r\n> ```\r\n\r\nThis is because it tries to connect to a camera server using the configured IP Redirection, and you do not have a running webcam server on 127.0.0.1'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393', 'id': 3955645670, 'node_id': 'PR_kwDOALCn2M7EgbuE', 'number': 14393, 'title': 'Triforce: Integrated Camera Support', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 2, 'created_at': '2026-02-18T03:00:53Z', 'updated_at': '2026-02-22T00:41:55Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14393.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14393.patch', 'merged_at': None}, 'body': 'This adds an HTTP 1.0 server that serves a static (for now) 320x240 baseline JPEG at `/img.jpg`. This allows Mario Kart GP to function without requiring an external server.\r\n\r\nI have also added a camera feed preview, which allows seeing the output of either the integrated or external camera server.\r\n\r\n<img width="722" height="983" alt="Screenshot of the Triforce configuration tab, showing a goofy Dolphin in the camera preview" src="https://github.com/user-attachments/assets/6852efbc-c0f9-44cc-938b-a99cf58b5007" />\r\n\r\nI originally intended to have webcam support in this PR, however I don\'t know if I\'ll have much time to work on it in the following weeks, and the most important parts of the feature already work.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/reactions', 'total_count': 12, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 2, 'confused': 0, 'heart': 8, 'rocket': 2, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3939796675', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#issuecomment-3939796675', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393', 'id': 3939796675, 'node_id': 'IC_kwDOALCn2M7q1IbD', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T00:41:55Z', 'updated_at': '2026-02-22T00:42:18Z', 'body': '> Tested on Windows with both debug and release builds. The image preview seems to work. However, the server part keeps spamming the following error messages when I disable the Integrated server:\r\n> \r\n> ```\r\n> 04:26:657 Common\\HttpRequest.cpp:283 E[COMMON]: Failed to GET http://127.0.0.1:0/img.jpg: Failed to connect to 127.0.0.1 port 0 after 0 ms: Could not connect to server\r\n> ```\r\n\r\nThis is because with the preview enabled, it tries to connect to a camera server using the configured IP Redirection to fetch a frame, and you do not have a running webcam server on `127.0.0.1`.', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3939796675/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T00:17:29Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14652, 'watchers_count': 14652, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14652, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-22T00:41:56.953717	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14393, 'title': 'Triforce: Integrated Camera Support', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14393#issuecomment-3939796675', 'safe_author': True, 'body': '> Tested on Windows with both debug and release builds. The image preview seems to work. However, the server part keeps spamming the following error messages when I disable the Integrated server:\r\n> \r\n> ```\r\n> 04:26:657 Common\\HttpRequest.cpp:283 E[COMMON]: Failed to GET http://127.0.0.1:0/img.jpg: Failed to connect to 127.0.0.1 port 0 after 0 ms: Could not connect to server\r\n> ```\r\n\r\nThis is because it tries to connect to a camera server using the configured IP Redirection, and you do not have a running webcam server on 127.0.0.1', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393', 'id': 3955645670, 'node_id': 'PR_kwDOALCn2M7EgbuE', 'number': 14393, 'title': 'Triforce: Integrated Camera Support', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 2, 'created_at': '2026-02-18T03:00:53Z', 'updated_at': '2026-02-22T00:41:55Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14393.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14393.patch', 'merged_at': None}, 'body': 'This adds an HTTP 1.0 server that serves a static (for now) 320x240 baseline JPEG at `/img.jpg`. This allows Mario Kart GP to function without requiring an external server.\r\n\r\nI have also added a camera feed preview, which allows seeing the output of either the integrated or external camera server.\r\n\r\n<img width="722" height="983" alt="Screenshot of the Triforce configuration tab, showing a goofy Dolphin in the camera preview" src="https://github.com/user-attachments/assets/6852efbc-c0f9-44cc-938b-a99cf58b5007" />\r\n\r\nI originally intended to have webcam support in this PR, however I don\'t know if I\'ll have much time to work on it in the following weeks, and the most important parts of the feature already work.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/reactions', 'total_count': 12, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 2, 'confused': 0, 'heart': 8, 'rocket': 2, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3939796675', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#issuecomment-3939796675', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393', 'id': 3939796675, 'node_id': 'IC_kwDOALCn2M7q1IbD', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-22T00:41:55Z', 'updated_at': '2026-02-22T00:41:55Z', 'body': '> Tested on Windows with both debug and release builds. The image preview seems to work. However, the server part keeps spamming the following error messages when I disable the Integrated server:\r\n> \r\n> ```\r\n> 04:26:657 Common\\HttpRequest.cpp:283 E[COMMON]: Failed to GET http://127.0.0.1:0/img.jpg: Failed to connect to 127.0.0.1 port 0 after 0 ms: Could not connect to server\r\n> ```\r\n\r\nThis is because it tries to connect to a camera server using the configured IP Redirection, and you do not have a running webcam server on 127.0.0.1', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3939796675/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-22T00:17:29Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14652, 'watchers_count': 14652, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14652, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-21T23:54:17.320828	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JulienBernard3383279', 'action': 'created', 'id': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3939729768', 'safe_author': False, 'body': '<img width="891" height="939" alt="image" src="https://github.com/user-attachments/assets/e2d84ad6-00d8-4186-a75f-465ff5b53a22" />\r\n\r\nWell... from what I see Maxplay is held together by duct tape. It seems it starts a DMA twice per window of time for one DMA to play, which on real hardware would result in every other one erroring and doing nothing.\r\nNot only that, but because - I presume - the timing is starts the DMA at is jittery, we can end up reading from the same buffer twice. The old logic wasn\'t healthier in that regard, it just happened to be synced in such a way the race didn\'t happen, and now it does.\r\nI haven\'t checked yet but from the fact it uses many different buffers, I don\'t think it races the DMA.\r\n\r\nI\'m thinking of switching to something where we get rid of the routine entirely, do it all in the MMIO handler, and whenever we see a new DMA start bit write come in in that handler, ask ourselves "would the DMA have been over by now" and consider it would\'ve been if e.g. >95% of the ticks for it have elapsed.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'id': 3954360119, 'node_id': 'PR_kwDOALCn2M7EcPp1', 'number': 14392, 'title': 'Fix audio DMA, save ~5ms audio latency', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 6, 'created_at': '2026-02-17T19:40:46Z', 'updated_at': '2026-02-21T23:54:15Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14392', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14392.patch', 'merged_at': None}, 'body': 'In the UpdateAudioDMA routine, when we read the last block of the \'current\' DMA transfer, we read the registers for the DMA address & block count, then generate an AID interrupt to say the DMA transfer is finished.\r\n\r\nThat doesn\'t make sense. That interrupt will trigger the new DMA transfer - at least in the Nintendo SDK used by SSBM, but I reckon this is a quasi-universal rule - so the address is about to be updated to the \'new\' samples, and we read the address just before that, and always transmit data one full DMA transfer old.\r\n\r\nThis PR modifies the behavior to read the address on the UpdateAudioDMA call after the interrupt. Note this is not a race; the routine is CPU-ticks bound, so the interrupt is guaranteed to run before.\r\n\r\nThis should save ~4.75ms of audio latency in anything that uses the default GC games behavior of producing 5ms worth of audio every 5ms (the DSP processes 5ms at a time). I don\'t know whether that behavior changed on Wii/Triforce, but I expect it to also fix the equivalent problem there if it also uses this code.\r\n\r\nTested the audio doesn\'t break on WW, SSBM & TTYD, will test on Wii games when I acquire an iso.\r\nMeasured on SSBM using an input-to-line-in lag tester:\r\n\r\n<img width="435" height="760" alt="image" src="https://github.com/user-attachments/assets/4cf35cdc-38d8-487d-a749-783b61a04a23" />\r\n\r\n6ms difference here, probably lucky draw, should be 4.75ms in theory.\r\nI could test other games, but only those where we can turn off music separately or with some clean input-to-sound scenario available.\r\n\r\nSome notes for the future: the current code for how the audio DMA is handled is dubious and hasn\'t undergone major changes in >a decade. We have an MMIO handler for writing to the START bit of the DMA register, but we don\'t have anything, as far as I can tell, that handles the fact that this register, both block count and START bit, is supposed to get updated by the hardware.\r\nThen we have code that appears to reason based on the values in the registers, that are wrong.\r\n\r\nThe MMIO handler appears to check "if a DMA was already running", but currently, past the very first one, a "DMA is always running", since nothing models the fact the hardware is expected to clear the START bit on its own (not that I\'ve verified inside the GC, but that\'s virtually always how DMAs in chips usually go for single-shot transfers; and a dual buffer DMA explicitly has registers to update the currently unused buffer address).\r\nSo the MMIO handler code currently just affects the behavior of the initial DMA transfer. And indeed it would not work at all when used in steady state e.g. if right now we just started marking the DMA transfer as finished before calling the interrupt, as it schedules another interrupt and thus another DMA transfer 200 cycles (~0.4ms) into the future when on GC they\'re supposed to be spaced 5ms apart.\r\n\r\nGiven the comments about games relying on said behavior, I just went the easy way here and didn\'t refactor it all to not take any chances with compatibility.\r\nFor the record, over at the SSBM-focused fork where we don\'t have such concerns, I got rid of the entire updateAudioDMA routine, and we just react to the MMIO START bit write and forward the full buffer immediately: https://github.com/project-slippi/Ishiiruka/pull/451/changes\r\n\r\nLooking at git history @Pokechu22 you should have a look\r\nWhile we\'re at it, I see 4 years ago you switched to forwarding the samples every 0.25ms instead of the whole DMA buffer because of a game that does a huge DMA transfer which would overflow the Dolphin buffer; what do you think of an approach where we allocate a larger buffer and adjust the logic if a game dumps a huge DMA transfer on us, so we can keep just forwarding everything ASAP?', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/reactions', 'total_count': 1, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3939729768', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14392#issuecomment-3939729768', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14392', 'id': 3939729768, 'node_id': 'IC_kwDOALCn2M7q04Fo', 'user': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-21T23:54:15Z', 'updated_at': '2026-02-21T23:54:15Z', 'body': '<img width="891" height="939" alt="image" src="https://github.com/user-attachments/assets/e2d84ad6-00d8-4186-a75f-465ff5b53a22" />\r\n\r\nWell... from what I see Maxplay is held together by duct tape. It seems it starts a DMA twice per window of time for one DMA to play, which on real hardware would result in every other one erroring and doing nothing.\r\nNot only that, but because - I presume - the timing is starts the DMA at is jittery, we can end up reading from the same buffer twice. The old logic wasn\'t healthier in that regard, it just happened to be synced in such a way the race didn\'t happen, and now it does.\r\nI haven\'t checked yet but from the fact it uses many different buffers, I don\'t think it races the DMA.\r\n\r\nI\'m thinking of switching to something where we get rid of the routine entirely, do it all in the MMIO handler, and whenever we see a new DMA start bit write come in in that handler, ask ourselves "would the DMA have been over by now" and consider it would\'ve been if e.g. >95% of the ticks for it have elapsed.', 'author_association': 'NONE', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3939729768/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-21T20:34:27Z', 'pushed_at': '2026-02-21T20:34:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544482, 'stargazers_count': 14650, 'watchers_count': 14650, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14650, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JulienBernard3383279', 'id': 22647907, 'node_id': 'MDQ6VXNlcjIyNjQ3OTA3', 'avatar_url': 'https://avatars.githubusercontent.com/u/22647907?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JulienBernard3383279', 'html_url': 'https://github.com/JulienBernard3383279', 'followers_url': 'https://api.github.com/users/JulienBernard3383279/followers', 'following_url': 'https://api.github.com/users/JulienBernard3383279/following{/other_user}', 'gists_url': 'https://api.github.com/users/JulienBernard3383279/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JulienBernard3383279/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JulienBernard3383279/subscriptions', 'organizations_url': 'https://api.github.com/users/JulienBernard3383279/orgs', 'repos_url': 'https://api.github.com/users/JulienBernard3383279/repos', 'events_url': 'https://api.github.com/users/JulienBernard3383279/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JulienBernard3383279/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-21T08:14:09.998068	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'created', 'id': 14398, 'title': 'AMMediaboard: Set s_last_error in recv/send commands', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14398#issuecomment-3938435336', 'safe_author': True, 'body': "On second thought, I'm switching this back to draft.\r\n\r\nI'm not taking into account EWOULDBLOCK when checking the result and error code. I might be missing some edge cases as well.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14398', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14398/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14398/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14398/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14398', 'id': 3963301274, 'node_id': 'PR_kwDOALCn2M7E5XoN', 'number': 14398, 'title': 'AMMediaboard: Set s_last_error in recv/send commands', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-19T14:34:34Z', 'updated_at': '2026-02-21T08:14:07Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': True, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14398', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14398', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14398.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14398.patch', 'merged_at': None}, 'body': "This PR sets the last error value for recv/send commands.\r\n\r\nI don't know if not setting them was intentional, so this PR needs to be tested to make sure it doesn't introduce regressions.\r\n\r\nReady to be reviewed & tested.", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14398/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14398/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3938435336', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14398#issuecomment-3938435336', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14398', 'id': 3938435336, 'node_id': 'IC_kwDOALCn2M7qv8EI', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-21T08:14:07Z', 'updated_at': '2026-02-21T08:14:07Z', 'body': "On second thought, I'm switching this back to draft.\r\n\r\nI'm not taking into account EWOULDBLOCK when checking the result and error code. I might be missing some edge cases as well.", 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3938435336/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-21T01:31:45Z', 'pushed_at': '2026-02-21T03:31:13Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14644, 'watchers_count': 14644, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 413, 'watchers': 14644, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-21T03:47:05.040365	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JMC47', 'action': 'created', 'id': 14406, 'title': 'SI_DeviceAMBaseboard: Minor cleanups.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14406#issuecomment-3938096853', 'safe_author': True, 'body': 'Tested this with a few triforce games earlier, seems fine.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14406', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14406/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14406/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14406/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14406', 'id': 3970746899, 'node_id': 'PR_kwDOALCn2M7FR1t1', 'number': 14406, 'title': 'SI_DeviceAMBaseboard: Minor cleanups.', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-20T23:10:40Z', 'updated_at': '2026-02-21T03:47:02Z', 'closed_at': None, 'author_association': 'MEMBER', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14406', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14406', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14406.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14406.patch', 'merged_at': None}, 'body': "There is still a lot of work to do in SI_DeviceAMBaseboard.cpp and I have many more changes done locally, but I'm going to try to make some small reviewable PRs.\r\n\r\nThe diff size looks scary, but if you ignore whitespace it's not that bad.\r\n\r\nEverything from the existing lines 288 through 2049 in SI_DeviceAMBaseboard.cpp is unchanged, just reduced one indentation level.\r\n", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14406/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14406/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3938096853', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14406#issuecomment-3938096853', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14406', 'id': 3938096853, 'node_id': 'IC_kwDOALCn2M7qupbV', 'user': {'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-21T03:47:02Z', 'updated_at': '2026-02-21T03:47:02Z', 'body': 'Tested this with a few triforce games earlier, seems fine.', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3938096853/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-21T01:31:45Z', 'pushed_at': '2026-02-21T03:31:13Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14644, 'watchers_count': 14644, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 413, 'watchers': 14644, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-20T22:56:55.377298	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'dreamsyntax', 'action': 'created', 'id': 14335, 'title': 'Core: Add SDL Hints settings', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14335#issuecomment-3937540218', 'safe_author': True, 'body': '@JMC47 seems the builder broke for releasing this on dolphin-emu org, last build is the breakpoints one', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14335', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14335/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14335/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14335/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14335', 'id': 3914155408, 'node_id': 'PR_kwDOALCn2M7CXfqa', 'number': 14335, 'title': 'Core: Add SDL Hints settings', 'user': {'login': 'TixoRebel', 'id': 15177565, 'node_id': 'MDQ6VXNlcjE1MTc3NTY1', 'avatar_url': 'https://avatars.githubusercontent.com/u/15177565?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TixoRebel', 'html_url': 'https://github.com/TixoRebel', 'followers_url': 'https://api.github.com/users/TixoRebel/followers', 'following_url': 'https://api.github.com/users/TixoRebel/following{/other_user}', 'gists_url': 'https://api.github.com/users/TixoRebel/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TixoRebel/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TixoRebel/subscriptions', 'organizations_url': 'https://api.github.com/users/TixoRebel/orgs', 'repos_url': 'https://api.github.com/users/TixoRebel/repos', 'events_url': 'https://api.github.com/users/TixoRebel/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TixoRebel/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'closed', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 37, 'created_at': '2026-02-09T02:38:09Z', 'updated_at': '2026-02-20T22:56:52Z', 'closed_at': '2026-02-20T07:44:52Z', 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14335', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14335', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14335.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14335.patch', 'merged_at': '2026-02-20T07:44:52Z'}, 'body': 'Add two settings to the controller window to control if joycons are combined and vertical or horizontal.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14335/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14335/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3937540218', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14335#issuecomment-3937540218', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14335', 'id': 3937540218, 'node_id': 'IC_kwDOALCn2M7qshh6', 'user': {'login': 'dreamsyntax', 'id': 14857235, 'node_id': 'MDQ6VXNlcjE0ODU3MjM1', 'avatar_url': 'https://avatars.githubusercontent.com/u/14857235?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dreamsyntax', 'html_url': 'https://github.com/dreamsyntax', 'followers_url': 'https://api.github.com/users/dreamsyntax/followers', 'following_url': 'https://api.github.com/users/dreamsyntax/following{/other_user}', 'gists_url': 'https://api.github.com/users/dreamsyntax/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dreamsyntax/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dreamsyntax/subscriptions', 'organizations_url': 'https://api.github.com/users/dreamsyntax/orgs', 'repos_url': 'https://api.github.com/users/dreamsyntax/repos', 'events_url': 'https://api.github.com/users/dreamsyntax/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dreamsyntax/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-20T22:56:52Z', 'updated_at': '2026-02-20T22:56:52Z', 'body': '@JMC47 seems the builder broke for releasing this on dolphin-emu org, last build is the breakpoints one', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3937540218/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-20T20:56:29Z', 'pushed_at': '2026-02-20T07:44:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14644, 'watchers_count': 14644, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 416, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 416, 'watchers': 14644, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'dreamsyntax', 'id': 14857235, 'node_id': 'MDQ6VXNlcjE0ODU3MjM1', 'avatar_url': 'https://avatars.githubusercontent.com/u/14857235?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dreamsyntax', 'html_url': 'https://github.com/dreamsyntax', 'followers_url': 'https://api.github.com/users/dreamsyntax/followers', 'following_url': 'https://api.github.com/users/dreamsyntax/following{/other_user}', 'gists_url': 'https://api.github.com/users/dreamsyntax/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dreamsyntax/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dreamsyntax/subscriptions', 'organizations_url': 'https://api.github.com/users/dreamsyntax/orgs', 'repos_url': 'https://api.github.com/users/dreamsyntax/repos', 'events_url': 'https://api.github.com/users/dreamsyntax/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dreamsyntax/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-20T20:45:13.009042	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'deleted', 'id': 14399, 'title': '[DO NOT MERGE] AMMediaboard: Multiple network changes testing ', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14399#issuecomment-3937078480', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14399', 'id': 3963444546, 'node_id': 'PR_kwDOALCn2M7E516t', 'number': 14399, 'title': '[DO NOT MERGE] AMMediaboard: Multiple network changes testing ', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-19T15:05:19Z', 'updated_at': '2026-02-20T20:44:45Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': True, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14399', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14399', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14399.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14399.patch', 'merged_at': None}, 'body': 'This draft is combining several network related PRs and is for testing only:\r\n - https://github.com/dolphin-emu/dolphin/pull/14397\r\n - https://github.com/dolphin-emu/dolphin/pull/14395\r\n - https://github.com/dolphin-emu/dolphin/pull/14398\r\n - https://github.com/dolphin-emu/dolphin/pull/14394\r\n - https://github.com/dolphin-emu/dolphin/pull/14400\r\n - https://github.com/dolphin-emu/dolphin/pull/14404\r\n\r\nOn top of that, some debug logs were changes to info logs for testing convenience. This PR seems to address IP redirections issues on Mario Kart.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3937078480', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14399#issuecomment-3937078480', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399', 'id': 3937078480, 'node_id': 'IC_kwDOALCn2M7qqwzQ', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-20T20:44:45Z', 'updated_at': '2026-02-20T20:44:45Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3937078480/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-20T18:12:55Z', 'pushed_at': '2026-02-20T07:44:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14645, 'watchers_count': 14645, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 415, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 415, 'watchers': 14645, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-20T20:44:47.944088	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'created', 'id': 14399, 'title': '[DO NOT MERGE] AMMediaboard: Multiple network changes testing ', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14399#issuecomment-3937078480', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14399', 'id': 3963444546, 'node_id': 'PR_kwDOALCn2M7E516t', 'number': 14399, 'title': '[DO NOT MERGE] AMMediaboard: Multiple network changes testing ', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-19T15:05:19Z', 'updated_at': '2026-02-20T20:44:45Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': True, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14399', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14399', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14399.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14399.patch', 'merged_at': None}, 'body': 'This draft is combining several network related PRs and is for testing only:\r\n - https://github.com/dolphin-emu/dolphin/pull/14397\r\n - https://github.com/dolphin-emu/dolphin/pull/14395\r\n - https://github.com/dolphin-emu/dolphin/pull/14398\r\n - https://github.com/dolphin-emu/dolphin/pull/14394\r\n - https://github.com/dolphin-emu/dolphin/pull/14400\r\n - https://github.com/dolphin-emu/dolphin/pull/14404\r\n\r\nOn top of that, some debug logs were changes to info logs for testing convenience. This PR seems to address IP redirections issues on Mario Kart.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3937078480', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14399#issuecomment-3937078480', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14399', 'id': 3937078480, 'node_id': 'IC_kwDOALCn2M7qqwzQ', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-20T20:44:45Z', 'updated_at': '2026-02-20T20:44:45Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3937078480/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-20T18:12:55Z', 'pushed_at': '2026-02-20T07:44:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14645, 'watchers_count': 14645, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 415, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 415, 'watchers': 14645, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-20T20:21:18.874759	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14400, 'title': 'AMMediaboard: Change the way socket descriptors are assigned', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14400#issuecomment-3936960906', 'safe_author': True, 'body': 'The NetworkCommandAddress2 range was increased because handling higher socket fds raised the following errors:\r\n```\r\nUnhandled Media Board Write: offset=89065200 length=89065200\r\n```\r\n```\r\nUnhandled Media Board Write: offset=89072200 length=89072200\r\n```\r\n\r\nThis PR was tested through https://github.com/dolphin-emu/dolphin/pull/14399.', 'raw': {'action': 'edited', 'changes': {'body': {'from': 'The NetworkCommandAddress2 range was increased because handling higher socket fds raised the following errors:\r\n```\r\nUnhandled Media Board Write: offset=89065200 length=89065200\r\n```\r\n```\r\nUnhandled Media Board Write: offset=89072200 length=89072200\r\n```\r\n\r\nThis was tested through https://github.com/dolphin-emu/dolphin/pull/14399.'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14400', 'id': 3963673337, 'node_id': 'PR_kwDOALCn2M7E6msk', 'number': 14400, 'title': 'AMMediaboard: Change the way socket descriptors are assigned', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-19T15:50:48Z', 'updated_at': '2026-02-20T20:20:38Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14400', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14400', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14400.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14400.patch', 'merged_at': None}, 'body': 'This PR is an attempt around an issue (a race?) where the accept an connect commands are sharing the same fd but from sockets created at a different time.\r\n\r\nReady to be reviewed and tested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936960906', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14400#issuecomment-3936960906', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400', 'id': 3936960906, 'node_id': 'IC_kwDOALCn2M7qqUGK', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-20T20:20:37Z', 'updated_at': '2026-02-20T20:21:17Z', 'body': 'The NetworkCommandAddress2 range was increased because handling higher socket fds raised the following errors:\r\n```\r\nUnhandled Media Board Write: offset=89065200 length=89065200\r\n```\r\n```\r\nUnhandled Media Board Write: offset=89072200 length=89072200\r\n```\r\n\r\nThis PR was tested through https://github.com/dolphin-emu/dolphin/pull/14399.', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936960906/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-20T18:12:55Z', 'pushed_at': '2026-02-20T07:44:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14645, 'watchers_count': 14645, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 414, 'watchers': 14645, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-20T20:20:40.260706	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'created', 'id': 14400, 'title': 'AMMediaboard: Change the way socket descriptors are assigned', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14400#issuecomment-3936960906', 'safe_author': True, 'body': 'The NetworkCommandAddress2 range was increased because handling higher socket fds raised the following errors:\r\n```\r\nUnhandled Media Board Write: offset=89065200 length=89065200\r\n```\r\n```\r\nUnhandled Media Board Write: offset=89072200 length=89072200\r\n```\r\n\r\nThis was tested through https://github.com/dolphin-emu/dolphin/pull/14399.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14400', 'id': 3963673337, 'node_id': 'PR_kwDOALCn2M7E6msk', 'number': 14400, 'title': 'AMMediaboard: Change the way socket descriptors are assigned', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-19T15:50:48Z', 'updated_at': '2026-02-20T20:20:38Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14400', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14400', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14400.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14400.patch', 'merged_at': None}, 'body': 'This PR is an attempt around an issue (a race?) where the accept an connect commands are sharing the same fd but from sockets created at a different time.\r\n\r\nReady to be reviewed and tested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936960906', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14400#issuecomment-3936960906', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14400', 'id': 3936960906, 'node_id': 'IC_kwDOALCn2M7qqUGK', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-20T20:20:37Z', 'updated_at': '2026-02-20T20:20:37Z', 'body': 'The NetworkCommandAddress2 range was increased because handling higher socket fds raised the following errors:\r\n```\r\nUnhandled Media Board Write: offset=89065200 length=89065200\r\n```\r\n```\r\nUnhandled Media Board Write: offset=89072200 length=89072200\r\n```\r\n\r\nThis was tested through https://github.com/dolphin-emu/dolphin/pull/14399.', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936960906/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-20T18:12:55Z', 'pushed_at': '2026-02-20T07:44:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14645, 'watchers_count': 14645, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 414, 'watchers': 14645, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-20T20:08:14.158239	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'TryTwo', 'action': 'created', 'id': 14345, 'title': 'CheatSearch: Add ability to breakpoint the selected lines.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14345#issuecomment-3936887838', 'safe_author': True, 'body': '@Dentomologist This was my last cheat search PR, not sure if you missed it.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14345', 'id': 3930694878, 'node_id': 'PR_kwDOALCn2M7DN-dD', 'number': 14345, 'title': 'CheatSearch: Add ability to breakpoint the selected lines.', 'user': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-12T09:09:53Z', 'updated_at': '2026-02-20T20:08:12Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14345', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14345.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14345.patch', 'merged_at': None}, 'body': "Adds three breakpoint options to cheat search's context menu for on read, on write, and both. Always Breaks and Logs.", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936887838', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14345#issuecomment-3936887838', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345', 'id': 3936887838, 'node_id': 'IC_kwDOALCn2M7qqCQe', 'user': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-20T20:08:12Z', 'updated_at': '2026-02-20T20:08:12Z', 'body': '@Dentomologist This was my last cheat search PR, not sure if you missed it.', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936887838/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-20T18:12:55Z', 'pushed_at': '2026-02-20T07:44:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14645, 'watchers_count': 14645, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 414, 'watchers': 14645, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-02-20T20:05:32.860191	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'TryTwo', 'action': 'created', 'id': 14387, 'title': 'CheatsManager: Update code tabs on creation', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14387#issuecomment-3936873557', 'safe_author': True, 'body': "> (Incidentally, is there a reason to exclude `Starting` and `Stopping` in `RefreshCodeTabs`? It doesn't matter much since those are soon followed by `Running`/`Paused` and `Uninitialized` respectively, but still.)\r\n\r\nNot sure about changing that, but I hope this PR can be added soon.\r\n", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14387', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14387/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14387/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14387/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14387', 'id': 3943106310, 'node_id': 'PR_kwDOALCn2M7D3Qkp', 'number': 14387, 'title': 'CheatsManager: Update code tabs on creation', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-02-15T04:48:37Z', 'updated_at': '2026-02-20T20:05:30Z', 'closed_at': None, 'author_association': 'CONTRIBUTOR', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14387', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14387', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14387.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14387.patch', 'merged_at': None}, 'body': "Call `OnStateChanged` when creating `CheatsManager` to update the AR and Gecko code tabs with codes for the currently running game (if any).\r\n\r\nPreviously, creating `CheatsManager` while a game was running wouldn't show any codes until the next time the core state changed (excluding `Starting` or `Stopping` which had no effect).\r\n\r\nFixes https://bugs.dolphin-emu.org/issues/13977.\r\n\r\n(Incidentally, is there a reason to exclude `Starting` and `Stopping` in `RefreshCodeTabs`? It doesn't matter much since those are soon followed by `Running`/`Paused` and `Uninitialized` respectively, but still.)", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14387/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14387/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936873557', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14387#issuecomment-3936873557', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14387', 'id': 3936873557, 'node_id': 'IC_kwDOALCn2M7qp-xV', 'user': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-20T20:05:30Z', 'updated_at': '2026-02-20T20:05:30Z', 'body': "> (Incidentally, is there a reason to exclude `Starting` and `Stopping` in `RefreshCodeTabs`? It doesn't matter much since those are soon followed by `Running`/`Paused` and `Uninitialized` respectively, but still.)\r\n\r\nNot sure about changing that, but I hope this PR can be added soon.\r\n", 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3936873557/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-20T18:12:55Z', 'pushed_at': '2026-02-20T07:44:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544467, 'stargazers_count': 14645, 'watchers_count': 14645, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2974, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2974, 'open_issues': 414, 'watchers': 14645, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}

Recent 'gh_pull_request' events

2026-02-24T20:36:10.456939	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 14416, 'title': 'DiscIO: Only allow alphanumeric ASCII in game IDs', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14416', 'head_ref_name': 'game-id-ascii', 'safe_author': True, 'base_sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'head_sha': '7b372db5593ddc92dd442e57170f13072b43ade8', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-24T20:08:29.925134	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'closed', 'id': 14411, 'title': 'Externals: Update SDL to release-3.4.2', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14411', 'head_ref_name': 'SDL-3.4.2', 'safe_author': True, 'base_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'head_sha': '7cc3874a7c0b7c93818260c89fe1c73a143407a1', 'merged': True, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-24T11:51:36.056632	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'naari3', 'action': 'synchronize', 'id': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'head_ref_name': 'master', 'safe_author': False, 'base_sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'head_sha': '2b24798394090553974f7b98d6abbebf634ca4ea', 'merged': False, 'requested_reviewers': [{'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'type': 'gh_pull_request'}
2026-02-24T08:46:51.526811	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'TryTwo', 'action': 'opened', 'id': 14417, 'title': 'Bugfix: Cheat codes:  Make newly added codes start disabled.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14417', 'head_ref_name': 'Cheat_Fix', 'safe_author': True, 'base_sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'head_sha': '8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-24T02:28:40.437290	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'closed', 'id': 14352, 'title': 'GameINI: Formatting updates to Sonic Mega Collection', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14352', 'head_ref_name': 'sonicmega-gameini', 'safe_author': True, 'base_sha': 'd6b5af57d01a04918e9ec849689b6d39b8e33591', 'head_sha': 'fe617172f325fc8f4497b853599cc13260641d18', 'merged': True, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-24T01:34:49.028690	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'naari3', 'action': 'synchronize', 'id': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'head_ref_name': 'master', 'safe_author': False, 'base_sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'head_sha': '4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'merged': False, 'requested_reviewers': [{'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'type': 'gh_pull_request'}
2026-02-24T00:09:25.183585	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JMC47', 'action': 'closed', 'id': 14407, 'title': 'MagneticCardReader: Minor fixup to writing card data.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14407', 'head_ref_name': 'mag-card-fixup', 'safe_author': True, 'base_sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'head_sha': '97a88dd7db123106532cdb8d69a526368c5c0b4a', 'merged': True, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T23:45:56.530399	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'closed', 'id': 13988, 'title': '[RFC] linter: Adjust .clang-format lambda and argument formatting.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/13988', 'head_ref_name': 'clang-format-adjustments', 'safe_author': True, 'base_sha': '72f854d22829b7108ee8ef6813f11a3f35c840f6', 'head_sha': 'b8380d72623c6933d32e606e2e728567eb16a23d', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T23:45:42.622771	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'closed', 'id': 14126, 'title': 'Core: Fix RunOnCPUThread to only directly run the function when Core::IsUninitialized.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14126', 'head_ref_name': 'run-on-cpu-thread-fix', 'safe_author': True, 'base_sha': '56532c850f0f00a129207fae1d2ef6867b51d9cc', 'head_sha': 'eb74d48295892fe600df644da1a227ff6e232630', 'merged': False, 'requested_reviewers': [{'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'type': 'gh_pull_request'}
2026-02-23T22:11:00.694089	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 14317, 'title': 'Jit: Use RangeSet for physical_addresses', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317', 'head_ref_name': 'jit-cache-macro-loop', 'safe_author': True, 'base_sha': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'head_sha': 'c1a26808ce5a09bcc08e029b71d4b1fb47bc4d57', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T20:01:05.903851	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'opened', 'id': 14416, 'title': 'DiscIO: Only allow alphanumeric ASCII in game IDs', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14416', 'head_ref_name': 'game-id-ascii', 'safe_author': True, 'base_sha': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'head_sha': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T19:54:35.324690	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'converted_to_draft', 'id': 14410, 'title': 'AMMediaboard: Fix setsockopt timeout parameters', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14410', 'head_ref_name': 'tri-timeouts', 'safe_author': True, 'base_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'head_sha': '1574304c89afa5f5b20ec560d24dd0197743465f', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T18:31:07.508094	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'review_requested', 'id': 14415, 'title': 'Android: Fix defaults for RetroAchievements settings', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14415', 'head_ref_name': 'android-achievement-defaults', 'safe_author': True, 'base_sha': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'head_sha': '99d82829c84880402784ae1ace684e0f6e635ef6', 'merged': False, 'requested_reviewers': [{'login': 'LillyJadeKatrin', 'id': 122337285, 'node_id': 'U_kgDOB0q4BQ', 'avatar_url': 'https://avatars.githubusercontent.com/u/122337285?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/LillyJadeKatrin', 'html_url': 'https://github.com/LillyJadeKatrin', 'followers_url': 'https://api.github.com/users/LillyJadeKatrin/followers', 'following_url': 'https://api.github.com/users/LillyJadeKatrin/following{/other_user}', 'gists_url': 'https://api.github.com/users/LillyJadeKatrin/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/LillyJadeKatrin/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/LillyJadeKatrin/subscriptions', 'organizations_url': 'https://api.github.com/users/LillyJadeKatrin/orgs', 'repos_url': 'https://api.github.com/users/LillyJadeKatrin/repos', 'events_url': 'https://api.github.com/users/LillyJadeKatrin/events{/privacy}', 'received_events_url': 'https://api.github.com/users/LillyJadeKatrin/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'type': 'gh_pull_request'}
2026-02-23T18:30:51.403995	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'opened', 'id': 14415, 'title': 'Android: Fix defaults for RetroAchievements settings', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14415', 'head_ref_name': 'android-achievement-defaults', 'safe_author': True, 'base_sha': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'head_sha': '99d82829c84880402784ae1ace684e0f6e635ef6', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T18:12:01.329145	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'closed', 'id': 14389, 'title': 'Metal Arms and PoP Two Thrones aspect ratio setting fix', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14389', 'head_ref_name': 'master', 'safe_author': True, 'base_sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'head_sha': 'e3c2ed625085767a4fa7a363240b66307767a2a7', 'merged': True, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T16:46:54.540846	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 14189, 'title': 'JitArm64: Add analysis for m_ppc_state LDP/STP', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14189', 'head_ref_name': 'jitarm64-gpr-pair', 'safe_author': True, 'base_sha': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'head_sha': 'ed1e1dc400da3a17e7a76b8be20011b5dc1fdbb3', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T16:46:37.512866	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 14278, 'title': 'PPCAnalyst: Split "in use" analysis into reads and writes', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14278', 'head_ref_name': 'ppcanalyst-split-read-write', 'safe_author': True, 'base_sha': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'head_sha': '2fe7e109aa67c8f386939bd79955229f3031d200', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T16:41:26.435473	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 14189, 'title': 'JitArm64: Add analysis for m_ppc_state LDP/STP', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14189', 'head_ref_name': 'jitarm64-gpr-pair', 'safe_author': True, 'base_sha': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'head_sha': 'db9abf13e4831f23758ad4e23da3d98641f4c946', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T16:39:55.618552	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 14278, 'title': 'PPCAnalyst: Split "in use" analysis into reads and writes', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14278', 'head_ref_name': 'ppcanalyst-split-read-write', 'safe_author': True, 'base_sha': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'head_sha': '4692f7b632d7d947be85bed23a3890f2acdc0b85', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T16:14:20.359373	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 13261, 'title': 'Jit: Fix "skip redundant flushes" for skipped instructions', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/13261', 'head_ref_name': 'skip-redundant-flushes-fix', 'safe_author': True, 'base_sha': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'head_sha': 'ac5c191fb86dd9251f9664204594de1c9e9eab05', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T15:56:08.569426	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'closed', 'id': 14331, 'title': 'GameSettings: Update Rogue Squadron II and III', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14331', 'head_ref_name': 'game-inis-rs', 'safe_author': True, 'base_sha': 'a8fbe8f28f622851333538ee0a2899bc159161ba', 'head_sha': '2891bc949575036d23b997643c73d833f3212a45', 'merged': True, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T14:40:50.593962	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14412, 'title': '[DO NOT MERGE] AMMediaboard: Multiple network changes testing v2', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14412', 'head_ref_name': 'tri-netmix-2', 'safe_author': True, 'base_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'head_sha': '732abad60cb06e66c2a7e2b3f2f14930ac989bb5', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T14:40:18.541438	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'synchronize', 'id': 14412, 'title': '[DO NOT MERGE] AMMediaboard: Multiple network changes testing v2', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14412', 'head_ref_name': 'tri-netmix-2', 'safe_author': True, 'base_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'head_sha': '732abad60cb06e66c2a7e2b3f2f14930ac989bb5', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T14:35:45.435219	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'opened', 'id': 14414, 'title': 'AMMediaboard: Restore accept() initial timeout implementation', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14414', 'head_ref_name': 'tri-accept-timeout', 'safe_author': True, 'base_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'head_sha': '761873d8619efb76e818cfd9d56339e18580e0c1', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-02-23T12:55:04.407268	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'synchronize', 'id': 14317, 'title': 'Jit: Use RangeSet for physical_addresses', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317', 'head_ref_name': 'jit-cache-macro-loop', 'safe_author': True, 'base_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'head_sha': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}

Recent 'gh_pull_request_comment' events

2026-02-24T20:08:47.348697	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14416, 'hash': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2849307322', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-24T01:25:45.377488	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'naari3', 'action': 'created', 'id': 14401, 'hash': 'ab0d3000416627d95fd55620f421eec39f04affa', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843942613', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-23T23:06:00.780617	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14401, 'hash': 'ab0d3000416627d95fd55620f421eec39f04affa', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843504643', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-23T23:06:00.778442	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14401, 'hash': 'ab0d3000416627d95fd55620f421eec39f04affa', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843502885', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-23T23:06:00.770431	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14401, 'hash': 'ab0d3000416627d95fd55620f421eec39f04affa', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843527161', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-23T22:50:36.557139	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14416, 'hash': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2843472651', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-23T22:01:04.376695	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'edited', 'id': 14317, 'hash': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2843296487', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-23T22:00:24.115932	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14317, 'hash': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2843296487', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-23T21:31:23.385449	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14317, 'hash': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2842832652', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-23T21:31:23.384683	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14317, 'hash': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2843181435', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-23T16:39:43.247387	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14278, 'hash': '40326ee6fe45aab6f9ef394be2b451464a686790', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14278#discussion_r2841867000', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-22T21:22:15.271089	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14317, 'hash': '4a3c31665904e865223179eb4aabeb3717b5289b', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2838523186', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-22T20:50:24.803658	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14317, 'hash': '4a3c31665904e865223179eb4aabeb3717b5289b', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2838492945', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-22T09:39:31.146767	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14317, 'hash': '4a3c31665904e865223179eb4aabeb3717b5289b', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2837466709', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-22T09:23:18.367895	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'cscd98', 'action': 'edited', 'id': 14207, 'hash': '5f8b933b6678ef86b15dbac8a8d6caf1241c3724', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14207#discussion_r2837435043', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-22T09:22:56.879920	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'cscd98', 'action': 'created', 'id': 14207, 'hash': '5f8b933b6678ef86b15dbac8a8d6caf1241c3724', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14207#discussion_r2837435043', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-22T09:16:13.156580	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14207, 'hash': '5f8b933b6678ef86b15dbac8a8d6caf1241c3724', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14207#discussion_r2837429337', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-22T00:39:25.359750	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'edited', 'id': 14393, 'hash': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836595584', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-21T21:46:50.226307	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14298, 'hash': 'fc2289ee872b08a7ec451fbfc02a1ec7a0e7ebcd', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836699792', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-02-21T21:45:12.535374	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14298, 'hash': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836631021', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-21T21:45:10.521276	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14298, 'hash': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836600507', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-21T21:45:10.512123	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14298, 'hash': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836637182', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-21T21:45:10.362775	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14298, 'hash': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836613751', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-21T21:45:10.340947	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14298, 'hash': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836599141', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-02-21T21:45:10.315464	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'created', 'id': 14298, 'hash': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836598514', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}

Recent 'gh_pull_request_review' events

2026-02-24T20:33:55.318059	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'submitted', 'pr_id': 14393, 'pr_title': 'Triforce: Integrated Camera Support', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14393#pullrequestreview-3850374089', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-24T20:08:47.347818	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'submitted', 'pr_id': 14416, 'pr_title': 'DiscIO: Only allow alphanumeric ASCII in game IDs', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14416#pullrequestreview-3850269326', 'comments': [{'id': 2849307322, 'node_id': 'PRRC_kwDOALCn2M6p1Pq6', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2849307322', 'pull_request_review_id': 3850269326, 'diff_hunk': "@@ -34,6 +37,25 @@ const IOS::ES::TicketReader Volume::INVALID_TICKET{};\n const IOS::ES::TMDReader Volume::INVALID_TMD{};\n const std::vector<u8> Volume::INVALID_CERT_CHAIN{};\n \n+std::string Volume::DecodeString(std::span<const char> data) const\n+{\n+  // strnlen to trim null bytes\n+  std::string string(data.data(), strnlen(data.data(), data.size()));\n+  return GetRegion() == Region::NTSC_J ? SHIFTJISToUTF8(string) : CP1252ToUTF8(string);\n+}\n+\n+std::string Volume::FilterGameID(std::span<const char> data)\n+{\n+  std::string string(data.data(), data.size());\n+\n+  // We don't want game IDs to contain characters that are unprintable or might cause path\n+  // traversal. Game IDs normally only contain ASCII uppercase letters and numbers,\n+  // but GNHE5d contains a lowercase letter, so let's allow all ASCII letter and numbers.\n+  std::ranges::replace_if(string, [](char c) { return !Common::IsAlnum(c); }, '-');", 'path': 'Source/Core/DiscIO/Volume.cpp', 'position': 32, 'original_position': 32, 'commit_id': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Ah, so there was a standard library function for it after all. Thanks!', 'created_at': '2026-02-24T20:08:45Z', 'updated_at': '2026-02-24T20:08:45Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2849307322', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2849307322'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2849307322'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416'}}, 'original_commit_id': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2849307322/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2843472651}], 'type': 'gh_pull_request_review'}
2026-02-24T19:19:04.523505	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14345, 'pr_title': 'CheatSearch: Add ability to breakpoint the selected lines.', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14345#pullrequestreview-3850052319', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-24T01:25:45.355371	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'naari3', 'action': 'submitted', 'pr_id': 14401, 'pr_title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14401#pullrequestreview-3844457960', 'comments': [{'id': 2843942613, 'node_id': 'PRRC_kwDOALCn2M6pgx7V', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843942613', 'pull_request_review_id': 3844457960, 'diff_hunk': '@@ -1823,16 +1953,58 @@ u32 ExecuteCommand(std::array<u32, 3>& dicmd_buf, u32* diimm_buf, u32 address, u\n         case AMMBCommand::GetMediaBoardSerial:\n           memcpy(s_media_buffer + 4, "A89E-27A50364511", 16);\n           break;\n-        case AMMBCommand::Unknown_104:\n+        case AMMBCommand::GetNetworkConfig:\n           s_media_buffer[4] = 1;\n           break;\n+        case AMMBCommand::TestHardware:\n+        {\n+          // Execute1 command buffer layout (result slot at +0x20):\n+          //   [8] = command word, [9] = test_type, [10] = string_ptr\n+          const u32 test_type = s_media_buffer_32[9];\n+          const u32 string_ptr = s_media_buffer_32[10];\n+\n+          DEBUG_LOG_FMT(AMMEDIABOARD,\n+                        "GC-AM: TestHardware (Execute1 inner): type={:08x} str_ptr={:08x}",\n+                        test_type, string_ptr);\n+\n+          if (string_ptr != 0)\n+          {\n+            memory.Write_U32_Swap(TEST_OK_WORD0, string_ptr);\n+            memory.Write_U32_Swap(TEST_OK_WORD1, string_ptr + 4);\n+          }\n+\n+          // Phase 1: Echo test_type back. The 0x80 flag is set below.\n+          s_media_buffer_32[1] = test_type;\n+\n+          // Schedule phase 2 via CoreTiming.\n+          {\n+            auto& core_timing = Core::System::GetInstance().GetCoreTiming();\n+            core_timing.RemoveEvent(s_et_test_hw_phase2);\n+            constexpr s64 phase2_delay = 50000;                               // ~1ms at 486MHz\n+            core_timing.ScheduleEvent(phase2_delay, s_et_test_hw_phase2, 0);  // 0 = Execute1', 'path': 'Source/Core/Core/HW/DVD/AMMediaboard.cpp', 'position': 242, 'original_position': 242, 'commit_id': 'ab0d3000416627d95fd55620f421eec39f04affa', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Yes, this is intentional. Based on my analysis of segaboot.gcm, the game expects two separate responses for TestHardware:\n\n1. An immediate acknowledgment (with bit 0x80 set in the response header). this is what the GenerateInterrupt at the bottom handles.\n2. A delayed result (without 0x80) delivered by the scheduled event, this is simulating the time the hardware would take to run the test.\n\nThe game distinguishes between the two by checking the 0x80 flag in the response. It ignores the dispatch table for phase 1 and only processes the test result on phase 2.', 'created_at': '2026-02-24T01:25:43Z', 'updated_at': '2026-02-24T01:25:43Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843942613', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'author_association': 'NONE', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843942613'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843942613'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}}, 'original_commit_id': 'ab0d3000416627d95fd55620f421eec39f04affa', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843942613/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2843527161}], 'type': 'gh_pull_request_review'}
2026-02-23T22:52:31.811047	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14411, 'pr_title': 'Externals: Update SDL to release-3.4.2', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14411#pullrequestreview-3843946143', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-23T22:50:36.451986	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14416, 'pr_title': 'DiscIO: Only allow alphanumeric ASCII in game IDs', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14416#pullrequestreview-3843935985', 'comments': [{'id': 2843472651, 'node_id': 'PRRC_kwDOALCn2M6pe_ML', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843472651', 'pull_request_review_id': 3843935985, 'diff_hunk': "@@ -34,6 +37,25 @@ const IOS::ES::TicketReader Volume::INVALID_TICKET{};\n const IOS::ES::TMDReader Volume::INVALID_TMD{};\n const std::vector<u8> Volume::INVALID_CERT_CHAIN{};\n \n+std::string Volume::DecodeString(std::span<const char> data) const\n+{\n+  // strnlen to trim null bytes\n+  std::string string(data.data(), strnlen(data.data(), data.size()));\n+  return GetRegion() == Region::NTSC_J ? SHIFTJISToUTF8(string) : CP1252ToUTF8(string);\n+}\n+\n+std::string Volume::FilterGameID(std::span<const char> data)\n+{\n+  std::string string(data.data(), data.size());\n+\n+  // We don't want game IDs to contain characters that are unprintable or might cause path\n+  // traversal. Game IDs normally only contain ASCII uppercase letters and numbers,\n+  // but GNHE5d contains a lowercase letter, so let's allow all ASCII letter and numbers.\n+  std::ranges::replace_if(string, [](char c) { return !Common::IsAlnum(c); }, '-');", 'path': 'Source/Core/DiscIO/Volume.cpp', 'position': 32, 'original_position': 32, 'commit_id': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "```suggestion\n  std::ranges::replace_if(string, std::not_fn(Common::IsAlnum), '-');\n```\nA bit cleaner, maybe.", 'created_at': '2026-02-23T22:50:32Z', 'updated_at': '2026-02-23T22:50:33Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2843472651', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843472651'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2843472651'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416'}}, 'original_commit_id': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843472651/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}], 'type': 'gh_pull_request_review'}
2026-02-23T22:46:29.900422	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14415, 'pr_title': 'Android: Fix defaults for RetroAchievements settings', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14415#pullrequestreview-3843921844', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-23T22:00:24.114996	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'submitted', 'pr_id': 14317, 'pr_title': 'Jit: Use RangeSet for physical_addresses', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#pullrequestreview-3843749154', 'comments': [{'id': 2843296487, 'node_id': 'PRRC_kwDOALCn2M6peULn', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843296487', 'pull_request_review_id': 3843749154, 'diff_hunk': '@@ -362,9 +364,15 @@ void JitBaseBlockCache::ErasePhysicalRange(u32 address, u32 length)\n       {\n         // If the block overlaps, also remove all other occupied slots in the other macro blocks.\n         // This will leak empty macro blocks, but they may be reused or cleared later on.\n-        for (u32 addr : block->physical_addresses)\n-          if ((addr & BLOCK_RANGE_MAP_MASK) != start->first)\n-            block_range_map[addr & BLOCK_RANGE_MAP_MASK].erase(block);\n+        for (auto [range_start, range_end] : block->physical_addresses)\n+        {\n+          DEBUG_ASSERT(range_start != range_end);\n+          for (u32 i = range_start & BLOCK_RANGE_MAP_MASK; i < range_end; i += BLOCK_RANGE_SIZE)\n+          {\n+            if ((i & BLOCK_RANGE_MAP_MASK) != start->first)\n+              block_range_map[i & BLOCK_RANGE_MAP_MASK].erase(block);', 'path': 'Source/Core/Core/PowerPC/JitCommon/JitCache.cpp', 'position': 40, 'original_position': 40, 'commit_id': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "> [Preexisting] I'm unsure why we don't erase the block if its starting address is at the beginning of the macro block.\r\n\r\nThat's the block that `iter` is pointing to, so erasing it requires us to take care of updating `iter`.", 'created_at': '2026-02-23T22:00:22Z', 'updated_at': '2026-02-23T22:00:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2843296487', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843296487'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2843296487'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317'}}, 'original_commit_id': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843296487/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2842832652}], 'type': 'gh_pull_request_review'}
2026-02-23T21:31:23.382616	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14317, 'pr_title': 'Jit: Use RangeSet for physical_addresses', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#pullrequestreview-3843252620', 'comments': [{'id': 2842832652, 'node_id': 'PRRC_kwDOALCn2M6pci8M', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2842832652', 'pull_request_review_id': 3843252620, 'diff_hunk': '@@ -362,9 +364,15 @@ void JitBaseBlockCache::ErasePhysicalRange(u32 address, u32 length)\n       {\n         // If the block overlaps, also remove all other occupied slots in the other macro blocks.\n         // This will leak empty macro blocks, but they may be reused or cleared later on.\n-        for (u32 addr : block->physical_addresses)\n-          if ((addr & BLOCK_RANGE_MAP_MASK) != start->first)\n-            block_range_map[addr & BLOCK_RANGE_MAP_MASK].erase(block);\n+        for (auto [range_start, range_end] : block->physical_addresses)\n+        {\n+          DEBUG_ASSERT(range_start != range_end);\n+          for (u32 i = range_start & BLOCK_RANGE_MAP_MASK; i < range_end; i += BLOCK_RANGE_SIZE)\n+          {\n+            if ((i & BLOCK_RANGE_MAP_MASK) != start->first)\n+              block_range_map[i & BLOCK_RANGE_MAP_MASK].erase(block);', 'path': 'Source/Core/Core/PowerPC/JitCommon/JitCache.cpp', 'position': 40, 'original_position': 40, 'commit_id': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "These two `BLOCK_RANGE_MAP_MASK`s are now redundant since `i` starts masked and is incremented by `BLOCK_RANGE_SIZE`.\n\n[Preexisting] I'm unsure why we don't erase the block if its starting address is at the beginning of the macro block.\n\n", 'created_at': '2026-02-23T20:07:04Z', 'updated_at': '2026-02-23T21:31:21Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2842832652', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2842832652'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2842832652'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317'}}, 'original_commit_id': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2842832652/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2843181435, 'node_id': 'PRRC_kwDOALCn2M6pd4F7', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843181435', 'pull_request_review_id': 3843252620, 'diff_hunk': '@@ -404,8 +412,11 @@ void JitBaseBlockCache::EraseSingleBlock(const JitBlock& block)\n \n   JitBlock& mutable_block = block_map_iter->second;\n \n-  for (const u32 addr : mutable_block.physical_addresses)\n-    block_range_map[addr & BLOCK_RANGE_MAP_MASK].erase(&mutable_block);\n+  for (auto [range_start, range_end] : mutable_block.physical_addresses)\n+  {\n+    for (u32 i = range_start & BLOCK_RANGE_MAP_MASK; i < range_end; i += BLOCK_RANGE_SIZE)\n+      block_range_map[i & BLOCK_RANGE_MAP_MASK].erase(&mutable_block);', 'path': 'Source/Core/Core/PowerPC/JitCommon/JitCache.cpp', 'position': 55, 'original_position': 55, 'commit_id': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Ditto redundant mask.', 'created_at': '2026-02-23T21:29:55Z', 'updated_at': '2026-02-23T21:31:21Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2843181435', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843181435'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2843181435'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317'}}, 'original_commit_id': '42a78a438c6a67a27958c87b35c016b3d33dc692', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843181435/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}], 'type': 'gh_pull_request_review'}
2026-02-23T16:39:43.246526	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'submitted', 'pr_id': 14278, 'pr_title': 'PPCAnalyst: Split "in use" analysis into reads and writes', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14278#pullrequestreview-3842193621', 'comments': [{'id': 2841867000, 'node_id': 'PRRC_kwDOALCn2M6pY3L4', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2841867000', 'pull_request_review_id': 3842193621, 'diff_hunk': '@@ -559,26 +559,11 @@ void JitArm64::lmw(UGeckoInstruction inst)\n     }\n   }\n \n-  BitSet32 gprs_to_flush = ~js.op->gprInUse & BitSet32(0xFFFFFFFFU << d);\n-  if (!js.op->gprInUse[a])\n-  {\n-    if (!a_is_addr_base_reg)\n-    {\n-      gprs_to_flush[a] = true;\n-    }\n-    else\n-    {\n-      gprs_to_flush[a] = false;\n+  BitSet32 gprs_to_undirty = ~js.op->gprWillBeWritten & BitSet32(0xFFFFFFFFU << d);', 'path': 'Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp', 'position': 14, 'original_position': 14, 'commit_id': '40326ee6fe45aab6f9ef394be2b451464a686790', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '> If a register that won\'t be written is lower than d, shouldn\'t it have been undirtied already?\r\n\r\nYes, it should have been. This causes a problem for us.\r\n\r\nImagine that lmw is only writing to registers r30 and r31, that r29 isn\'t dirty, and that none of those registers will be written to later in the block. If we remove `& BitSet32(0xFFFFFFFFU << d)`, `gprs_to_undirty` will have bits 29, 30 and 31 set (plus a bunch of other bits for registers that aren\'t relevant).\r\n\r\nNow we get into the `for` loop. On the first iteration, we have `i == 30`, and we notice that `gprs_to_undirty[i]` is true and `i != 0 && gprs_to_undirty[i - 1]` is also true. Because of this, we try to undirty r29 and r30 at the same time... but r29 isn\'t actually dirty, so the register cache emits an STR instruction just for r30. Then on the next loop iteration, bit 30 is no longer set in `gprs_to_undirty` and we have `i == 31`, so we don\'t trigger any case where `gprs_to_undirty_this_time` becomes non-zero. Instead, after the instruction, Jit.cpp flushes and the register cache emits an STR instruction just for r31.\r\n\r\nWhat we want to emit is a single STP instruction that stores both r30 and r31 at the same time, but because we were "tricked" by thinking we need to undirty r29, instead we emitted two STR instructions.\r\n\r\nThe last commit of PR #14189 solves this in a cleaner way.', 'created_at': '2026-02-23T16:39:41Z', 'updated_at': '2026-02-23T16:39:41Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14278#discussion_r2841867000', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14278', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2841867000'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14278#discussion_r2841867000'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14278'}}, 'original_commit_id': '40326ee6fe45aab6f9ef394be2b451464a686790', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2841867000/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2821775987}], 'type': 'gh_pull_request_review'}
2026-02-22T21:22:15.270195	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'submitted', 'pr_id': 14317, 'pr_title': 'Jit: Use RangeSet for physical_addresses', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#pullrequestreview-3838588369', 'comments': [{'id': 2838523186, 'node_id': 'PRRC_kwDOALCn2M6pMG0y', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2838523186', 'pull_request_review_id': 3838588369, 'diff_hunk': '@@ -171,10 +170,14 @@ void JitBaseBlockCache::FinalizeBlock(JitBlock& block, bool block_link,\n                                  original_buffer_transform_view.end());\n   }\n \n-  for (u32 addr : block.physical_addresses)\n+  for (auto [range_start, range_end] : block.physical_addresses)\n   {\n-    valid_block.Set(addr / 32);\n-    block_range_map[addr & BLOCK_RANGE_MAP_MASK].insert(&block);\n+    static_assert(BLOCK_RANGE_SIZE >= 32);\n+    for (u32 i = range_start & ~31; i < range_end; i += 32)\n+    {\n+      valid_block.Set(i / 32);\n+      block_range_map[i & BLOCK_RANGE_MAP_MASK].insert(&block);', 'path': 'Source/Core/Core/PowerPC/JitCommon/JitCache.cpp', 'position': 23, 'original_position': 23, 'commit_id': '4a3c31665904e865223179eb4aabeb3717b5289b', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Ah, two loops! Yeah, if you've shown two loops to be faster than my current code, even slightly, then I'll go for two loops for sure.", 'created_at': '2026-02-22T21:22:13Z', 'updated_at': '2026-02-22T21:22:13Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2838523186', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2838523186'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2838523186'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317'}}, 'original_commit_id': '4a3c31665904e865223179eb4aabeb3717b5289b', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2838523186/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2835684852}], 'type': 'gh_pull_request_review'}
2026-02-22T20:50:24.801488	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14317, 'pr_title': 'Jit: Use RangeSet for physical_addresses', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#pullrequestreview-3838565329', 'comments': [{'id': 2838492945, 'node_id': 'PRRC_kwDOALCn2M6pL_cR', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2838492945', 'pull_request_review_id': 3838565329, 'diff_hunk': '@@ -171,10 +170,14 @@ void JitBaseBlockCache::FinalizeBlock(JitBlock& block, bool block_link,\n                                  original_buffer_transform_view.end());\n   }\n \n-  for (u32 addr : block.physical_addresses)\n+  for (auto [range_start, range_end] : block.physical_addresses)\n   {\n-    valid_block.Set(addr / 32);\n-    block_range_map[addr & BLOCK_RANGE_MAP_MASK].insert(&block);\n+    static_assert(BLOCK_RANGE_SIZE >= 32);\n+    for (u32 i = range_start & ~31; i < range_end; i += 32)\n+    {\n+      valid_block.Set(i / 32);\n+      block_range_map[i & BLOCK_RANGE_MAP_MASK].insert(&block);', 'path': 'Source/Core/Core/PowerPC/JitCommon/JitCache.cpp', 'position': 23, 'original_position': 23, 'commit_id': '4a3c31665904e865223179eb4aabeb3717b5289b', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "I did some testing with the following code, repeatedly switching RS2 cockpit views using a TAS movie for consistency:\r\n```\r\nfor (u32 i = range_start & ~31; i < range_end; i += 32)\r\n  valid_block.Set(i / 32);\r\nfor (u32 i = range_start & BLOCK_RANGE_MAP_MASK; i < range_end; i += BLOCK_RANGE_SIZE)\r\n  block_range_map[i].insert(&block);\r\n```\r\n... which ended up about 10% faster. That said, the average difference was only about 0.4 milliseconds per view switch, so clearly this wasn't taking much time before.\r\n\r\nAt this point I think I'd suggest separating the loops for code clarity rather than the (very small) performance improvement I was originally thinking of. As someone whose understanding of the JIT code is rather piecemeal I've often found myself surprised or confused by some aspect of it, only to realize later why it made sense after all. Given that, when I saw the PR's current loop I initially assumed there was some reason I was missing why we needed to iterate over `block_range_map` by 32 instead of 256, while the loops above avoid that potential misunderstanding.", 'created_at': '2026-02-22T20:50:22Z', 'updated_at': '2026-02-22T20:50:23Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2838492945', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2838492945'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2838492945'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317'}}, 'original_commit_id': '4a3c31665904e865223179eb4aabeb3717b5289b', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2838492945/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2835684852}], 'type': 'gh_pull_request_review'}
2026-02-22T11:11:16.885713	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14410, 'pr_title': 'AMMediaboard: Fix setsockopt timeout parameters', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14410#pullrequestreview-3837325744', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-22T09:39:31.126316	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'submitted', 'pr_id': 14317, 'pr_title': 'Jit: Use RangeSet for physical_addresses', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14317#pullrequestreview-3837137676', 'comments': [{'id': 2837466709, 'node_id': 'PRRC_kwDOALCn2M6pIE5V', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837466709', 'pull_request_review_id': 3837137676, 'diff_hunk': '@@ -171,10 +170,14 @@ void JitBaseBlockCache::FinalizeBlock(JitBlock& block, bool block_link,\n                                  original_buffer_transform_view.end());\n   }\n \n-  for (u32 addr : block.physical_addresses)\n+  for (auto [range_start, range_end] : block.physical_addresses)\n   {\n-    valid_block.Set(addr / 32);\n-    block_range_map[addr & BLOCK_RANGE_MAP_MASK].insert(&block);\n+    static_assert(BLOCK_RANGE_SIZE >= 32);\n+    for (u32 i = range_start & ~31; i < range_end; i += 32)\n+    {\n+      valid_block.Set(i / 32);\n+      block_range_map[i & BLOCK_RANGE_MAP_MASK].insert(&block);', 'path': 'Source/Core/Core/PowerPC/JitCommon/JitCache.cpp', 'position': 23, 'original_position': 23, 'commit_id': '4a3c31665904e865223179eb4aabeb3717b5289b', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Yes, whereas it did it up to 64 times before. Do you think this is a big enough problem that writing a more complicated loop would be worth it?', 'created_at': '2026-02-22T09:39:29Z', 'updated_at': '2026-02-22T09:39:29Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2837466709', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837466709'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14317#discussion_r2837466709'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14317'}}, 'original_commit_id': '4a3c31665904e865223179eb4aabeb3717b5289b', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837466709/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2835684852}], 'type': 'gh_pull_request_review'}
2026-02-22T09:22:56.878361	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'cscd98', 'action': 'submitted', 'pr_id': 14207, 'pr_title': 'mingw: lower case windows includes', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14207#pullrequestreview-3837098294', 'comments': [{'id': 2837435043, 'node_id': 'PRRC_kwDOALCn2M6pH9Kj', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837435043', 'pull_request_review_id': 3837098294, 'diff_hunk': '@@ -200,6 +200,8 @@ Summary:\n - The preferred form of the increment and decrement operator in for-loops is prefix-form (e.g. `++var`).\n \n ## <a name="cpp-code-headers"></a>Headers\n+- All includes should be in lowercase.', 'path': 'Contributing.md', 'position': 4, 'original_position': 4, 'commit_id': '5f8b933b6678ef86b15dbac8a8d6caf1241c3724', 'user': {'login': 'cscd98', 'id': 1188869, 'node_id': 'MDQ6VXNlcjExODg4Njk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1188869?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/cscd98', 'html_url': 'https://github.com/cscd98', 'followers_url': 'https://api.github.com/users/cscd98/followers', 'following_url': 'https://api.github.com/users/cscd98/following{/other_user}', 'gists_url': 'https://api.github.com/users/cscd98/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/cscd98/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/cscd98/subscriptions', 'organizations_url': 'https://api.github.com/users/cscd98/orgs', 'repos_url': 'https://api.github.com/users/cscd98/repos', 'events_url': 'https://api.github.com/users/cscd98/events{/privacy}', 'received_events_url': 'https://api.github.com/users/cscd98/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'How about instead "When including Windows‑specific headers (e.g., windows.h, winnt.h, shlwapi.h), the #include directive must be lower case as some cross-compilers (e.g. MingW) may use case-sensitive filesystems, where the files are typically lower case."', 'created_at': '2026-02-22T09:22:54Z', 'updated_at': '2026-02-22T09:22:55Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207#discussion_r2837435043', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14207', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837435043'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14207#discussion_r2837435043'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14207'}}, 'original_commit_id': '5f8b933b6678ef86b15dbac8a8d6caf1241c3724', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837435043/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2837429337}], 'type': 'gh_pull_request_review'}
2026-02-22T09:16:13.154515	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14207, 'pr_title': 'mingw: lower case windows includes', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14207#pullrequestreview-3837092631', 'comments': [{'id': 2837429337, 'node_id': 'PRRC_kwDOALCn2M6pH7xZ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837429337', 'pull_request_review_id': 3837092631, 'diff_hunk': '@@ -200,6 +200,8 @@ Summary:\n - The preferred form of the increment and decrement operator in for-loops is prefix-form (e.g. `++var`).\n \n ## <a name="cpp-code-headers"></a>Headers\n+- All includes should be in lowercase.', 'path': 'Contributing.md', 'position': 4, 'original_position': 4, 'commit_id': '5f8b933b6678ef86b15dbac8a8d6caf1241c3724', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'I probably wouldn\'t say "All includes". We have many includes with uppercase letters.', 'created_at': '2026-02-22T09:16:10Z', 'updated_at': '2026-02-22T09:16:10Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14207#discussion_r2837429337', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14207', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837429337'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14207#discussion_r2837429337'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14207'}}, 'original_commit_id': '5f8b933b6678ef86b15dbac8a8d6caf1241c3724', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2837429337/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}], 'type': 'gh_pull_request_review'}
2026-02-21T23:53:05.846335	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14352, 'pr_title': 'GameINI: Formatting updates to Sonic Mega Collection', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14352#pullrequestreview-3836246551', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-21T23:48:34.017836	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14298, 'pr_title': 'AchievementManager: APPROVED_LIST_HASH quality of life improvements', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#pullrequestreview-3836240367', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-21T23:27:42.722727	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14409, 'pr_title': 'AMMediaboard: Improve recv/send log messages', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14409#pullrequestreview-3836205736', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-21T22:22:12.522763	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14408, 'pr_title': 'AMMediaboard: Check for EAGAIN in WSAGetLastError', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14408#pullrequestreview-3836134656', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-21T21:46:49.979305	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14298, 'pr_title': 'AchievementManager: APPROVED_LIST_HASH quality of life improvements', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#pullrequestreview-3836104414', 'comments': [{'id': 2836699792, 'node_id': 'PRRC_kwDOALCn2M6pFJqQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836699792', 'pull_request_review_id': 3836104414, 'diff_hunk': '@@ -403,4 +403,31 @@ std::string DigestToString(const Digest& digest)\n   }\n   return hash;\n }\n+\n+std::string DigestToSource(const Digest& digest)\n+{\n+  static constexpr std::array<char, 16> lookup = {\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\',\n+                                                  \'8\', \'9\', \'A\', \'B\', \'C\', \'D\', \'E\', \'F\'};\n+  std::string hash;\n+  hash.reserve(digest.size() * 6);  // +2 for the braces, -2 for the missing last space and comma\n+\n+  hash += \'{\';\n+\n+  for (std::size_t i = 0; i < digest.size(); ++i)\n+  {\n+    hash += "0x";\n+    const u8 upper = static_cast<u8>((digest[i] >> 4) & 0xf);\n+    const u8 lower = static_cast<u8>(digest[i] & 0xf);\n+    hash.push_back(lookup[upper]);\n+    hash.push_back(lookup[lower]);\n+\n+    if (i != digest.size() - 1)\n+    {\n+      hash += ", ";\n+    }\n+  }', 'path': 'Source/Core/Common/Crypto/SHA1.cpp', 'position': 1, 'original_position': 26, 'commit_id': 'fc2289ee872b08a7ec451fbfc02a1ec7a0e7ebcd', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'It\'s a bit kludgy, but we could do `fmt::format("{{0x{:02X}}}", fmt::join(digest, ", 0x"));`', 'created_at': '2026-02-21T21:46:48Z', 'updated_at': '2026-02-21T21:46:48Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836699792', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836699792'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836699792'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': 'fc2289ee872b08a7ec451fbfc02a1ec7a0e7ebcd', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836699792/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2725652892}], 'type': 'gh_pull_request_review'}
2026-02-21T21:45:10.261621	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14298, 'pr_title': 'AchievementManager: APPROVED_LIST_HASH quality of life improvements', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14298#pullrequestreview-3835980174', 'comments': [{'id': 2836598514, 'node_id': 'PRRC_kwDOALCn2M6pEw7y', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836598514', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -5,6 +5,7 @@\n \n #include <algorithm>\n #include <array>\n+#include <fmt/ranges.h>\n #include <memory>\n \n #include <mbedtls/sha1.h>', 'path': 'Source/Core/Common/Crypto/SHA1.cpp', 'position': 7, 'original_position': 7, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '```\n#include <memory>\n\n#include <fmt/ranges.h>\n#include <mbedtls/sha1.h>\n```', 'created_at': '2026-02-21T20:42:29Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836598514', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836598514'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836598514'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836598514/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836599141, 'node_id': 'PRRC_kwDOALCn2M6pExFl', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836599141', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -0,0 +1,12 @@\n+// Copyright 2023 Dolphin Emulator Project', 'path': 'Source/Core/Core/AchievementApprovedHash.h', 'position': 1, 'original_position': 1, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '2026', 'created_at': '2026-02-21T20:43:06Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836599141', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836599141'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836599141'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836599141/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836600507, 'node_id': 'PRRC_kwDOALCn2M6pExa7', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836600507', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -4,6 +4,7 @@\n #ifdef USE_RETRO_ACHIEVEMENTS\n \n #include "Core/AchievementManager.h"\n+#include "Core/AchievementApprovedHash.h"', 'path': 'Source/Core/Core/AchievementManager.cpp', 'position': 4, 'original_position': 4, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'In `foo.cpp` the include of `foo.h` should be by itself at the top of the include list. \n\n`#include "Core/AchievementApprovedHash.h"` goes above `#include "Core/ActionReplay.h"`', 'created_at': '2026-02-21T20:44:31Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836600507', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836600507'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836600507'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836600507/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836609586, 'node_id': 'PRRC_kwDOALCn2M6pEzoy', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836609586', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -18,6 +18,7 @@\n #include "Common/FileUtil.h"\n #include "Common/IniFile.h"\n #include "Common/JsonUtil.h"\n+#include "Core/AchievementApprovedHash.h"\n #include "Core/AchievementManager.h"', 'path': 'Source/UnitTests/Core/PatchAllowlistTest.cpp', 'position': 5, 'original_position': 5, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "I don't think `AchievementManager.h` is used in this file anymore.", 'created_at': '2026-02-21T20:51:48Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836609586', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836609586'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836609586'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836609586/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836613751, 'node_id': 'PRRC_kwDOALCn2M6pE0p3', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836613751', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -128,12 +129,12 @@ TEST(PatchAllowlist, VerifyHashes)\n   auto context = Common::SHA1::CreateContext();\n   context->Update(new_allowlist_str);\n   auto digest = context->Finish();\n-  if (digest != AchievementManager::APPROVED_LIST_HASH)\n+  if (digest != APPROVED_LIST_HASH)\n   {\n     ADD_FAILURE() << "Approved list hash does not match the one in AchievementMananger."', 'path': 'Source/UnitTests/Core/PatchAllowlistTest.cpp', 'position': 15, 'original_position': 15, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '```suggestion\n    ADD_FAILURE() << "Approved list hash does not match the one in AchievementApprovedHash.h."\n```\n', 'created_at': '2026-02-21T20:55:47Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836613751', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836613751'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836613751'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836613751/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836623396, 'node_id': 'PRRC_kwDOALCn2M6pE3Ak', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836623396', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -0,0 +1,12 @@\n+// Copyright 2023 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#pragma once\n+\n+#include "Common/Crypto/SHA1.h"\n+\n+// After building tests, find the new hash with:\n+// ./Binaries/Tests/tests --gtest_filter=PatchAllowlist.VerifyHashes\n+static const inline Common::SHA1::Digest APPROVED_LIST_HASH = {\n+    0xEA, 0x2F, 0x74, 0xA1, 0x6C, 0xF3, 0xB5, 0xD4, 0x8A, 0xAF,\n+    0x03, 0x30, 0x58, 0x2A, 0xE0, 0xF7, 0x0A, 0x88, 0x86, 0xB3};', 'path': 'Source/Core/Core/AchievementApprovedHash.h', 'position': 12, 'original_position': 12, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Since this is no longer in the `AchievementManager` class its name should probably be more specific. Maybe `ACHIEVEMENT_APPROVED_LIST_HASH`?', 'created_at': '2026-02-21T21:05:05Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836623396', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836623396'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836623396'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836623396/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836631021, 'node_id': 'PRRC_kwDOALCn2M6pE43t', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836631021', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -82,9 +82,6 @@ class AchievementManager\n   static constexpr std::string_view GOLD = "#FFD700";\n   static constexpr std::string_view BLUE = "#0B71C1";\n   static constexpr std::string_view APPROVED_LIST_FILENAME = "ApprovedInis.json";', 'path': 'Source/Core/Core/AchievementManager.h', 'position': 3, 'original_position': 3, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '`APPROVED_LIST_FILENAME` can also be moved to `AchievementApprovedHash.h`, and renamed along with `APPROVED_LIST_HASH`.', 'created_at': '2026-02-21T21:09:22Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836631021', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836631021'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836631021'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836631021/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836637182, 'node_id': 'PRRC_kwDOALCn2M6pE6X-', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836637182', 'pull_request_review_id': 3835980174, 'diff_hunk': '@@ -128,12 +129,12 @@ TEST(PatchAllowlist, VerifyHashes)\n   auto context = Common::SHA1::CreateContext();\n   context->Update(new_allowlist_str);\n   auto digest = context->Finish();\n-  if (digest != AchievementManager::APPROVED_LIST_HASH)\n+  if (digest != APPROVED_LIST_HASH)\n   {\n     ADD_FAILURE() << "Approved list hash does not match the one in AchievementMananger."\n                   << std::endl\n                   << "Please update APPROVED_LIST_HASH to the following:" << std::endl\n-                  << Common::SHA1::DigestToString(digest);\n+                  << Common::SHA1::DigestToSource(digest);\n   }\n   // Compare with old allowlist\n   static constexpr std::string_view APPROVED_LIST_FILENAME = "ApprovedInis.json";', 'path': 'Source/UnitTests/Core/PatchAllowlistTest.cpp', 'position': 22, 'original_position': 22, 'commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Preexisting: this constant is redundant with the one formerly in AchievementManager.', 'created_at': '2026-02-21T21:11:25Z', 'updated_at': '2026-02-21T21:45:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836637182', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836637182'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14298#discussion_r2836637182'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14298'}}, 'original_commit_id': '6b85976ae30b7ed9f8938d520d0c2ce1006bfaf6', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836637182/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}], 'type': 'gh_pull_request_review'}
2026-02-21T20:39:25.869264	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14393, 'pr_title': 'Triforce: Integrated Camera Support', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14393#pullrequestreview-3835971006', 'comments': [{'id': 2836595584, 'node_id': 'PRRC_kwDOALCn2M6pEwOA', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836595584', 'pull_request_review_id': 3835971006, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 82, 'original_position': 82, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Windows' `closesocket` stops `accept` from blocking, the Windows equivalent of `SHUT_RDWR` (`SD_BOTH`) doesn't and waits for active connections to stop. While on Linux, `close` doesn't stop `accept` from blocking, and it waits for active connections to stop unless we `shutdown` first.", 'created_at': '2026-02-21T20:39:23Z', 'updated_at': '2026-02-21T20:39:24Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836595584', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836595584'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836595584'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836595584/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 2836461056}], 'type': 'gh_pull_request_review'}
2026-02-21T20:31:13.801611	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Dentomologist', 'action': 'submitted', 'pr_id': 14364, 'pr_title': 'GameINI: Formatting updates to Super Mario Galaxy & New Super Mario B…', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14364#pullrequestreview-3835951898', 'comments': [], 'type': 'gh_pull_request_review'}
2026-02-21T20:11:54.913630	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'pr_id': 14393, 'pr_title': 'Triforce: Integrated Camera Support', 'state': 'changes_requested', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14393#pullrequestreview-3821469077', 'comments': [{'id': 2823752739, 'node_id': 'PRRC_kwDOALCn2M6oTwwj', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2823752739', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -97,6 +102,41 @@ std::string IPAddressToString(IPAddress ip_address)\n   return fmt::format("{}", fmt::join(ip_address, "."));\n }\n \n+std::optional<IPv4Port> StringToIPv4(std::string_view subject)', 'path': 'Source/Core/Common/Network.cpp', 'position': 16, 'original_position': 16, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Should be renamed to avoid confusion. If it was just getting the IP address, we could have used existing network functions.\n```suggestion\nstd::optional<IPv4Port> StringToIPv4Port(std::string_view subject)\n```', 'created_at': '2026-02-18T18:11:54Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2823752739', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2823752739'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2823752739'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '309a8bc5ae7c320a0e04c1d951b6187ef95aeb68', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2823752739/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2823760637, 'node_id': 'PRRC_kwDOALCn2M6oTyr9', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2823760637', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -97,6 +102,41 @@ std::string IPAddressToString(IPAddress ip_address)\n   return fmt::format("{}", fmt::join(ip_address, "."));\n }\n \n+std::optional<IPv4Port> StringToIPv4(std::string_view subject)\n+{\n+  IPv4Port result{};\n+\n+  const size_t colon_pos = subject.find(\':\');', 'path': 'Source/Core/Common/Network.cpp', 'position': 20, 'original_position': 20, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "```suggestion\n  const std::size_t colon_pos = subject.find(':');\n```", 'created_at': '2026-02-18T18:13:58Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2823760637', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2823760637'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2823760637'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '309a8bc5ae7c320a0e04c1d951b6187ef95aeb68', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2823760637/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836433192, 'node_id': 'PRRC_kwDOALCn2M6pEIko', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836433192', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -219,3 +199,213 @@ void IPRedirectionsDialog::OnClear()\n   // Add the final empty row.\n   m_ip_redirections_table->insertRow(0);\n }\n+\n+TriforcePane::TriforcePane()\n+{\n+  CreateWidgets();\n+  ConnectWidgets();\n+\n+  connect(&Settings::Instance(), &Settings::ConfigChanged, this, &TriforcePane::LoadSettings);\n+  LoadSettings();\n+}\n+\n+void TriforcePane::hideEvent(QHideEvent* event)\n+{\n+  QWidget::hideEvent(event);\n+  if (m_camera_feed_preview)\n+    m_camera_feed_preview->setChecked(false);\n+}\n+\n+void TriforcePane::CreateWidgets()\n+{\n+  m_camera_feed_timer = new QTimer(this);\n+  // ~10 FPS, this is intended to be a preview not a live feed\n+  m_camera_feed_timer->setInterval(100);\n+\n+  QVBoxLayout* const main_layout = new QVBoxLayout(this);\n+\n+  auto* const controllers_group = new QGroupBox{tr("Controllers")};\n+  main_layout->addWidget(controllers_group);\n+\n+  auto* const controllers_layout = new QVBoxLayout{controllers_group};\n+\n+  m_configure_controllers_button = new NonDefaultQPushButton{tr("Configure")};\n+  controllers_layout->addWidget(m_configure_controllers_button);\n+\n+  auto* const ip_redirection_group = new QGroupBox{tr("IP Address Redirections")};\n+  main_layout->addWidget(ip_redirection_group);\n+\n+  auto* const ip_redirection_layout = new QVBoxLayout{ip_redirection_group};\n+\n+  m_configure_ip_redirections_button = new NonDefaultQPushButton{tr("Configure")};\n+  ip_redirection_layout->addWidget(m_configure_ip_redirections_button);\n+\n+  QGroupBox* camera_box = new QGroupBox(tr("Camera Settings"), this);\n+  QVBoxLayout* camera_box_layout = new QVBoxLayout();\n+  camera_box->setLayout(camera_box_layout);\n+\n+  m_integrated_camera =\n+      new ConfigBool(tr("Integrated camera server"), Config::MAIN_TRIFORCE_INTEGRATED_CAMERA);\n+  m_integrated_camera_subgroup = new QWidget();\n+  QVBoxLayout* integrated_camera_layout = new QVBoxLayout(m_integrated_camera_subgroup);\n+\n+  QHBoxLayout* camera_selection_layout = new QHBoxLayout();\n+  m_camera_combo_label = new QLabel(tr("Camera:"));\n+  m_camera_combo = new QComboBox();\n+  m_camera_refresh_button = new NonDefaultQPushButton(tr("Refresh"));\n+\n+  camera_selection_layout->addWidget(m_camera_combo_label);\n+  camera_selection_layout->addWidget(m_camera_combo, 1);\n+  camera_selection_layout->addWidget(m_camera_refresh_button);\n+\n+  integrated_camera_layout->addLayout(camera_selection_layout);\n+\n+  m_camera_feed_label = new QLabel(tr("Camera Feed"));\n+  m_camera_feed = new CameraWidget();\n+  m_camera_feed_preview = new QCheckBox(tr("Enable Preview"));\n+\n+  camera_box_layout->addWidget(m_integrated_camera);\n+  camera_box_layout->addWidget(m_integrated_camera_subgroup);\n+\n+  camera_box_layout->addWidget(m_camera_feed_label, 0, Qt::AlignmentFlag::AlignHCenter);\n+  camera_box_layout->addWidget(m_camera_feed);\n+  camera_box_layout->addWidget(m_camera_feed_preview);\n+\n+  main_layout->addWidget(camera_box);\n+\n+  main_layout->addStretch();\n+  setLayout(main_layout);\n+}\n+\n+void TriforcePane::ConnectWidgets()\n+{\n+  connect(m_configure_ip_redirections_button, &QPushButton::clicked, this, [this] {\n+    auto* const ip_redirections = new IPRedirectionsDialog{this};\n+    connect(ip_redirections, &QDialog::accepted, this, &TriforcePane::OnCameraChanged);\n+    ip_redirections->setAttribute(Qt::WA_DeleteOnClose);\n+    ip_redirections->open();\n+  });\n+  connect(m_configure_controllers_button, &QPushButton::clicked, this, [this] {\n+    auto* const window = new MappingWindow(this, MappingWindow::Type::MAPPING_AM_BASEBOARD, 0);\n+    window->setAttribute(Qt::WA_DeleteOnClose, true);\n+    window->setWindowModality(Qt::WindowModality::WindowModal);\n+    window->show();\n+  });\n+  connect(m_integrated_camera, &QCheckBox::stateChanged, this,\n+          &TriforcePane::OnIntegratedCameraChanged);\n+  connect(m_camera_feed_preview, &QCheckBox::stateChanged, this, &TriforcePane::ToggleCameraFeed);\n+  connect(m_camera_combo, &QComboBox::activated, this, &TriforcePane::OnCameraDeviceChanged);\n+  connect(m_camera_refresh_button, &QPushButton::clicked, this, &TriforcePane::RefreshCameras);\n+  connect(m_camera_feed_timer, &QTimer::timeout, this, &TriforcePane::UpdateCameraFrame);\n+}\n+\n+void TriforcePane::LoadSettings()\n+{\n+  RefreshCameras();\n+}\n+\n+void TriforcePane::OnCameraDeviceChanged(int index)\n+{\n+  std::optional<std::string> camera;\n+  Common::ScopeGuard guard([this] { OnCameraChanged(); });\n+  // "Automatic" selection\n+  if (index == 0)\n+  {\n+    Config::DeleteKey(\n+        Config::GetActiveLayerForConfig(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA_DEVICE),\n+        Config::MAIN_TRIFORCE_INTEGRATED_CAMERA_DEVICE);\n+    return;\n+  }\n+  // "Static image" selection\n+  else if (index == m_camera_combo->count() - 1)\n+  {\n+    camera = "static";\n+    QString path = DolphinFileDialog::getOpenFileName(', 'path': 'Source/Core/DolphinQt/Settings/TriforcePane.cpp', 'position': 214, 'original_position': 214, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Can `path` be `const`?', 'created_at': '2026-02-21T18:22:26Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836433192', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836433192'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836433192'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836433192/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836436747, 'node_id': 'PRRC_kwDOALCn2M6pEJcL', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836436747', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,36 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "CameraWidget.h"\n+\n+CameraWidget::CameraWidget(QWidget* parent) : QWidget(parent), m_bg_color(Qt::darkGray)\n+{\n+  setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);\n+}\n+\n+void CameraWidget::setFrame(const QImage& frame)\n+{\n+  m_frame = frame;\n+  update();\n+}\n+\n+void CameraWidget::setBackgroundColor(const QColor& color)\n+{\n+  m_bg_color = color;\n+  update();\n+}\n+\n+void CameraWidget::paintEvent(QPaintEvent* event)\n+{\n+  QPainter painter(this);\n+  painter.fillRect(rect(), m_bg_color);\n+\n+  if (!m_frame.isNull())\n+  {\n+    QImage scaled = m_frame.scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);\n+\n+    QPoint topLeft((width() - scaled.width()) / 2, (height() - scaled.height()) / 2);\n+\n+    painter.drawImage(topLeft, scaled);', 'path': 'Source/Core/DolphinQt/QtUtils/CameraWidget.cpp', 'position': 34, 'original_position': 34, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'The variable name should be snake-cased and made `const` when possible:\n```suggestion\n    const QImage scaled = m_frame.scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);\n\n    const QPoint top_left((width() - scaled.width()) / 2, (height() - scaled.height()) / 2);\n\n    painter.drawImage(top_left, scaled);\n```', 'created_at': '2026-02-21T18:26:47Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836436747', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836436747'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836436747'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836436747/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836438734, 'node_id': 'PRRC_kwDOALCn2M6pEJ7O', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836438734', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,33 @@\n+#pragma once', 'path': 'Source/Core/Core/HW/TriforceCamera.h', 'position': 1, 'original_position': 1, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Missing copyright and licence headers.', 'created_at': '2026-02-21T18:29:07Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836438734', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836438734'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836438734'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836438734/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836438865, 'node_id': 'PRRC_kwDOALCn2M6pEJ9R', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836438865', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,191 @@\n+#include "TriforceCamera.h"', 'path': 'Source/Core/Core/HW/TriforceCamera.cpp', 'position': 1, 'original_position': 1, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Missing copyright and licence headers.', 'created_at': '2026-02-21T18:29:14Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836438865', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836438865'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836438865'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836438865/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836454029, 'node_id': 'PRRC_kwDOALCn2M6pENqN', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836454029', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 66, 'original_position': 66, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Superfluous comma?\n```suggestion\n    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server");\n```', 'created_at': '2026-02-21T18:44:46Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836454029', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836454029'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836454029'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836454029/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836461056, 'node_id': 'PRRC_kwDOALCn2M6pEPYA', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836461056', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 82, 'original_position': 82, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Why not shutting down the socket on Windows?', 'created_at': '2026-02-21T18:48:36Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836461056', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836461056'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836461056'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836461056/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836462453, 'node_id': 'PRRC_kwDOALCn2M6pEPt1', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836462453', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 98, 'original_position': 98, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Ditto regarding shutdown.', 'created_at': '2026-02-21T18:50:10Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836462453', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836462453'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836462453'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836462453/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836468852, 'node_id': 'PRRC_kwDOALCn2M6pERR0', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836468852', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 122, 'original_position': 122, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'These promises values should probably be an enum or similar instead of raw numbers.', 'created_at': '2026-02-21T18:55:50Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836468852', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836468852'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836468852'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836468852/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836470695, 'node_id': 'PRRC_kwDOALCn2M6pERun', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836470695', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 216, 'original_position': 216, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '```suggestion\n    const int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n```', 'created_at': '2026-02-21T18:57:41Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836470695', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836470695'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836470695'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836470695/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836471180, 'node_id': 'PRRC_kwDOALCn2M6pER2M', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836471180', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;\n+\n+    request.append(buffer, bytes);\n+\n+    if (request.find("\\r\\n\\r\\n") != std::string::npos)\n+      break;\n+\n+    if (request.size() > MAX_REQUEST_SIZE)\n+      return;\n+  }\n+\n+  const auto first_line_end = request.find("\\r\\n");\n+  const std::string first_line = request.substr(0, first_line_end);\n+  const size_t method_end = first_line.find(\' \');\n+  const size_t path_end = first_line.find(\' \', method_end + 1);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 232, 'original_position': 232, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "```suggestion\n  const std::size_t method_end = first_line.find(' ');\n  const std::size_t path_end = first_line.find(' ', method_end + 1);\n```", 'created_at': '2026-02-21T18:58:14Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836471180', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836471180'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836471180'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836471180/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836475496, 'node_id': 'PRRC_kwDOALCn2M6pES5o', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836475496', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 218, 'original_position': 218, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'It might be worth logging the error if `bytes < 0`.', 'created_at': '2026-02-21T19:01:24Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836475496', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836475496'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836475496'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836475496/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836481444, 'node_id': 'PRRC_kwDOALCn2M6pEUWk', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836481444', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;\n+\n+    request.append(buffer, bytes);\n+\n+    if (request.find("\\r\\n\\r\\n") != std::string::npos)\n+      break;\n+\n+    if (request.size() > MAX_REQUEST_SIZE)\n+      return;\n+  }\n+\n+  const auto first_line_end = request.find("\\r\\n");\n+  const std::string first_line = request.substr(0, first_line_end);\n+  const size_t method_end = first_line.find(\' \');\n+  const size_t path_end = first_line.find(\' \', method_end + 1);\n+  if (method_end == std::string::npos || path_end == std::string::npos)\n+    return;\n+\n+  const std::string method = first_line.substr(0, method_end);\n+  const std::string path = first_line.substr(method_end + 1, path_end - method_end - 1);\n+  const std::string version = first_line.substr(path_end + 1);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 238, 'original_position': 238, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Can't this be simplified using `Common::SplitStringIntoArray<3>(first_line, ' ')`? This will return 3 `string_view` instead of `string` in case that matters.", 'created_at': '2026-02-21T19:05:41Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836481444', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836481444'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836481444'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836481444/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836484251, 'node_id': 'PRRC_kwDOALCn2M6pEVCb', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484251', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;\n+\n+    request.append(buffer, bytes);\n+\n+    if (request.find("\\r\\n\\r\\n") != std::string::npos)\n+      break;\n+\n+    if (request.size() > MAX_REQUEST_SIZE)\n+      return;\n+  }\n+\n+  const auto first_line_end = request.find("\\r\\n");\n+  const std::string first_line = request.substr(0, first_line_end);\n+  const size_t method_end = first_line.find(\' \');\n+  const size_t path_end = first_line.find(\' \', method_end + 1);\n+  if (method_end == std::string::npos || path_end == std::string::npos)\n+    return;\n+\n+  const std::string method = first_line.substr(0, method_end);\n+  const std::string path = first_line.substr(method_end + 1, path_end - method_end - 1);\n+  const std::string version = first_line.substr(path_end + 1);\n+\n+  const auto local_time = Common::LocalTime(std::time(nullptr));\n+  if (!local_time)\n+    return;\n+\n+  const std::string date = fmt::format("{:%a, %d %b %Y %H:%M:%S GMT}", *local_time);\n+\n+  if (version != "HTTP/1.0" && version != "HTTP/1.1")\n+  {\n+    const std::string response = fmt::format(\n+        "HTTP/1.0 505 HTTP Version Not Supported\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 250, 'original_position': 250, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '`send` return value should be checked. A log message should be produced if an error occurred.', 'created_at': '2026-02-21T19:08:15Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836484251', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484251'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836484251'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484251/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836484449, 'node_id': 'PRRC_kwDOALCn2M6pEVFh', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484449', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;\n+\n+    request.append(buffer, bytes);\n+\n+    if (request.find("\\r\\n\\r\\n") != std::string::npos)\n+      break;\n+\n+    if (request.size() > MAX_REQUEST_SIZE)\n+      return;\n+  }\n+\n+  const auto first_line_end = request.find("\\r\\n");\n+  const std::string first_line = request.substr(0, first_line_end);\n+  const size_t method_end = first_line.find(\' \');\n+  const size_t path_end = first_line.find(\' \', method_end + 1);\n+  if (method_end == std::string::npos || path_end == std::string::npos)\n+    return;\n+\n+  const std::string method = first_line.substr(0, method_end);\n+  const std::string path = first_line.substr(method_end + 1, path_end - method_end - 1);\n+  const std::string version = first_line.substr(path_end + 1);\n+\n+  const auto local_time = Common::LocalTime(std::time(nullptr));\n+  if (!local_time)\n+    return;\n+\n+  const std::string date = fmt::format("{:%a, %d %b %Y %H:%M:%S GMT}", *local_time);\n+\n+  if (version != "HTTP/1.0" && version != "HTTP/1.1")\n+  {\n+    const std::string response = fmt::format(\n+        "HTTP/1.0 505 HTTP Version Not Supported\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+    return;\n+  }\n+\n+  const bool is_get = (method == "GET");\n+  const bool is_head = (method == "HEAD");\n+\n+  if (!is_get && !is_head)\n+  {\n+    const std::string response =\n+        fmt::format("HTTP/1.0 501 Not Implemented\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 261, 'original_position': 261, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Ditto regarding `send` return value and log.', 'created_at': '2026-02-21T19:08:37Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836484449', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484449'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836484449'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484449/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836484553, 'node_id': 'PRRC_kwDOALCn2M6pEVHJ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484553', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;\n+\n+    request.append(buffer, bytes);\n+\n+    if (request.find("\\r\\n\\r\\n") != std::string::npos)\n+      break;\n+\n+    if (request.size() > MAX_REQUEST_SIZE)\n+      return;\n+  }\n+\n+  const auto first_line_end = request.find("\\r\\n");\n+  const std::string first_line = request.substr(0, first_line_end);\n+  const size_t method_end = first_line.find(\' \');\n+  const size_t path_end = first_line.find(\' \', method_end + 1);\n+  if (method_end == std::string::npos || path_end == std::string::npos)\n+    return;\n+\n+  const std::string method = first_line.substr(0, method_end);\n+  const std::string path = first_line.substr(method_end + 1, path_end - method_end - 1);\n+  const std::string version = first_line.substr(path_end + 1);\n+\n+  const auto local_time = Common::LocalTime(std::time(nullptr));\n+  if (!local_time)\n+    return;\n+\n+  const std::string date = fmt::format("{:%a, %d %b %Y %H:%M:%S GMT}", *local_time);\n+\n+  if (version != "HTTP/1.0" && version != "HTTP/1.1")\n+  {\n+    const std::string response = fmt::format(\n+        "HTTP/1.0 505 HTTP Version Not Supported\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+    return;\n+  }\n+\n+  const bool is_get = (method == "GET");\n+  const bool is_head = (method == "HEAD");\n+\n+  if (!is_get && !is_head)\n+  {\n+    const std::string response =\n+        fmt::format("HTTP/1.0 501 Not Implemented\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+    return;\n+  }\n+\n+  std::function<HttpResponse()> callback;\n+  {\n+    std::lock_guard<std::mutex> lock(m_routes_mutex);\n+\n+    auto it = m_routes.find(path);\n+    if (it == m_routes.end())\n+    {\n+      const std::string response =\n+          fmt::format("HTTP/1.0 404 Not Found\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+      send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 274, 'original_position': 274, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Ditto regarding `send` return value and log.', 'created_at': '2026-02-21T19:08:49Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836484553', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484553'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836484553'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836484553/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836486181, 'node_id': 'PRRC_kwDOALCn2M6pEVgl', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836486181', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;\n+\n+    request.append(buffer, bytes);\n+\n+    if (request.find("\\r\\n\\r\\n") != std::string::npos)\n+      break;\n+\n+    if (request.size() > MAX_REQUEST_SIZE)\n+      return;\n+  }\n+\n+  const auto first_line_end = request.find("\\r\\n");\n+  const std::string first_line = request.substr(0, first_line_end);\n+  const size_t method_end = first_line.find(\' \');\n+  const size_t path_end = first_line.find(\' \', method_end + 1);\n+  if (method_end == std::string::npos || path_end == std::string::npos)\n+    return;\n+\n+  const std::string method = first_line.substr(0, method_end);\n+  const std::string path = first_line.substr(method_end + 1, path_end - method_end - 1);\n+  const std::string version = first_line.substr(path_end + 1);\n+\n+  const auto local_time = Common::LocalTime(std::time(nullptr));\n+  if (!local_time)\n+    return;\n+\n+  const std::string date = fmt::format("{:%a, %d %b %Y %H:%M:%S GMT}", *local_time);\n+\n+  if (version != "HTTP/1.0" && version != "HTTP/1.1")\n+  {\n+    const std::string response = fmt::format(\n+        "HTTP/1.0 505 HTTP Version Not Supported\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+    return;\n+  }\n+\n+  const bool is_get = (method == "GET");\n+  const bool is_head = (method == "HEAD");\n+\n+  if (!is_get && !is_head)\n+  {\n+    const std::string response =\n+        fmt::format("HTTP/1.0 501 Not Implemented\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+    return;\n+  }\n+\n+  std::function<HttpResponse()> callback;\n+  {\n+    std::lock_guard<std::mutex> lock(m_routes_mutex);\n+\n+    auto it = m_routes.find(path);\n+    if (it == m_routes.end())\n+    {\n+      const std::string response =\n+          fmt::format("HTTP/1.0 404 Not Found\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+      send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+      return;\n+    }\n+\n+    callback = it->second;\n+  }\n+  const HttpResponse response = callback();\n+\n+  std::string headers;\n+  for (const auto& header : response.first)\n+    headers += fmt::format("{}: {}\\r\\n", header.first, header.second);\n+  const std::vector<u8>& content = response.second;\n+\n+  const std::string http_header =\n+      fmt::format("HTTP/1.0 200 OK\\r\\n"\n+                  "Server: {}\\r\\n"\n+                  "Date: {}\\r\\n"\n+                  "Content-Length: {}\\r\\n"\n+                  "{}\\r\\n",\n+                  Common::GetHttpServerStr(), date, content.size(), headers);\n+\n+  std::vector<u8> send_buffer;\n+  send_buffer.reserve(http_header.size() + content.size());\n+  send_buffer.insert(send_buffer.end(), http_header.begin(), http_header.end());\n+  if (!is_head)\n+    send_buffer.insert(send_buffer.end(), content.begin(), content.end());\n+\n+  for (size_t sent = 0; sent < send_buffer.size();)', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 301, 'original_position': 301, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '```suggestion\n  for (std::size_t sent = 0; sent < send_buffer.size();)\n```', 'created_at': '2026-02-21T19:10:57Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836486181', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836486181'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836486181'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836486181/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836486732, 'node_id': 'PRRC_kwDOALCn2M6pEVpM', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836486732', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);\n+      m_workers.emplace_back([this, client_sock]() { HandleClient(client_sock); });\n+    }\n+  }\n+}\n+\n+void HttpServer::HandleClient(s32 client_sock)\n+{\n+  Common::SetCurrentThreadName("Http Server Worker Thread");\n+  Common::ScopeGuard guard([this, client_sock]() {\n+    std::lock_guard lk(m_workers_mutex);\n+    auto it = std::find(m_worker_socks.begin(), m_worker_socks.end(), client_sock);\n+    if (it != m_worker_socks.end())\n+    {\n+      m_worker_socks.erase(it);\n+      closesocket(client_sock);\n+    }\n+  });\n+\n+  std::string request;\n+  char buffer[1024];\n+\n+  constexpr int MAX_REQUEST_SIZE = 8192;\n+  constexpr int MAX_ITERATIONS = 100;\n+  int iterations = 0;\n+\n+  while (iterations++ < MAX_ITERATIONS)\n+  {\n+    int bytes = recv(client_sock, buffer, sizeof(buffer), 0);\n+    if (bytes <= 0)\n+      return;\n+\n+    request.append(buffer, bytes);\n+\n+    if (request.find("\\r\\n\\r\\n") != std::string::npos)\n+      break;\n+\n+    if (request.size() > MAX_REQUEST_SIZE)\n+      return;\n+  }\n+\n+  const auto first_line_end = request.find("\\r\\n");\n+  const std::string first_line = request.substr(0, first_line_end);\n+  const size_t method_end = first_line.find(\' \');\n+  const size_t path_end = first_line.find(\' \', method_end + 1);\n+  if (method_end == std::string::npos || path_end == std::string::npos)\n+    return;\n+\n+  const std::string method = first_line.substr(0, method_end);\n+  const std::string path = first_line.substr(method_end + 1, path_end - method_end - 1);\n+  const std::string version = first_line.substr(path_end + 1);\n+\n+  const auto local_time = Common::LocalTime(std::time(nullptr));\n+  if (!local_time)\n+    return;\n+\n+  const std::string date = fmt::format("{:%a, %d %b %Y %H:%M:%S GMT}", *local_time);\n+\n+  if (version != "HTTP/1.0" && version != "HTTP/1.1")\n+  {\n+    const std::string response = fmt::format(\n+        "HTTP/1.0 505 HTTP Version Not Supported\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+    return;\n+  }\n+\n+  const bool is_get = (method == "GET");\n+  const bool is_head = (method == "HEAD");\n+\n+  if (!is_get && !is_head)\n+  {\n+    const std::string response =\n+        fmt::format("HTTP/1.0 501 Not Implemented\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+    send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+    return;\n+  }\n+\n+  std::function<HttpResponse()> callback;\n+  {\n+    std::lock_guard<std::mutex> lock(m_routes_mutex);\n+\n+    auto it = m_routes.find(path);\n+    if (it == m_routes.end())\n+    {\n+      const std::string response =\n+          fmt::format("HTTP/1.0 404 Not Found\\r\\nDate: {}\\r\\nContent-Length: 0\\r\\n\\r\\n", date);\n+      send(client_sock, response.c_str(), static_cast<int>(response.size()), 0);\n+      return;\n+    }\n+\n+    callback = it->second;\n+  }\n+  const HttpResponse response = callback();\n+\n+  std::string headers;\n+  for (const auto& header : response.first)\n+    headers += fmt::format("{}: {}\\r\\n", header.first, header.second);\n+  const std::vector<u8>& content = response.second;\n+\n+  const std::string http_header =\n+      fmt::format("HTTP/1.0 200 OK\\r\\n"\n+                  "Server: {}\\r\\n"\n+                  "Date: {}\\r\\n"\n+                  "Content-Length: {}\\r\\n"\n+                  "{}\\r\\n",\n+                  Common::GetHttpServerStr(), date, content.size(), headers);\n+\n+  std::vector<u8> send_buffer;\n+  send_buffer.reserve(http_header.size() + content.size());\n+  send_buffer.insert(send_buffer.end(), http_header.begin(), http_header.end());\n+  if (!is_head)\n+    send_buffer.insert(send_buffer.end(), content.begin(), content.end());\n+\n+  for (size_t sent = 0; sent < send_buffer.size();)\n+  {\n+    int bytes = send(client_sock, reinterpret_cast<const char*>(send_buffer.data() + sent),', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 303, 'original_position': 303, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '`const` and ditto regarding `send` return value and log message.', 'created_at': '2026-02-21T19:11:37Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836486732', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836486732'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836486732'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836486732/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836489158, 'node_id': 'PRRC_kwDOALCn2M6pEWPG', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836489158', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 125, 'original_position': 125, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'After the socket creation, you should probably use `Common::SetPlatformSocketOptions` to avoid SIGPIPE error on some systems.', 'created_at': '2026-02-21T19:14:35Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836489158', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836489158'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836489158'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836489158/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836489838, 'node_id': 'PRRC_kwDOALCn2M6pEWZu', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836489838', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not bind to {} - {}", m_address.ToString(),\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(2);\n+    return;\n+  }\n+\n+  if (m_address.GetPortValue() == 0)\n+  {\n+    sockaddr_in actual_addr{};\n+    socklen_t addr_len = sizeof(actual_addr);\n+    if (getsockname(server_sock, reinterpret_cast<sockaddr*>(&actual_addr), &addr_len) < 0)\n+    {\n+      ERROR_LOG_FMT(COMMON, "HttpServer: getsockname failed - {}", Common::StrNetworkError());\n+      m_server_ready_promise.set_value(3);\n+      return;\n+    }\n+\n+    m_address.port = actual_addr.sin_port;\n+  }\n+\n+  if (listen(server_sock, m_max_clients) < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to listen to server socket - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(4);\n+    return;\n+  }\n+\n+  m_server_ready_promise.set_value(0);\n+\n+  INFO_LOG_FMT(COMMON, "HttpServer: Running on {}", m_address.ToString());\n+\n+  while (!m_stop_flag.load())\n+  {\n+    sockaddr_in client_addr{};\n+    socklen_t client_addr_len = sizeof(client_addr);\n+    const s32 client_sock =\n+        accept(server_sock, reinterpret_cast<sockaddr*>(&client_addr), &client_addr_len);\n+    if (client_sock < 0)\n+    {\n+      if (!m_stop_flag.load())\n+      {\n+        ERROR_LOG_FMT(COMMON, "HttpServer: Failed to accept connection from a client - {}",\n+                      Common::StrNetworkError());\n+      }\n+      continue;\n+    }\n+    {\n+      std::lock_guard lock(m_workers_mutex);\n+      m_worker_socks.push_back(client_sock);', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 188, 'original_position': 188, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Ditto regarding `Common::SetPlatformSocketOptions`.', 'created_at': '2026-02-21T19:15:33Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836489838', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836489838'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836489838'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836489838/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836522128, 'node_id': 'PRRC_kwDOALCn2M6pEeSQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836522128', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,316 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include "Common/HttpServer.h"\n+\n+#ifdef _WIN32\n+#include <winsock2.h>\n+#include <ws2tcpip.h>\n+#else\n+#include <netinet/in.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+#endif\n+\n+#include <fmt/chrono.h>\n+#include <fmt/format.h>\n+#include <map>\n+#include <mutex>\n+#include <string>\n+#include <string_view>\n+#include <thread>\n+#include <vector>\n+\n+#include "Common/Logging/Log.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Common/SocketContext.h"\n+#include "Common/Thread.h"\n+#include "Common/TimeUtil.h"\n+#include "Common/Version.h"\n+\n+#ifndef _WIN32\n+#define closesocket close\n+#endif\n+\n+namespace Common\n+{\n+HttpServer::HttpServer(IPv4Port address, int max_clients)\n+    : m_address(address), m_max_clients(max_clients),\n+      m_server_ready_future(m_server_ready_promise.get_future().share())\n+{\n+}\n+\n+HttpServer::~HttpServer()\n+{\n+  Stop();\n+}\n+\n+void HttpServer::ServePath(const std::string& path, const HttpRequestCallback& callback)\n+{\n+  std::lock_guard lock(m_routes_mutex);\n+  m_routes[path] = callback;\n+}\n+\n+void HttpServer::Start()\n+{\n+  if (m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(false);\n+  m_server_thread = std::thread([this]() { Serve(); });\n+\n+  int success = m_server_ready_future.get();\n+  if (success != 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Failed to start the server", );\n+    Stop();\n+  }\n+}\n+\n+void HttpServer::Stop()\n+{\n+  if (!m_server_thread.joinable())\n+    return;\n+\n+  m_stop_flag.store(true);\n+  const s32 server_sock = m_server_sock.exchange(-1);\n+  if (server_sock >= 0)\n+  {\n+#ifndef _WIN32\n+    shutdown(server_sock, SHUT_RDWR);\n+#endif\n+    closesocket(server_sock);\n+  }\n+  m_server_thread.join();\n+\n+  std::vector<std::thread> worker_threads;\n+  std::vector<s32> worker_socks;\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    worker_threads = std::move(m_workers);\n+    worker_socks = std::move(m_worker_socks);\n+  }\n+  for (auto sock : worker_socks)\n+  {\n+#ifndef _WIN32\n+    shutdown(sock, SHUT_RDWR);\n+#endif\n+    closesocket(sock);\n+  }\n+  for (auto& worker : worker_threads)\n+  {\n+    if (worker.joinable())\n+      worker.join();\n+  }\n+  {\n+    std::lock_guard lock(m_workers_mutex);\n+    m_workers.clear();\n+    m_worker_socks.clear();\n+  }\n+}\n+\n+void HttpServer::Serve()\n+{\n+  Common::SetCurrentThreadName("Http Server Thread");\n+  Common::SocketContext socket_context;\n+  const s32 server_sock = socket(AF_INET, SOCK_STREAM, 0);\n+  if (server_sock < 0)\n+  {\n+    ERROR_LOG_FMT(COMMON, "HttpServer: Could not create a socket for the server - {}",\n+                  Common::StrNetworkError());\n+    m_server_ready_promise.set_value(1);\n+    return;\n+  }\n+  m_server_sock.store(server_sock);\n+  Common::ScopeGuard guard([this] {\n+    const s32 sock = m_server_sock.exchange(-1);\n+    if (sock >= 0)\n+      closesocket(sock);\n+  });\n+\n+  sockaddr_in server_addr{};\n+  server_addr.sin_family = AF_INET;\n+  server_addr.sin_port = m_address.port;\n+  server_addr.sin_addr = std::bit_cast<in_addr>(m_address.ip_address);\n+\n+  if (bind(server_sock, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) < 0)', 'path': 'Source/Core/Common/HttpServer.cpp', 'position': 137, 'original_position': 137, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Feel free to ignore this comment but iirc on Linux, if the server socket is closed forcefully (e.g. crash/forced close), Dolphin might not be able to `bind` to that same port again until the TIME_WAIT expires. This can be circumvented by using setsockopt with `SO_REUSEADDR` and (when available) `SO_REUSEPORT`.\r\n\r\nThis **must not** be done on Windows because in this context `SO_REUSEADDR` [behaves differently](https://stackoverflow.com/a/14388707). It would have been fine in another context such as UDP sockets for broadcast/multicast, though.', 'created_at': '2026-02-21T19:41:20Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836522128', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836522128'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836522128'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836522128/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836525844, 'node_id': 'PRRC_kwDOALCn2M6pEfMU', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836525844', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,191 @@\n+#include "TriforceCamera.h"\n+\n+#include <optional>\n+\n+#include <fmt/format.h>\n+#include <fmt/ranges.h>\n+#include <stb_image.h>\n+#include <stb_image_resize2.h>\n+#include <stb_image_write.h>\n+\n+#include "Common/Assert.h"\n+#include "Common/Config/Config.h"\n+#include "Common/IOFile.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Core/Config/MainSettings.h"\n+#include "Core/HW/DVD/AMMediaboard.h"\n+\n+namespace\n+{\n+std::optional<TriforceCameraInstance> s_instance;\n+}\n+\n+static std::vector<std::string> RedirectionsWithoutIntegratedCamera()\n+{\n+  std::vector<std::string> result;\n+\n+  const auto ip_redirections_str = Config::Get(Config::MAIN_TRIFORCE_IP_REDIRECTIONS);\n+  for (auto&& ip_pair : ip_redirections_str | std::views::split(\',\'))\n+  {\n+    const std::string_view ip_pair_str{ip_pair};\n+    const auto parsed = AMMediaboard::ParseIPRedirection(ip_pair_str);\n+    if (parsed && parsed->description != "Integrated Camera")\n+    {\n+      result.emplace_back(ip_pair_str);\n+    }\n+  }\n+\n+  return result;\n+}\n+\n+static std::optional<std::vector<u8>> MakeJPEGCompliant(std::vector<u8> input)', 'path': 'Source/Core/Core/HW/TriforceCamera.cpp', 'position': 42, 'original_position': 42, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Shouldn't this be a const reference instead?", 'created_at': '2026-02-21T19:44:22Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836525844', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836525844'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836525844'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836525844/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836530201, 'node_id': 'PRRC_kwDOALCn2M6pEgQZ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836530201', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,191 @@\n+#include "TriforceCamera.h"\n+\n+#include <optional>\n+\n+#include <fmt/format.h>\n+#include <fmt/ranges.h>\n+#include <stb_image.h>\n+#include <stb_image_resize2.h>\n+#include <stb_image_write.h>\n+\n+#include "Common/Assert.h"\n+#include "Common/Config/Config.h"\n+#include "Common/IOFile.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Core/Config/MainSettings.h"\n+#include "Core/HW/DVD/AMMediaboard.h"\n+\n+namespace\n+{\n+std::optional<TriforceCameraInstance> s_instance;\n+}\n+\n+static std::vector<std::string> RedirectionsWithoutIntegratedCamera()\n+{\n+  std::vector<std::string> result;\n+\n+  const auto ip_redirections_str = Config::Get(Config::MAIN_TRIFORCE_IP_REDIRECTIONS);\n+  for (auto&& ip_pair : ip_redirections_str | std::views::split(\',\'))\n+  {\n+    const std::string_view ip_pair_str{ip_pair};\n+    const auto parsed = AMMediaboard::ParseIPRedirection(ip_pair_str);\n+    if (parsed && parsed->description != "Integrated Camera")\n+    {\n+      result.emplace_back(ip_pair_str);\n+    }\n+  }\n+\n+  return result;\n+}\n+\n+static std::optional<std::vector<u8>> MakeJPEGCompliant(std::vector<u8> input)\n+{\n+  int width = 0;\n+  int height = 0;\n+  int channels = 0;\n+  u8* image = stbi_load_from_memory(input.data(), static_cast<int>(input.size()), &width, &height,\n+                                    &channels, 3);\n+  if (!image)\n+    return std::nullopt;\n+  Common::ScopeGuard guard([image] { stbi_image_free(image); });\n+\n+  constexpr int target_width = 320;\n+  constexpr int target_height = 240;\n+  std::vector<u8> image_resized;\n+  u8* pixels;\n+  if (width != target_width || height != target_height)\n+  {\n+    image_resized.resize(target_width * target_height * 3);\n+    if (!stbir_resize_uint8_srgb(image, width, height, 0, image_resized.data(), target_width,\n+                                 target_height, 0, STBIR_RGB))\n+    {\n+      return std::nullopt;\n+    }\n+    pixels = image_resized.data();\n+  }\n+  else\n+  {\n+    pixels = image;\n+  }\n+\n+  std::vector<u8> output;\n+  stbi_write_func* write_func = [](void* context, void* data, int size) {\n+    auto* vec = reinterpret_cast<std::vector<u8>*>(context);\n+    vec->insert(vec->end(), reinterpret_cast<u8*>(data), reinterpret_cast<u8*>(data) + size);\n+  };\n+\n+  if (!stbi_write_jpg_to_func(write_func, &output, target_width, target_height, 3, pixels, 100))\n+  {\n+    return std::nullopt;\n+  }\n+\n+  return output;\n+}\n+\n+TriforceCameraInstance::TriforceCameraInstance()\n+{\n+  Recreate();\n+}\n+\n+void TriforceCameraInstance::Recreate()\n+{\n+  m_redirection_address.reset();\n+  m_http_server.reset();\n+\n+  if (!Config::Get(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA))\n+  {\n+    Config::SetBaseOrCurrent(\n+        Config::MAIN_TRIFORCE_IP_REDIRECTIONS,\n+        fmt::format("{}", fmt::join(RedirectionsWithoutIntegratedCamera(), ",")));\n+    // TODO: We assume 192.168.29.104 is always this machine\'s camera. Is this true?\n+    const Common::IPv4Port local_camera_address = {.ip_address = {192, 168, 29, 104}, .port = 0};', 'path': 'Source/Core/Core/HW/TriforceCamera.cpp', 'position': 102, 'original_position': 102, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'It can be IP addresses from 104 to 107 (for Mario Kart) according the IP redirections default value.', 'created_at': '2026-02-21T19:47:04Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836530201', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836530201'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836530201'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836530201/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836534727, 'node_id': 'PRRC_kwDOALCn2M6pEhXH', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836534727', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,191 @@\n+#include "TriforceCamera.h"\n+\n+#include <optional>\n+\n+#include <fmt/format.h>\n+#include <fmt/ranges.h>\n+#include <stb_image.h>\n+#include <stb_image_resize2.h>\n+#include <stb_image_write.h>\n+\n+#include "Common/Assert.h"\n+#include "Common/Config/Config.h"\n+#include "Common/IOFile.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Core/Config/MainSettings.h"\n+#include "Core/HW/DVD/AMMediaboard.h"\n+\n+namespace\n+{\n+std::optional<TriforceCameraInstance> s_instance;\n+}\n+\n+static std::vector<std::string> RedirectionsWithoutIntegratedCamera()\n+{\n+  std::vector<std::string> result;\n+\n+  const auto ip_redirections_str = Config::Get(Config::MAIN_TRIFORCE_IP_REDIRECTIONS);\n+  for (auto&& ip_pair : ip_redirections_str | std::views::split(\',\'))\n+  {\n+    const std::string_view ip_pair_str{ip_pair};\n+    const auto parsed = AMMediaboard::ParseIPRedirection(ip_pair_str);\n+    if (parsed && parsed->description != "Integrated Camera")\n+    {\n+      result.emplace_back(ip_pair_str);\n+    }\n+  }\n+\n+  return result;\n+}\n+\n+static std::optional<std::vector<u8>> MakeJPEGCompliant(std::vector<u8> input)\n+{\n+  int width = 0;\n+  int height = 0;\n+  int channels = 0;\n+  u8* image = stbi_load_from_memory(input.data(), static_cast<int>(input.size()), &width, &height,\n+                                    &channels, 3);\n+  if (!image)\n+    return std::nullopt;\n+  Common::ScopeGuard guard([image] { stbi_image_free(image); });\n+\n+  constexpr int target_width = 320;\n+  constexpr int target_height = 240;\n+  std::vector<u8> image_resized;\n+  u8* pixels;\n+  if (width != target_width || height != target_height)\n+  {\n+    image_resized.resize(target_width * target_height * 3);\n+    if (!stbir_resize_uint8_srgb(image, width, height, 0, image_resized.data(), target_width,\n+                                 target_height, 0, STBIR_RGB))\n+    {\n+      return std::nullopt;\n+    }\n+    pixels = image_resized.data();\n+  }\n+  else\n+  {\n+    pixels = image;\n+  }\n+\n+  std::vector<u8> output;\n+  stbi_write_func* write_func = [](void* context, void* data, int size) {\n+    auto* vec = reinterpret_cast<std::vector<u8>*>(context);\n+    vec->insert(vec->end(), reinterpret_cast<u8*>(data), reinterpret_cast<u8*>(data) + size);\n+  };\n+\n+  if (!stbi_write_jpg_to_func(write_func, &output, target_width, target_height, 3, pixels, 100))\n+  {\n+    return std::nullopt;\n+  }\n+\n+  return output;\n+}\n+\n+TriforceCameraInstance::TriforceCameraInstance()\n+{\n+  Recreate();\n+}\n+\n+void TriforceCameraInstance::Recreate()\n+{\n+  m_redirection_address.reset();\n+  m_http_server.reset();\n+\n+  if (!Config::Get(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA))\n+  {\n+    Config::SetBaseOrCurrent(\n+        Config::MAIN_TRIFORCE_IP_REDIRECTIONS,\n+        fmt::format("{}", fmt::join(RedirectionsWithoutIntegratedCamera(), ",")));\n+    // TODO: We assume 192.168.29.104 is always this machine\'s camera. Is this true?\n+    const Common::IPv4Port local_camera_address = {.ip_address = {192, 168, 29, 104}, .port = 0};\n+    for (auto&& redirection : AMMediaboard::GetIPRedirections())\n+    {\n+      if (redirection.original.IsMatch(local_camera_address))\n+        m_redirection_address = redirection.Apply(local_camera_address);\n+    }\n+    return;\n+  }\n+\n+  const std::optional<Common::IPv4Port> address =\n+      Common::StringToIPv4(Config::Get(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA_SERVER_IP));\n+\n+  if (!address)\n+  {\n+    ERROR_LOG_FMT(CORE, "Failed to determine IP address for Triforce Camera server");\n+    return;\n+  }\n+\n+  m_http_server.emplace(*address);\n+\n+  m_http_server->ServePath("/img.jpg", []() {\n+    std::vector<u8> response;\n+\n+    // TODO: Support camera devices. For now, only static images are supported.\n+    {\n+      File::IOFile file(Config::Get(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA_STATIC_IMAGE), "rb",\n+                        File::SharedAccess::Read);\n+\n+      if (file)\n+      {\n+        std::vector<u8> contents(static_cast<size_t>(file.GetSize()));\n+        if (file.ReadBytes(contents.data(), contents.size()))\n+        {\n+          const auto compliant = MakeJPEGCompliant(std::move(contents));\n+          if (compliant)\n+            response = std::move(*compliant);\n+        }\n+      }\n+    }', 'path': 'Source/Core/Core/HW/TriforceCamera.cpp', 'position': 140, 'original_position': 140, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'The braces can be omitted if `file` is declared in the if statement (i.e. `if (File::IOFile file(...); file)`).', 'created_at': '2026-02-21T19:49:49Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836534727', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836534727'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836534727'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836534727/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}, {'id': 2836535088, 'node_id': 'PRRC_kwDOALCn2M6pEhcw', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836535088', 'pull_request_review_id': 3821469077, 'diff_hunk': '@@ -0,0 +1,191 @@\n+#include "TriforceCamera.h"\n+\n+#include <optional>\n+\n+#include <fmt/format.h>\n+#include <fmt/ranges.h>\n+#include <stb_image.h>\n+#include <stb_image_resize2.h>\n+#include <stb_image_write.h>\n+\n+#include "Common/Assert.h"\n+#include "Common/Config/Config.h"\n+#include "Common/IOFile.h"\n+#include "Common/Network.h"\n+#include "Common/ScopeGuard.h"\n+#include "Core/Config/MainSettings.h"\n+#include "Core/HW/DVD/AMMediaboard.h"\n+\n+namespace\n+{\n+std::optional<TriforceCameraInstance> s_instance;\n+}\n+\n+static std::vector<std::string> RedirectionsWithoutIntegratedCamera()\n+{\n+  std::vector<std::string> result;\n+\n+  const auto ip_redirections_str = Config::Get(Config::MAIN_TRIFORCE_IP_REDIRECTIONS);\n+  for (auto&& ip_pair : ip_redirections_str | std::views::split(\',\'))\n+  {\n+    const std::string_view ip_pair_str{ip_pair};\n+    const auto parsed = AMMediaboard::ParseIPRedirection(ip_pair_str);\n+    if (parsed && parsed->description != "Integrated Camera")\n+    {\n+      result.emplace_back(ip_pair_str);\n+    }\n+  }\n+\n+  return result;\n+}\n+\n+static std::optional<std::vector<u8>> MakeJPEGCompliant(std::vector<u8> input)\n+{\n+  int width = 0;\n+  int height = 0;\n+  int channels = 0;\n+  u8* image = stbi_load_from_memory(input.data(), static_cast<int>(input.size()), &width, &height,\n+                                    &channels, 3);\n+  if (!image)\n+    return std::nullopt;\n+  Common::ScopeGuard guard([image] { stbi_image_free(image); });\n+\n+  constexpr int target_width = 320;\n+  constexpr int target_height = 240;\n+  std::vector<u8> image_resized;\n+  u8* pixels;\n+  if (width != target_width || height != target_height)\n+  {\n+    image_resized.resize(target_width * target_height * 3);\n+    if (!stbir_resize_uint8_srgb(image, width, height, 0, image_resized.data(), target_width,\n+                                 target_height, 0, STBIR_RGB))\n+    {\n+      return std::nullopt;\n+    }\n+    pixels = image_resized.data();\n+  }\n+  else\n+  {\n+    pixels = image;\n+  }\n+\n+  std::vector<u8> output;\n+  stbi_write_func* write_func = [](void* context, void* data, int size) {\n+    auto* vec = reinterpret_cast<std::vector<u8>*>(context);\n+    vec->insert(vec->end(), reinterpret_cast<u8*>(data), reinterpret_cast<u8*>(data) + size);\n+  };\n+\n+  if (!stbi_write_jpg_to_func(write_func, &output, target_width, target_height, 3, pixels, 100))\n+  {\n+    return std::nullopt;\n+  }\n+\n+  return output;\n+}\n+\n+TriforceCameraInstance::TriforceCameraInstance()\n+{\n+  Recreate();\n+}\n+\n+void TriforceCameraInstance::Recreate()\n+{\n+  m_redirection_address.reset();\n+  m_http_server.reset();\n+\n+  if (!Config::Get(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA))\n+  {\n+    Config::SetBaseOrCurrent(\n+        Config::MAIN_TRIFORCE_IP_REDIRECTIONS,\n+        fmt::format("{}", fmt::join(RedirectionsWithoutIntegratedCamera(), ",")));\n+    // TODO: We assume 192.168.29.104 is always this machine\'s camera. Is this true?\n+    const Common::IPv4Port local_camera_address = {.ip_address = {192, 168, 29, 104}, .port = 0};\n+    for (auto&& redirection : AMMediaboard::GetIPRedirections())\n+    {\n+      if (redirection.original.IsMatch(local_camera_address))\n+        m_redirection_address = redirection.Apply(local_camera_address);\n+    }\n+    return;\n+  }\n+\n+  const std::optional<Common::IPv4Port> address =\n+      Common::StringToIPv4(Config::Get(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA_SERVER_IP));\n+\n+  if (!address)\n+  {\n+    ERROR_LOG_FMT(CORE, "Failed to determine IP address for Triforce Camera server");\n+    return;\n+  }\n+\n+  m_http_server.emplace(*address);\n+\n+  m_http_server->ServePath("/img.jpg", []() {\n+    std::vector<u8> response;\n+\n+    // TODO: Support camera devices. For now, only static images are supported.\n+    {\n+      File::IOFile file(Config::Get(Config::MAIN_TRIFORCE_INTEGRATED_CAMERA_STATIC_IMAGE), "rb",\n+                        File::SharedAccess::Read);\n+\n+      if (file)\n+      {\n+        std::vector<u8> contents(static_cast<size_t>(file.GetSize()));', 'path': 'Source/Core/Core/HW/TriforceCamera.cpp', 'position': 132, 'original_position': 132, 'commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '```suggestion\n        std::vector<u8> contents(static_cast<std::size_t>(file.GetSize()));\n```', 'created_at': '2026-02-21T19:50:00Z', 'updated_at': '2026-02-21T20:11:51Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836535088', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836535088'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#discussion_r2836535088'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'original_commit_id': '67932e9aa4d6a8f01623700666b1799e8c31d913', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2836535088/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}}], 'type': 'gh_pull_request_review'}

Recent 'gh_push' events

2026-02-24T20:08:30.034050	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'after_sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'commits': [{'author': {'name': 'Joshua Vandaële', 'email': 'joshua@vandaele.software', 'date': '2026-02-22T08:37:00+01:00', 'username': 'JoshuaVandaele'}, 'distinct': False, 'added': [], 'modified': ['Externals/SDL/SDL'], 'removed': [], 'message': "Externals: Update SDL to release-3.4.2\n\nNotable changes:\n- CMake\n  - Fixed a bug where SDL couldn't use a vendored libusb or libhidapi (see 29b3fcfb1bc834d0187a8114debdcbbf8381cd61)\n- Fixed long startup times on Windows when some non-compliant input devices are present\n- Controller support\n  - Added support for the Razer Raiju V5 Pro\n  - Improved Switch 2 controller support\n  - Improved NVIDIA SHIELD controller support\n  - Fixed various controllers showing up twice on macOS\n  - Fixed handling GameCube adapters in PC mode on Linux and macOS", 'url': 'https://github.com/dolphin-emu/dolphin/commit/7cc3874a7c0b7c93818260c89fe1c73a143407a1', 'hash': '7cc3874a7c0b7c93818260c89fe1c73a143407a1'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T21:08:27+01:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Externals/SDL/SDL'], 'removed': [], 'message': 'Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'url': 'https://github.com/dolphin-emu/dolphin/commit/d58e7ca9325217574d84d961b824e0acbf2f67e9', 'hash': 'd58e7ca9325217574d84d961b824e0acbf2f67e9'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-24T19:54:54.185977	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'after_sha': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'commits': [{'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T20:53:01+01:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Languages/po/ar.po', 'Languages/po/ca.po', 'Languages/po/cs.po', 'Languages/po/da.po', 'Languages/po/de.po', 'Languages/po/dolphin-emu.pot', 'Languages/po/el.po', 'Languages/po/en.po', 'Languages/po/es.po', 'Languages/po/fa.po', 'Languages/po/fi.po', 'Languages/po/fr.po', 'Languages/po/hr.po', 'Languages/po/hu.po', 'Languages/po/it.po', 'Languages/po/ja.po', 'Languages/po/ko.po', 'Languages/po/ms.po', 'Languages/po/nb.po', 'Languages/po/nl.po', 'Languages/po/pl.po', 'Languages/po/pt.po', 'Languages/po/pt_BR.po', 'Languages/po/ro.po', 'Languages/po/ru.po', 'Languages/po/sr.po', 'Languages/po/sv.po', 'Languages/po/tr.po', 'Languages/po/zh_CN.po', 'Languages/po/zh_TW.po'], 'removed': [], 'message': 'Translation resources sync with Transifex', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b6513dcb05845c67db742be3caeeba8af8795e59', 'hash': 'b6513dcb05845c67db742be3caeeba8af8795e59'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-24T02:28:40.781206	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'Dentomologist', 'before_sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'after_sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'commits': [{'author': {'name': 'Windsurf7', 'email': 'mountainlake951@gmail.com', 'date': '2026-02-13T03:55:55+03:00', 'username': 'Windsurf7'}, 'distinct': False, 'added': [], 'modified': ['Data/Sys/GameSettings/GSO.ini'], 'removed': [], 'message': 'GameINI: Formatting updates to Sonic Mega Collection\n\nThis PR provides formatting updates to Sonic Mega Collection.\n\nAll regions:\n* Formatting fixes.\n* Updated to follow my code naming convention for Sega games.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/fe617172f325fc8f4497b853599cc13260641d18', 'hash': 'fe617172f325fc8f4497b853599cc13260641d18'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-23T18:28:38-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Data/Sys/GameSettings/GSO.ini'], 'removed': [], 'message': 'Merge pull request #14352 from Windsurf7/sonicmega-gameini\n\nGameINI: Formatting updates to Sonic Mega Collection', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e9d7ee8b57c422f99684a61ec705942015393639', 'hash': 'e9d7ee8b57c422f99684a61ec705942015393639'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-23T18:12:01.631991	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'after_sha': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'commits': [{'author': {'name': 'FrankyBuster', 'email': 'blackyoshi485@gmail.com', 'date': '2026-02-15T17:30:51-03:00', 'username': 'FrankyBuster'}, 'distinct': False, 'added': [], 'modified': ['Data/Sys/GameSettings/GM5.ini'], 'removed': [], 'message': 'GameINI: Metal Arms Aspect ratio correction\n\nSet suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.\n\nApply suggestion from @jordan-woyak\n\nCo-authored-by: Jordan Woyak <jordan.woyak@gmail.com>', 'url': 'https://github.com/dolphin-emu/dolphin/commit/aff3e3190cb6438455fd897ae2b142b395d7792b', 'hash': 'aff3e3190cb6438455fd897ae2b142b395d7792b'}, {'author': {'name': 'FrankyBuster', 'email': 'blackyoshi485@gmail.com', 'date': '2026-02-15T17:38:33-03:00', 'username': 'FrankyBuster'}, 'distinct': False, 'added': [], 'modified': ['Data/Sys/GameSettings/GKM.ini'], 'removed': [], 'message': 'GameINI: PoP Two Thrones Aspect ratio correction\n\nSet suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e3c2ed625085767a4fa7a363240b66307767a2a7', 'hash': 'e3c2ed625085767a4fa7a363240b66307767a2a7'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-23T19:11:58+01:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Data/Sys/GameSettings/GKM.ini', 'Data/Sys/GameSettings/GM5.ini'], 'removed': [], 'message': 'Merge pull request #14389 from FrankyBuster/master\n\nMetal Arms and PoP Two Thrones aspect ratio setting fix', 'url': 'https://github.com/dolphin-emu/dolphin/commit/000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'hash': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-23T15:56:08.517943	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'after_sha': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'commits': [{'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-08T11:21:29+01:00', 'username': 'JosJuice'}, 'distinct': False, 'added': [], 'modified': ['Data/Sys/GameSettings/DLS.ini', 'Data/Sys/GameSettings/GLR.ini', 'Data/Sys/GameSettings/GSW.ini'], 'removed': [], 'message': "GameSettings: Update Rogue Squadron II and III\n\nI've gone through all relevant settings for Rogue Squadron II and III\nand overhauled their game INI files. Each setting is explained with a\ncomment.\n\nSome settings I chose not to include:\n\n* EFB to RAM only seems to affect certain fadeouts in Rogue Squadron II.\n  Without it, the affected fadeouts are replaced by a pure black screen.\n  I don't think this is important enough to warrant the performance hit.\n* As I was unable to find anything Rogue Squadron III needs EFB to RAM\n  for, I also didn't find anything it needs DeferEFBCopies disabled for.\n* I didn't find anything EFBEmulateFormatChanges was needed for in\n  either game.\n* Enabling EFB access makes the ship engine glow visible in Rogue\n  Squadron III, but this effect is minor enough that you probably won't\n  notice it's missing unless you know it's supposed to be there. Since\n  this is Dolphin's heaviest game, let's give users the choice.\n* I was considering forcing XFB to RAM for Rogue Squadron III to make\n  fadeouts render properly instead of going from magenta to black, since\n  enabling XFB to RAM doesn't really hurt performance when you're\n  already enabling EFB to RAM. But then I was unable to find a reason\n  why we should enable EFB to RAM for this game.\n\nTested in RS2 and RS3. The RS3 demo disc settings are copied from the\nRS3 settings and haven't been tested by me.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/2891bc949575036d23b997643c73d833f3212a45', 'hash': '2891bc949575036d23b997643c73d833f3212a45'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-23T16:56:06+01:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Data/Sys/GameSettings/DLS.ini', 'Data/Sys/GameSettings/GLR.ini', 'Data/Sys/GameSettings/GSW.ini'], 'removed': [], 'message': 'Merge pull request #14331 from JosJuice/game-inis-rs\n\nGameSettings: Update Rogue Squadron II and III', 'url': 'https://github.com/dolphin-emu/dolphin/commit/ffa03fec786cc08baa99ad9c34b042056d75c779', 'hash': 'ffa03fec786cc08baa99ad9c34b042056d75c779'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T20:34:25.069442	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'Dentomologist', 'before_sha': 'f6bfceed60347b6dd73d16adac9dd13a6a5a5349', 'after_sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'commits': [{'author': {'name': 'Windsurf7', 'email': 'mountainlake951@gmail.com', 'date': '2026-02-13T05:03:24+03:00', 'username': 'Windsurf7'}, 'distinct': False, 'added': [], 'modified': ['Data/Sys/GameSettings/SOU.ini'], 'removed': [], 'message': 'GameINI: Formatting updates to The Legend of Zelda Skyward Sword\n\nThis PR provides formatting updates to The Legend of Zelda: Skyward Sword.\n\nAll regions:\n* Formatting fixes.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b1aab4ff01785385a1ef6c14894e0a17f16bf3a8', 'hash': 'b1aab4ff01785385a1ef6c14894e0a17f16bf3a8'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-21T12:34:23-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Data/Sys/GameSettings/SOU.ini'], 'removed': [], 'message': 'Merge pull request #14376 from Windsurf7/lozss-gameini\n\nGameINI: Formatting updates to The Legend of Zelda Skyward Sword', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b55aaa8ca78619785ca334c62d5e9d3743c29171', 'hash': 'b55aaa8ca78619785ca334c62d5e9d3743c29171'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T20:32:57.353346	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'Dentomologist', 'before_sha': '0d359e23da4e44b82083b5d5c71c5b74c0e0b521', 'after_sha': 'f6bfceed60347b6dd73d16adac9dd13a6a5a5349', 'commits': [{'author': {'name': 'Windsurf7', 'email': 'mountainlake951@gmail.com', 'date': '2026-02-13T04:34:42+03:00', 'username': 'Windsurf7'}, 'distinct': False, 'added': [], 'modified': ['Data/Sys/GameSettings/RMG.ini', 'Data/Sys/GameSettings/SMNE01.ini', 'Data/Sys/GameSettings/SMNP01.ini'], 'removed': [], 'message': 'GameINI: Formatting updates to Super Mario Galaxy & New Super Mario Bros Wii\n\nThis PR provides formatting updates to Super Mario Galaxy & New Super Mario Bros Wii.\n\nAll regions:\n* Formatting fixes.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f372a32e16fcf247aca028e3432755b59c9c2453', 'hash': 'f372a32e16fcf247aca028e3432755b59c9c2453'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-21T12:32:55-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Data/Sys/GameSettings/RMG.ini', 'Data/Sys/GameSettings/SMNE01.ini', 'Data/Sys/GameSettings/SMNP01.ini'], 'removed': [], 'message': 'Merge pull request #14364 from Windsurf7/mariogalaxy-gameini\n\nGameINI: Formatting updates to Super Mario Galaxy & New Super Mario B…', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f6bfceed60347b6dd73d16adac9dd13a6a5a5349', 'hash': 'f6bfceed60347b6dd73d16adac9dd13a6a5a5349'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T17:27:52.250077	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'AdmiralCurtiss', 'before_sha': 'fee2b0ee03bc50afa02bda99dd43e418ca59ea70', 'after_sha': '0d359e23da4e44b82083b5d5c71c5b74c0e0b521', 'commits': [{'author': {'name': 'Craig Carnell', 'email': '1188869+cscd98@users.noreply.github.com', 'date': '2025-12-08T19:20:11Z', 'username': 'cscd98'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Common/GL/GLInterface/WGL.cpp'], 'removed': [], 'message': 'mingw: use reinterpret_cast for function→void* conversion to satisfy C++ standard', 'url': 'https://github.com/dolphin-emu/dolphin/commit/ccc1c4a6015f965923bea78a818c6e70bbaced1e', 'hash': 'ccc1c4a6015f965923bea78a818c6e70bbaced1e'}, {'author': {'name': 'Admiral H. Curtiss', 'email': 'pikachu025@gmail.com', 'date': '2026-02-21T18:27:50+01:00', 'username': 'AdmiralCurtiss'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Common/GL/GLInterface/WGL.cpp'], 'removed': [], 'message': 'Merge pull request #14212 from cscd98/cast-func\n\nmingw: use reinterpret_cast for function→void* conversion to satisfy C++ standard', 'url': 'https://github.com/dolphin-emu/dolphin/commit/0d359e23da4e44b82083b5d5c71c5b74c0e0b521', 'hash': '0d359e23da4e44b82083b5d5c71c5b74c0e0b521'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T17:27:24.309358	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'AdmiralCurtiss', 'before_sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'after_sha': 'fee2b0ee03bc50afa02bda99dd43e418ca59ea70', 'commits': [{'author': {'name': 'Craig Carnell', 'email': '1188869+cscd98@users.noreply.github.com', 'date': '2025-12-08T19:22:05Z', 'username': 'cscd98'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Common/MemArenaWin.cpp'], 'removed': [], 'message': 'mingw: replace static_cast with reinterpret_cast as not permitted between void* and function params', 'url': 'https://github.com/dolphin-emu/dolphin/commit/bd728d1c20ef7050470c3e4905c0dbe46946ed98', 'hash': 'bd728d1c20ef7050470c3e4905c0dbe46946ed98'}, {'author': {'name': 'Admiral H. Curtiss', 'email': 'pikachu025@gmail.com', 'date': '2026-02-21T18:27:22+01:00', 'username': 'AdmiralCurtiss'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Common/MemArenaWin.cpp'], 'removed': [], 'message': 'Merge pull request #14209 from cscd98/static-cast-fix\n\nmingw: replace static_cast with reinterpret_cast as not permitted between void* and function params', 'url': 'https://github.com/dolphin-emu/dolphin/commit/fee2b0ee03bc50afa02bda99dd43e418ca59ea70', 'hash': 'fee2b0ee03bc50afa02bda99dd43e418ca59ea70'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T03:31:14.857083	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'Dentomologist', 'before_sha': 'f67cd30d0191efe1aec585ed5b1019a3ebe3df0c', 'after_sha': '0000000000000000000000000000000000000000', 'commits': [], 'base_ref_name': None, 'ref_name': 'pull/13199', 'ref_type': 'heads', 'created': False, 'deleted': True, 'forced': False, 'type': 'gh_push'}
2026-02-21T03:30:22.493286	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'Dentomologist', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': 'f67cd30d0191efe1aec585ed5b1019a3ebe3df0c', 'commits': [{'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2024-11-26T11:49:53-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/DolphinQt/Main.cpp'], 'removed': [], 'message': 'Dummy Commit\n\nThis commit will prevent Github from automerging this PR if the other\nchanges in this testing branch are merged in a different PR.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/ab1fa85ecf87f6d126e517c42bdd827b82eafc2c', 'hash': 'ab1fa85ecf87f6d126e517c42bdd827b82eafc2c'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-01-04T16:00:19-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/DiscIO/VolumeFileBlobReader.cpp', 'Source/Core/DiscIO/VolumeFileBlobReader.h'], 'removed': [], 'message': "VolumeFileBlobReader: Explicitly define destructor in source file\n\nAvoid a compile error triggered when switching to c++23 that causes a\ncompile error in unique_ptr's destructor when called with an incomplete\ntype.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/43f2d7d2533d779f84e3ced4e1d5f22b1318baa1', 'hash': '43f2d7d2533d779f84e3ced4e1d5f22b1318baa1'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-01-04T15:47:20-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/VideoBackends/Metal/MTLObjectCache.mm'], 'removed': [], 'message': "Metal: Move ObjectCache constructor and destructor\n\nMove the constructor and destructor after the definition of the class\n`Internal`.\n\nThis fixes an error generated by Clang from the destructor of\n`std::unique_ptr<Internal>` when setting the standard version to c++23:\n\n`invalid application of 'sizeof' to an incomplete type 'Metal::ObjectCache::Internal'`.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/35c2237645ded2ce5f76481dbb20336318569571', 'hash': '35c2237645ded2ce5f76481dbb20336318569571'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-01-03T13:03:27-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Source/CMakeLists.txt'], 'removed': [], 'message': 'Test cpp23 support on builders', 'url': 'https://github.com/dolphin-emu/dolphin/commit/13507e885a6b77d0b3dbcb0df5547b33cdfc183f', 'hash': '13507e885a6b77d0b3dbcb0df5547b33cdfc183f'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-20T19:27:45-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/PowerPC/JitCommon/JitCache.cpp'], 'removed': [], 'message': 'Git push test', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f67cd30d0191efe1aec585ed5b1019a3ebe3df0c', 'hash': 'f67cd30d0191efe1aec585ed5b1019a3ebe3df0c'}], 'base_ref_name': None, 'ref_name': 'pull/13199', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T02:10:12.394249	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': 'e3c2ed625085767a4fa7a363240b66307767a2a7', 'after_sha': '0000000000000000000000000000000000000000', 'commits': [], 'base_ref_name': None, 'ref_name': 'pull/14389/head', 'ref_type': 'heads', 'created': False, 'deleted': True, 'forced': False, 'type': 'gh_push'}
2026-02-21T02:03:48.321569	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': 'e3c2ed625085767a4fa7a363240b66307767a2a7', 'commits': [{'author': {'name': 'FrankyBuster', 'email': 'blackyoshi485@gmail.com', 'date': '2026-02-15T17:30:51-03:00', 'username': 'FrankyBuster'}, 'distinct': True, 'added': [], 'modified': ['Data/Sys/GameSettings/GM5.ini'], 'removed': [], 'message': 'GameINI: Metal Arms Aspect ratio correction\n\nSet suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.\n\nApply suggestion from @jordan-woyak\n\nCo-authored-by: Jordan Woyak <jordan.woyak@gmail.com>', 'url': 'https://github.com/dolphin-emu/dolphin/commit/aff3e3190cb6438455fd897ae2b142b395d7792b', 'hash': 'aff3e3190cb6438455fd897ae2b142b395d7792b'}, {'author': {'name': 'FrankyBuster', 'email': 'blackyoshi485@gmail.com', 'date': '2026-02-15T17:38:33-03:00', 'username': 'FrankyBuster'}, 'distinct': True, 'added': [], 'modified': ['Data/Sys/GameSettings/GKM.ini'], 'removed': [], 'message': 'GameINI: PoP Two Thrones Aspect ratio correction\n\nSet suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e3c2ed625085767a4fa7a363240b66307767a2a7', 'hash': 'e3c2ed625085767a4fa7a363240b66307767a2a7'}], 'base_ref_name': None, 'ref_name': 'pull/14389/head', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T01:31:43.054265	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': '2b590b12e6bac73ae469c59fd815135285532fc6', 'after_sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'commits': [{'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-14T20:32:07-08:00', 'username': 'Dentomologist'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/DolphinQt/CheatsManager.cpp'], 'removed': [], 'message': "CheatsManager: Update code tabs on creation\n\nCall `OnStateChanged` when creating CheatsManager to update the AR and\nGecko code tabs with codes for the currently running game (if any).\n\nPreviously, creating CheatsManager while a game was running wouldn't\nshow any codes until the next time the core state changed (excluding\nStarting or Stopping which had no effect).\n\nFixes https://bugs.dolphin-emu.org/issues/13977.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/0fbe38118e0e133ed2d50128bef47bdcbde2db77', 'hash': '0fbe38118e0e133ed2d50128bef47bdcbde2db77'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-02-20T19:31:40-06:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/DolphinQt/CheatsManager.cpp'], 'removed': [], 'message': 'Merge pull request #14387 from Dentomologist/cheatsmanager_update_tabs_on_creation\n\nCheatsManager: Update code tabs on creation', 'url': 'https://github.com/dolphin-emu/dolphin/commit/2eeff845bd01aa3f1bdca5682940a80356591236', 'hash': '2eeff845bd01aa3f1bdca5682940a80356591236'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T01:28:09.098492	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': 'ddedae327fe14a07072001ad909ffad01efa2e9b', 'after_sha': '2b590b12e6bac73ae469c59fd815135285532fc6', 'commits': [{'author': {'name': 'Sepalani', 'email': 'sepalani@hotmail.fr', 'date': '2026-02-20T02:43:17+04:00', 'username': 'sepalani'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/HW/DVD/AMMediaboard.cpp'], 'removed': [], 'message': 'AMMediaboard: Replace bind PanicAlert with OSD message', 'url': 'https://github.com/dolphin-emu/dolphin/commit/989586433ab02f751044d98f5e3d2795dbb0201a', 'hash': '989586433ab02f751044d98f5e3d2795dbb0201a'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-02-20T19:28:07-06:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/HW/DVD/AMMediaboard.cpp'], 'removed': [], 'message': 'Merge pull request #14402 from sepalani/tri-osd-bind\n\nAMMediaboard: Replace bind PanicAlert with OSD message', 'url': 'https://github.com/dolphin-emu/dolphin/commit/2b590b12e6bac73ae469c59fd815135285532fc6', 'hash': '2b590b12e6bac73ae469c59fd815135285532fc6'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T01:26:01.273029	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': 'b5a1a06f6c00959b9920a41d0543310b433e1e8e', 'after_sha': 'ddedae327fe14a07072001ad909ffad01efa2e9b', 'commits': [{'author': {'name': 'Sepalani', 'email': 'sepalani@hotmail.fr', 'date': '2026-02-18T21:49:41+04:00', 'username': 'sepalani'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/HW/DVD/AMMediaboard.cpp'], 'removed': [], 'message': 'AMMediaboard: Add more connect log messages', 'url': 'https://github.com/dolphin-emu/dolphin/commit/81b414c9c916d5d64a6a905a45a92cb4f64cc8a4', 'hash': '81b414c9c916d5d64a6a905a45a92cb4f64cc8a4'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-02-20T19:25:59-06:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/HW/DVD/AMMediaboard.cpp'], 'removed': [], 'message': 'Merge pull request #14395 from sepalani/tri-connect\n\nAMMediaboard: Add more connect log messages', 'url': 'https://github.com/dolphin-emu/dolphin/commit/ddedae327fe14a07072001ad909ffad01efa2e9b', 'hash': 'ddedae327fe14a07072001ad909ffad01efa2e9b'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-21T01:24:26.671195	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': 'd939b306c44a1a5fcd5bac67c2979310ece52244', 'after_sha': 'b5a1a06f6c00959b9920a41d0543310b433e1e8e', 'commits': [{'author': {'name': 'Sepalani', 'email': 'sepalani@hotmail.fr', 'date': '2026-02-18T19:00:06+04:00', 'username': 'sepalani'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/HW/DVD/AMMediaboard.cpp'], 'removed': [], 'message': 'AMMediaboard: Add more log messages', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b92cef50015fc8e982ccbc78d395137de967a0f9', 'hash': 'b92cef50015fc8e982ccbc78d395137de967a0f9'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-02-20T19:24:24-06:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/HW/DVD/AMMediaboard.cpp'], 'removed': [], 'message': 'Merge pull request #14394 from sepalani/tri-log\n\nAMMediaboard: Add more log messages', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b5a1a06f6c00959b9920a41d0543310b433e1e8e', 'hash': 'b5a1a06f6c00959b9920a41d0543310b433e1e8e'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-20T23:26:09.569150	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': '981b7df4203d2907278506f4115a3604d7422fbb', 'after_sha': 'd939b306c44a1a5fcd5bac67c2979310ece52244', 'commits': [{'author': {'name': 'cristian64', 'email': 'cristian64@gmail.com', 'date': '2026-02-20T21:55:21Z', 'username': 'cristian64'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/DolphinQt/Config/LogWidget.cpp'], 'removed': [], 'message': 'DolphinQt: Restore log font current index accurately.\n\nThe logic in the code was deliberately avoiding index `2` (**Selected\nFont**; the debug font) by using `std::min(index, 1)`. Presumably, the\nreason was that there was no debugger in Qt version of Dolphin at the\ntime.\n\nTest plan:\n\n- Select a debug font via the **Options > Font...** action.\n- Show the **Log** tab via the **View > Log** action.\n- In the **Log** tab, choose the **Selected Font** item in the combobox.\n- Restart Dolphin.\n\n**Without** the patch, the **Monospaced Font** item is wrongly selected\nin the combobox.\n\n**With** the patch, the **Selected Font** item is now properly restored\nfrom the saved settings, and the selected debug font is correctly used\nin the log messages.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/643fcaec036a5ca9a05511bc0ab9e2cf2a98b606', 'hash': '643fcaec036a5ca9a05511bc0ab9e2cf2a98b606'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-02-20T17:26:07-06:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/DolphinQt/Config/LogWidget.cpp'], 'removed': [], 'message': 'Merge pull request #14405 from cristian64/restore_log_font_current_index\n\nDolphinQt: Restore log font current index accurately.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/d939b306c44a1a5fcd5bac67c2979310ece52244', 'hash': 'd939b306c44a1a5fcd5bac67c2979310ece52244'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-20T07:44:54.705576	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JMC47', 'before_sha': '3d16e0c5bec03a3015be4f78cded51e511dad6d9', 'after_sha': '981b7df4203d2907278506f4115a3604d7422fbb', 'commits': [{'author': {'name': 'Andrew Strauss', 'email': 'astrauss11@gmail.com', 'date': '2026-02-09T21:47:30-05:00', 'username': 'TixoRebel'}, 'distinct': False, 'added': ['Source/Core/DolphinQt/Config/SDLHints/SDLHintsWindow.cpp', 'Source/Core/DolphinQt/Config/SDLHints/SDLHintsWindow.h'], 'modified': ['Source/Core/Core/Config/MainSettings.cpp', 'Source/Core/Core/Config/MainSettings.h', 'Source/Core/DolphinQt/CMakeLists.txt', 'Source/Core/DolphinQt/Config/CommonControllersWidget.cpp', 'Source/Core/DolphinQt/Config/CommonControllersWidget.h', 'Source/Core/DolphinQt/DolphinQt.vcxproj', 'Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp'], 'removed': [], 'message': 'Add new window to configure SDL hints and store them in the main ini file\n\nSigned-off-by: Andrew Strauss <astrauss11@gmail.com>', 'url': 'https://github.com/dolphin-emu/dolphin/commit/61c36b0cc85c4e4ff85e9cb099c7fe16eb6db6ca', 'hash': '61c36b0cc85c4e4ff85e9cb099c7fe16eb6db6ca'}, {'author': {'name': 'JMC47', 'email': 'JMC4789@gmail.com', 'date': '2026-02-20T02:44:52-05:00', 'username': 'JMC47'}, 'distinct': True, 'added': ['Source/Core/DolphinQt/Config/SDLHints/SDLHintsWindow.cpp', 'Source/Core/DolphinQt/Config/SDLHints/SDLHintsWindow.h'], 'modified': ['Source/Core/Core/Config/MainSettings.cpp', 'Source/Core/Core/Config/MainSettings.h', 'Source/Core/DolphinQt/CMakeLists.txt', 'Source/Core/DolphinQt/Config/CommonControllersWidget.cpp', 'Source/Core/DolphinQt/Config/CommonControllersWidget.h', 'Source/Core/DolphinQt/DolphinQt.vcxproj', 'Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp'], 'removed': [], 'message': 'Merge pull request #14335 from TixoRebel/joycon-config\n\nCore: Add SDL Hints settings', 'url': 'https://github.com/dolphin-emu/dolphin/commit/981b7df4203d2907278506f4115a3604d7422fbb', 'hash': '981b7df4203d2907278506f4115a3604d7422fbb'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-20T05:55:40.302863	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'Dentomologist', 'before_sha': '02db73c8dcb67f78fb93087a1fc24b65591f25f0', 'after_sha': '3d16e0c5bec03a3015be4f78cded51e511dad6d9', 'commits': [{'author': {'name': 'TryTwo', 'email': 'taolas@gmail.com', 'date': '2026-02-11T16:17:06-07:00', 'username': 'TryTwo'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/PowerPC/BreakPoints.cpp', 'Source/Core/Core/PowerPC/BreakPoints.h', 'Source/Core/Core/PowerPC/PowerPC.cpp', 'Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp', 'Source/Core/DolphinQt/Debugger/BreakpointWidget.h', 'Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp'], 'removed': [], 'message': 'Debugger/ BreakpointsWidget: Add option to disable/enable all breaking without affecting individual breakpoint enabled states.\n\nAllows you to quickly stop breaking, play the game, then re-enable breaking. useful if you have many active breakpoints, but need to run the game.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f9c7731f4d8bdfbe45ddf66185bfa45d7cabd859', 'hash': 'f9c7731f4d8bdfbe45ddf66185bfa45d7cabd859'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-19T21:55:38-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/PowerPC/BreakPoints.cpp', 'Source/Core/Core/PowerPC/BreakPoints.h', 'Source/Core/Core/PowerPC/PowerPC.cpp', 'Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp', 'Source/Core/DolphinQt/Debugger/BreakpointWidget.h', 'Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp'], 'removed': [], 'message': 'Merge pull request #14343 from TryTwo/toggle_breaking\n\nBreakpointsWidget: Add option to toggle all breaking', 'url': 'https://github.com/dolphin-emu/dolphin/commit/3d16e0c5bec03a3015be4f78cded51e511dad6d9', 'hash': '3d16e0c5bec03a3015be4f78cded51e511dad6d9'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-19T22:36:56.557535	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'Dentomologist', 'before_sha': '9323074ada4b1d372809dc71ed092efe8d0e4c8e', 'after_sha': '02db73c8dcb67f78fb93087a1fc24b65591f25f0', 'commits': [{'author': {'name': 'TryTwo', 'email': 'taolas@gmail.com', 'date': '2026-02-12T02:01:58-07:00', 'username': 'TryTwo'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/CheatSearch.cpp', 'Source/Core/Core/CheatSearch.h', 'Source/Core/DolphinQt/CheatSearchWidget.cpp', 'Source/Core/DolphinQt/CheatSearchWidget.h'], 'removed': [], 'message': "Cheat Search: Add ability to delete items and fix duplicate commands when multiple row items are selected.\n\nChanges it to select rows then extracts one item from each row to operate on. The behavior and data across each item in a row was already identical, so using rows doesn't change anything.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/954219f781a05b9ad9175ebcf578d40625af41bc', 'hash': '954219f781a05b9ad9175ebcf578d40625af41bc'}, {'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-19T14:36:54-08:00', 'username': 'Dentomologist'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/CheatSearch.cpp', 'Source/Core/Core/CheatSearch.h', 'Source/Core/DolphinQt/CheatSearchWidget.cpp', 'Source/Core/DolphinQt/CheatSearchWidget.h'], 'removed': [], 'message': 'Merge pull request #14344 from TryTwo/cheatsearch_work2\n\nCheat Search: Add ability to delete items and fix duplicate commands', 'url': 'https://github.com/dolphin-emu/dolphin/commit/02db73c8dcb67f78fb93087a1fc24b65591f25f0', 'hash': '02db73c8dcb67f78fb93087a1fc24b65591f25f0'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-19T01:09:36.633041	{'source': 'ghhookparser', 'repo': 'dolphin-emu/www', 'pusher': 'OatmealDome', 'before_sha': 'ba0eac4a2564dc6ebace8e25338c18cffe6db309', 'after_sha': 'e26c8677f07c40ff398482770e914a83dda24ea3', 'commits': [{'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-02-18T20:09:32-05:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['dolweb/blog/templatetags/blog_tags.py'], 'removed': [], 'message': 'blog_tags: Correct location of setting BeautifulSoup features', 'url': 'https://github.com/dolphin-emu/www/commit/e26c8677f07c40ff398482770e914a83dda24ea3', 'hash': 'e26c8677f07c40ff398482770e914a83dda24ea3'}], 'base_ref_name': None, 'ref_name': 'stable', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-19T01:08:47.099085	{'source': 'ghhookparser', 'repo': 'dolphin-emu/www', 'pusher': 'OatmealDome', 'before_sha': '481a96ac9f8aaebead40e1112f07c0e9138ebbd7', 'after_sha': 'ba0eac4a2564dc6ebace8e25338c18cffe6db309', 'commits': [{'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-02-18T20:07:04-05:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['dolweb/templates/robots.txt'], 'removed': [], 'message': 'robots.txt: Update to Block AI Crawlers v1.44', 'url': 'https://github.com/dolphin-emu/www/commit/af63bd95c0d43eac807f021feb18b47d2cdaf398', 'hash': 'af63bd95c0d43eac807f021feb18b47d2cdaf398'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-02-18T20:08:42-05:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['dolweb/downloads/templates/downloads-index.html'], 'removed': [], 'message': 'downloads: Use standard terminology for builds in Flatpak section', 'url': 'https://github.com/dolphin-emu/www/commit/ba0eac4a2564dc6ebace8e25338c18cffe6db309', 'hash': 'ba0eac4a2564dc6ebace8e25338c18cffe6db309'}], 'base_ref_name': None, 'ref_name': 'stable', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-19T01:03:01.408881	{'source': 'ghhookparser', 'repo': 'dolphin-emu/www', 'pusher': 'OatmealDome', 'before_sha': 'c8b0f64e3ecb4607b86c1712e6828809f3e5a02b', 'after_sha': '481a96ac9f8aaebead40e1112f07c0e9138ebbd7', 'commits': [{'author': {'name': 'Joshua Vandaële', 'email': 'joshua@vandaele.software', 'date': '2025-09-19T06:31:30+02:00', 'username': 'JoshuaVandaele'}, 'distinct': False, 'added': [], 'modified': ['dolweb/downloads/templates/downloads-index.html'], 'removed': [], 'message': 'Provide Flatpak repository instructions on downloads page', 'url': 'https://github.com/dolphin-emu/www/commit/c9be000ab9fcdd13f1f0c2a1a7e64346be485c11', 'hash': 'c9be000ab9fcdd13f1f0c2a1a7e64346be485c11'}, {'author': {'name': 'OatmealDome', 'email': 'OatmealDome@users.noreply.github.com', 'date': '2026-02-18T20:02:55-05:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['dolweb/downloads/templates/downloads-index.html'], 'removed': [], 'message': 'Merge pull request #174 from JoshuaVandaele/flatpak-info\n\nProvide Flatpak repository instructions on downloads page', 'url': 'https://github.com/dolphin-emu/www/commit/481a96ac9f8aaebead40e1112f07c0e9138ebbd7', 'hash': '481a96ac9f8aaebead40e1112f07c0e9138ebbd7'}], 'base_ref_name': None, 'ref_name': 'stable', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-02-17T01:44:33.687542	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JMC47', 'before_sha': '23f5d096ae750ec1f87a05026f8279f28221692f', 'after_sha': '9323074ada4b1d372809dc71ed092efe8d0e4c8e', 'commits': [{'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-02-16T18:20:49-06:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/HW/MagCard/MagneticCardReader.cpp'], 'removed': [], 'message': 'MagneticCardReader: Automatically insert a blank card when Command_A0_Clean is received.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/9674b1fa8f7c28b572ef6966eac8b98a947f0837', 'hash': '9674b1fa8f7c28b572ef6966eac8b98a947f0837'}, {'author': {'name': 'JMC47', 'email': 'JMC4789@gmail.com', 'date': '2026-02-16T20:44:31-05:00', 'username': 'JMC47'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/HW/MagCard/MagneticCardReader.cpp'], 'removed': [], 'message': 'Merge pull request #14390 from jordan-woyak/triforce-mag-card-cleaning\n\nMagneticCardReader: Automatically insert a blank card when Command_A0_Clean is received.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/9323074ada4b1d372809dc71ed092efe8d0e4c8e', 'hash': '9323074ada4b1d372809dc71ed092efe8d0e4c8e'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}

Recent 'internal_log' events

2026-02-24T20:40:20.540386	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:40:19.304298	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:36:10.902323	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/buildbot.py', 'lineno': 131, 'msg': 'PR %s mergeable: %s (%s)', 'args': "(14416, None, 'unknown')", 'type': 'internal_log'}
2026-02-24T20:35:19.204310	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:35:17.985625	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:34:21.284846	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'AdmiralCurtiss,linkmauve,delroth,jordan-woyak,Tilka,JosJuice,spycrab,OatmealDome,leoetlino,CrossVR,iwubcode,degasus,phire,lioncash,Pokechu22,Dentomologist,skidau,Helios747,hrydgard,Parlane')", 'type': 'internal_log'}
2026-02-24T20:34:21.073486	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-02-24T20:30:17.885811	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:30:16.738166	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:25:16.637993	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:25:15.589164	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:24:20.973322	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'AdmiralCurtiss,linkmauve,delroth,jordan-woyak,Tilka,JosJuice,spycrab,OatmealDome,leoetlino,CrossVR,iwubcode,degasus,phire,lioncash,Pokechu22,Dentomologist,skidau,Helios747,hrydgard,Parlane')", 'type': 'internal_log'}
2026-02-24T20:24:20.753185	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-02-24T20:20:15.489815	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:20:14.312613	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:15:14.212551	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:15:13.058217	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:14:20.653184	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'AdmiralCurtiss,linkmauve,delroth,jordan-woyak,Tilka,JosJuice,spycrab,OatmealDome,leoetlino,CrossVR,iwubcode,degasus,phire,lioncash,Pokechu22,Dentomologist,skidau,Helios747,hrydgard,Parlane')", 'type': 'internal_log'}
2026-02-24T20:14:19.998146	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-02-24T20:10:12.962404	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}
2026-02-24T20:10:11.887534	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 21, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-02-24T20:08:31.718282	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/git.py', 'lineno': 152, 'msg': '[%s] commit %s: (%s) %s from %s', 'args': "('dolphin-emu/dolphin', 'd58e7ca9', 'master', '2512-433', 'JosJuice')", 'type': 'internal_log'}
2026-02-24T20:08:31.139426	{'source': 'logging', 'level': 'ERROR', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/webhooks.py', 'lineno': 159, 'msg': "Unhandled event type 'check_suite' in GH parser", 'args': '()', 'type': 'internal_log'}
2026-02-24T20:08:30.887543	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/git.py', 'lineno': 127, 'msg': '[%s] push received with %d commits', 'args': "('dolphin-emu/dolphin', 1)", 'type': 'internal_log'}
2026-02-24T20:05:11.787147	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/pszlv4r8dapp8a8nw5qjpiz4q8py1bfg-central-env/lib/python3.10/site-packages/central/github/authz.py', 'lineno': 30, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'marcan,CelestialAmber,aroulin,nullgemm,NanoByte011,mitaclaw,booto,mandar1jn,merryhime,FioraAeterna,Tilka,Sam-Belliveau,endrift,magcius,LPFaint99,moncefmechri,Stevoisiak,rlnilsen,archshift,hdcmeta,mrgreywater,iwubcode,unknownbrackets,RachelBryk,Zopolis4,lioncash,adamdmoss,SirMangler,MayImilae,comex,hthh,yourWaifu,Geotale,phire,RisingFog,AdmiralCurtiss,deReeperJosh,aldelaro5,linkmauve,glennricster,Starsam80,gwicks,smurf3tte,Ebola16,zackhow,Orphis,meffij,Gamer64ytb,JosJuice,Hydr8gon,vladfi1,DacoTaco,cristian64,PatrickFerry,mathieui,ligfx,TryTwo,JMC47,SuperSamus,EmptyChaos,rukai,zopieux,OrN,CasualPokePlayer,sepalani,ColinDTaylor,Pokechu22,neobrain,Techjar,Alcaro,kamiyo,jjdelvalle,delroth,CookiePLMonster,jloehr,Linktothepast,riking,BhaaLseN,OatmealDome,corwin-mcknight,bentley,orbea,TellowKrinkle,Filoppi,jezze,Sintendo,mimimi085181,spxtr,tygyh,galop1n,K0bin,Phatcat,Buddybenj,krnlyng,hrydgard,Parlane,nickbeth,mahdihijazi,ShimmerGlass,jordan-woyak,noahpistilli,JordanTheToaster,Simonx22,Ziek,randomstuff,mmastrac,spycrab,JoshuaVandaele,Tinob,leoetlino,CrossVR,LillyJadeKatrin,degasus,shonumi,dreamsyntax,CrystalGamma,skylersaleh,kayru,cscd98,mbc07,magumagu,Dentomologist,hackbar,skidau,LAGonauta,malleoz,Helios747,crediar,Lobsterzelda')", 'type': 'internal_log'}

Recent 'issue' events

2026-02-24T19:53:43.371780	{'source': 'redmine', 'new': False, 'update': 14, 'issue': 12458, 'title': 'Crash when starting multiple new games in Summoner', 'author': 'Billiard26', 'type': 'issue'}
2026-02-24T19:18:05.558366	{'source': 'redmine', 'new': False, 'update': 13, 'issue': 12458, 'title': 'Crash when starting multiple new games in Summoner', 'author': 'ZephyrSurfer', 'type': 'issue'}
2026-02-24T13:41:04.925551	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 13987, 'title': 'Disconnecting a Wii Remote, then loading a SaveState, then opening HOME Menu freezes/crashes', 'author': 'blueYOSHI', 'type': 'issue'}
2026-02-24T03:28:39.574533	{'source': 'redmine', 'new': False, 'update': 6, 'issue': 13984, 'title': '[FEATURE REQUEST]: RetroAchievements sounds & customization  ', 'author': 'PastaObesity', 'type': 'issue'}
2026-02-24T00:00:16.329985	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 13986, 'title': 'Loading a savestate before emulation is fully initialized breaks things', 'author': 'Billiard26', 'type': 'issue'}
2026-02-24T00:00:07.286408	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 13986, 'title': 'Loading a savestate before emulation is fully initialized breaks things', 'author': 'Billiard26', 'type': 'issue'}
2026-02-23T23:59:18.276447	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 13986, 'title': 'Loading a savestate before emulation is fully initialized breaks things', 'author': 'InfoManiac742', 'type': 'issue'}
2026-02-23T23:56:41.768279	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 13974, 'title': 'HLE_OSPanic emulates returning in a noreturn function', 'author': 'vabold', 'type': 'issue'}
2026-02-23T23:19:03.386240	{'source': 'redmine', 'new': False, 'update': 4, 'issue': 13982, 'title': 'Missing GameID for Japanese games using Debian based Linux', 'author': 'CurtisTN73', 'type': 'issue'}
2026-02-23T22:25:52.468808	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 13985, 'title': '[FEATURE REQUEST]: RetroAchievements customization  ', 'author': 'PastaObesity', 'type': 'issue'}
2026-02-23T22:19:29.642118	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 13978, 'title': '[FEATURE REQUEST]: An option for OSD/RA overlay/messages to stay within the game window itself using (borderless) fullscreen', 'author': 'PastaObesity', 'type': 'issue'}
2026-02-23T22:13:23.041848	{'source': 'redmine', 'new': False, 'update': 5, 'issue': 13984, 'title': '[FEATURE REQUEST]: RetroAchievements sounds & customization  ', 'author': 'JosJuice', 'type': 'issue'}
2026-02-23T22:12:37.174403	{'source': 'redmine', 'new': False, 'update': 4, 'issue': 13984, 'title': '[FEATURE REQUEST]: RetroAchievements sounds & customization  ', 'author': 'PastaObesity', 'type': 'issue'}
2026-02-23T22:10:38.303782	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 13984, 'title': '[FEATURE REQUEST]: RetroAchievements sounds & customization  ', 'author': 'JosJuice', 'type': 'issue'}
2026-02-23T22:06:46.281206	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 13984, 'title': '[FEATURE REQUEST]: RetroAchievements sounds & customization  ', 'author': 'PastaObesity', 'type': 'issue'}
2026-02-23T22:04:52.534590	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 13984, 'title': '[FEATURE REQUEST]: RetroAchievements sounds & customization  ', 'author': 'PastaObesity', 'type': 'issue'}
2026-02-23T20:38:18.986803	{'source': 'redmine', 'new': False, 'update': 5, 'issue': 13983, 'title': 'Dolphin freezes when exiting, loses settings', 'author': 'sTo0z', 'type': 'issue'}
2026-02-23T20:25:25.222257	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 13982, 'title': 'Missing GameID for Japanese games using Debian based Linux', 'author': 'JosJuice', 'type': 'issue'}
2026-02-23T19:18:28.837666	{'source': 'redmine', 'new': False, 'update': 4, 'issue': 13983, 'title': 'Dolphin freezes when exiting, loses settings', 'author': 'sTo0z', 'type': 'issue'}
2026-02-23T19:14:32.772887	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 13983, 'title': 'Dolphin freezes when exiting, loses settings', 'author': 'JoshuaVandaele', 'type': 'issue'}
2026-02-23T19:11:32.113936	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 13982, 'title': 'Missing GameID for Japanese games using Debian based Linux', 'author': 'JosJuice', 'type': 'issue'}
2026-02-23T19:10:47.785769	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 13983, 'title': 'Dolphin freezes when exiting, loses settings', 'author': 'JMC4789', 'type': 'issue'}
2026-02-23T19:08:05.923910	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 13983, 'title': 'Dolphin freezes when exiting, loses settings', 'author': 'sTo0z', 'type': 'issue'}
2026-02-23T14:05:41.044535	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 13982, 'title': 'Missing GameID for Japanese games using Debian based Linux', 'author': 'CurtisTN73', 'type': 'issue'}
2026-02-21T18:25:25.159676	{'source': 'redmine', 'new': False, 'update': 7, 'issue': 13981, 'title': 'Wii U Pro Controller misbehaving when "Real Wii Remote" setting is configured', 'author': 'CheezyFriez12', 'type': 'issue'}

Recent 'new_dev_version' events

2026-02-24T20:08:31.751989	{'source': 'repomanager', 'hash': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'branch': 'master', 'shortrev': '2512-433', 'author': 'JosJuice', 'message': 'Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'url': 'https://github.com/dolphin-emu/dolphin/commit/d58e7ca9325217574d84d961b824e0acbf2f67e9', 'type': 'new_dev_version'}
2026-02-24T19:54:55.923371	{'source': 'repomanager', 'hash': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'branch': 'master', 'shortrev': '2512-431', 'author': 'JosJuice', 'message': 'Translation resources sync with Transifex', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b6513dcb05845c67db742be3caeeba8af8795e59', 'type': 'new_dev_version'}
2026-02-24T02:28:42.326154	{'source': 'repomanager', 'hash': 'e9d7ee8b57c422f99684a61ec705942015393639', 'branch': 'master', 'shortrev': '2512-430', 'author': 'Dentomologist', 'message': 'Merge pull request #14352 from Windsurf7/sonicmega-gameini\n\nGameINI: Formatting updates to Sonic Mega Collection', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e9d7ee8b57c422f99684a61ec705942015393639', 'type': 'new_dev_version'}
2026-02-23T18:12:03.840302	{'source': 'repomanager', 'hash': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'branch': 'master', 'shortrev': '2512-426', 'author': 'JosJuice', 'message': 'Merge pull request #14389 from FrankyBuster/master\n\nMetal Arms and PoP Two Thrones aspect ratio setting fix', 'url': 'https://github.com/dolphin-emu/dolphin/commit/000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'type': 'new_dev_version'}
2026-02-23T15:56:10.115216	{'source': 'repomanager', 'hash': 'ffa03fec786cc08baa99ad9c34b042056d75c779', 'branch': 'master', 'shortrev': '2512-423', 'author': 'JosJuice', 'message': 'Merge pull request #14331 from JosJuice/game-inis-rs\n\nGameSettings: Update Rogue Squadron II and III', 'url': 'https://github.com/dolphin-emu/dolphin/commit/ffa03fec786cc08baa99ad9c34b042056d75c779', 'type': 'new_dev_version'}
2026-02-21T20:34:27.165497	{'source': 'repomanager', 'hash': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'branch': 'master', 'shortrev': '2512-421', 'author': 'Dentomologist', 'message': 'Merge pull request #14376 from Windsurf7/lozss-gameini\n\nGameINI: Formatting updates to The Legend of Zelda Skyward Sword', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b55aaa8ca78619785ca334c62d5e9d3743c29171', 'type': 'new_dev_version'}
2026-02-21T20:32:58.837686	{'source': 'repomanager', 'hash': 'f6bfceed60347b6dd73d16adac9dd13a6a5a5349', 'branch': 'master', 'shortrev': '2512-419', 'author': 'Dentomologist', 'message': 'Merge pull request #14364 from Windsurf7/mariogalaxy-gameini\n\nGameINI: Formatting updates to Super Mario Galaxy & New Super Mario B…', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f6bfceed60347b6dd73d16adac9dd13a6a5a5349', 'type': 'new_dev_version'}
2026-02-21T17:27:53.895478	{'source': 'repomanager', 'hash': '0d359e23da4e44b82083b5d5c71c5b74c0e0b521', 'branch': 'master', 'shortrev': '2512-417', 'author': 'Admiral H. Curtiss', 'message': 'Merge pull request #14212 from cscd98/cast-func\n\nmingw: use reinterpret_cast for function→void* conversion to satisfy C++ standard', 'url': 'https://github.com/dolphin-emu/dolphin/commit/0d359e23da4e44b82083b5d5c71c5b74c0e0b521', 'type': 'new_dev_version'}
2026-02-21T17:27:26.190415	{'source': 'repomanager', 'hash': 'fee2b0ee03bc50afa02bda99dd43e418ca59ea70', 'branch': 'master', 'shortrev': '2512-415', 'author': 'Admiral H. Curtiss', 'message': 'Merge pull request #14209 from cscd98/static-cast-fix\n\nmingw: replace static_cast with reinterpret_cast as not permitted between void* and function params', 'url': 'https://github.com/dolphin-emu/dolphin/commit/fee2b0ee03bc50afa02bda99dd43e418ca59ea70', 'type': 'new_dev_version'}
2026-02-21T03:30:26.767196	{'source': 'repomanager', 'hash': 'f67cd30d0191efe1aec585ed5b1019a3ebe3df0c', 'branch': 'pull/13199', 'shortrev': '2512-114', 'author': 'Dentomologist', 'message': 'Git push test', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f67cd30d0191efe1aec585ed5b1019a3ebe3df0c', 'type': 'new_dev_version'}
2026-02-21T03:30:26.146644	{'source': 'repomanager', 'hash': '13507e885a6b77d0b3dbcb0df5547b33cdfc183f', 'branch': 'pull/13199', 'shortrev': '2512-113', 'author': 'Dentomologist', 'message': 'Test cpp23 support on builders', 'url': 'https://github.com/dolphin-emu/dolphin/commit/13507e885a6b77d0b3dbcb0df5547b33cdfc183f', 'type': 'new_dev_version'}
2026-02-21T03:30:25.482825	{'source': 'repomanager', 'hash': '35c2237645ded2ce5f76481dbb20336318569571', 'branch': 'pull/13199', 'shortrev': '2512-112', 'author': 'Dentomologist', 'message': "Metal: Move ObjectCache constructor and destructor\n\nMove the constructor and destructor after the definition of the class\n`Internal`.\n\nThis fixes an error generated by Clang from the destructor of\n`std::unique_ptr<Internal>` when setting the standard version to c++23:\n\n`invalid application of 'sizeof' to an incomplete type 'Metal::ObjectCache::Internal'`.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/35c2237645ded2ce5f76481dbb20336318569571', 'type': 'new_dev_version'}
2026-02-21T03:30:24.802742	{'source': 'repomanager', 'hash': '43f2d7d2533d779f84e3ced4e1d5f22b1318baa1', 'branch': 'pull/13199', 'shortrev': '2512-111', 'author': 'Dentomologist', 'message': "VolumeFileBlobReader: Explicitly define destructor in source file\n\nAvoid a compile error triggered when switching to c++23 that causes a\ncompile error in unique_ptr's destructor when called with an incomplete\ntype.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/43f2d7d2533d779f84e3ced4e1d5f22b1318baa1', 'type': 'new_dev_version'}
2026-02-21T03:30:24.219473	{'source': 'repomanager', 'hash': 'ab1fa85ecf87f6d126e517c42bdd827b82eafc2c', 'branch': 'pull/13199', 'shortrev': '2512-110', 'author': 'Dentomologist', 'message': 'Dummy Commit\n\nThis commit will prevent Github from automerging this PR if the other\nchanges in this testing branch are merged in a different PR.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/ab1fa85ecf87f6d126e517c42bdd827b82eafc2c', 'type': 'new_dev_version'}
2026-02-21T02:03:50.265981	{'source': 'repomanager', 'hash': 'e3c2ed625085767a4fa7a363240b66307767a2a7', 'branch': 'pull/14389/head', 'shortrev': '2512-415', 'author': 'FrankyBuster', 'message': 'GameINI: PoP Two Thrones Aspect ratio correction\n\nSet suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e3c2ed625085767a4fa7a363240b66307767a2a7', 'type': 'new_dev_version'}
2026-02-21T02:03:49.789167	{'source': 'repomanager', 'hash': 'aff3e3190cb6438455fd897ae2b142b395d7792b', 'branch': 'pull/14389/head', 'shortrev': '2512-414', 'author': 'FrankyBuster', 'message': 'GameINI: Metal Arms Aspect ratio correction\n\nSet suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.\n\nApply suggestion from @jordan-woyak\n\nCo-authored-by: Jordan Woyak <jordan.woyak@gmail.com>', 'url': 'https://github.com/dolphin-emu/dolphin/commit/aff3e3190cb6438455fd897ae2b142b395d7792b', 'type': 'new_dev_version'}
2026-02-21T01:31:44.699014	{'source': 'repomanager', 'hash': '2eeff845bd01aa3f1bdca5682940a80356591236', 'branch': 'master', 'shortrev': '2512-413', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14387 from Dentomologist/cheatsmanager_update_tabs_on_creation\n\nCheatsManager: Update code tabs on creation', 'url': 'https://github.com/dolphin-emu/dolphin/commit/2eeff845bd01aa3f1bdca5682940a80356591236', 'type': 'new_dev_version'}
2026-02-21T01:28:10.989245	{'source': 'repomanager', 'hash': '2b590b12e6bac73ae469c59fd815135285532fc6', 'branch': 'master', 'shortrev': '2512-411', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14402 from sepalani/tri-osd-bind\n\nAMMediaboard: Replace bind PanicAlert with OSD message', 'url': 'https://github.com/dolphin-emu/dolphin/commit/2b590b12e6bac73ae469c59fd815135285532fc6', 'type': 'new_dev_version'}
2026-02-21T01:26:02.886044	{'source': 'repomanager', 'hash': 'ddedae327fe14a07072001ad909ffad01efa2e9b', 'branch': 'master', 'shortrev': '2512-409', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14395 from sepalani/tri-connect\n\nAMMediaboard: Add more connect log messages', 'url': 'https://github.com/dolphin-emu/dolphin/commit/ddedae327fe14a07072001ad909ffad01efa2e9b', 'type': 'new_dev_version'}
2026-02-21T01:24:28.219348	{'source': 'repomanager', 'hash': 'b5a1a06f6c00959b9920a41d0543310b433e1e8e', 'branch': 'master', 'shortrev': '2512-407', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14394 from sepalani/tri-log\n\nAMMediaboard: Add more log messages', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b5a1a06f6c00959b9920a41d0543310b433e1e8e', 'type': 'new_dev_version'}
2026-02-20T23:26:11.655044	{'source': 'repomanager', 'hash': 'd939b306c44a1a5fcd5bac67c2979310ece52244', 'branch': 'master', 'shortrev': '2512-405', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14405 from cristian64/restore_log_font_current_index\n\nDolphinQt: Restore log font current index accurately.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/d939b306c44a1a5fcd5bac67c2979310ece52244', 'type': 'new_dev_version'}
2026-02-20T05:55:41.849740	{'source': 'repomanager', 'hash': '3d16e0c5bec03a3015be4f78cded51e511dad6d9', 'branch': 'master', 'shortrev': '2512-401', 'author': 'Dentomologist', 'message': 'Merge pull request #14343 from TryTwo/toggle_breaking\n\nBreakpointsWidget: Add option to toggle all breaking', 'url': 'https://github.com/dolphin-emu/dolphin/commit/3d16e0c5bec03a3015be4f78cded51e511dad6d9', 'type': 'new_dev_version'}
2026-02-19T22:36:58.612035	{'source': 'repomanager', 'hash': '02db73c8dcb67f78fb93087a1fc24b65591f25f0', 'branch': 'master', 'shortrev': '2512-399', 'author': 'Dentomologist', 'message': 'Merge pull request #14344 from TryTwo/cheatsearch_work2\n\nCheat Search: Add ability to delete items and fix duplicate commands', 'url': 'https://github.com/dolphin-emu/dolphin/commit/02db73c8dcb67f78fb93087a1fc24b65591f25f0', 'type': 'new_dev_version'}
2026-02-17T01:44:35.266516	{'source': 'repomanager', 'hash': '9323074ada4b1d372809dc71ed092efe8d0e4c8e', 'branch': 'master', 'shortrev': '2512-397', 'author': 'JMC47', 'message': 'Merge pull request #14390 from jordan-woyak/triforce-mag-card-cleaning\n\nMagneticCardReader: Automatically insert a blank card when Command_A0_Clean is received.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/9323074ada4b1d372809dc71ed092efe8d0e4c8e', 'type': 'new_dev_version'}
2026-02-16T19:17:26.967693	{'source': 'repomanager', 'hash': '23f5d096ae750ec1f87a05026f8279f28221692f', 'branch': 'master', 'shortrev': '2512-395', 'author': 'JosJuice', 'message': 'Merge pull request #13844 from crediar/master\n\nCore: Triforce support', 'url': 'https://github.com/dolphin-emu/dolphin/commit/23f5d096ae750ec1f87a05026f8279f28221692f', 'type': 'new_dev_version'}

Recent 'notification' events

2026-02-24T20:36:10.457380	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303J\ufeffosJuice\x03 synchronized pull request #14416: DiscIO: Only allow alphanumeric ASCII in game IDs (\x0306master\x03...\x0306game-id-ascii\x03): \x1f\x0302https://dolp.in/pr14416\x03\x1f', 'type': 'notification'}
2026-02-24T20:33:55.318497	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303s\ufeffepalani\x03 approved pull request #14393 (Triforce: Integrated Camera Support): \x1f\x0302https://dolp.in/pr14393#pullrequestreview-3850374089\x03\x1f', 'type': 'notification'}
2026-02-24T20:08:47.348973	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303J\ufeffosJuice\x03 commented on #14416 7bf1a5: \x1f\x0302https://dolp.in/pr14416#discussion_r2849307322\x03\x1f', 'type': 'notification'}
2026-02-24T20:08:30.034606	{'source': 'notifications', 'msg': 'd58e7c by \x0303J\ufeffosJuice\x03 [\x03090\x03|\x03091\x03|\x03040\x03] \x1f\x0302https://dolp.in/rd58e7ca9325217574d84d961b824e0acbf2f67e9\x03\x1f Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2', 'type': 'notification'}
2026-02-24T20:08:30.034485	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x1f\x03] \x0303J\ufeffosJuice\x03 pushed \x021\x02 new commit to \x0306master\x03', 'type': 'notification'}
2026-02-24T20:08:29.925507	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303J\ufeffosJuice\x03 merged pull request #14411: Externals: Update SDL to release-3.4.2 (\x0306master\x03...\x0306SDL-3.4.2\x03): \x1f\x0302https://dolp.in/pr14411\x03\x1f', 'type': 'notification'}
2026-02-24T19:54:54.186458	{'source': 'notifications', 'msg': 'b6513d by \x0303J\ufeffosJuice\x03 [\x03090\x03|\x030930\x03|\x03040\x03] \x1f\x0302https://dolp.in/rb6513dcb05845c67db742be3caeeba8af8795e59\x03\x1f Translation resources sync with Transifex', 'type': 'notification'}
2026-02-24T19:54:54.186340	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x1f\x03] \x0303J\ufeffosJuice\x03 pushed \x021\x02 new commit to \x0306master\x03', 'type': 'notification'}
2026-02-24T19:53:43.371986	{'source': 'notifications', 'msg': 'Update 14 to issue 12458 ("Crash when starting multiple new games in Summoner") by \x0303B\ufeffilliard26\x03 - \x1f\x0302https://dolp.in/i12458/14\x03\x1f', 'type': 'notification'}
2026-02-24T19:19:04.523774	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303D\ufeffentomologist\x03 approved pull request #14345 (CheatSearch: Add ability to breakpoint the selected lines.): \x1f\x0302https://dolp.in/pr14345#pullrequestreview-3850052319\x03\x1f', 'type': 'notification'}
2026-02-24T19:18:05.558646	{'source': 'notifications', 'msg': 'Update 13 to issue 12458 ("Crash when starting multiple new games in Summoner") by \x0303Z\ufeffephyrSurfer\x03 - \x1f\x0302https://dolp.in/i12458/13\x03\x1f', 'type': 'notification'}
2026-02-24T13:41:04.925750	{'source': 'notifications', 'msg': 'Issue 13987 created: "Disconnecting a Wii Remote, then loading a SaveState, then opening HOME Menu freezes/crashes" by \x0303b\ufefflueYOSHI\x03 - \x1f\x0302https://dolp.in/i13987\x03\x1f', 'type': 'notification'}
2026-02-24T11:52:07.030188	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14401 \x0304failed\x03 on builders [default]: \x1f\x0302<no url>\x03\x1f', 'type': 'notification'}
2026-02-24T11:51:36.057599	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303n\ufeffaari3\x03 synchronized pull request #14401: AMMediaboard: stub Triforce NETWORK TEST command handling (\x0306master\x03...\x0306master\x03): \x1f\x0302https://dolp.in/pr14401\x03\x1f', 'type': 'notification'}
2026-02-24T08:46:51.527662	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303T\ufeffryTwo\x03 opened pull request #14417: Bugfix: Cheat codes:  Make newly added codes start disabled. (\x0306master\x03...\x0306Cheat_Fix\x03): \x1f\x0302https://dolp.in/pr14417\x03\x1f', 'type': 'notification'}
2026-02-24T06:29:44.336480	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14401 \x0304failed\x03 on builders [lint]: \x1f\x0302https://dolphin.ci/#/builders/9/builds/9214\x03\x1f', 'type': 'notification'}
2026-02-24T06:29:11.788477	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303s\ufeffepalani\x03 deleted a comment on #14401 (AMMediaboard: stub Triforce NETWORK TEST command handling): \x1f\x0302https://dolp.in/pr14401#issuecomment-3949516077\x03\x1f', 'type': 'notification'}
2026-02-24T06:29:02.495254	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303s\ufeffepalani\x03 commented on #14401 (AMMediaboard: stub Triforce NETWORK TEST command handling): \x1f\x0302https://dolp.in/pr14401#issuecomment-3949516077\x03\x1f', 'type': 'notification'}
2026-02-24T03:28:39.574818	{'source': 'notifications', 'msg': 'Update 6 to issue 13984 ("[FEATURE REQUEST]: RetroAchievements sounds & customization  ") by \x0303P\ufeffastaObesity\x03 - \x1f\x0302https://dolp.in/i13984/6\x03\x1f', 'type': 'notification'}
2026-02-24T02:28:40.781669	{'source': 'notifications', 'msg': 'e9d7ee by \x0303D\ufeffentomologist\x03 [\x03090\x03|\x03091\x03|\x03040\x03] \x1f\x0302https://dolp.in/re9d7ee8b57c422f99684a61ec705942015393639\x03\x1f Merge pull request #14352 from Windsurf7/sonicmega-gameini', 'type': 'notification'}
2026-02-24T02:28:40.781548	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x1f\x03] \x0303D\ufeffentomologist\x03 pushed \x021\x02 new commit to \x0306master\x03', 'type': 'notification'}
2026-02-24T02:28:40.437572	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303D\ufeffentomologist\x03 merged pull request #14352: GameINI: Formatting updates to Sonic Mega Collection (\x0306master\x03...\x0306sonicmega-gameini\x03): \x1f\x0302https://dolp.in/pr14352\x03\x1f', 'type': 'notification'}
2026-02-24T01:35:20.005632	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14401 \x0304failed\x03 on builders [default]: \x1f\x0302<no url>\x03\x1f', 'type': 'notification'}
2026-02-24T01:34:49.029577	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303n\ufeffaari3\x03 synchronized pull request #14401: AMMediaboard: stub Triforce NETWORK TEST command handling (\x0306master\x03...\x0306master\x03): \x1f\x0302https://dolp.in/pr14401\x03\x1f', 'type': 'notification'}
2026-02-24T01:25:45.377776	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303n\ufeffaari3\x03 commented on #14401 ab0d30: \x1f\x0302https://dolp.in/pr14401#discussion_r2843942613\x03\x1f', 'type': 'notification'}

Recent 'pull_request_fifoci_status' events

2026-02-24T09:25:53.675409	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14417, 'type': 'pull_request_fifoci_status'}
2026-02-24T09:15:41.098608	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14417, 'type': 'pull_request_fifoci_status'}
2026-02-24T09:02:54.661672	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14417, 'type': 'pull_request_fifoci_status'}
2026-02-24T07:19:50.839483	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14401, 'type': 'pull_request_fifoci_status'}
2026-02-24T07:09:25.450901	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14401, 'type': 'pull_request_fifoci_status'}
2026-02-24T06:56:33.967342	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14401, 'type': 'pull_request_fifoci_status'}
2026-02-24T00:41:23.609271	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'c1a26808ce5a09bcc08e029b71d4b1fb47bc4d57', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14317, 'type': 'pull_request_fifoci_status'}
2026-02-24T00:34:56.949654	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14416, 'type': 'pull_request_fifoci_status'}
2026-02-24T00:28:01.880232	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '99d82829c84880402784ae1ace684e0f6e635ef6', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14415, 'type': 'pull_request_fifoci_status'}
2026-02-24T00:21:45.160747	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '76071dd6a7cc30fa4dca5a1ef9073d02b602080c', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14391, 'type': 'pull_request_fifoci_status'}
2026-02-24T00:15:29.457562	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '0a941790a56ebea415846289b6d37a0e6bb102e3', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14380, 'type': 'pull_request_fifoci_status'}
2026-02-24T00:09:05.752023	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7eaa0755865884662432de584bec2119e47de67e', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14373, 'type': 'pull_request_fifoci_status'}
2026-02-24T00:03:03.207537	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'a3a5f569527e45b506d8aa23b3ec4c10f1a3db56', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14363, 'type': 'pull_request_fifoci_status'}
2026-02-23T23:56:47.647489	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '64bd3eb29b7d6c8a6083733348b1109214bbe316', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14359, 'type': 'pull_request_fifoci_status'}
2026-02-23T23:50:27.022019	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '61f1cf8fa2542d2157d30234b98f0b0f41d8d9e2', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14354, 'type': 'pull_request_fifoci_status'}
2026-02-23T23:44:25.187832	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '1034e4f49b1977d9cfd2ef579eb59962a69c4d99', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14348, 'type': 'pull_request_fifoci_status'}
2026-02-23T23:38:03.965474	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'c1a26808ce5a09bcc08e029b71d4b1fb47bc4d57', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14317, 'type': 'pull_request_fifoci_status'}
2026-02-23T23:27:15.070372	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14416, 'type': 'pull_request_fifoci_status'}
2026-02-23T23:15:58.709323	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '99d82829c84880402784ae1ace684e0f6e635ef6', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14415, 'type': 'pull_request_fifoci_status'}
2026-02-23T23:05:30.324658	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '76071dd6a7cc30fa4dca5a1ef9073d02b602080c', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14391, 'type': 'pull_request_fifoci_status'}
2026-02-23T22:54:53.210668	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'c1a26808ce5a09bcc08e029b71d4b1fb47bc4d57', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14317, 'type': 'pull_request_fifoci_status'}
2026-02-23T22:41:41.768790	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '0a941790a56ebea415846289b6d37a0e6bb102e3', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14380, 'type': 'pull_request_fifoci_status'}
2026-02-23T22:25:08.986527	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7eaa0755865884662432de584bec2119e47de67e', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14373, 'type': 'pull_request_fifoci_status'}
2026-02-23T22:07:46.810740	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'a3a5f569527e45b506d8aa23b3ec4c10f1a3db56', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14363, 'type': 'pull_request_fifoci_status'}
2026-02-23T21:57:18.031741	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '64bd3eb29b7d6c8a6083733348b1109214bbe316', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14359, 'type': 'pull_request_fifoci_status'}

Recent 'raw_bb_hook' events

2026-02-24T20:41:33.703409	{'source': 'webserver', 'raw': {'buildid': 163094, 'number': 9232, 'builderid': 7, 'buildrequestid': 163204, 'workerid': 8, 'masterid': 1, 'started_at': 1771965693, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'pr_id': [14416, 'Change'], 'workername': ['osx-m1', 'Worker'], 'codebase': ['', 'Build'], 'branchname': ['pr-14416', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [9232, 'Build'], 'project': ['', 'Build'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'shortrev': ['7b372d', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [7, 'Builder'], 'branch': ['refs/pull/14416/head', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'buildername': ['pr-osx-universal', 'Builder'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build']}, 'buildrequest': {'buildrequestid': 163204, 'buildsetid': 37253, 'builderid': 7, 'priority': 0, 'claimed': True, 'claimed_at': 1771965693, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 7, 'name': 'pr-osx-universal', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/7/builds/9232'}, 'type': 'raw_bb_hook'}
2026-02-24T20:41:33.585837	{'source': 'webserver', 'raw': {'buildid': 163093, 'number': 2214, 'builderid': 17, 'buildrequestid': 163193, 'workerid': 8, 'masterid': 1, 'started_at': 1771965601, 'complete_at': 1771965693, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['master', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'builderid': [17, 'Builder'], 'repository': ['', 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'owners': [['JosJuice'], 'Build'], 'author': ['JosJuice', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [2214, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mtl-osx-m1', 'Worker'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'shortrev': ['2512-433', 'Change'], 'workername': ['osx-m1', 'Worker'], 'codebase': ['', 'Build'], 'warnings-count': [5, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 163193, 'buildsetid': 37252, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965601, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2214'}, 'type': 'raw_bb_hook'}
2026-02-24T20:40:01.286734	{'source': 'webserver', 'raw': {'buildid': 163093, 'number': 2214, 'builderid': 17, 'buildrequestid': 163193, 'workerid': 8, 'masterid': 1, 'started_at': 1771965601, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['master', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'builderid': [17, 'Builder'], 'repository': ['', 'Build'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'owners': [['JosJuice'], 'Build'], 'author': ['JosJuice', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [2214, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'shortrev': ['2512-433', 'Change'], 'workername': ['osx-m1', 'Worker'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163193, 'buildsetid': 37252, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965601, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2214'}, 'type': 'raw_bb_hook'}
2026-02-24T20:40:01.202751	{'source': 'webserver', 'raw': {'buildid': 163092, 'number': 2213, 'builderid': 17, 'buildrequestid': 163182, 'workerid': 8, 'masterid': 1, 'started_at': 1771965509, 'complete_at': 1771965600, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['2512-431', 'Change'], 'description': ['Translation resources sync with Transifex', 'Change'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'project': ['', 'Build'], 'warnings-count': [5, 'WarningCountingShellCommand'], 'author': ['JosJuice', 'Change'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mtl-osx-m1', 'Worker'], 'branchname': ['master', 'Change'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'workername': ['osx-m1', 'Worker'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [17, 'Builder'], 'buildnumber': [2213, 'Build'], 'repository': ['', 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker']}, 'buildrequest': {'buildrequestid': 163182, 'buildsetid': 37251, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965509, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2213'}, 'type': 'raw_bb_hook'}
2026-02-24T20:38:30.119645	{'source': 'webserver', 'raw': {'buildid': 163092, 'number': 2213, 'builderid': 17, 'buildrequestid': 163182, 'workerid': 8, 'masterid': 1, 'started_at': 1771965509, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'shortrev': ['2512-431', 'Change'], 'description': ['Translation resources sync with Transifex', 'Change'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'project': ['', 'Build'], 'author': ['JosJuice', 'Change'], 'branchname': ['master', 'Change'], 'buildername': ['fifoci-mtl-osx-m1', 'Builder'], 'workername': ['osx-m1', 'Worker'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [17, 'Builder'], 'buildnumber': [2213, 'Build'], 'repository': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163182, 'buildsetid': 37251, 'builderid': 17, 'priority': 0, 'claimed': True, 'claimed_at': 1771965509, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 17, 'name': 'fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/17/builds/2213'}, 'type': 'raw_bb_hook'}
2026-02-24T20:38:29.948911	{'source': 'webserver', 'raw': {'buildid': 163091, 'number': 2216, 'builderid': 8, 'buildrequestid': 163192, 'workerid': 8, 'masterid': 1, 'started_at': 1771965406, 'complete_at': 1771965509, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'workername': ['osx-m1', 'Worker'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'project': ['', 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'warnings-count': [5, 'WarningCountingShellCommand'], 'buildername': ['fifoci-mvk-osx-m1', 'Builder'], 'buildnumber': [2216, 'Build'], 'repository': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker'], 'shortrev': ['2512-433', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [8, 'Builder'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mvk-osx-m1', 'Worker'], 'branchname': ['master', 'Change'], 'author': ['JosJuice', 'Change']}, 'buildrequest': {'buildrequestid': 163192, 'buildsetid': 37252, 'builderid': 8, 'priority': 0, 'claimed': True, 'claimed_at': 1771965406, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 8, 'name': 'fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/8/builds/2216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:46.452104	{'source': 'webserver', 'raw': {'buildid': 163091, 'number': 2216, 'builderid': 8, 'buildrequestid': 163192, 'workerid': 8, 'masterid': 1, 'started_at': 1771965406, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'workername': ['osx-m1', 'Worker'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'project': ['', 'Build'], 'buildername': ['fifoci-mvk-osx-m1', 'Builder'], 'buildnumber': [2216, 'Build'], 'repository': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'shortrev': ['2512-433', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [8, 'Builder'], 'branch': ['master', 'Build'], 'codebase': ['', 'Build'], 'branchname': ['master', 'Change'], 'author': ['JosJuice', 'Change']}, 'buildrequest': {'buildrequestid': 163192, 'buildsetid': 37252, 'builderid': 8, 'priority': 0, 'claimed': True, 'claimed_at': 1771965406, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 8, 'name': 'fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/8/builds/2216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:46.247653	{'source': 'webserver', 'raw': {'buildid': 163083, 'number': 2215, 'builderid': 8, 'buildrequestid': 163181, 'workerid': 8, 'masterid': 1, 'started_at': 1771965301, 'complete_at': 1771965406, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['2512-431', 'Change'], 'author': ['JosJuice', 'Change'], 'builderid': [8, 'Builder'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [5, 'WarningCountingShellCommand'], 'description': ['Translation resources sync with Transifex', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [2215, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/fifoci-mvk-osx-m1', 'Worker'], 'branchname': ['master', 'Change'], 'buildername': ['fifoci-mvk-osx-m1', 'Builder'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch']}, 'buildrequest': {'buildrequestid': 163181, 'buildsetid': 37251, 'builderid': 8, 'priority': 0, 'claimed': True, 'claimed_at': 1771965301, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 8, 'name': 'fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/8/builds/2215'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:22.777259	{'source': 'webserver', 'raw': {'buildid': 163090, 'number': 9216, 'builderid': 27, 'buildrequestid': 163210, 'workerid': 10, 'masterid': 1, 'started_at': 1771965382, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'branch': ['refs/pull/14416/head', 'Build'], 'branchname': ['pr-14416', 'Change'], 'shortrev': ['7b372d', 'Change'], 'builderid': [27, 'Builder'], 'repository': ['', 'Build'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'pr_id': [14416, 'Change'], 'buildername': ['pr-ubu-x64', 'Builder'], 'workername': ['ubuntu-lts', 'Worker'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'codebase': ['', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [9216, 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163210, 'buildsetid': 37253, 'builderid': 27, 'priority': 0, 'claimed': True, 'claimed_at': 1771965382, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/27/builds/9216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:22.619510	{'source': 'webserver', 'raw': {'buildid': 163084, 'number': 9216, 'builderid': 9, 'buildrequestid': 163205, 'workerid': 10, 'masterid': 1, 'started_at': 1771965377, 'complete_at': 1771965382, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14416', 'Change'], 'pr_id': [14416, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['lint', 'Builder'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'shortrev': ['7b372d', 'Change'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'builderid': [9, 'Builder'], 'workername': ['ubuntu-lts', 'Worker'], 'buildnumber': [9216, 'Build'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build'], 'got_revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'GitNoBranch'], 'basedir': ['/buildbot', 'Worker'], 'builddir': ['/buildbot/lint', 'Worker']}, 'buildrequest': {'buildrequestid': 163205, 'buildsetid': 37253, 'builderid': 9, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 9, 'name': 'lint', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/9/builds/9216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.974016	{'source': 'webserver', 'raw': {'buildid': 163089, 'number': 9217, 'builderid': 11, 'buildrequestid': 163206, 'workerid': 1, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-freebsd-x64', 'Builder'], 'builderid': [11, 'Builder'], 'workername': ['freebsd', 'Worker'], 'branchname': ['pr-14416', 'Change'], 'shortrev': ['7b372d', 'Change'], 'pr_id': [14416, 'Change'], 'repository': ['', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [9217, 'Build'], 'branch': ['refs/pull/14416/head', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build']}, 'buildrequest': {'buildrequestid': 163206, 'buildsetid': 37253, 'builderid': 11, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 11, 'name': 'pr-freebsd-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/11/builds/9217'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.889986	{'source': 'webserver', 'raw': {'buildid': 163088, 'number': 4363, 'builderid': 43, 'buildrequestid': 163212, 'workerid': 13, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'repository': ['', 'Build'], 'branchname': ['pr-14416', 'Change'], 'builderid': [43, 'Builder'], 'workername': ['altair-flatpak', 'Worker'], 'buildnumber': [4363, 'Build'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'shortrev': ['7b372d', 'Change'], 'pr_id': [14416, 'Change'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'buildername': ['pr-flatpak-x64', 'Builder'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'project': ['', 'Build'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163212, 'buildsetid': 37253, 'builderid': 43, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 43, 'name': 'pr-flatpak-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/43/builds/4363'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.811165	{'source': 'webserver', 'raw': {'buildid': 163086, 'number': 4307, 'builderid': 44, 'buildrequestid': 163213, 'workerid': 14, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14416', 'Change'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'shortrev': ['7b372d', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'codebase': ['', 'Build'], 'pr_id': [14416, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-flatpak-arm64', 'Builder'], 'builderid': [44, 'Builder'], 'workername': ['deneb-flatpak', 'Worker'], 'buildnumber': [4307, 'Build'], 'repository': ['', 'Build'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build']}, 'buildrequest': {'buildrequestid': 163213, 'buildsetid': 37253, 'builderid': 44, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 44, 'name': 'pr-flatpak-arm64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/44/builds/4307'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.806909	{'source': 'webserver', 'raw': {'buildid': 163087, 'number': 9215, 'builderid': 26, 'buildrequestid': 163209, 'workerid': 9, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14416', 'Change'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'pr_id': [14416, 'Change'], 'workername': ['debian', 'Worker'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'builderid': [26, 'Builder'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'shortrev': ['7b372d', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-deb-x64', 'Builder'], 'buildnumber': [9215, 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build']}, 'buildrequest': {'buildrequestid': 163209, 'buildsetid': 37253, 'builderid': 26, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 26, 'name': 'pr-deb-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/26/builds/9215'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.760287	{'source': 'webserver', 'raw': {'buildid': 163085, 'number': 9219, 'builderid': 2, 'buildrequestid': 163203, 'workerid': 4, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14416', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'workername': ['windows', 'Worker'], 'branch': ['refs/pull/14416/head', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'shortrev': ['7b372d', 'Change'], 'pr_id': [14416, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-win-x64', 'Builder'], 'buildnumber': [9219, 'Build'], 'codebase': ['', 'Build'], 'builderid': [2, 'Builder'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build']}, 'buildrequest': {'buildrequestid': 163203, 'buildsetid': 37253, 'builderid': 2, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 2, 'name': 'pr-win-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/2/builds/9219'}, 'type': 'raw_bb_hook'}
2026-02-24T20:36:17.712810	{'source': 'webserver', 'raw': {'buildid': 163084, 'number': 9216, 'builderid': 9, 'buildrequestid': 163205, 'workerid': 10, 'masterid': 1, 'started_at': 1771965377, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14416', 'Change'], 'pr_id': [14416, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['lint', 'Builder'], 'baserev': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Change'], 'headrev': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Change'], 'shortrev': ['7b372d', 'Change'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'builderid': [9, 'Builder'], 'workername': ['ubuntu-lts', 'Worker'], 'buildnumber': [9216, 'Build'], 'branch': ['refs/pull/14416/head', 'Build'], 'revision': ['7b372db5593ddc92dd442e57170f13072b43ade8', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: JosJuice)'], 'Build']}, 'buildrequest': {'buildrequestid': 163205, 'buildsetid': 37253, 'builderid': 9, 'priority': 0, 'claimed': True, 'claimed_at': 1771965377, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771965377, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37253, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1771965377, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11153, 'branch': 'refs/pull/14416/head', 'revision': '7b372db5593ddc92dd442e57170f13072b43ade8', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771965377, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 9, 'name': 'lint', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/9/builds/9216'}, 'type': 'raw_bb_hook'}
2026-02-24T20:35:01.543859	{'source': 'webserver', 'raw': {'buildid': 163083, 'number': 2215, 'builderid': 8, 'buildrequestid': 163181, 'workerid': 8, 'masterid': 1, 'started_at': 1771965301, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'shortrev': ['2512-431', 'Change'], 'author': ['JosJuice', 'Change'], 'builderid': [8, 'Builder'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'description': ['Translation resources sync with Transifex', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [2215, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'branchname': ['master', 'Change'], 'buildername': ['fifoci-mvk-osx-m1', 'Builder'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build']}, 'buildrequest': {'buildrequestid': 163181, 'buildsetid': 37251, 'builderid': 8, 'priority': 0, 'claimed': True, 'claimed_at': 1771965301, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 8, 'name': 'fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/8/builds/2215'}, 'type': 'raw_bb_hook'}
2026-02-24T20:35:01.471703	{'source': 'webserver', 'raw': {'buildid': 163078, 'number': 1201, 'builderid': 38, 'buildrequestid': 163197, 'workerid': 8, 'masterid': 1, 'started_at': 1771964005, 'complete_at': 1771965301, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'scheduler': ['dev', 'Scheduler'], 'branch': ['master', 'Build'], 'owners': [['JosJuice'], 'Build'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'buildnumber': [1201, 'Build'], 'project': ['', 'Build'], 'got_revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'GitNoBranch'], 'shortrev': ['2512-433', 'Change'], 'builderid': [38, 'Builder'], 'repository': ['', 'Build'], 'basedir': ['/Users/administrator/buildbot-worker/osx_m1', 'Worker'], 'author': ['JosJuice', 'Change'], 'workername': ['osx-m1', 'Worker'], 'codebase': ['', 'Build'], 'branchname': ['master', 'Change'], 'buildername': ['dev-osx-universal', 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'builddir': ['/Users/administrator/buildbot-worker/osx_m1/dev-osx-universal', 'Worker']}, 'buildrequest': {'buildrequestid': 163197, 'buildsetid': 37252, 'builderid': 38, 'priority': 0, 'claimed': True, 'claimed_at': 1771964005, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 38, 'name': 'dev-osx-universal', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/38/builds/1201'}, 'type': 'raw_bb_hook'}
2026-02-24T20:33:43.227676	{'source': 'webserver', 'raw': {'buildid': 163082, 'number': 2160, 'builderid': 5, 'buildrequestid': 163180, 'workerid': 5, 'masterid': 1, 'started_at': 1771965223, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['master', 'Change'], 'shortrev': ['2512-431', 'Change'], 'author': ['JosJuice', 'Change'], 'description': ['Translation resources sync with Transifex', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildername': ['fifoci-ogl-lin-mesa', 'Builder'], 'builderid': [5, 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [2160, 'Build'], 'branch': ['master', 'Build'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['JosJuice'], 'Build']}, 'buildrequest': {'buildrequestid': 163180, 'buildsetid': 37251, 'builderid': 5, 'priority': 0, 'claimed': True, 'claimed_at': 1771965223, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 5, 'name': 'fifoci-ogl-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/5/builds/2160'}, 'type': 'raw_bb_hook'}
2026-02-24T20:33:43.100065	{'source': 'webserver', 'raw': {'buildid': 163081, 'number': 1025, 'builderid': 40, 'buildrequestid': 163199, 'workerid': 5, 'masterid': 1, 'started_at': 1771964483, 'complete_at': 1771965223, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['master', 'Change'], 'shortrev': ['2512-433', 'Change'], 'buildername': ['fifoci-vk-lin-mesa', 'Builder'], 'builderid': [40, 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'repository': ['', 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'author': ['JosJuice', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [1025, 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'builddir': ['/var/lib/fifoci-worker/worker/fifoci-vk-lin-mesa', 'Worker'], 'scheduler': ['dev', 'Scheduler'], 'branch': ['master', 'Build'], 'owners': [['JosJuice'], 'Build'], 'got_revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'GitNoBranch']}, 'buildrequest': {'buildrequestid': 163199, 'buildsetid': 37252, 'builderid': 40, 'priority': 0, 'claimed': True, 'claimed_at': 1771964483, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 40, 'name': 'fifoci-vk-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/40/builds/1025'}, 'type': 'raw_bb_hook'}
2026-02-24T20:21:23.824063	{'source': 'webserver', 'raw': {'buildid': 163081, 'number': 1025, 'builderid': 40, 'buildrequestid': 163199, 'workerid': 5, 'masterid': 1, 'started_at': 1771964483, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['master', 'Change'], 'shortrev': ['2512-433', 'Change'], 'buildername': ['fifoci-vk-lin-mesa', 'Builder'], 'builderid': [40, 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'repository': ['', 'Build'], 'author': ['JosJuice', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [1025, 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'scheduler': ['dev', 'Scheduler'], 'branch': ['master', 'Build']}, 'buildrequest': {'buildrequestid': 163199, 'buildsetid': 37252, 'builderid': 40, 'priority': 0, 'claimed': True, 'claimed_at': 1771964483, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 40, 'name': 'fifoci-vk-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/40/builds/1025'}, 'type': 'raw_bb_hook'}
2026-02-24T20:21:23.781145	{'source': 'webserver', 'raw': {'buildid': 163079, 'number': 2169, 'builderid': 24, 'buildrequestid': 163194, 'workerid': 5, 'masterid': 1, 'started_at': 1771964065, 'complete_at': 1771964483, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['2512-433', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'buildername': ['fifoci-sw-lin-mesa', 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'branch': ['master', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'got_revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'GitNoBranch'], 'owners': [['JosJuice'], 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'branchname': ['master', 'Change'], 'author': ['JosJuice', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [24, 'Builder'], 'buildnumber': [2169, 'Build'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'codebase': ['', 'Build'], 'builddir': ['/var/lib/fifoci-worker/worker/fifoci-sw-lin-mesa', 'Worker'], 'warnings-count': [0, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 163194, 'buildsetid': 37252, 'builderid': 24, 'priority': 0, 'claimed': True, 'claimed_at': 1771964065, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 24, 'name': 'fifoci-sw-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/24/builds/2169'}, 'type': 'raw_bb_hook'}
2026-02-24T20:18:34.410563	{'source': 'webserver', 'raw': {'buildid': 163080, 'number': 1182, 'builderid': 39, 'buildrequestid': 163198, 'workerid': 12, 'masterid': 1, 'started_at': 1771964314, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'author': ['JosJuice', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'buildnumber': [1182, 'Build'], 'branch': ['master', 'Build'], 'project': ['', 'Build'], 'shortrev': ['2512-433', 'Change'], 'builderid': [39, 'Builder'], 'workername': ['android', 'Worker'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'branchname': ['master', 'Change'], 'buildername': ['dev-android', 'Builder'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build']}, 'buildrequest': {'buildrequestid': 163198, 'buildsetid': 37252, 'builderid': 39, 'priority': 0, 'claimed': True, 'claimed_at': 1771964314, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 39, 'name': 'dev-android', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/39/builds/1182'}, 'type': 'raw_bb_hook'}
2026-02-24T20:18:34.317362	{'source': 'webserver', 'raw': {'buildid': 163067, 'number': 1181, 'builderid': 39, 'buildrequestid': 163187, 'workerid': 12, 'masterid': 1, 'started_at': 1771962896, 'complete_at': 1771964314, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'description': ['Translation resources sync with Transifex', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'workername': ['android', 'Worker'], 'branchname': ['master', 'Change'], 'author': ['JosJuice', 'Change'], 'project': ['', 'Build'], 'shortrev': ['2512-431', 'Change'], 'buildername': ['dev-android', 'Builder'], 'builderid': [39, 'Builder'], 'buildnumber': [1181, 'Build'], 'branch': ['master', 'Build'], 'revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'Build'], 'repository': ['', 'Build'], 'owners': [['JosJuice'], 'Build'], 'codebase': ['', 'Build'], 'builddir': ['/buildbot/dev-android', 'Worker'], 'got_revision': ['b6513dcb05845c67db742be3caeeba8af8795e59', 'GitNoBranch'], 'basedir': ['/buildbot', 'Worker']}, 'buildrequest': {'buildrequestid': 163187, 'buildsetid': 37251, 'builderid': 39, 'priority': 0, 'claimed': True, 'claimed_at': 1771962896, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771962895, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37251, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771962895, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11151, 'branch': 'master', 'revision': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771962895, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 39, 'name': 'dev-android', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/39/builds/1181'}, 'type': 'raw_bb_hook'}
2026-02-24T20:14:25.619466	{'source': 'webserver', 'raw': {'buildid': 163079, 'number': 2169, 'builderid': 24, 'buildrequestid': 163194, 'workerid': 5, 'masterid': 1, 'started_at': 1771964065, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'shortrev': ['2512-433', 'Change'], 'description': ['Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'Change'], 'buildername': ['fifoci-sw-lin-mesa', 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'branch': ['master', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'branchname': ['master', 'Change'], 'author': ['JosJuice', 'Change'], 'scheduler': ['dev', 'Scheduler'], 'builderid': [24, 'Builder'], 'buildnumber': [2169, 'Build'], 'revision': ['d58e7ca9325217574d84d961b824e0acbf2f67e9', 'Build'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 163194, 'buildsetid': 37252, 'builderid': 24, 'priority': 0, 'claimed': True, 'claimed_at': 1771964065, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1771963711, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 37252, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'dev' triggered this build", 'submitted_at': 1771963711, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 11152, 'branch': 'master', 'revision': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1771963711, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 24, 'name': 'fifoci-sw-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/24/builds/2169'}, 'type': 'raw_bb_hook'}

Recent 'raw_gh_hook' events

2026-02-24T20:36:10.456968	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'synchronize', 'number': 14416, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416', 'id': 3317483728, 'node_id': 'PR_kwDOALCn2M7FvMjQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14416', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14416.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14416.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416', 'number': 14416, 'state': 'open', 'locked': False, 'title': 'DiscIO: Only allow alphanumeric ASCII in game IDs', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'We often use game IDs in paths, so we should try to make sure path traversal is impossible in game IDs. Admittedly, doing any kind of real attack using the six bytes available in game IDs is unrealistic, but no game ID should contain non-alphanumeric or non-ASCII characters anyway.\r\n\r\nMight also fix https://bugs.dolphin-emu.org/issues/13982 by skipping converting between encodings for game IDs.', 'created_at': '2026-02-23T20:01:03Z', 'updated_at': '2026-02-24T20:36:08Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'bae759713e86d4837f2f5ffb19c8b2a1a54e4c38', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7b372db5593ddc92dd442e57170f13072b43ade8', 'head': {'label': 'JosJuice:game-id-ascii', 'ref': 'game-id-ascii', 'sha': '7b372db5593ddc92dd442e57170f13072b43ade8', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 26057138, 'node_id': 'MDEwOlJlcG9zaXRvcnkyNjA1NzEzOA==', 'name': 'dolphin', 'full_name': 'JosJuice/dolphin', 'private': False, 'owner': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JosJuice/dolphin', 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/JosJuice/dolphin', 'forks_url': 'https://api.github.com/repos/JosJuice/dolphin/forks', 'keys_url': 'https://api.github.com/repos/JosJuice/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JosJuice/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JosJuice/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/JosJuice/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/JosJuice/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JosJuice/dolphin/events', 'assignees_url': 'https://api.github.com/repos/JosJuice/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JosJuice/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JosJuice/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/JosJuice/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JosJuice/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JosJuice/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JosJuice/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JosJuice/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JosJuice/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/JosJuice/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/JosJuice/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/JosJuice/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/JosJuice/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/JosJuice/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JosJuice/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JosJuice/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JosJuice/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JosJuice/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JosJuice/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JosJuice/dolphin/merges', 'archive_url': 'https://api.github.com/repos/JosJuice/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JosJuice/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/JosJuice/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JosJuice/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JosJuice/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JosJuice/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JosJuice/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/JosJuice/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JosJuice/dolphin/deployments', 'created_at': '2014-11-01T17:12:40Z', 'updated_at': '2026-02-24T19:55:10Z', 'pushed_at': '2026-02-24T20:36:07Z', 'git_url': 'git://github.com/JosJuice/dolphin.git', 'ssh_url': 'git@github.com:JosJuice/dolphin.git', 'clone_url': 'https://github.com/JosJuice/dolphin.git', 'svn_url': 'https://github.com/JosJuice/dolphin', 'homepage': None, 'size': 510418, 'stargazers_count': 6, 'watchers_count': 6, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 1, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 1, 'open_issues': 0, 'watchers': 6, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14416'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7b372db5593ddc92dd442e57170f13072b43ade8'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 0, 'review_comments': 2, 'maintainer_can_modify': True, 'commits': 2, 'additions': 34, 'deletions': 22, 'changed_files': 6}, 'before': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'after': '7b372db5593ddc92dd442e57170f13072b43ade8', 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T20:33:55.318185	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 3850374089, 'node_id': 'PRR_kwDOALCn2M7lgAvJ', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "My comments were addressed so LGTM. Tested without a Triforce game on Windows debug build without issue, AFAICT.\n\nFWIW, as long as network operations are handled on another thread, it shouldn't have impacts on our Triforce network code (e.g. errno which should be thread local).", 'commit_id': '1f7f8f307d72ccb9ea5b2d380343fd95cb7e66bd', 'submitted_at': '2026-02-24T20:33:53Z', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393#pullrequestreview-3850374089', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393#pullrequestreview-3850374089'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}}, 'updated_at': '2026-02-24T20:33:53Z', 'author_association': 'CONTRIBUTOR'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393', 'id': 3296836484, 'node_id': 'PR_kwDOALCn2M7EgbuE', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14393', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14393.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14393.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393', 'number': 14393, 'state': 'open', 'locked': False, 'title': 'Triforce: Integrated Camera Support', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'This adds an HTTP 1.0 server that serves a static (for now) 320x240 baseline JPEG at `/img.jpg`. This allows Mario Kart GP to function without requiring an external server.\r\n\r\nI have also added a camera feed preview, which allows seeing the output of either the integrated or external camera server.\r\n\r\n<img width="722" height="983" alt="Screenshot of the Triforce configuration tab, showing a goofy Dolphin in the camera preview" src="https://github.com/user-attachments/assets/6852efbc-c0f9-44cc-938b-a99cf58b5007" />\r\n\r\nI originally intended to have webcam support in this PR, however I don\'t know if I\'ll have much time to work on it in the following weeks, and the most important parts of the feature already work.', 'created_at': '2026-02-18T03:00:53Z', 'updated_at': '2026-02-24T20:33:53Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '3e99a7e2b4a4cae83e15107c5108cc4013d0d19f', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/1f7f8f307d72ccb9ea5b2d380343fd95cb7e66bd', 'head': {'label': 'JoshuaVandaele:triforce', 'ref': 'triforce', 'sha': '1f7f8f307d72ccb9ea5b2d380343fd95cb7e66bd', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 915253252, 'node_id': 'R_kgDONo2oBA', 'name': 'dolphin', 'full_name': 'JoshuaVandaele/dolphin', 'private': False, 'owner': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JoshuaVandaele/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/JoshuaVandaele/dolphin', 'forks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/forks', 'keys_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/events', 'assignees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/merges', 'archive_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/deployments', 'created_at': '2025-01-11T11:19:57Z', 'updated_at': '2026-02-06T11:01:48Z', 'pushed_at': '2026-02-22T19:41:04Z', 'git_url': 'git://github.com/JoshuaVandaele/dolphin.git', 'ssh_url': 'git@github.com:JoshuaVandaele/dolphin.git', 'clone_url': 'https://github.com/JoshuaVandaele/dolphin.git', 'svn_url': 'https://github.com/JoshuaVandaele/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 502382, 'stargazers_count': 1, 'watchers_count': 1, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 1, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 1, 'open_issues': 0, 'watchers': 1, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14393'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14393/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14393/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/1f7f8f307d72ccb9ea5b2d380343fd95cb7e66bd'}}, 'author_association': 'CONTRIBUTOR', 'auto_merge': None, 'active_lock_reason': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T20:08:47.348708	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2849307322', 'pull_request_review_id': 3850269326, 'id': 2849307322, 'node_id': 'PRRC_kwDOALCn2M6p1Pq6', 'diff_hunk': "@@ -34,6 +37,25 @@ const IOS::ES::TicketReader Volume::INVALID_TICKET{};\n const IOS::ES::TMDReader Volume::INVALID_TMD{};\n const std::vector<u8> Volume::INVALID_CERT_CHAIN{};\n \n+std::string Volume::DecodeString(std::span<const char> data) const\n+{\n+  // strnlen to trim null bytes\n+  std::string string(data.data(), strnlen(data.data(), data.size()));\n+  return GetRegion() == Region::NTSC_J ? SHIFTJISToUTF8(string) : CP1252ToUTF8(string);\n+}\n+\n+std::string Volume::FilterGameID(std::span<const char> data)\n+{\n+  std::string string(data.data(), data.size());\n+\n+  // We don't want game IDs to contain characters that are unprintable or might cause path\n+  // traversal. Game IDs normally only contain ASCII uppercase letters and numbers,\n+  // but GNHE5d contains a lowercase letter, so let's allow all ASCII letter and numbers.\n+  std::ranges::replace_if(string, [](char c) { return !Common::IsAlnum(c); }, '-');", 'path': 'Source/Core/DiscIO/Volume.cpp', 'commit_id': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'original_commit_id': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Ah, so there was a standard library function for it after all. Thanks!', 'created_at': '2026-02-24T20:08:45Z', 'updated_at': '2026-02-24T20:08:45Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2849307322', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2849307322'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14416#discussion_r2849307322'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416'}}, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2849307322/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 54, 'original_line': 54, 'side': 'RIGHT', 'in_reply_to_id': 2843472651, 'author_association': 'MEMBER', 'original_position': 32, 'position': 32, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416', 'id': 3317483728, 'node_id': 'PR_kwDOALCn2M7FvMjQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14416', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14416.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14416.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416', 'number': 14416, 'state': 'open', 'locked': False, 'title': 'DiscIO: Only allow alphanumeric ASCII in game IDs', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'We often use game IDs in paths, so we should try to make sure path traversal is impossible in game IDs. Admittedly, doing any kind of real attack using the six bytes available in game IDs is unrealistic, but no game ID should contain non-alphanumeric or non-ASCII characters anyway.\r\n\r\nMight also fix https://bugs.dolphin-emu.org/issues/13982 by skipping converting between encodings for game IDs.', 'created_at': '2026-02-23T20:01:03Z', 'updated_at': '2026-02-24T20:08:45Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'bae759713e86d4837f2f5ffb19c8b2a1a54e4c38', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'head': {'label': 'JosJuice:game-id-ascii', 'ref': 'game-id-ascii', 'sha': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 26057138, 'node_id': 'MDEwOlJlcG9zaXRvcnkyNjA1NzEzOA==', 'name': 'dolphin', 'full_name': 'JosJuice/dolphin', 'private': False, 'owner': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JosJuice/dolphin', 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/JosJuice/dolphin', 'forks_url': 'https://api.github.com/repos/JosJuice/dolphin/forks', 'keys_url': 'https://api.github.com/repos/JosJuice/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JosJuice/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JosJuice/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/JosJuice/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/JosJuice/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JosJuice/dolphin/events', 'assignees_url': 'https://api.github.com/repos/JosJuice/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JosJuice/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JosJuice/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/JosJuice/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JosJuice/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JosJuice/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JosJuice/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JosJuice/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JosJuice/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/JosJuice/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/JosJuice/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/JosJuice/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/JosJuice/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/JosJuice/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JosJuice/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JosJuice/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JosJuice/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JosJuice/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JosJuice/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JosJuice/dolphin/merges', 'archive_url': 'https://api.github.com/repos/JosJuice/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JosJuice/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/JosJuice/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JosJuice/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JosJuice/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JosJuice/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JosJuice/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/JosJuice/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JosJuice/dolphin/deployments', 'created_at': '2014-11-01T17:12:40Z', 'updated_at': '2026-02-24T19:55:10Z', 'pushed_at': '2026-02-24T19:55:03Z', 'git_url': 'git://github.com/JosJuice/dolphin.git', 'ssh_url': 'git@github.com:JosJuice/dolphin.git', 'clone_url': 'https://github.com/JosJuice/dolphin.git', 'svn_url': 'https://github.com/JosJuice/dolphin', 'homepage': None, 'size': 510418, 'stargazers_count': 6, 'watchers_count': 6, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 1, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 1, 'open_issues': 0, 'watchers': 6, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14416'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7bf1a5b24344bc65895fc1144e44a2dab5c1c626'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'active_lock_reason': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T20:08:47.347841	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 3850269326, 'node_id': 'PRR_kwDOALCn2M7lfnKO', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': None, 'commit_id': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'submitted_at': '2026-02-24T20:08:45Z', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14416#pullrequestreview-3850269326', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14416#pullrequestreview-3850269326'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416'}}, 'updated_at': '2026-02-24T20:08:45Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416', 'id': 3317483728, 'node_id': 'PR_kwDOALCn2M7FvMjQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14416', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14416.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14416.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416', 'number': 14416, 'state': 'open', 'locked': False, 'title': 'DiscIO: Only allow alphanumeric ASCII in game IDs', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'We often use game IDs in paths, so we should try to make sure path traversal is impossible in game IDs. Admittedly, doing any kind of real attack using the six bytes available in game IDs is unrealistic, but no game ID should contain non-alphanumeric or non-ASCII characters anyway.\r\n\r\nMight also fix https://bugs.dolphin-emu.org/issues/13982 by skipping converting between encodings for game IDs.', 'created_at': '2026-02-23T20:01:03Z', 'updated_at': '2026-02-24T20:08:45Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'bae759713e86d4837f2f5ffb19c8b2a1a54e4c38', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'head': {'label': 'JosJuice:game-id-ascii', 'ref': 'game-id-ascii', 'sha': '7bf1a5b24344bc65895fc1144e44a2dab5c1c626', 'user': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 26057138, 'node_id': 'MDEwOlJlcG9zaXRvcnkyNjA1NzEzOA==', 'name': 'dolphin', 'full_name': 'JosJuice/dolphin', 'private': False, 'owner': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JosJuice/dolphin', 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/JosJuice/dolphin', 'forks_url': 'https://api.github.com/repos/JosJuice/dolphin/forks', 'keys_url': 'https://api.github.com/repos/JosJuice/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JosJuice/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JosJuice/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/JosJuice/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/JosJuice/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JosJuice/dolphin/events', 'assignees_url': 'https://api.github.com/repos/JosJuice/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JosJuice/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JosJuice/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/JosJuice/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JosJuice/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JosJuice/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JosJuice/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JosJuice/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JosJuice/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/JosJuice/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/JosJuice/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/JosJuice/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/JosJuice/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/JosJuice/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JosJuice/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JosJuice/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JosJuice/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JosJuice/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JosJuice/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JosJuice/dolphin/merges', 'archive_url': 'https://api.github.com/repos/JosJuice/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JosJuice/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/JosJuice/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JosJuice/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JosJuice/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JosJuice/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JosJuice/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/JosJuice/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JosJuice/dolphin/deployments', 'created_at': '2014-11-01T17:12:40Z', 'updated_at': '2026-02-24T19:55:10Z', 'pushed_at': '2026-02-24T19:55:03Z', 'git_url': 'git://github.com/JosJuice/dolphin.git', 'ssh_url': 'git@github.com:JosJuice/dolphin.git', 'clone_url': 'https://github.com/JosJuice/dolphin.git', 'svn_url': 'https://github.com/JosJuice/dolphin', 'homepage': None, 'size': 510418, 'stargazers_count': 6, 'watchers_count': 6, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 1, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 1, 'open_issues': 0, 'watchers': 6, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14416'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14416/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14416/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7bf1a5b24344bc65895fc1144e44a2dab5c1c626'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'active_lock_reason': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T20:08:32Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T20:08:31.139443	{'source': 'webserver', 'gh_type': 'check_suite', 'raw': {'action': 'requested', 'check_suite': {'id': 58434504159, 'node_id': 'CS_kwDOALCn2M8AAAANmvfF3w', 'head_branch': 'master', 'head_sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'status': 'queued', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58434504159', 'before': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'after': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'pull_requests': [{'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN/pulls/191', 'id': 3229846782, 'number': 191, 'head': {'ref': 'master', 'sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'bb679f420d6ea68263904009bebf3e8905f5c8e1', 'repo': {'id': 623850328, 'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN', 'name': 'Dolphin-MPN'}}}, {'url': 'https://api.github.com/repos/Faster-Brawl/dolphin/pulls/5', 'id': 1222541325, 'number': 5, 'head': {'ref': 'master', 'sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'eb9e232680dfdc04ec2adab05dbc530b1e707fc9', 'repo': {'id': 577809188, 'url': 'https://api.github.com/repos/Faster-Brawl/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/dirextric-auto/dolphin/pulls/1', 'id': 571486662, 'number': 1, 'head': {'ref': 'master', 'sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '1e71904cb9930eccc036e2ce2360beaa746befa7', 'repo': {'id': 337848960, 'url': 'https://api.github.com/repos/dirextric-auto/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr/pulls/1', 'id': 518053317, 'number': 1, 'head': {'ref': 'master', 'sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'VR-Hydra', 'sha': 'ea9f95955e5335cc238b2f9c5a0a6dfdc8698aec', 'repo': {'id': 311469400, 'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr', 'name': 'dolphin-vr-no-ovr'}}}, {'url': 'https://api.github.com/repos/weihuoya/dolphin/pulls/1', 'id': 400884538, 'number': 1, 'head': {'ref': 'master', 'sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '0f4c971326ae9389b3ad55b0fefacb708d148f4d', 'repo': {'id': 143011855, 'url': 'https://api.github.com/repos/weihuoya/dolphin', 'name': 'dolphin'}}}], 'app': {'id': 49947, 'client_id': 'Iv1.1fcaea7644d8b727', 'slug': 'dolphin-ci', 'node_id': 'MDM6QXBwNDk5NDc=', 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'Dolphin CI', 'description': 'Continuous Integration setup for [dolphin-emu.org](https://dolphin-emu.org/).', 'external_url': 'https://github.com/dolphin-emu', 'html_url': 'https://github.com/apps/dolphin-ci', 'created_at': '2019-12-26T22:26:07Z', 'updated_at': '2019-12-26T22:33:19Z', 'permissions': {'checks': 'write', 'contents': 'read', 'issues': 'write', 'members': 'read', 'metadata': 'read', 'pull_requests': 'write', 'statuses': 'write'}, 'events': ['check_run', 'commit_comment', 'issue_comment', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push']}, 'created_at': '2026-02-24T20:08:29Z', 'updated_at': '2026-02-24T20:08:29Z', 'rerequestable': True, 'runs_rerequestable': True, 'latest_check_runs_count': 0, 'check_runs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58434504159/check-runs', 'head_commit': {'id': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'tree_id': 'd84552ecdf7992d6883a3fb508645bdb8319bcfc', 'message': 'Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'timestamp': '2026-02-24T20:08:27Z', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com'}, 'committer': {'name': 'GitHub', 'email': 'noreply@github.com'}}}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T19:55:04Z', 'pushed_at': '2026-02-24T20:08:27Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T20:08:30.034152	{'source': 'webserver', 'gh_type': 'push', 'raw': {'ref': 'refs/heads/master', 'before': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'after': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'name': 'dolphin-emu', 'email': None, 'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': 1374484077, 'updated_at': '2026-02-24T19:55:04Z', 'pushed_at': 1771963707, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'stargazers': 14661, 'master_branch': 'master', 'organization': 'dolphin-emu', 'custom_properties': {}}, 'pusher': {'name': 'JosJuice', 'email': 'josjuice@gmail.com'}, 'forced': False, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}, 'created': False, 'deleted': False, 'base_ref': None, 'compare': 'https://github.com/dolphin-emu/dolphin/compare/b6513dcb0584...d58e7ca93252', 'commits': [{'id': '7cc3874a7c0b7c93818260c89fe1c73a143407a1', 'tree_id': 'e175224cd88346daa90753a67bd436f8c958d1a5', 'distinct': False, 'message': "Externals: Update SDL to release-3.4.2\n\nNotable changes:\n- CMake\n  - Fixed a bug where SDL couldn't use a vendored libusb or libhidapi (see 29b3fcfb1bc834d0187a8114debdcbbf8381cd61)\n- Fixed long startup times on Windows when some non-compliant input devices are present\n- Controller support\n  - Added support for the Razer Raiju V5 Pro\n  - Improved Switch 2 controller support\n  - Improved NVIDIA SHIELD controller support\n  - Fixed various controllers showing up twice on macOS\n  - Fixed handling GameCube adapters in PC mode on Linux and macOS", 'timestamp': '2026-02-22T08:48:07+01:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/7cc3874a7c0b7c93818260c89fe1c73a143407a1', 'author': {'name': 'Joshua Vandaële', 'email': 'joshua@vandaele.software', 'date': '2026-02-22T08:37:00+01:00', 'username': 'JoshuaVandaele'}, 'committer': {'name': 'Joshua Vandaële', 'email': 'joshua@vandaele.software', 'date': '2026-02-22T08:48:07+01:00', 'username': 'JoshuaVandaele'}, 'added': [], 'removed': [], 'modified': ['Externals/SDL/SDL']}, {'id': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'tree_id': 'd84552ecdf7992d6883a3fb508645bdb8319bcfc', 'distinct': True, 'message': 'Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'timestamp': '2026-02-24T21:08:27+01:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/d58e7ca9325217574d84d961b824e0acbf2f67e9', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T21:08:27+01:00', 'username': 'JosJuice'}, 'committer': {'name': 'GitHub', 'email': 'noreply@github.com', 'date': '2026-02-24T21:08:27+01:00', 'username': 'web-flow'}, 'added': [], 'removed': [], 'modified': ['Externals/SDL/SDL']}], 'head_commit': {'id': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'tree_id': 'd84552ecdf7992d6883a3fb508645bdb8319bcfc', 'distinct': True, 'message': 'Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2\n\nExternals: Update SDL to release-3.4.2', 'timestamp': '2026-02-24T21:08:27+01:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/d58e7ca9325217574d84d961b824e0acbf2f67e9', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T21:08:27+01:00', 'username': 'JosJuice'}, 'committer': {'name': 'GitHub', 'email': 'noreply@github.com', 'date': '2026-02-24T21:08:27+01:00', 'username': 'web-flow'}, 'added': [], 'removed': [], 'modified': ['Externals/SDL/SDL']}}, 'type': 'raw_gh_hook'}
2026-02-24T20:08:29.925149	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'closed', 'number': 14411, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14411', 'id': 3312324172, 'node_id': 'PR_kwDOALCn2M7Fbg5M', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14411', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14411.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14411.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14411', 'number': 14411, 'state': 'closed', 'locked': False, 'title': 'Externals: Update SDL to release-3.4.2', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Notable changes:\r\n- CMake\r\n  - Fixed a bug where SDL couldn't use a vendored libusb or libhidapi (see 29b3fcfb1bc834d0187a8114debdcbbf8381cd61)\r\n- Fixed long startup times on Windows when some non-compliant input devices are present\r\n- Controller support\r\n  - Added support for the Razer Raiju V5 Pro\r\n  - Improved Switch 2 controller support\r\n  - Improved NVIDIA SHIELD controller support\r\n  - Fixed various controllers showing up twice on macOS\r\n  - Fixed handling GameCube adapters in PC mode on Linux and macOS", 'created_at': '2026-02-22T07:48:48Z', 'updated_at': '2026-02-24T20:08:28Z', 'closed_at': '2026-02-24T20:08:27Z', 'merged_at': '2026-02-24T20:08:27Z', 'merge_commit_sha': 'd58e7ca9325217574d84d961b824e0acbf2f67e9', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14411/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14411/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14411/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7cc3874a7c0b7c93818260c89fe1c73a143407a1', 'head': {'label': 'JoshuaVandaele:SDL-3.4.2', 'ref': 'SDL-3.4.2', 'sha': '7cc3874a7c0b7c93818260c89fe1c73a143407a1', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 915253252, 'node_id': 'R_kgDONo2oBA', 'name': 'dolphin', 'full_name': 'JoshuaVandaele/dolphin', 'private': False, 'owner': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JoshuaVandaele/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/JoshuaVandaele/dolphin', 'forks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/forks', 'keys_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/events', 'assignees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/merges', 'archive_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/deployments', 'created_at': '2025-01-11T11:19:57Z', 'updated_at': '2026-02-06T11:01:48Z', 'pushed_at': '2026-02-22T19:41:04Z', 'git_url': 'git://github.com/JoshuaVandaele/dolphin.git', 'ssh_url': 'git@github.com:JoshuaVandaele/dolphin.git', 'clone_url': 'https://github.com/JoshuaVandaele/dolphin.git', 'svn_url': 'https://github.com/JoshuaVandaele/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 502382, 'stargazers_count': 1, 'watchers_count': 1, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 1, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 1, 'open_issues': 0, 'watchers': 1, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': 'b55aaa8ca78619785ca334c62d5e9d3743c29171', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T19:55:04Z', 'pushed_at': '2026-02-24T19:54:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14411'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14411'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14411'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14411/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14411/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14411/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/7cc3874a7c0b7c93818260c89fe1c73a143407a1'}}, 'author_association': 'CONTRIBUTOR', 'auto_merge': None, 'active_lock_reason': None, 'merged': True, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'comments': 0, 'review_comments': 0, 'maintainer_can_modify': False, 'commits': 1, 'additions': 1, 'deletions': 1, 'changed_files': 1}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T19:55:04Z', 'pushed_at': '2026-02-24T19:54:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T19:54:54.927839	{'source': 'webserver', 'gh_type': 'check_suite', 'raw': {'action': 'requested', 'check_suite': {'id': 58433020484, 'node_id': 'CS_kwDOALCn2M8AAAANmuEiRA', 'head_branch': 'master', 'head_sha': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'status': 'queued', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58433020484', 'before': 'e9d7ee8b57c422f99684a61ec705942015393639', 'after': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'pull_requests': [{'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN/pulls/191', 'id': 3229846782, 'number': 191, 'head': {'ref': 'master', 'sha': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'bb679f420d6ea68263904009bebf3e8905f5c8e1', 'repo': {'id': 623850328, 'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN', 'name': 'Dolphin-MPN'}}}, {'url': 'https://api.github.com/repos/Faster-Brawl/dolphin/pulls/5', 'id': 1222541325, 'number': 5, 'head': {'ref': 'master', 'sha': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'eb9e232680dfdc04ec2adab05dbc530b1e707fc9', 'repo': {'id': 577809188, 'url': 'https://api.github.com/repos/Faster-Brawl/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/dirextric-auto/dolphin/pulls/1', 'id': 571486662, 'number': 1, 'head': {'ref': 'master', 'sha': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '1e71904cb9930eccc036e2ce2360beaa746befa7', 'repo': {'id': 337848960, 'url': 'https://api.github.com/repos/dirextric-auto/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr/pulls/1', 'id': 518053317, 'number': 1, 'head': {'ref': 'master', 'sha': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'VR-Hydra', 'sha': 'ea9f95955e5335cc238b2f9c5a0a6dfdc8698aec', 'repo': {'id': 311469400, 'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr', 'name': 'dolphin-vr-no-ovr'}}}, {'url': 'https://api.github.com/repos/weihuoya/dolphin/pulls/1', 'id': 400884538, 'number': 1, 'head': {'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '0f4c971326ae9389b3ad55b0fefacb708d148f4d', 'repo': {'id': 143011855, 'url': 'https://api.github.com/repos/weihuoya/dolphin', 'name': 'dolphin'}}}], 'app': {'id': 49947, 'client_id': 'Iv1.1fcaea7644d8b727', 'slug': 'dolphin-ci', 'node_id': 'MDM6QXBwNDk5NDc=', 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'Dolphin CI', 'description': 'Continuous Integration setup for [dolphin-emu.org](https://dolphin-emu.org/).', 'external_url': 'https://github.com/dolphin-emu', 'html_url': 'https://github.com/apps/dolphin-ci', 'created_at': '2019-12-26T22:26:07Z', 'updated_at': '2019-12-26T22:33:19Z', 'permissions': {'checks': 'write', 'contents': 'read', 'issues': 'write', 'members': 'read', 'metadata': 'read', 'pull_requests': 'write', 'statuses': 'write'}, 'events': ['check_run', 'commit_comment', 'issue_comment', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push']}, 'created_at': '2026-02-24T19:54:53Z', 'updated_at': '2026-02-24T19:54:53Z', 'rerequestable': True, 'runs_rerequestable': True, 'latest_check_runs_count': 0, 'check_runs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58433020484/check-runs', 'head_commit': {'id': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'tree_id': '5d83db78f0fbcdf11f8724bb46e6df8e6d28284a', 'message': 'Translation resources sync with Transifex', 'timestamp': '2026-02-24T19:53:01Z', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com'}, 'committer': {'name': 'JosJuice', 'email': 'josjuice@gmail.com'}}}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T18:23:42Z', 'pushed_at': '2026-02-24T19:54:52Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T19:54:54.185995	{'source': 'webserver', 'gh_type': 'push', 'raw': {'ref': 'refs/heads/master', 'before': 'e9d7ee8b57c422f99684a61ec705942015393639', 'after': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'name': 'dolphin-emu', 'email': None, 'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': 1374484077, 'updated_at': '2026-02-24T18:23:42Z', 'pushed_at': 1771962892, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'stargazers': 14661, 'master_branch': 'master', 'organization': 'dolphin-emu', 'custom_properties': {}}, 'pusher': {'name': 'JosJuice', 'email': 'josjuice@gmail.com'}, 'forced': False, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}, 'created': False, 'deleted': False, 'base_ref': None, 'compare': 'https://github.com/dolphin-emu/dolphin/compare/e9d7ee8b57c4...b6513dcb0584', 'commits': [{'id': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'tree_id': '5d83db78f0fbcdf11f8724bb46e6df8e6d28284a', 'distinct': True, 'message': 'Translation resources sync with Transifex', 'timestamp': '2026-02-24T20:53:01+01:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b6513dcb05845c67db742be3caeeba8af8795e59', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T20:53:01+01:00', 'username': 'JosJuice'}, 'committer': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T20:53:01+01:00', 'username': 'JosJuice'}, 'added': [], 'removed': [], 'modified': ['Languages/po/ar.po', 'Languages/po/ca.po', 'Languages/po/cs.po', 'Languages/po/da.po', 'Languages/po/de.po', 'Languages/po/dolphin-emu.pot', 'Languages/po/el.po', 'Languages/po/en.po', 'Languages/po/es.po', 'Languages/po/fa.po', 'Languages/po/fi.po', 'Languages/po/fr.po', 'Languages/po/hr.po', 'Languages/po/hu.po', 'Languages/po/it.po', 'Languages/po/ja.po', 'Languages/po/ko.po', 'Languages/po/ms.po', 'Languages/po/nb.po', 'Languages/po/nl.po', 'Languages/po/pl.po', 'Languages/po/pt.po', 'Languages/po/pt_BR.po', 'Languages/po/ro.po', 'Languages/po/ru.po', 'Languages/po/sr.po', 'Languages/po/sv.po', 'Languages/po/tr.po', 'Languages/po/zh_CN.po', 'Languages/po/zh_TW.po']}], 'head_commit': {'id': 'b6513dcb05845c67db742be3caeeba8af8795e59', 'tree_id': '5d83db78f0fbcdf11f8724bb46e6df8e6d28284a', 'distinct': True, 'message': 'Translation resources sync with Transifex', 'timestamp': '2026-02-24T20:53:01+01:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b6513dcb05845c67db742be3caeeba8af8795e59', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T20:53:01+01:00', 'username': 'JosJuice'}, 'committer': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-02-24T20:53:01+01:00', 'username': 'JosJuice'}, 'added': [], 'removed': [], 'modified': ['Languages/po/ar.po', 'Languages/po/ca.po', 'Languages/po/cs.po', 'Languages/po/da.po', 'Languages/po/de.po', 'Languages/po/dolphin-emu.pot', 'Languages/po/el.po', 'Languages/po/en.po', 'Languages/po/es.po', 'Languages/po/fa.po', 'Languages/po/fi.po', 'Languages/po/fr.po', 'Languages/po/hr.po', 'Languages/po/hu.po', 'Languages/po/it.po', 'Languages/po/ja.po', 'Languages/po/ko.po', 'Languages/po/ms.po', 'Languages/po/nb.po', 'Languages/po/nl.po', 'Languages/po/pl.po', 'Languages/po/pt.po', 'Languages/po/pt_BR.po', 'Languages/po/ro.po', 'Languages/po/ru.po', 'Languages/po/sr.po', 'Languages/po/sv.po', 'Languages/po/tr.po', 'Languages/po/zh_CN.po', 'Languages/po/zh_TW.po']}}, 'type': 'raw_gh_hook'}
2026-02-24T19:19:04.523518	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 3850052319, 'node_id': 'PRR_kwDOALCn2M7leyLf', 'user': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Tested, LGTM.', 'commit_id': '3ea93641b206abdafb0294cfcae1a818afe19d23', 'submitted_at': '2026-02-24T19:19:02Z', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14345#pullrequestreview-3850052319', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14345#pullrequestreview-3850052319'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345'}}, 'updated_at': '2026-02-24T19:19:02Z', 'author_association': 'CONTRIBUTOR'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345', 'id': 3275220803, 'node_id': 'PR_kwDOALCn2M7DN-dD', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14345', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14345.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14345.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345', 'number': 14345, 'state': 'open', 'locked': False, 'title': 'CheatSearch: Add ability to breakpoint the selected lines.', 'user': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Adds three breakpoint options to cheat search's context menu for on read, on write, and both. Always Breaks and Logs.", 'created_at': '2026-02-12T09:09:53Z', 'updated_at': '2026-02-24T19:19:02Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '519380d2c1a19cd084f88bfb9506901087c98404', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/3ea93641b206abdafb0294cfcae1a818afe19d23', 'head': {'label': 'TryTwo:cheat_search_work', 'ref': 'cheat_search_work', 'sha': '3ea93641b206abdafb0294cfcae1a818afe19d23', 'user': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 154287647, 'node_id': 'MDEwOlJlcG9zaXRvcnkxNTQyODc2NDc=', 'name': 'dolphin', 'full_name': 'TryTwo/dolphin', 'private': False, 'owner': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/TryTwo/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/TryTwo/dolphin', 'forks_url': 'https://api.github.com/repos/TryTwo/dolphin/forks', 'keys_url': 'https://api.github.com/repos/TryTwo/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/TryTwo/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/TryTwo/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/TryTwo/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/TryTwo/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/TryTwo/dolphin/events', 'assignees_url': 'https://api.github.com/repos/TryTwo/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/TryTwo/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/TryTwo/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/TryTwo/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/TryTwo/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/TryTwo/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/TryTwo/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/TryTwo/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/TryTwo/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/TryTwo/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/TryTwo/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/TryTwo/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/TryTwo/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/TryTwo/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/TryTwo/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/TryTwo/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/TryTwo/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/TryTwo/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/TryTwo/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/TryTwo/dolphin/merges', 'archive_url': 'https://api.github.com/repos/TryTwo/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/TryTwo/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/TryTwo/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/TryTwo/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/TryTwo/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/TryTwo/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/TryTwo/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/TryTwo/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/TryTwo/dolphin/deployments', 'created_at': '2018-10-23T08:04:11Z', 'updated_at': '2026-02-19T12:59:58Z', 'pushed_at': '2026-02-24T08:44:26Z', 'git_url': 'git://github.com/TryTwo/dolphin.git', 'ssh_url': 'git@github.com:TryTwo/dolphin.git', 'clone_url': 'https://github.com/TryTwo/dolphin.git', 'svn_url': 'https://github.com/TryTwo/dolphin', 'homepage': 'https://dolphin-emu.org/', 'size': 507534, 'stargazers_count': 7, 'watchers_count': 7, 'language': 'C++', 'has_issues': True, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': True, 'forks_count': 4, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 4, 'open_issues': 0, 'watchers': 7, 'default_branch': 'Bloom_Control_25', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T18:23:42Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14345'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14345/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14345/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/3ea93641b206abdafb0294cfcae1a818afe19d23'}}, 'author_association': 'CONTRIBUTOR', 'auto_merge': None, 'active_lock_reason': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T18:23:42Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T11:51:36.056647	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'synchronize', 'number': 14401, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'id': 3303868710, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'number': 14401, 'state': 'open', 'locked': False, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T11:51:34Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '8fbe31dbade6aa27f7c8b8df1a37fd7fd2d05a1d', 'assignee': None, 'assignees': [], 'requested_reviewers': [{'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/2b24798394090553974f7b98d6abbebf634ca4ea', 'head': {'label': 'naari3:master', 'ref': 'master', 'sha': '2b24798394090553974f7b98d6abbebf634ca4ea', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1161772246, 'node_id': 'R_kgDORT881g', 'name': 'dolphin', 'full_name': 'naari3/dolphin', 'private': False, 'owner': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/naari3/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/naari3/dolphin', 'forks_url': 'https://api.github.com/repos/naari3/dolphin/forks', 'keys_url': 'https://api.github.com/repos/naari3/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/naari3/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/naari3/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/naari3/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/naari3/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/naari3/dolphin/events', 'assignees_url': 'https://api.github.com/repos/naari3/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/naari3/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/naari3/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/naari3/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/naari3/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/naari3/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/naari3/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/naari3/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/naari3/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/naari3/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/naari3/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/naari3/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/naari3/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/naari3/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/naari3/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/naari3/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/naari3/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/naari3/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/naari3/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/naari3/dolphin/merges', 'archive_url': 'https://api.github.com/repos/naari3/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/naari3/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/naari3/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/naari3/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/naari3/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/naari3/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/naari3/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/naari3/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/naari3/dolphin/deployments', 'created_at': '2026-02-19T13:57:49Z', 'updated_at': '2026-02-24T01:34:52Z', 'pushed_at': '2026-02-24T11:51:32Z', 'git_url': 'git://github.com/naari3/dolphin.git', 'ssh_url': 'git@github.com:naari3/dolphin.git', 'clone_url': 'https://github.com/naari3/dolphin.git', 'svn_url': 'https://github.com/naari3/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 506941, 'stargazers_count': 0, 'watchers_count': 0, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 0, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 0, 'open_issues': 0, 'watchers': 0, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/2b24798394090553974f7b98d6abbebf634ca4ea'}}, 'author_association': 'NONE', 'auto_merge': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 2, 'review_comments': 8, 'maintainer_can_modify': True, 'commits': 5, 'additions': 200, 'deletions': 11, 'changed_files': 3}, 'before': '4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'after': '2b24798394090553974f7b98d6abbebf634ca4ea', 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T08:46:51.526826	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'opened', 'number': 14417, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14417', 'id': 3319554930, 'node_id': 'PR_kwDOALCn2M7F3GNy', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14417', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14417.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14417.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14417', 'number': 14417, 'state': 'open', 'locked': False, 'title': 'Bugfix: Cheat codes:  Make newly added codes start disabled.', 'user': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "They don't have the call to be activated immediately after being added, leading to a checked code not being active. It felt better for them to start disabled than to add the logic, as someone might not want the code to activate immediately.", 'created_at': '2026-02-24T08:46:48Z', 'updated_at': '2026-02-24T08:46:48Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': None, 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14417/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14417/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14417/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'head': {'label': 'TryTwo:Cheat_Fix', 'ref': 'Cheat_Fix', 'sha': '8843c14fbad42ef341c26ba9a5f87a787369fa8a', 'user': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 154287647, 'node_id': 'MDEwOlJlcG9zaXRvcnkxNTQyODc2NDc=', 'name': 'dolphin', 'full_name': 'TryTwo/dolphin', 'private': False, 'owner': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/TryTwo/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/TryTwo/dolphin', 'forks_url': 'https://api.github.com/repos/TryTwo/dolphin/forks', 'keys_url': 'https://api.github.com/repos/TryTwo/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/TryTwo/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/TryTwo/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/TryTwo/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/TryTwo/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/TryTwo/dolphin/events', 'assignees_url': 'https://api.github.com/repos/TryTwo/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/TryTwo/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/TryTwo/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/TryTwo/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/TryTwo/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/TryTwo/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/TryTwo/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/TryTwo/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/TryTwo/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/TryTwo/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/TryTwo/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/TryTwo/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/TryTwo/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/TryTwo/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/TryTwo/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/TryTwo/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/TryTwo/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/TryTwo/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/TryTwo/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/TryTwo/dolphin/merges', 'archive_url': 'https://api.github.com/repos/TryTwo/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/TryTwo/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/TryTwo/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/TryTwo/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/TryTwo/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/TryTwo/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/TryTwo/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/TryTwo/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/TryTwo/dolphin/deployments', 'created_at': '2018-10-23T08:04:11Z', 'updated_at': '2026-02-19T12:59:58Z', 'pushed_at': '2026-02-24T08:44:26Z', 'git_url': 'git://github.com/TryTwo/dolphin.git', 'ssh_url': 'git@github.com:TryTwo/dolphin.git', 'clone_url': 'https://github.com/TryTwo/dolphin.git', 'svn_url': 'https://github.com/TryTwo/dolphin', 'homepage': 'https://dolphin-emu.org/', 'size': 507520, 'stargazers_count': 7, 'watchers_count': 7, 'language': 'C++', 'has_issues': True, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': True, 'forks_count': 4, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 4, 'open_issues': 0, 'watchers': 7, 'default_branch': 'Bloom_Control_25', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14417'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14417'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14417'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14417/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14417/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14417/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/8843c14fbad42ef341c26ba9a5f87a787369fa8a'}}, 'author_association': 'CONTRIBUTOR', 'auto_merge': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 0, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 1, 'additions': 2, 'deletions': 2, 'changed_files': 2}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2976, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2976, 'open_issues': 413, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'TryTwo', 'id': 10532806, 'node_id': 'MDQ6VXNlcjEwNTMyODA2', 'avatar_url': 'https://avatars.githubusercontent.com/u/10532806?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TryTwo', 'html_url': 'https://github.com/TryTwo', 'followers_url': 'https://api.github.com/users/TryTwo/followers', 'following_url': 'https://api.github.com/users/TryTwo/following{/other_user}', 'gists_url': 'https://api.github.com/users/TryTwo/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TryTwo/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TryTwo/subscriptions', 'organizations_url': 'https://api.github.com/users/TryTwo/orgs', 'repos_url': 'https://api.github.com/users/TryTwo/repos', 'events_url': 'https://api.github.com/users/TryTwo/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TryTwo/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T06:29:11.788181	{'source': 'webserver', 'gh_type': 'issue_comment', 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'id': 3963867081, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'number': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T06:29:00Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'merged_at': None}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#issuecomment-3949516077', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'id': 3949516077, 'node_id': 'IC_kwDOALCn2M7raNUt', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-24T06:29:00Z', 'updated_at': '2026-02-24T06:29:00Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T06:29:02.494432	{'source': 'webserver', 'gh_type': 'issue_comment', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'id': 3963867081, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'number': 14401, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignee': None, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T06:29:00Z', 'closed_at': None, 'author_association': 'NONE', 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'merged_at': None}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#issuecomment-3949516077', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'id': 3949516077, 'node_id': 'IC_kwDOALCn2M7raNUt', 'user': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-02-24T06:29:00Z', 'updated_at': '2026-02-24T06:29:00Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'pin': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/3949516077/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'performed_via_github_app': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T02:28:44Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544634, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'sepalani', 'id': 7890055, 'node_id': 'MDQ6VXNlcjc4OTAwNTU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7890055?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/sepalani', 'html_url': 'https://github.com/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T02:28:41.596613	{'source': 'webserver', 'gh_type': 'check_suite', 'raw': {'action': 'requested', 'check_suite': {'id': 58334129481, 'node_id': 'CS_kwDOALCn2M8AAAANlPwtSQ', 'head_branch': 'master', 'head_sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'status': 'queued', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58334129481', 'before': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'after': 'e9d7ee8b57c422f99684a61ec705942015393639', 'pull_requests': [{'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN/pulls/191', 'id': 3229846782, 'number': 191, 'head': {'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'bb679f420d6ea68263904009bebf3e8905f5c8e1', 'repo': {'id': 623850328, 'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN', 'name': 'Dolphin-MPN'}}}, {'url': 'https://api.github.com/repos/Faster-Brawl/dolphin/pulls/5', 'id': 1222541325, 'number': 5, 'head': {'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'eb9e232680dfdc04ec2adab05dbc530b1e707fc9', 'repo': {'id': 577809188, 'url': 'https://api.github.com/repos/Faster-Brawl/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/dirextric-auto/dolphin/pulls/1', 'id': 571486662, 'number': 1, 'head': {'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '1e71904cb9930eccc036e2ce2360beaa746befa7', 'repo': {'id': 337848960, 'url': 'https://api.github.com/repos/dirextric-auto/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr/pulls/1', 'id': 518053317, 'number': 1, 'head': {'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'VR-Hydra', 'sha': 'ea9f95955e5335cc238b2f9c5a0a6dfdc8698aec', 'repo': {'id': 311469400, 'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr', 'name': 'dolphin-vr-no-ovr'}}}, {'url': 'https://api.github.com/repos/weihuoya/dolphin/pulls/1', 'id': 400884538, 'number': 1, 'head': {'ref': 'master', 'sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '0f4c971326ae9389b3ad55b0fefacb708d148f4d', 'repo': {'id': 143011855, 'url': 'https://api.github.com/repos/weihuoya/dolphin', 'name': 'dolphin'}}}], 'app': {'id': 49947, 'client_id': 'Iv1.1fcaea7644d8b727', 'slug': 'dolphin-ci', 'node_id': 'MDM6QXBwNDk5NDc=', 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'Dolphin CI', 'description': 'Continuous Integration setup for [dolphin-emu.org](https://dolphin-emu.org/).', 'external_url': 'https://github.com/dolphin-emu', 'html_url': 'https://github.com/apps/dolphin-ci', 'created_at': '2019-12-26T22:26:07Z', 'updated_at': '2019-12-26T22:33:19Z', 'permissions': {'checks': 'write', 'contents': 'read', 'issues': 'write', 'members': 'read', 'metadata': 'read', 'pull_requests': 'write', 'statuses': 'write'}, 'events': ['check_run', 'commit_comment', 'issue_comment', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push']}, 'created_at': '2026-02-24T02:28:40Z', 'updated_at': '2026-02-24T02:28:40Z', 'rerequestable': True, 'runs_rerequestable': True, 'latest_check_runs_count': 0, 'check_runs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58334129481/check-runs', 'head_commit': {'id': 'e9d7ee8b57c422f99684a61ec705942015393639', 'tree_id': '945f0139b0a6406adc3cc48de969ae61c5d52fa3', 'message': 'Merge pull request #14352 from Windsurf7/sonicmega-gameini\n\nGameINI: Formatting updates to Sonic Mega Collection', 'timestamp': '2026-02-24T02:28:38Z', 'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com'}, 'committer': {'name': 'GitHub', 'email': 'noreply@github.com'}}}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T01:52:04Z', 'pushed_at': '2026-02-24T02:28:38Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T02:28:40.781223	{'source': 'webserver', 'gh_type': 'push', 'raw': {'ref': 'refs/heads/master', 'before': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'after': 'e9d7ee8b57c422f99684a61ec705942015393639', 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'name': 'dolphin-emu', 'email': None, 'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': 1374484077, 'updated_at': '2026-02-24T01:52:04Z', 'pushed_at': 1771900118, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'stargazers': 14661, 'master_branch': 'master', 'organization': 'dolphin-emu', 'custom_properties': {}}, 'pusher': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com'}, 'forced': False, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}, 'created': False, 'deleted': False, 'base_ref': None, 'compare': 'https://github.com/dolphin-emu/dolphin/compare/ff27147a717e...e9d7ee8b57c4', 'commits': [{'id': 'fe617172f325fc8f4497b853599cc13260641d18', 'tree_id': 'ce454d6193a52fab9ca61add716b5bc9e21cabeb', 'distinct': False, 'message': 'GameINI: Formatting updates to Sonic Mega Collection\n\nThis PR provides formatting updates to Sonic Mega Collection.\n\nAll regions:\n* Formatting fixes.\n* Updated to follow my code naming convention for Sega games.', 'timestamp': '2026-02-16T01:34:26+03:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/fe617172f325fc8f4497b853599cc13260641d18', 'author': {'name': 'Windsurf7', 'email': 'mountainlake951@gmail.com', 'date': '2026-02-13T03:55:55+03:00', 'username': 'Windsurf7'}, 'committer': {'name': 'Windsurf7', 'email': 'mountainlake951@gmail.com', 'date': '2026-02-16T01:34:26+03:00', 'username': 'Windsurf7'}, 'added': [], 'removed': [], 'modified': ['Data/Sys/GameSettings/GSO.ini']}, {'id': 'e9d7ee8b57c422f99684a61ec705942015393639', 'tree_id': '945f0139b0a6406adc3cc48de969ae61c5d52fa3', 'distinct': True, 'message': 'Merge pull request #14352 from Windsurf7/sonicmega-gameini\n\nGameINI: Formatting updates to Sonic Mega Collection', 'timestamp': '2026-02-23T18:28:38-08:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e9d7ee8b57c422f99684a61ec705942015393639', 'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-23T18:28:38-08:00', 'username': 'Dentomologist'}, 'committer': {'name': 'GitHub', 'email': 'noreply@github.com', 'date': '2026-02-23T18:28:38-08:00', 'username': 'web-flow'}, 'added': [], 'removed': [], 'modified': ['Data/Sys/GameSettings/GSO.ini']}], 'head_commit': {'id': 'e9d7ee8b57c422f99684a61ec705942015393639', 'tree_id': '945f0139b0a6406adc3cc48de969ae61c5d52fa3', 'distinct': True, 'message': 'Merge pull request #14352 from Windsurf7/sonicmega-gameini\n\nGameINI: Formatting updates to Sonic Mega Collection', 'timestamp': '2026-02-23T18:28:38-08:00', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e9d7ee8b57c422f99684a61ec705942015393639', 'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-02-23T18:28:38-08:00', 'username': 'Dentomologist'}, 'committer': {'name': 'GitHub', 'email': 'noreply@github.com', 'date': '2026-02-23T18:28:38-08:00', 'username': 'web-flow'}, 'added': [], 'removed': [], 'modified': ['Data/Sys/GameSettings/GSO.ini']}}, 'type': 'raw_gh_hook'}
2026-02-24T02:28:40.437304	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'closed', 'number': 14352, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14352', 'id': 3278841951, 'node_id': 'PR_kwDOALCn2M7Dbyhf', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14352', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14352.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14352.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14352', 'number': 14352, 'state': 'closed', 'locked': False, 'title': 'GameINI: Formatting updates to Sonic Mega Collection', 'user': {'login': 'Windsurf7', 'id': 70599421, 'node_id': 'MDQ6VXNlcjcwNTk5NDIx', 'avatar_url': 'https://avatars.githubusercontent.com/u/70599421?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Windsurf7', 'html_url': 'https://github.com/Windsurf7', 'followers_url': 'https://api.github.com/users/Windsurf7/followers', 'following_url': 'https://api.github.com/users/Windsurf7/following{/other_user}', 'gists_url': 'https://api.github.com/users/Windsurf7/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Windsurf7/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Windsurf7/subscriptions', 'organizations_url': 'https://api.github.com/users/Windsurf7/orgs', 'repos_url': 'https://api.github.com/users/Windsurf7/repos', 'events_url': 'https://api.github.com/users/Windsurf7/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Windsurf7/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'This PR provides formatting updates to Sonic Mega Collection.\r\n\r\nAll regions:\r\n* Formatting fixes.\r\n* Updated to follow my code naming convention for Sega games.', 'created_at': '2026-02-13T00:56:13Z', 'updated_at': '2026-02-24T02:28:38Z', 'closed_at': '2026-02-24T02:28:38Z', 'merged_at': '2026-02-24T02:28:38Z', 'merge_commit_sha': 'e9d7ee8b57c422f99684a61ec705942015393639', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14352/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14352/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14352/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/fe617172f325fc8f4497b853599cc13260641d18', 'head': {'label': 'Windsurf7:sonicmega-gameini', 'ref': 'sonicmega-gameini', 'sha': 'fe617172f325fc8f4497b853599cc13260641d18', 'user': {'login': 'Windsurf7', 'id': 70599421, 'node_id': 'MDQ6VXNlcjcwNTk5NDIx', 'avatar_url': 'https://avatars.githubusercontent.com/u/70599421?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Windsurf7', 'html_url': 'https://github.com/Windsurf7', 'followers_url': 'https://api.github.com/users/Windsurf7/followers', 'following_url': 'https://api.github.com/users/Windsurf7/following{/other_user}', 'gists_url': 'https://api.github.com/users/Windsurf7/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Windsurf7/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Windsurf7/subscriptions', 'organizations_url': 'https://api.github.com/users/Windsurf7/orgs', 'repos_url': 'https://api.github.com/users/Windsurf7/repos', 'events_url': 'https://api.github.com/users/Windsurf7/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Windsurf7/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1150965494, 'node_id': 'R_kgDORJpW9g', 'name': 'dolphin', 'full_name': 'Windsurf7/dolphin', 'private': False, 'owner': {'login': 'Windsurf7', 'id': 70599421, 'node_id': 'MDQ6VXNlcjcwNTk5NDIx', 'avatar_url': 'https://avatars.githubusercontent.com/u/70599421?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Windsurf7', 'html_url': 'https://github.com/Windsurf7', 'followers_url': 'https://api.github.com/users/Windsurf7/followers', 'following_url': 'https://api.github.com/users/Windsurf7/following{/other_user}', 'gists_url': 'https://api.github.com/users/Windsurf7/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Windsurf7/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Windsurf7/subscriptions', 'organizations_url': 'https://api.github.com/users/Windsurf7/orgs', 'repos_url': 'https://api.github.com/users/Windsurf7/repos', 'events_url': 'https://api.github.com/users/Windsurf7/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Windsurf7/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/Windsurf7/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/Windsurf7/dolphin', 'forks_url': 'https://api.github.com/repos/Windsurf7/dolphin/forks', 'keys_url': 'https://api.github.com/repos/Windsurf7/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/Windsurf7/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/Windsurf7/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/Windsurf7/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/Windsurf7/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/Windsurf7/dolphin/events', 'assignees_url': 'https://api.github.com/repos/Windsurf7/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/Windsurf7/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/Windsurf7/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/Windsurf7/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/Windsurf7/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/Windsurf7/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/Windsurf7/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/Windsurf7/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/Windsurf7/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/Windsurf7/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/Windsurf7/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/Windsurf7/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/Windsurf7/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/Windsurf7/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/Windsurf7/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/Windsurf7/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/Windsurf7/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/Windsurf7/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/Windsurf7/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/Windsurf7/dolphin/merges', 'archive_url': 'https://api.github.com/repos/Windsurf7/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/Windsurf7/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/Windsurf7/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/Windsurf7/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/Windsurf7/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/Windsurf7/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/Windsurf7/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/Windsurf7/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/Windsurf7/dolphin/deployments', 'created_at': '2026-02-05T22:31:24Z', 'updated_at': '2026-02-13T02:15:16Z', 'pushed_at': '2026-02-15T23:04:01Z', 'git_url': 'git://github.com/Windsurf7/dolphin.git', 'ssh_url': 'git@github.com:Windsurf7/dolphin.git', 'clone_url': 'https://github.com/Windsurf7/dolphin.git', 'svn_url': 'https://github.com/Windsurf7/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 506858, 'stargazers_count': 0, 'watchers_count': 0, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 0, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 0, 'open_issues': 0, 'watchers': 0, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': 'd6b5af57d01a04918e9ec849689b6d39b8e33591', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T01:52:04Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14352'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14352'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14352'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14352/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14352/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14352/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/fe617172f325fc8f4497b853599cc13260641d18'}}, 'author_association': 'CONTRIBUTOR', 'auto_merge': None, 'active_lock_reason': None, 'merged': True, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'comments': 0, 'review_comments': 0, 'maintainer_can_modify': False, 'commits': 1, 'additions': 1, 'deletions': 1, 'changed_files': 1}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T01:52:04Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14661, 'watchers_count': 14661, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 412, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 412, 'watchers': 14661, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'Dentomologist', 'id': 73494713, 'node_id': 'MDQ6VXNlcjczNDk0NzEz', 'avatar_url': 'https://avatars.githubusercontent.com/u/73494713?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Dentomologist', 'html_url': 'https://github.com/Dentomologist', 'followers_url': 'https://api.github.com/users/Dentomologist/followers', 'following_url': 'https://api.github.com/users/Dentomologist/following{/other_user}', 'gists_url': 'https://api.github.com/users/Dentomologist/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Dentomologist/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Dentomologist/subscriptions', 'organizations_url': 'https://api.github.com/users/Dentomologist/orgs', 'repos_url': 'https://api.github.com/users/Dentomologist/repos', 'events_url': 'https://api.github.com/users/Dentomologist/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Dentomologist/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T01:34:49.028704	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'synchronize', 'number': 14401, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'id': 3303868710, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'number': 14401, 'state': 'open', 'locked': False, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T01:34:47Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '00c060bb0ceebc5ccfb92893aca2d026bb8a22aa', 'assignee': None, 'assignees': [], 'requested_reviewers': [{'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'head': {'label': 'naari3:master', 'ref': 'master', 'sha': '4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1161772246, 'node_id': 'R_kgDORT881g', 'name': 'dolphin', 'full_name': 'naari3/dolphin', 'private': False, 'owner': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/naari3/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/naari3/dolphin', 'forks_url': 'https://api.github.com/repos/naari3/dolphin/forks', 'keys_url': 'https://api.github.com/repos/naari3/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/naari3/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/naari3/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/naari3/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/naari3/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/naari3/dolphin/events', 'assignees_url': 'https://api.github.com/repos/naari3/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/naari3/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/naari3/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/naari3/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/naari3/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/naari3/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/naari3/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/naari3/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/naari3/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/naari3/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/naari3/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/naari3/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/naari3/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/naari3/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/naari3/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/naari3/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/naari3/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/naari3/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/naari3/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/naari3/dolphin/merges', 'archive_url': 'https://api.github.com/repos/naari3/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/naari3/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/naari3/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/naari3/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/naari3/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/naari3/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/naari3/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/naari3/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/naari3/dolphin/deployments', 'created_at': '2026-02-19T13:57:49Z', 'updated_at': '2026-02-21T05:43:28Z', 'pushed_at': '2026-02-24T01:34:46Z', 'git_url': 'git://github.com/naari3/dolphin.git', 'ssh_url': 'git@github.com:naari3/dolphin.git', 'clone_url': 'https://github.com/naari3/dolphin.git', 'svn_url': 'https://github.com/naari3/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 506941, 'stargazers_count': 0, 'watchers_count': 0, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 0, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 0, 'open_issues': 0, 'watchers': 0, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T00:09:28Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/4a99761e3a2d0db7dac1058b77b92e5fa0d19381'}}, 'author_association': 'NONE', 'auto_merge': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 2, 'review_comments': 8, 'maintainer_can_modify': True, 'commits': 5, 'additions': 198, 'deletions': 11, 'changed_files': 3}, 'before': 'ab0d3000416627d95fd55620f421eec39f04affa', 'after': '4a99761e3a2d0db7dac1058b77b92e5fa0d19381', 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T00:09:28Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T01:25:45.377502	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843942613', 'pull_request_review_id': 3844457960, 'id': 2843942613, 'node_id': 'PRRC_kwDOALCn2M6pgx7V', 'diff_hunk': '@@ -1823,16 +1953,58 @@ u32 ExecuteCommand(std::array<u32, 3>& dicmd_buf, u32* diimm_buf, u32 address, u\n         case AMMBCommand::GetMediaBoardSerial:\n           memcpy(s_media_buffer + 4, "A89E-27A50364511", 16);\n           break;\n-        case AMMBCommand::Unknown_104:\n+        case AMMBCommand::GetNetworkConfig:\n           s_media_buffer[4] = 1;\n           break;\n+        case AMMBCommand::TestHardware:\n+        {\n+          // Execute1 command buffer layout (result slot at +0x20):\n+          //   [8] = command word, [9] = test_type, [10] = string_ptr\n+          const u32 test_type = s_media_buffer_32[9];\n+          const u32 string_ptr = s_media_buffer_32[10];\n+\n+          DEBUG_LOG_FMT(AMMEDIABOARD,\n+                        "GC-AM: TestHardware (Execute1 inner): type={:08x} str_ptr={:08x}",\n+                        test_type, string_ptr);\n+\n+          if (string_ptr != 0)\n+          {\n+            memory.Write_U32_Swap(TEST_OK_WORD0, string_ptr);\n+            memory.Write_U32_Swap(TEST_OK_WORD1, string_ptr + 4);\n+          }\n+\n+          // Phase 1: Echo test_type back. The 0x80 flag is set below.\n+          s_media_buffer_32[1] = test_type;\n+\n+          // Schedule phase 2 via CoreTiming.\n+          {\n+            auto& core_timing = Core::System::GetInstance().GetCoreTiming();\n+            core_timing.RemoveEvent(s_et_test_hw_phase2);\n+            constexpr s64 phase2_delay = 50000;                               // ~1ms at 486MHz\n+            core_timing.ScheduleEvent(phase2_delay, s_et_test_hw_phase2, 0);  // 0 = Execute1', 'path': 'Source/Core/Core/HW/DVD/AMMediaboard.cpp', 'commit_id': 'ab0d3000416627d95fd55620f421eec39f04affa', 'original_commit_id': 'ab0d3000416627d95fd55620f421eec39f04affa', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Yes, this is intentional. Based on my analysis of segaboot.gcm, the game expects two separate responses for TestHardware:\n\n1. An immediate acknowledgment (with bit 0x80 set in the response header). this is what the GenerateInterrupt at the bottom handles.\n2. A delayed result (without 0x80) delivered by the scheduled event, this is simulating the time the hardware would take to run the test.\n\nThe game distinguishes between the two by checking the 0x80 flag in the response. It ignores the dispatch table for phase 1 and only processes the test result on phase 2.', 'created_at': '2026-02-24T01:25:43Z', 'updated_at': '2026-02-24T01:25:43Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843942613', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843942613'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843942613'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}}, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843942613/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 1984, 'original_line': 1984, 'side': 'RIGHT', 'in_reply_to_id': 2843527161, 'author_association': 'NONE', 'original_position': 242, 'position': 242, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'id': 3303868710, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'number': 14401, 'state': 'open', 'locked': False, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T01:25:43Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '00c060bb0ceebc5ccfb92893aca2d026bb8a22aa', 'assignee': None, 'assignees': [], 'requested_reviewers': [{'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/ab0d3000416627d95fd55620f421eec39f04affa', 'head': {'label': 'naari3:master', 'ref': 'master', 'sha': 'ab0d3000416627d95fd55620f421eec39f04affa', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1161772246, 'node_id': 'R_kgDORT881g', 'name': 'dolphin', 'full_name': 'naari3/dolphin', 'private': False, 'owner': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/naari3/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/naari3/dolphin', 'forks_url': 'https://api.github.com/repos/naari3/dolphin/forks', 'keys_url': 'https://api.github.com/repos/naari3/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/naari3/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/naari3/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/naari3/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/naari3/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/naari3/dolphin/events', 'assignees_url': 'https://api.github.com/repos/naari3/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/naari3/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/naari3/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/naari3/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/naari3/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/naari3/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/naari3/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/naari3/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/naari3/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/naari3/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/naari3/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/naari3/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/naari3/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/naari3/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/naari3/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/naari3/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/naari3/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/naari3/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/naari3/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/naari3/dolphin/merges', 'archive_url': 'https://api.github.com/repos/naari3/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/naari3/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/naari3/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/naari3/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/naari3/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/naari3/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/naari3/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/naari3/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/naari3/dolphin/deployments', 'created_at': '2026-02-19T13:57:49Z', 'updated_at': '2026-02-21T05:43:28Z', 'pushed_at': '2026-02-21T05:43:20Z', 'git_url': 'git://github.com/naari3/dolphin.git', 'ssh_url': 'git@github.com:naari3/dolphin.git', 'clone_url': 'https://github.com/naari3/dolphin.git', 'svn_url': 'https://github.com/naari3/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 506941, 'stargazers_count': 0, 'watchers_count': 0, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 0, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 0, 'open_issues': 0, 'watchers': 0, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T00:09:28Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/ab0d3000416627d95fd55620f421eec39f04affa'}}, 'author_association': 'NONE', 'auto_merge': None, 'active_lock_reason': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T00:09:28Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T01:25:45.355400	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 3844457960, 'node_id': 'PRR_kwDOALCn2M7lJcXo', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': None, 'commit_id': 'ab0d3000416627d95fd55620f421eec39f04affa', 'submitted_at': '2026-02-24T01:25:43Z', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#pullrequestreview-3844457960', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401#pullrequestreview-3844457960'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}}, 'updated_at': '2026-02-24T01:25:43Z', 'author_association': 'NONE'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'id': 3303868710, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'number': 14401, 'state': 'open', 'locked': False, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-24T01:25:43Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '00c060bb0ceebc5ccfb92893aca2d026bb8a22aa', 'assignee': None, 'assignees': [], 'requested_reviewers': [{'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/ab0d3000416627d95fd55620f421eec39f04affa', 'head': {'label': 'naari3:master', 'ref': 'master', 'sha': 'ab0d3000416627d95fd55620f421eec39f04affa', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1161772246, 'node_id': 'R_kgDORT881g', 'name': 'dolphin', 'full_name': 'naari3/dolphin', 'private': False, 'owner': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/naari3/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/naari3/dolphin', 'forks_url': 'https://api.github.com/repos/naari3/dolphin/forks', 'keys_url': 'https://api.github.com/repos/naari3/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/naari3/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/naari3/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/naari3/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/naari3/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/naari3/dolphin/events', 'assignees_url': 'https://api.github.com/repos/naari3/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/naari3/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/naari3/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/naari3/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/naari3/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/naari3/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/naari3/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/naari3/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/naari3/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/naari3/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/naari3/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/naari3/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/naari3/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/naari3/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/naari3/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/naari3/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/naari3/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/naari3/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/naari3/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/naari3/dolphin/merges', 'archive_url': 'https://api.github.com/repos/naari3/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/naari3/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/naari3/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/naari3/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/naari3/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/naari3/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/naari3/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/naari3/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/naari3/dolphin/deployments', 'created_at': '2026-02-19T13:57:49Z', 'updated_at': '2026-02-21T05:43:28Z', 'pushed_at': '2026-02-21T05:43:20Z', 'git_url': 'git://github.com/naari3/dolphin.git', 'ssh_url': 'git@github.com:naari3/dolphin.git', 'clone_url': 'https://github.com/naari3/dolphin.git', 'svn_url': 'https://github.com/naari3/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 506941, 'stargazers_count': 0, 'watchers_count': 0, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 0, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 0, 'open_issues': 0, 'watchers': 0, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T00:09:28Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/ab0d3000416627d95fd55620f421eec39f04affa'}}, 'author_association': 'NONE', 'auto_merge': None, 'active_lock_reason': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-24T00:09:28Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544585, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T00:09:26.415823	{'source': 'webserver', 'gh_type': 'check_suite', 'raw': {'action': 'requested', 'check_suite': {'id': 58324826349, 'node_id': 'CS_kwDOALCn2M8AAAANlG447Q', 'head_branch': 'master', 'head_sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'status': 'queued', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58324826349', 'before': '000eaf0c0ce9121c1f57cdd19999a5b591b0e9ac', 'after': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'pull_requests': [{'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN/pulls/191', 'id': 3229846782, 'number': 191, 'head': {'ref': 'master', 'sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'bb679f420d6ea68263904009bebf3e8905f5c8e1', 'repo': {'id': 623850328, 'url': 'https://api.github.com/repos/MarioPartyNetplay/Dolphin-MPN', 'name': 'Dolphin-MPN'}}}, {'url': 'https://api.github.com/repos/Faster-Brawl/dolphin/pulls/5', 'id': 1222541325, 'number': 5, 'head': {'ref': 'master', 'sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': 'eb9e232680dfdc04ec2adab05dbc530b1e707fc9', 'repo': {'id': 577809188, 'url': 'https://api.github.com/repos/Faster-Brawl/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/dirextric-auto/dolphin/pulls/1', 'id': 571486662, 'number': 1, 'head': {'ref': 'master', 'sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '1e71904cb9930eccc036e2ce2360beaa746befa7', 'repo': {'id': 337848960, 'url': 'https://api.github.com/repos/dirextric-auto/dolphin', 'name': 'dolphin'}}}, {'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr/pulls/1', 'id': 518053317, 'number': 1, 'head': {'ref': 'master', 'sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'VR-Hydra', 'sha': 'ea9f95955e5335cc238b2f9c5a0a6dfdc8698aec', 'repo': {'id': 311469400, 'url': 'https://api.github.com/repos/zurgeg/dolphin-vr-no-ovr', 'name': 'dolphin-vr-no-ovr'}}}, {'url': 'https://api.github.com/repos/weihuoya/dolphin/pulls/1', 'id': 400884538, 'number': 1, 'head': {'ref': 'master', 'sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'repo': {'id': 11577304, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'name': 'dolphin'}}, 'base': {'ref': 'master', 'sha': '0f4c971326ae9389b3ad55b0fefacb708d148f4d', 'repo': {'id': 143011855, 'url': 'https://api.github.com/repos/weihuoya/dolphin', 'name': 'dolphin'}}}], 'app': {'id': 49947, 'client_id': 'Iv1.1fcaea7644d8b727', 'slug': 'dolphin-ci', 'node_id': 'MDM6QXBwNDk5NDc=', 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'Dolphin CI', 'description': 'Continuous Integration setup for [dolphin-emu.org](https://dolphin-emu.org/).', 'external_url': 'https://github.com/dolphin-emu', 'html_url': 'https://github.com/apps/dolphin-ci', 'created_at': '2019-12-26T22:26:07Z', 'updated_at': '2019-12-26T22:33:19Z', 'permissions': {'checks': 'write', 'contents': 'read', 'issues': 'write', 'members': 'read', 'metadata': 'read', 'pull_requests': 'write', 'statuses': 'write'}, 'events': ['check_run', 'commit_comment', 'issue_comment', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push']}, 'created_at': '2026-02-24T00:09:24Z', 'updated_at': '2026-02-24T00:09:24Z', 'rerequestable': True, 'runs_rerequestable': True, 'latest_check_runs_count': 0, 'check_runs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/check-suites/58324826349/check-runs', 'head_commit': {'id': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'tree_id': 'fb6b285669358a40ad7815d5b11a356bf9020999', 'message': 'Merge pull request #14407 from jordan-woyak/mag-card-fixup\n\nMagneticCardReader: Minor fixup to writing card data.', 'timestamp': '2026-02-24T00:09:23Z', 'author': {'name': 'JMC47', 'email': 'JMC4789@gmail.com'}, 'committer': {'name': 'GitHub', 'email': 'noreply@github.com'}}}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-24T00:09:23Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-24T00:09:25.183599	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'closed', 'number': 14407, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14407', 'id': 3310178171, 'node_id': 'PR_kwDOALCn2M7FTU97', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14407', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14407.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14407.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14407', 'number': 14407, 'state': 'closed', 'locked': False, 'title': 'MagneticCardReader: Minor fixup to writing card data.', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Ensure the 3rd track is written even if the 2nd track isn't.\r\nMoved GetHexDump helper function to StringUtil.", 'created_at': '2026-02-21T03:38:54Z', 'updated_at': '2026-02-24T00:09:23Z', 'closed_at': '2026-02-24T00:09:23Z', 'merged_at': '2026-02-24T00:09:23Z', 'merge_commit_sha': 'ff27147a717e8c941bf65638036a83d72b6a9d46', 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14407/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14407/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14407/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/97a88dd7db123106532cdb8d69a526368c5c0b4a', 'head': {'label': 'jordan-woyak:mag-card-fixup', 'ref': 'mag-card-fixup', 'sha': '97a88dd7db123106532cdb8d69a526368c5c0b4a', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 16818408, 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjgxODQwOA==', 'name': 'dolphin', 'full_name': 'jordan-woyak/dolphin', 'private': False, 'owner': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/jordan-woyak/dolphin', 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/jordan-woyak/dolphin', 'forks_url': 'https://api.github.com/repos/jordan-woyak/dolphin/forks', 'keys_url': 'https://api.github.com/repos/jordan-woyak/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/jordan-woyak/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/jordan-woyak/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/jordan-woyak/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/jordan-woyak/dolphin/events', 'assignees_url': 'https://api.github.com/repos/jordan-woyak/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/jordan-woyak/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/jordan-woyak/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/jordan-woyak/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/jordan-woyak/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/jordan-woyak/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/jordan-woyak/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/jordan-woyak/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/jordan-woyak/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/jordan-woyak/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/jordan-woyak/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/jordan-woyak/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/jordan-woyak/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/jordan-woyak/dolphin/merges', 'archive_url': 'https://api.github.com/repos/jordan-woyak/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/jordan-woyak/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/jordan-woyak/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/jordan-woyak/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/jordan-woyak/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/jordan-woyak/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/jordan-woyak/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/jordan-woyak/dolphin/deployments', 'created_at': '2014-02-13T21:50:38Z', 'updated_at': '2026-01-31T21:37:22Z', 'pushed_at': '2026-02-22T02:08:47Z', 'git_url': 'git://github.com/jordan-woyak/dolphin.git', 'ssh_url': 'git@github.com:jordan-woyak/dolphin.git', 'clone_url': 'https://github.com/jordan-woyak/dolphin.git', 'svn_url': 'https://github.com/jordan-woyak/dolphin', 'homepage': None, 'size': 510751, 'stargazers_count': 4, 'watchers_count': 4, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': False, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 4, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': True, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14407'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14407'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14407'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14407/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14407/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14407/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/97a88dd7db123106532cdb8d69a526368c5c0b4a'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'active_lock_reason': None, 'merged': True, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': {'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'comments': 0, 'review_comments': 1, 'maintainer_can_modify': False, 'commits': 1, 'additions': 29, 'deletions': 21, 'changed_files': 2}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 413, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 413, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-23T23:45:56.530413	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'closed', 'number': 13988, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13988', 'id': 2883485239, 'node_id': 'PR_kwDOALCn2M6r3n43', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13988', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/13988.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/13988.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13988', 'number': 13988, 'state': 'closed', 'locked': False, 'title': '[RFC] linter: Adjust .clang-format lambda and argument formatting.', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'I\'m looking for everyone\'s opinions here.\r\n\r\nMy rationale for each change:\r\n\r\n~~`AlignAfterOpenBracket: BlockIndent`~~\r\n`AlignAfterOpenBracket: DontAlign`\r\nI don\'t like `Align` because:\r\n- It\'s weird that the indentation level is affected by the name of the function.\r\n- If the function name is long enough it falls back to no alignment anyways.\r\n- It makes function argument lambda body indentation consistent. Current behavior wildly changes between aligned/unaligned with long lines.\r\n\r\nEdit: `BlockIndent` is broken sometimes. `DontAlign` works better.\r\nNote that some long lists with terminating commas were previously "bin packed", but have now become one-per-line. This is intentional behavior, a terminating comma is supposed to disable "bin packing".\r\nI don\'t know why some of them were still bin packed with `Align`.\r\nIt might be appropriate to remove the terminating comma in some of these long lists to re-establish "bin packing".\r\n\r\n~~`BinPackArguments: false`~~\r\n~~`BinPackParameters: false`~~\r\nEdit: I removed this change. It causes way too many short lines with tiny arguments.\r\n\r\n`BraceWrapping BeforeLambdaBody: true`\r\n- This makes the `{` breaking of lambdas consistent with our other function bodies. The current behavior drives me up the wall.\r\n\r\n`AllowShortLambdasOnASingleLine: true`\r\n- Straightforward behavior.\r\n\r\n`PackConstructorInitializers: CurrentLine`\r\n`BreakConstructorInitializers: BeforeComma`\r\n- Same rationale as argument/parameter formatting. i.e. consistency and readability.\r\n- I think these were already intended with `ConstructorInitializerAllOnOneLineOrOnePerLine`, which has been deprecated.\r\n\r\n~~`ConstructorInitializerIndentWidth: 2`~~\r\n~~`ContinuationIndentWidth: 2`~~\r\nEdit: I removed this change.\r\n\r\nSide note, I would be open to bumping up the `ColumnLimit` from `100`.\r\nMaybe `120` ?', 'created_at': '2025-10-03T01:14:37Z', 'updated_at': '2026-02-23T23:45:54Z', 'closed_at': '2026-02-23T23:45:54Z', 'merged_at': None, 'merge_commit_sha': None, 'assignee': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [{'id': 221808232, 'node_id': 'MDU6TGFiZWwyMjE4MDgyMzI=', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/WIP%20/%20do%20not%20merge', 'name': 'WIP / do not merge', 'color': '0052cc', 'default': False, 'description': 'Work in progress (do not merge)'}, {'id': 221809816, 'node_id': 'MDU6TGFiZWwyMjE4MDk4MTY=', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/RFC', 'name': 'RFC', 'color': 'FF6D00', 'default': False, 'description': 'Request for comments'}], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13988/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13988/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13988/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/b8380d72623c6933d32e606e2e728567eb16a23d', 'head': {'label': 'jordan-woyak:clang-format-adjustments', 'ref': 'clang-format-adjustments', 'sha': 'b8380d72623c6933d32e606e2e728567eb16a23d', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 16818408, 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjgxODQwOA==', 'name': 'dolphin', 'full_name': 'jordan-woyak/dolphin', 'private': False, 'owner': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/jordan-woyak/dolphin', 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/jordan-woyak/dolphin', 'forks_url': 'https://api.github.com/repos/jordan-woyak/dolphin/forks', 'keys_url': 'https://api.github.com/repos/jordan-woyak/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/jordan-woyak/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/jordan-woyak/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/jordan-woyak/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/jordan-woyak/dolphin/events', 'assignees_url': 'https://api.github.com/repos/jordan-woyak/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/jordan-woyak/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/jordan-woyak/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/jordan-woyak/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/jordan-woyak/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/jordan-woyak/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/jordan-woyak/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/jordan-woyak/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/jordan-woyak/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/jordan-woyak/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/jordan-woyak/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/jordan-woyak/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/jordan-woyak/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/jordan-woyak/dolphin/merges', 'archive_url': 'https://api.github.com/repos/jordan-woyak/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/jordan-woyak/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/jordan-woyak/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/jordan-woyak/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/jordan-woyak/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/jordan-woyak/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/jordan-woyak/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/jordan-woyak/dolphin/deployments', 'created_at': '2014-02-13T21:50:38Z', 'updated_at': '2026-01-31T21:37:22Z', 'pushed_at': '2026-02-22T02:08:47Z', 'git_url': 'git://github.com/jordan-woyak/dolphin.git', 'ssh_url': 'git@github.com:jordan-woyak/dolphin.git', 'clone_url': 'https://github.com/jordan-woyak/dolphin.git', 'svn_url': 'https://github.com/jordan-woyak/dolphin', 'homepage': None, 'size': 510751, 'stargazers_count': 4, 'watchers_count': 4, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': False, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 4, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': True, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '72f854d22829b7108ee8ef6813f11a3f35c840f6', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 414, 'watchers': 14660, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13988'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/13988'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13988'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13988/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13988/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13988/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/b8380d72623c6933d32e606e2e728567eb16a23d'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'active_lock_reason': None, 'merged': False, 'mergeable': False, 'rebaseable': False, 'mergeable_state': 'dirty', 'merged_by': None, 'comments': 1, 'review_comments': 12, 'maintainer_can_modify': False, 'commits': 1, 'additions': 42338, 'deletions': 26141, 'changed_files': 1243}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 414, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 414, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-23T23:45:42.622784	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'closed', 'number': 14126, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14126', 'id': 3015657461, 'node_id': 'PR_kwDOALCn2M6zv0f1', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14126', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14126.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14126.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14126', 'number': 14126, 'state': 'closed', 'locked': False, 'title': 'Core: Fix RunOnCPUThread to only directly run the function when Core::IsUninitialized.', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'The existing `!IsRunning(system)` check incorrectly handles `Stopping` and `Starting` states.\r\n\r\nThis fixes the crash when trying to immediately load a state after launching a game, see #14030', 'created_at': '2025-11-16T22:13:59Z', 'updated_at': '2026-02-23T23:45:40Z', 'closed_at': '2026-02-23T23:45:40Z', 'merged_at': None, 'merge_commit_sha': '906d1310a7a023fafe78f0782aef523e68d6e01a', 'assignee': None, 'assignees': [], 'requested_reviewers': [{'login': 'JosJuice', 'id': 6716818, 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6716818?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JosJuice', 'html_url': 'https://github.com/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'requested_teams': [], 'labels': [{'id': 221808232, 'node_id': 'MDU6TGFiZWwyMjE4MDgyMzI=', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/WIP%20/%20do%20not%20merge', 'name': 'WIP / do not merge', 'color': '0052cc', 'default': False, 'description': 'Work in progress (do not merge)'}], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14126/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14126/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14126/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/eb74d48295892fe600df644da1a227ff6e232630', 'head': {'label': 'jordan-woyak:run-on-cpu-thread-fix', 'ref': 'run-on-cpu-thread-fix', 'sha': 'eb74d48295892fe600df644da1a227ff6e232630', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 16818408, 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjgxODQwOA==', 'name': 'dolphin', 'full_name': 'jordan-woyak/dolphin', 'private': False, 'owner': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/jordan-woyak/dolphin', 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/jordan-woyak/dolphin', 'forks_url': 'https://api.github.com/repos/jordan-woyak/dolphin/forks', 'keys_url': 'https://api.github.com/repos/jordan-woyak/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/jordan-woyak/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/jordan-woyak/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/jordan-woyak/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/jordan-woyak/dolphin/events', 'assignees_url': 'https://api.github.com/repos/jordan-woyak/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/jordan-woyak/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/jordan-woyak/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/jordan-woyak/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/jordan-woyak/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/jordan-woyak/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/jordan-woyak/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/jordan-woyak/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/jordan-woyak/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/jordan-woyak/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/jordan-woyak/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/jordan-woyak/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/jordan-woyak/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/jordan-woyak/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/jordan-woyak/dolphin/merges', 'archive_url': 'https://api.github.com/repos/jordan-woyak/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/jordan-woyak/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/jordan-woyak/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/jordan-woyak/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/jordan-woyak/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/jordan-woyak/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/jordan-woyak/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/jordan-woyak/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/jordan-woyak/dolphin/deployments', 'created_at': '2014-02-13T21:50:38Z', 'updated_at': '2026-01-31T21:37:22Z', 'pushed_at': '2026-02-22T02:08:47Z', 'git_url': 'git://github.com/jordan-woyak/dolphin.git', 'ssh_url': 'git@github.com:jordan-woyak/dolphin.git', 'clone_url': 'https://github.com/jordan-woyak/dolphin.git', 'svn_url': 'https://github.com/jordan-woyak/dolphin', 'homepage': None, 'size': 510751, 'stargazers_count': 4, 'watchers_count': 4, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': False, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 4, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': True, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '56532c850f0f00a129207fae1d2ef6867b51d9cc', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 415, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 415, 'watchers': 14660, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14126'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14126'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14126'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14126/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14126/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14126/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/eb74d48295892fe600df644da1a227ff6e232630'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'clean', 'merged_by': None, 'comments': 2, 'review_comments': 0, 'maintainer_can_modify': False, 'commits': 1, 'additions': 1, 'deletions': 1, 'changed_files': 1}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 415, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 415, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-02-23T23:06:00.780626	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843504643', 'pull_request_review_id': 3843980293, 'id': 2843504643, 'node_id': 'PRRC_kwDOALCn2M6pfHAD', 'diff_hunk': '@@ -1823,16 +1953,58 @@ u32 ExecuteCommand(std::array<u32, 3>& dicmd_buf, u32* diimm_buf, u32 address, u\n         case AMMBCommand::GetMediaBoardSerial:\n           memcpy(s_media_buffer + 4, "A89E-27A50364511", 16);\n           break;\n-        case AMMBCommand::Unknown_104:\n+        case AMMBCommand::GetNetworkConfig:\n           s_media_buffer[4] = 1;\n           break;\n+        case AMMBCommand::TestHardware:\n+        {\n+          // Execute1 command buffer layout (result slot at +0x20):\n+          //   [8] = command word, [9] = test_type, [10] = string_ptr\n+          const u32 test_type = s_media_buffer_32[9];\n+          const u32 string_ptr = s_media_buffer_32[10];\n+\n+          DEBUG_LOG_FMT(AMMEDIABOARD,\n+                        "GC-AM: TestHardware (Execute1 inner): type={:08x} str_ptr={:08x}",\n+                        test_type, string_ptr);\n+\n+          if (string_ptr != 0)\n+          {\n+            memory.Write_U32_Swap(TEST_OK_WORD0, string_ptr);\n+            memory.Write_U32_Swap(TEST_OK_WORD1, string_ptr + 4);\n+          }\n+\n+          // Phase 1: Echo test_type back. The 0x80 flag is set below.\n+          s_media_buffer_32[1] = test_type;\n+\n+          // Schedule phase 2 via CoreTiming.\n+          {\n+            auto& core_timing = Core::System::GetInstance().GetCoreTiming();', 'path': 'Source/Core/Core/HW/DVD/AMMediaboard.cpp', 'commit_id': 'ab0d3000416627d95fd55620f421eec39f04affa', 'original_commit_id': 'ab0d3000416627d95fd55620f421eec39f04affa', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '```suggestion\n            auto& core_timing = system.GetCoreTiming();\n```\nIt looks like a system reference already exists here.', 'created_at': '2026-02-23T22:58:51Z', 'updated_at': '2026-02-23T23:05:58Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843504643', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843504643'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401#discussion_r2843504643'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}}, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/2843504643/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 1981, 'original_line': 1981, 'side': 'RIGHT', 'author_association': 'MEMBER', 'original_position': 239, 'position': 239, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401', 'id': 3303868710, 'node_id': 'PR_kwDOALCn2M7E7Qkm', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14401', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14401.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401', 'number': 14401, 'state': 'open', 'locked': False, 'title': 'AMMediaboard: stub Triforce NETWORK TEST command handling', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'AMMediaboard: add Triforce NETWORK TEST support\r\n\r\nAdd mock responses for the MediaBoard commands required by the segaboot NETWORK TEST. Previously it would hang waiting for a TestHardware(0x301) response that never came.\r\nThe handler returns hardcoded success responses without performing any actual hardware checks (just enough to let the test pass.)\r\n', 'created_at': '2026-02-19T16:30:15Z', 'updated_at': '2026-02-23T23:05:58Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '00c060bb0ceebc5ccfb92893aca2d026bb8a22aa', 'assignee': None, 'assignees': [], 'requested_reviewers': [{'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/ab0d3000416627d95fd55620f421eec39f04affa', 'head': {'label': 'naari3:master', 'ref': 'master', 'sha': 'ab0d3000416627d95fd55620f421eec39f04affa', 'user': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1161772246, 'node_id': 'R_kgDORT881g', 'name': 'dolphin', 'full_name': 'naari3/dolphin', 'private': False, 'owner': {'login': 'naari3', 'id': 12756563, 'node_id': 'MDQ6VXNlcjEyNzU2NTYz', 'avatar_url': 'https://avatars.githubusercontent.com/u/12756563?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/naari3', 'html_url': 'https://github.com/naari3', 'followers_url': 'https://api.github.com/users/naari3/followers', 'following_url': 'https://api.github.com/users/naari3/following{/other_user}', 'gists_url': 'https://api.github.com/users/naari3/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/naari3/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/naari3/subscriptions', 'organizations_url': 'https://api.github.com/users/naari3/orgs', 'repos_url': 'https://api.github.com/users/naari3/repos', 'events_url': 'https://api.github.com/users/naari3/events{/privacy}', 'received_events_url': 'https://api.github.com/users/naari3/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/naari3/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/naari3/dolphin', 'forks_url': 'https://api.github.com/repos/naari3/dolphin/forks', 'keys_url': 'https://api.github.com/repos/naari3/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/naari3/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/naari3/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/naari3/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/naari3/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/naari3/dolphin/events', 'assignees_url': 'https://api.github.com/repos/naari3/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/naari3/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/naari3/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/naari3/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/naari3/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/naari3/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/naari3/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/naari3/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/naari3/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/naari3/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/naari3/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/naari3/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/naari3/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/naari3/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/naari3/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/naari3/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/naari3/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/naari3/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/naari3/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/naari3/dolphin/merges', 'archive_url': 'https://api.github.com/repos/naari3/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/naari3/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/naari3/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/naari3/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/naari3/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/naari3/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/naari3/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/naari3/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/naari3/dolphin/deployments', 'created_at': '2026-02-19T13:57:49Z', 'updated_at': '2026-02-21T05:43:28Z', 'pushed_at': '2026-02-21T05:43:20Z', 'git_url': 'git://github.com/naari3/dolphin.git', 'ssh_url': 'git@github.com:naari3/dolphin.git', 'clone_url': 'https://github.com/naari3/dolphin.git', 'svn_url': 'https://github.com/naari3/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 506941, 'stargazers_count': 0, 'watchers_count': 0, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 0, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 0, 'open_issues': 0, 'watchers': 0, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '2eeff845bd01aa3f1bdca5682940a80356591236', 'user': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 416, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 416, 'watchers': 14660, 'default_branch': 'master', 'allow_squash_merge': False, 'allow_merge_commit': True, 'allow_rebase_merge': False, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14401'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14401/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14401/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/ab0d3000416627d95fd55620f421eec39f04affa'}}, 'author_association': 'NONE', 'auto_merge': None, 'active_lock_reason': None}, 'repository': {'id': 11577304, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'name': 'dolphin', 'full_name': 'dolphin-emu/dolphin', 'private': False, 'owner': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/dolphin-emu/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'created_at': '2013-07-22T09:07:57Z', 'updated_at': '2026-02-23T21:37:39Z', 'pushed_at': '2026-02-23T18:11:59Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 544581, 'stargazers_count': 14660, 'watchers_count': 14660, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 2975, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 416, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': ['cpp', 'emulation', 'emulator', 'gamecube', 'wii'], 'visibility': 'public', 'forks': 2975, 'open_issues': 416, 'watchers': 14660, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}