Status for Dolphin Central

Recent events

2026-10-30T08:45:01.037619	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:44:59.271806	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:44:48.723127	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:44:48.381280	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-10-30T08:41:55.149865	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/discord/gateway.py', 'lineno': 584, 'msg': 'Shard ID %s has successfully RESUMED session %s.', 'args': "(None, '8a066b165c9b7e535d8f5c282b205eb0')", 'type': 'internal_log'}
2026-10-30T08:41:19.792691	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/discord/gateway.py', 'lineno': 584, 'msg': 'Shard ID %s has successfully RESUMED session %s.', 'args': "(None, '8a066b165c9b7e535d8f5c282b205eb0')", 'type': 'internal_log'}
2026-10-30T08:39:59.271496	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:39:57.537307	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:35:07.868089	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/discord/gateway.py', 'lineno': 584, 'msg': 'Shard ID %s has successfully RESUMED session %s.', 'args': "(None, '8a066b165c9b7e535d8f5c282b205eb0')", 'type': 'internal_log'}
2026-10-30T08:34:57.537003	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:34:55.840824	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:34:48.381054	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:34:48.038488	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-10-30T08:29:55.840523	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:29:54.138207	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:24:54.137902	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:24:52.400499	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:24:48.038228	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:24:47.700690	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-10-30T08:19:52.400196	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:19:50.734519	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:14:50.734195	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:14:49.128213	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:14:47.700474	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:14:47.363370	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}

Recent 'build_status' events

2026-10-30T08:10:01.639268	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'shortrev': 'd49fa7', 'service': 'pr-osx-universal', 'pr': 14960, 'success': False, 'pending': False, 'url': 'https://dolphin.ci/#/builders/7/builds/10878', 'description': 'Build failed on builder pr-osx-universal', 'type': 'build_status'}
2026-10-30T07:39:01.196665	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'shortrev': 'd49fa7', 'service': 'pr-osx-universal', 'pr': 14960, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/7/builds/10878', 'description': 'Auto build in progress on builder pr-osx-universal', 'type': 'build_status'}
2026-10-30T07:17:10.855609	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-osx-universal', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/7/builds/10877', 'description': 'Build succeeded on builder pr-osx-universal', 'type': 'build_status'}
2026-10-30T07:06:43.000687	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-win-dbg-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/31/builds/10867', 'description': 'Build succeeded on builder pr-win-dbg-x64', 'type': 'build_status'}
2026-10-30T07:04:40.385945	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-win-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/2/builds/10860', 'description': 'Build succeeded on builder pr-win-x64', 'type': 'build_status'}
2026-10-30T07:04:39.208203	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-win-dbg-x64', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/31/builds/10867', 'description': 'Auto build in progress on builder pr-win-dbg-x64', 'type': 'build_status'}
2026-10-30T07:03:56.406563	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-flatpak-arm64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/44/builds/5947', 'description': 'Build succeeded on builder pr-flatpak-arm64', 'type': 'build_status'}
2026-10-30T07:02:39.997525	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-win-x64', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/2/builds/10860', 'description': 'Auto build in progress on builder pr-win-x64', 'type': 'build_status'}
2026-10-30T07:02:39.342329	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-win-arm64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/13/builds/10858', 'description': 'Build succeeded on builder pr-win-arm64', 'type': 'build_status'}
2026-10-30T07:02:32.106644	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-deb-dbg-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/1/builds/10858', 'description': 'Build succeeded on builder pr-deb-dbg-x64', 'type': 'build_status'}
2026-10-30T07:02:20.342480	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-flatpak-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/43/builds/6007', 'description': 'Build succeeded on builder pr-flatpak-x64', 'type': 'build_status'}
2026-10-30T07:01:25.313369	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-appimage-arm64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/50/builds/105', 'description': 'Build succeeded on builder pr-appimage-arm64', 'type': 'build_status'}
2026-10-30T07:01:04.042832	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-appimage-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/49/builds/111', 'description': 'Build succeeded on builder pr-appimage-x64', 'type': 'build_status'}
2026-10-30T07:00:57.433678	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-ubu-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/27/builds/10859', 'description': 'Build succeeded on builder pr-ubu-x64', 'type': 'build_status'}
2026-10-30T07:00:52.152057	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-deb-dbg-x64', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/1/builds/10858', 'description': 'Auto build in progress on builder pr-deb-dbg-x64', 'type': 'build_status'}
2026-10-30T07:00:51.261194	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-deb-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/26/builds/10857', 'description': 'Build succeeded on builder pr-deb-x64', 'type': 'build_status'}
2026-10-30T07:00:22.070144	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-android', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/22/builds/10864', 'description': 'Build succeeded on builder pr-android', 'type': 'build_status'}
2026-10-30T07:00:10.014706	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-freebsd-x64', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/11/builds/10866', 'description': 'Build succeeded on builder pr-freebsd-x64', 'type': 'build_status'}
2026-10-30T07:00:08.665903	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'lint', 'pr': 14961, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/9/builds/10862', 'description': 'Build succeeded on builder lint', 'type': 'build_status'}
2026-10-30T06:59:43.238145	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-ubu-x64', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/27/builds/10859', 'description': 'Auto build in progress on builder pr-ubu-x64', 'type': 'build_status'}
2026-10-30T06:59:41.377061	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-freebsd-x64', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/11/builds/10866', 'description': 'Auto build in progress on builder pr-freebsd-x64', 'type': 'build_status'}
2026-10-30T06:59:40.678027	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-android', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/22/builds/10864', 'description': 'Auto build in progress on builder pr-android', 'type': 'build_status'}
2026-10-30T06:59:39.979739	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-win-arm64', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/13/builds/10858', 'description': 'Auto build in progress on builder pr-win-arm64', 'type': 'build_status'}
2026-10-30T06:59:39.230759	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'pr-deb-x64', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/26/builds/10857', 'description': 'Auto build in progress on builder pr-deb-x64', 'type': 'build_status'}
2026-10-30T06:59:38.494384	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'shortrev': '506b3d', 'service': 'lint', 'pr': 14961, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/9/builds/10862', 'description': 'Auto build in progress on builder lint', 'type': 'build_status'}

Recent 'command_message' events

2026-10-28T23:04:58.747266	{'source': 'discord', 'who': 'joshuavandaele', 'what': '<@1320924779556900984> please rebuild pr 14958', 'type': 'command_message'}
2026-10-25T10:47:06.139619	{'source': 'discord', 'who': 'joshuavandaele', 'what': '<@1320924779556900984> please rebuild PR 14950', 'type': 'command_message'}
2026-10-24T12:14:56.831368	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14878', 'type': 'command_message'}
2026-10-24T06:04:28.146473	{'source': 'discord', 'who': 'billiard26', 'what': '<@1320924779556900984> please rebuild PR 14947', 'type': 'command_message'}
2026-10-23T22:13:33.399432	{'source': 'discord', 'who': 'billiard26', 'what': '<@1320924779556900984> please rebuild PR 14947', 'type': 'command_message'}
2026-10-20T20:50:52.416011	{'source': 'discord', 'who': 'billiard26', 'what': '<@1320924779556900984> rebuild PR 14941', 'type': 'command_message'}
2026-10-19T23:31:13.450087	{'source': 'discord', 'who': 'billiard26', 'what': '<@1320924779556900984> rebuild PR 14941', 'type': 'command_message'}
2026-10-18T16:25:37.886250	{'source': 'discord', 'who': 'oatmealdome', 'what': '<@1320924779556900984> please rebuild 14924', 'type': 'command_message'}
2026-10-18T16:25:26.801035	{'source': 'discord', 'who': 'oatmealdome', 'what': '<@1320924779556900984> please rebuild 14923', 'type': 'command_message'}
2026-10-18T10:28:43.546446	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14924', 'type': 'command_message'}
2026-10-18T10:28:36.025367	{'source': 'discord', 'who': 'josjuice', 'what': '<@1320924779556900984> please rebuild 14923', 'type': 'command_message'}
2026-10-17T16:25:43.666865	{'source': 'discord', 'who': 'oatmealdome', 'what': '<@1320924779556900984> please rebuild 13099', 'type': 'command_message'}

Recent 'dev_wark' events

2026-10-24T06:04:28.146496	{'source': 'discord', 'accepted': True, 'type': 'dev_wark'}
2026-10-23T22:13:33.399466	{'source': 'discord', 'accepted': True, 'type': 'dev_wark'}
2026-10-20T20:50:52.416037	{'source': 'discord', 'accepted': True, 'type': 'dev_wark'}
2026-10-19T23:31:13.450118	{'source': 'discord', 'accepted': True, 'type': 'dev_wark'}

Recent 'gh_issue_comment' events

2026-10-30T07:00:39.597364	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6516958381', 'safe_author': True, 'body': 'It was discussed in discord, but Intel Core i7-11800H appears to not have the necessary WAITPKG so not seeing the logs is normal.\r\nThanks for testing.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'id': 6050000199, 'node_id': 'PR_kwDOALCn2M8AAAABK5W55Q', 'number': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', '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, 'assignees': [], 'milestone': None, 'comments': 5, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-30T07:00:38Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14956', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.patch', 'merged_at': None}, 'body': '"Precision Frame Timing" should no longer be as power hungry on x86.\nTSC rate for TPAUSE/MWAITX is read from CPUID when available (Intel) or measured otherwise (AMD).\n\nPlease test Intel CPUs.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/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/14956/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6516958381', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6516958381', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6516958381, 'node_id': 'IC_kwDOALCn2M8AAAABhHDkrQ', '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}, 'created_at': '2026-10-30T07:00:37Z', 'updated_at': '2026-10-30T07:00:37Z', 'body': 'It was discussed in discord, but Intel Core i7-11800H appears to not have the necessary WAITPKG so not seeing the logs is normal.\r\nThanks for testing.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6516958381/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, 'minimized': 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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 488, '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': 3371, 'open_issues': 488, 'watchers': 15743, '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': 'gh_issue_comment'}
2026-10-30T05:43:20.562934	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'mbc07', 'action': 'created', 'id': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6515912889', 'safe_author': True, 'body': "So, I don't know if I tested this wrong, but I can't notice any difference between this PR and master on my laptop. The ± value for both VPS and FPS remained the same on the few games and scenes I tried, and using an external tool to monitor power consumption, this PR seems to consume about 1 to 1.5 W less CPU power? The variance is minimal, so it might be within the margin of error.\r\n\r\nI didn't compile this myself, but made sure to use the pr-win-dbg-x64 build from the buildbot (downloaded about two hours ago), enable debug logging and the common log, but the `D[COMMON]: HardwareSleepUntil via MWAITX` didn't appear at all. I could see other debug messages, just not this one. Also made sure that Precision Frame Timing was on and Immediately Present XFB and Rush Frame Presentation were off. VBI Skip was also off.\r\n\r\nMy laptop has a Intel Core i7-11800H, in case it's relevant...", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'id': 6050000199, 'node_id': 'PR_kwDOALCn2M8AAAABK5W55Q', 'number': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', '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, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-30T05:43:18Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14956', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.patch', 'merged_at': None}, 'body': '"Precision Frame Timing" should no longer be as power hungry on x86.\nTSC rate for TPAUSE/MWAITX is read from CPUID when available (Intel) or measured otherwise (AMD).\n\nPlease test Intel CPUs.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/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/14956/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6515912889', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6515912889', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6515912889, 'node_id': 'IC_kwDOALCn2M8AAAABhGDwuQ', '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-10-30T05:43:18Z', 'updated_at': '2026-10-30T05:43:18Z', 'body': "So, I don't know if I tested this wrong, but I can't notice any difference between this PR and master on my laptop. The ± value for both VPS and FPS remained the same on the few games and scenes I tried, and using an external tool to monitor power consumption, this PR seems to consume about 1 to 1.5 W less CPU power? The variance is minimal, so it might be within the margin of error.\r\n\r\nI didn't compile this myself, but made sure to use the pr-win-dbg-x64 build from the buildbot (downloaded about two hours ago), enable debug logging and the common log, but the `D[COMMON]: HardwareSleepUntil via MWAITX` didn't appear at all. I could see other debug messages, just not this one. Also made sure that Precision Frame Timing was on and Immediately Present XFB and Rush Frame Presentation were off. VBI Skip was also off.\r\n\r\nMy laptop has a Intel Core i7-11800H, in case it's relevant...", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6515912889/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, 'minimized': 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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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-10-29T23:47:11.498043	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'edited', 'id': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6511106624', 'safe_author': False, 'body': "@jordan-woyak Good idea.  I added your feature in a separate commit.\r\n\r\nI play Melee with a GameCube controller, so only adding regular HID controller support wouldn't work for me.  However, it was only 28 extra lines to add support for both, so I did that.  What do you think?\r\n", 'raw': {'action': 'edited', 'changes': {'body': {'from': '@jordan-woyak Thanks for the feedback! I reworked the PR into two commits:\n\n1. **Commit 1 (`Standard Controller`):** Uses port 1\'s `Standard Controller` mapping (`Pad::GetStatus(0)`) so any mapped controller works, while skipping ports whose default device is the platform keyboard/mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) so default keyboard users don\'t get double inputs. It also delegates cursor movement directly to Qt\'s item views via `QKeyEvent`.\n2. **Commit 2 (`GameCube Adapter for Wii U`):** Kept native adapter support as a separate 28-line commit on top. When any port is set to `"GameCube Adapter for Wii U"`, Dolphin sets `SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE` to `"0"` and reads the USB adapter directly via `GCAdapter`, so `Standard Controller` / `ControllerInterface` cannot see the controller in native adapter mode. Happy to move that second commit to a follow-up PR if you\'d prefer!\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T23:38:55Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': 'When no game is running, the controller configured on port 1 can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller` on port 1:** Polls `Pad::GetStatus(0)` and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U` on port 1:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` profile:** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/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/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6511106624', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6511106624, 'node_id': 'IC_kwDOALCn2M8AAAABhBeaQA', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T23:38:55Z', 'updated_at': '2026-10-29T23:47:10Z', 'body': "@jordan-woyak Good idea.  I added your feature in a separate commit.\r\n\r\nI play Melee with a GameCube controller, so only adding regular HID controller support wouldn't work for me.  However, it was only 28 extra lines to add support for both, so I did that.  What do you think?\r\n", 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624/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, 'minimized': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-29T23:38:57.644252	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'created', 'id': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6511106624', 'safe_author': False, 'body': '@jordan-woyak Thanks for the feedback! I reworked the PR into two commits:\n\n1. **Commit 1 (`Standard Controller`):** Uses port 1\'s `Standard Controller` mapping (`Pad::GetStatus(0)`) so any mapped controller works, while skipping ports whose default device is the platform keyboard/mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) so default keyboard users don\'t get double inputs. It also delegates cursor movement directly to Qt\'s item views via `QKeyEvent`.\n2. **Commit 2 (`GameCube Adapter for Wii U`):** Kept native adapter support as a separate 28-line commit on top. When any port is set to `"GameCube Adapter for Wii U"`, Dolphin sets `SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE` to `"0"` and reads the USB adapter directly via `GCAdapter`, so `Standard Controller` / `ControllerInterface` cannot see the controller in native adapter mode. Happy to move that second commit to a follow-up PR if you\'d prefer!\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T23:38:55Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': 'When no game is running, the controller configured on port 1 can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller` on port 1:** Polls `Pad::GetStatus(0)` and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U` on port 1:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` profile:** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/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/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6511106624', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6511106624, 'node_id': 'IC_kwDOALCn2M8AAAABhBeaQA', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T23:38:55Z', 'updated_at': '2026-10-29T23:38:55Z', 'body': '@jordan-woyak Thanks for the feedback! I reworked the PR into two commits:\n\n1. **Commit 1 (`Standard Controller`):** Uses port 1\'s `Standard Controller` mapping (`Pad::GetStatus(0)`) so any mapped controller works, while skipping ports whose default device is the platform keyboard/mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) so default keyboard users don\'t get double inputs. It also delegates cursor movement directly to Qt\'s item views via `QKeyEvent`.\n2. **Commit 2 (`GameCube Adapter for Wii U`):** Kept native adapter support as a separate 28-line commit on top. When any port is set to `"GameCube Adapter for Wii U"`, Dolphin sets `SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE` to `"0"` and reads the USB adapter directly via `GCAdapter`, so `Standard Controller` / `ControllerInterface` cannot see the controller in native adapter mode. Happy to move that second commit to a follow-up PR if you\'d prefer!\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624/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, 'minimized': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-29T21:43:39.404205	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'created', 'id': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6509021017', 'safe_author': False, 'body': "@JoshuaVandaele \r\n\r\n> > This machine has no DolphinQt build, so the window itself was not launched.\r\n> \r\n> Have those changes been tested and reviewed at all?\r\n\r\n\r\nThey have definitely been reviewed and tested.  My bad! 🤦🏼\u200d♀️  I manually built and tested my patch, but I didn't tell Grok I had so the PR description it wrote was wrong.\r\n\r\nI reviewed the code and read the PR description, but I missed that sentence in the description.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T21:43:37Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': "Player 1's configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\r\n\r\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\r\n\r\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat).\r\n\r\n## Test Plan\r\n\r\nThis was built and launched. Release x64, MSVC 19.51.36260, `Dolphin.exe` from this branch.\r\n\r\n- `D-pad Up` moved the highlight up\r\n- `D-pad Down` moved it down\r\n- `A` started the highlighted game. \r\n\r\nThis patch was written with Grok. The human author is responsible for it.\r\n\r\nCo-Authored-By: Grok <noreply@x.ai>\r\n", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/reactions', 'total_count': 1, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 1, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6509021017', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6509021017', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6509021017, 'node_id': 'IC_kwDOALCn2M8AAAABg_fHWQ', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T21:43:37Z', 'updated_at': '2026-10-29T21:43:37Z', 'body': "@JoshuaVandaele \r\n\r\n> > This machine has no DolphinQt build, so the window itself was not launched.\r\n> \r\n> Have those changes been tested and reviewed at all?\r\n\r\n\r\nThey have definitely been reviewed and tested.  My bad! 🤦🏼\u200d♀️  I manually built and tested my patch, but I didn't tell Grok I had so the PR description it wrote was wrong.\r\n\r\nI reviewed the code and read the PR description, but I missed that sentence in the description.", 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6509021017/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, 'minimized': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-29T20:07:29.458073	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14958, 'title': 'Vulkan: Allow custom drivers on Mali devices', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14958#issuecomment-6507132937', 'safe_author': True, 'body': "From https://github.com/bylaws/libadrenotools/issues/2:\r\n\r\n> Uh the name adrenotools is a bit of a lie really, it should work with Mali already I just didn't consider it originally, maybe it's best I rename to something else", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958', 'id': 6089097276, 'node_id': 'PR_kwDOALCn2M8AAAABLYs-bA', 'number': 14958, 'title': 'Vulkan: Allow custom drivers on Mali devices', 'user': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 2, 'created_at': '2026-10-28T23:02:09Z', 'updated_at': '2026-10-29T20:07:26Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.patch', 'merged_at': None}, 'body': 'Custom drivers that target mali kbase API are popping up.  This allows their usage.\nTested on an Anbernic rg476h with malisx2 driver. \nI have read the contributing guidelines.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/reactions', 'total_count': 3, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 3, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6507132937', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958#issuecomment-6507132937', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958', 'id': 6507132937, 'node_id': 'IC_kwDOALCn2M8AAAABg9r4CQ', '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-10-29T20:07:26Z', 'updated_at': '2026-10-29T20:07:26Z', 'body': "From https://github.com/bylaws/libadrenotools/issues/2:\r\n\r\n> Uh the name adrenotools is a bit of a lie really, it should work with Mali already I just didn't consider it originally, maybe it's best I rename to something else", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6507132937/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, 'minimized': 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-10-29T20:06:37Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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-10-29T20:04:47.350150	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14958, 'title': 'Vulkan: Allow custom drivers on Mali devices', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14958#issuecomment-6507073021', 'safe_author': True, 'body': 'I thought libadrenotools only supported Adreno? Was Mali support added at some point?', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958', 'id': 6089097276, 'node_id': 'PR_kwDOALCn2M8AAAABLYs-bA', 'number': 14958, 'title': 'Vulkan: Allow custom drivers on Mali devices', 'user': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-10-28T23:02:09Z', 'updated_at': '2026-10-29T20:04:44Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.patch', 'merged_at': None}, 'body': 'Custom drivers that target mali kbase API are popping up.  This allows their usage.\nTested on an Anbernic rg476h with malisx2 driver. \nI have read the contributing guidelines.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/reactions', 'total_count': 3, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 3, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6507073021', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958#issuecomment-6507073021', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958', 'id': 6507073021, 'node_id': 'IC_kwDOALCn2M8AAAABg9oN_Q', '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}, 'created_at': '2026-10-29T20:04:44Z', 'updated_at': '2026-10-29T20:04:44Z', 'body': 'I thought libadrenotools only supported Adreno? Was Mali support added at some point?', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6507073021/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, 'minimized': 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-10-29T18:43:39Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15741, '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': 'gh_issue_comment'}
2026-10-29T19:30:17.679991	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6506377338', 'safe_author': True, 'body': '> This machine has no DolphinQt build, so the window itself was not launched.\r\n\r\nHave those changes been tested and reviewed at all?', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 2, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T19:30:15Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': "Player 1's configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\n\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\n\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat). This machine has no DolphinQt build, so the window itself was not launched.\n\nThis patch was written with Grok. The human author is responsible for it.\n\nCo-Authored-By: Grok <noreply@x.ai>\n", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/reactions', 'total_count': 1, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 1, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6506377338', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6506377338', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6506377338, 'node_id': 'IC_kwDOALCn2M8AAAABg89weg', '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-10-29T19:30:15Z', 'updated_at': '2026-10-29T19:30:15Z', 'body': '> This machine has no DolphinQt build, so the window itself was not launched.\r\n\r\nHave those changes been tested and reviewed at all?', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6506377338/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, 'minimized': 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-10-29T18:43:39Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15741, '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-10-29T19:13:09.996345	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6506020703', 'safe_author': True, 'body': 'I think this feature would be much more useful if it instead used the mappings of a configured `Standard Controller` rather than directly using `GCAdapter`.\r\n`GCAdapter` makes this of course only work with GameCube controllers when it could instead work with any sort of connected controller.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T19:13:07Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': "Player 1's configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\n\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\n\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat). This machine has no DolphinQt build, so the window itself was not launched.\n\nThis patch was written with Grok. The human author is responsible for it.\n\nCo-Authored-By: Grok <noreply@x.ai>\n", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/reactions', 'total_count': 1, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 1, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6506020703', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6506020703', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6506020703, 'node_id': 'IC_kwDOALCn2M8AAAABg8n_Xw', '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}, 'created_at': '2026-10-29T19:13:07Z', 'updated_at': '2026-10-29T19:13:07Z', 'body': 'I think this feature would be much more useful if it instead used the mappings of a configured `Standard Controller` rather than directly using `GCAdapter`.\r\n`GCAdapter` makes this of course only work with GameCube controllers when it could instead work with any sort of connected controller.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6506020703/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, 'minimized': 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-10-29T18:43:39Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3368, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3368, 'open_issues': 486, 'watchers': 15741, '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': 'gh_issue_comment'}
2026-10-29T18:15:37.610143	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'mbc07', 'action': 'deleted', 'id': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596#issuecomment-6504759993', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'deleted', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'id': 4270953308, 'node_id': 'PR_kwDOALCn2M7SvRVK', 'number': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'user': {'login': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 21, 'created_at': '2026-04-15T18:43:01Z', 'updated_at': '2026-10-29T18:15:22Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.patch', 'merged_at': None}, 'body': 'Hi there, I\'m a RetroAchievements develoepr. I\'ve been spending a lot of time with the RetroAchievements integration lately and felt like the experience was a bit too "quiet" popping an achievement or submitting a leaderboard feels a lot more rewarding when there\'s a satisfying audio cue to go along with the OSD notification.\r\n\r\nThis PR implements a cross-platform audio feedback system for the Achievement Manager. I\'ve added support for the following events:\r\n\r\n- **info.wav**: Plays for a successful login or general information messages.\r\n- **unlock.wav**: The "Achievement Unlocked" chime.\r\n- **lb.wav**: Notification for when a leaderboard attempt starts.\r\n- **lbcancel.wav**: Feedback for when a leaderboard is canceled or failed.\r\n- **lbsubmit.wav**: And this for when a score is successfully submitted.\r\n\r\nhttps://github.com/user-attachments/assets/50ad3d02-8cc8-46ea-8959-8bf199d5e9bb\r\n\r\nI sourced these from Andre Louis\'s public domain archive (http://onj3.andrelouis.com/phonetones/), specifically choosing clean, non-intrusive notification tones that wouldn\'t feel out of place during gameplay.\r\n\r\nImplementation-wise, I\'ve tried to make this as "plug-and-play" as possible for the end-user. Windows uses native mixing, while Linux and macOS use the SDL3 fallback. For Android, I\'ve added a small helper that handles the JNI calls on the UI thread and automatically extracts the audio assets from the APK into the Sys folder.\r\n\r\nI\'ve tested this on both Windows and my Galaxy S9, and the timing of the cues feels great alongside the OSD. I\'d love to hear what you guys think about the sounds or the general implementation!', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/reactions', 'total_count': 4, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 3, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6504759993', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596#issuecomment-6504759993', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596', 'id': 6504759993, 'node_id': 'IC_kwDOALCn2M8AAAABg7bCuQ', '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-10-29T18:15:22Z', 'updated_at': '2026-10-29T18:15:22Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6504759993/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, 'minimized': 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-10-29T18:09:55Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3367, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3367, 'open_issues': 485, 'watchers': 15741, '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-10-29T18:15:24.650919	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'mbc07', 'action': 'created', 'id': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596#issuecomment-6504759993', 'safe_author': True, 'body': '@dolphin-emu-bot rebuild', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'id': 4270953308, 'node_id': 'PR_kwDOALCn2M7SvRVK', 'number': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'user': {'login': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 21, 'created_at': '2026-04-15T18:43:01Z', 'updated_at': '2026-10-29T18:15:22Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.patch', 'merged_at': None}, 'body': 'Hi there, I\'m a RetroAchievements develoepr. I\'ve been spending a lot of time with the RetroAchievements integration lately and felt like the experience was a bit too "quiet" popping an achievement or submitting a leaderboard feels a lot more rewarding when there\'s a satisfying audio cue to go along with the OSD notification.\r\n\r\nThis PR implements a cross-platform audio feedback system for the Achievement Manager. I\'ve added support for the following events:\r\n\r\n- **info.wav**: Plays for a successful login or general information messages.\r\n- **unlock.wav**: The "Achievement Unlocked" chime.\r\n- **lb.wav**: Notification for when a leaderboard attempt starts.\r\n- **lbcancel.wav**: Feedback for when a leaderboard is canceled or failed.\r\n- **lbsubmit.wav**: And this for when a score is successfully submitted.\r\n\r\nhttps://github.com/user-attachments/assets/50ad3d02-8cc8-46ea-8959-8bf199d5e9bb\r\n\r\nI sourced these from Andre Louis\'s public domain archive (http://onj3.andrelouis.com/phonetones/), specifically choosing clean, non-intrusive notification tones that wouldn\'t feel out of place during gameplay.\r\n\r\nImplementation-wise, I\'ve tried to make this as "plug-and-play" as possible for the end-user. Windows uses native mixing, while Linux and macOS use the SDL3 fallback. For Android, I\'ve added a small helper that handles the JNI calls on the UI thread and automatically extracts the audio assets from the APK into the Sys folder.\r\n\r\nI\'ve tested this on both Windows and my Galaxy S9, and the timing of the cues feels great alongside the OSD. I\'d love to hear what you guys think about the sounds or the general implementation!', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/reactions', 'total_count': 4, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 3, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6504759993', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596#issuecomment-6504759993', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596', 'id': 6504759993, 'node_id': 'IC_kwDOALCn2M8AAAABg7bCuQ', '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-10-29T18:15:22Z', 'updated_at': '2026-10-29T18:15:22Z', 'body': '@dolphin-emu-bot rebuild', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6504759993/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, 'minimized': 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-10-29T18:09:55Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3367, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3367, 'open_issues': 485, 'watchers': 15741, '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-10-29T17:57:44.203495	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'CySlaytor', 'action': 'created', 'id': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596#issuecomment-6504383119', 'safe_author': False, 'body': "It's done! Hopefully no conflicts now.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'id': 4270953308, 'node_id': 'PR_kwDOALCn2M7SvRVK', 'number': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'user': {'login': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 20, 'created_at': '2026-04-15T18:43:01Z', 'updated_at': '2026-10-29T17:57:42Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.patch', 'merged_at': None}, 'body': 'Hi there, I\'m a RetroAchievements develoepr. I\'ve been spending a lot of time with the RetroAchievements integration lately and felt like the experience was a bit too "quiet" popping an achievement or submitting a leaderboard feels a lot more rewarding when there\'s a satisfying audio cue to go along with the OSD notification.\r\n\r\nThis PR implements a cross-platform audio feedback system for the Achievement Manager. I\'ve added support for the following events:\r\n\r\n- **info.wav**: Plays for a successful login or general information messages.\r\n- **unlock.wav**: The "Achievement Unlocked" chime.\r\n- **lb.wav**: Notification for when a leaderboard attempt starts.\r\n- **lbcancel.wav**: Feedback for when a leaderboard is canceled or failed.\r\n- **lbsubmit.wav**: And this for when a score is successfully submitted.\r\n\r\nhttps://github.com/user-attachments/assets/50ad3d02-8cc8-46ea-8959-8bf199d5e9bb\r\n\r\nI sourced these from Andre Louis\'s public domain archive (http://onj3.andrelouis.com/phonetones/), specifically choosing clean, non-intrusive notification tones that wouldn\'t feel out of place during gameplay.\r\n\r\nImplementation-wise, I\'ve tried to make this as "plug-and-play" as possible for the end-user. Windows uses native mixing, while Linux and macOS use the SDL3 fallback. For Android, I\'ve added a small helper that handles the JNI calls on the UI thread and automatically extracts the audio assets from the APK into the Sys folder.\r\n\r\nI\'ve tested this on both Windows and my Galaxy S9, and the timing of the cues feels great alongside the OSD. I\'d love to hear what you guys think about the sounds or the general implementation!', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/reactions', 'total_count': 4, '+1': 1, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 3, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6504383119', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596#issuecomment-6504383119', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596', 'id': 6504383119, 'node_id': 'IC_kwDOALCn2M8AAAABg7ECjw', 'user': {'login': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T17:57:40Z', 'updated_at': '2026-10-29T17:57:40Z', 'body': "It's done! Hopefully no conflicts now.", 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6504383119/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, 'minimized': 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-10-29T16:44:59Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3367, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3367, 'open_issues': 485, 'watchers': 15741, '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': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-29T15:23:59.884318	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'created', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774#issuecomment-6500814636', 'safe_author': True, 'body': "This PR should be ready. I tested it against Mario 6 and 7, confirmed that Karaoke Revolution Party can detect two different microphones. I didn't find a noticeable regression (e.g. performance) between master and this branch.\r\n\r\nWii games shouldn't be affected but for good measure I tested some of them like Jeopardy and didn't notice regressions. FWIW, I tested Mario Party games in French, and words were detected properly.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14774', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14774/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14774/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14774/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'id': 5003138525, 'node_id': 'PR_kwDOALCn2M73rHGd', 'number': 14774, 'title': 'Refactor the GameCube microphone code', '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, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-07-28T21:29:25Z', 'updated_at': '2026-10-29T15:23:57Z', 'closed_at': None, 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14774', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14774.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14774.patch', 'merged_at': None}, 'body': 'This PR replaces https://github.com/dolphin-emu/dolphin/pull/14203 and is based on https://github.com/dolphin-emu/dolphin/pull/14772. It deduplicates the Wii and GameCube microphones code. I\'ll put it as a draft for now, as I\'d like to implement some more features:\r\n - [x] Move the code to AudioCommon\r\n - [x] Refactor the GC microphone code\r\n - [x] Check the GC microphone code for regressions/improvements\r\n   * _I haven\'t seen nor heard regression so far_\r\n - [x] Allow to configure the GC microphone device (like WiiSpeak/Logitech USB)\r\n - [x] Ensure 2 GC microphones can work simultaneously\r\n\r\nI\'m able to test the following GC games:\r\n - [x] Karaoke Revolution Party\r\n    - You can hear your voice back\r\n    - It supports 2 microphones when playing duet songs\r\n - [x] Mario Party 6\r\n - [x] Mario Party 7\r\n\r\nKaraoke Revolution Party with two different microphones connected:\r\n<img width="583" height="480" alt="image" src="https://github.com/user-attachments/assets/62816d0b-b128-4d1e-be64-66390efd845e" />\r\n\r\nI also have several Wii games compatible with the Wii Speak and USB microphones.\r\n\r\nReady to be reviewed & tested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14774/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/14774/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6500814636', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14774#issuecomment-6500814636', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14774', 'id': 6500814636, 'node_id': 'IC_kwDOALCn2M8AAAABg3qPLA', '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-10-29T15:23:57Z', 'updated_at': '2026-10-29T15:23:57Z', 'body': "This PR should be ready. I tested it against Mario 6 and 7, confirmed that Karaoke Revolution Party can detect two different microphones. I didn't find a noticeable regression (e.g. performance) between master and this branch.\r\n\r\nWii games shouldn't be affected but for good measure I tested some of them like Jeopardy and didn't notice regressions. FWIW, I tested Mario Party games in French, and words were detected properly.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6500814636/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, 'minimized': 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-10-29T13:16:12Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3367, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3367, 'open_issues': 485, 'watchers': 15741, '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-10-29T14:39:33.738461	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'SuperSamus', 'action': 'created', 'id': 14884, 'title': 'GPFifo: Avoid memmove call at end of UpdateGatherPipe', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14884#issuecomment-6499695626', 'safe_author': True, 'body': "> it's just that memmove is at a non-insignificant 3% in the profiler, and I checked if this was the cause. So, this PR is mostly to prevent anyone else who wanted to try reducing its percentage to not waste time with this, because now it's already optimized.\r\n\r\nAbout that... I found out that in GCC specifically, there's an optimization that if the count is known to be lower than a certain value (which is the case here), [then it's capable of inlining it](https://gcc.godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGEgBykrgAyeAyYAHI%2BAEaYxCBmpAAOqAqETgwe3r4ByanpAqHhUSyx8Yl2mA4ZQgRMxARZPn5cgZXVArX1BEWRMXEJtnUNTTmtQ929JWUJAJS2qF7EyOwc5gDMYcjeWADUJutu9cRMAJ4H2CYaAIIbWzuY%2B4fICgT4ghdXt2abDNteewObheBGIYWAnxudz%2BDyebi8jlohHO60uUJuADdUHh0Ls2CwWKgMZgAPoETCvCCvdAgEBeMIEfxkgBUu2OpF2aQAXqSCLtUFQqEoCBzubzOXgebN9gB2Kw3XaK3Z4Ki7KmSx6fdYAEV26zM0pMcq%2BStNnLetK8DGImCYyAQTGi9AgswO8uupqN2pNSvxhOJEHZbOIxH2ln5guFoo1rvW7q9Xw481onAArLw/BwtKRUJw3NZrJzFstNT8eKQCJok/MANYgSRcAB0Un8ZjMMtb/kk60k/i7%2Bk4kgzVZznF4ChAGgrVfmcFgMEQKFQLCSdDi5EoaBXa/i20MwDJxCtNb4dHJxAnEGiI%2BiYXqp045dvzGIpwA8tFtFVK9xeFu2IIb4MLQD5ZrwWDRF4wBHLQtATr%2BpBYCw%2B7iGBiF4Da1TEvB2aYKoVQIqs5YMpgKZoUi0QnK%2BHhYCOoJ4Cwj68MSxDRKkmDapgyFGEiRgznwBjAAoABqeCYAA7m%2BSSMExMiCCIYjsFIcnyEoagjroXD6PuKAFpY%2Bh4NEE6QPMqBJI4AjwQAtG%2BZi8EScRglgxlQMwbAgNSLGkBiYheOwpiWNYPyzPM7QWX4ECuKMLRBAw6BTP08RaSkaThdFegpQUDAJaUAxaWFNTDI0njNHoBWdEVOUzPlRXpTVkxhH0uVJaFxYrBIyZpsOaG5hwuyqP4ABsVmDZIux7kYaqgse0oQLghAkGG6xcLMvA/loIWkAgtpYPELoDhwQ6kIxqbrI2Gipj8Zipqm/hcOsACcp2pqQmbZr146TtOYGzguEBIFuq70GQFAQIDO4gBiyBJEkJIYlwD0kgY5KvCSqijaetDnpe15oc%2B96yfjr4fl%2BDiyf%2BjAEEBIEjhBUEwXBslIShqzZvgmGONhI54QR5KySRZHZhRVGnDRrNrWCjEISxbFKJx3HALxoA/QJTBCaJElSTJCH8PJojiMpuuqSo6hobo6zaXxAVWPpFEuaZ5kZPBAD0tm7M71K6YFljIxSBD2SxTkUvAoWkd%2BGQuHFdWxfFjXTHleSpRk0eZeFVUJ%2BVDBdCMJVjLYYcdFnlVx4lZW1bnMWvA1xSlytCxLO1ddkemr0jr1/WjXiChQ7s8MPY2vuvGq81EKGGwrWtM7zNtTC7ZQnWHbwjGSINjYPZIMqDTKkgNkNGgr6mg2tz1Y62F963VqQdbto2e/rOsm/6tvGjtgd6zde9p8X798D/Uu27Aw3GDZcQMBhCWYEkBQCBUAihoFjOIOMbx3lfITZB75PzfnJsuACVNgKgTZpgSC0ExCMwQszHi4t0IczwFzNCPNkCEX5oIUiI5hb3jFnRSWskZbsXlihcE/EqCCREmJSS0lMzliNgpA20gjaKBNhpQYBgrZ6RsHbX%2Bbl2BUBYCKFiIBpoMBrJtMy4VrK2QDo5HEwdYCaI8m8LyPlvD%2BVUcFUO9hwqR3cBXPQIQS7NQyvkNK3jkqBIyOnJK%2Bd3GFW6NHTO2ceh%2BOqhMHO2RK7Fxrv4uuCg2pKQXi3N69lOD9SGiNMawBkDICmkeQxs0R6LXHqtb6G1p47QGPtOs6wNBrwelIHsp0%2BxmF7EfMiR0Cmjg4J9Kc38F52WPp/CZTTL4sTSM4SQQA%3D).\r\n(I, like, *assumed* that obviously there had to be a `call memmove` in `UpdateGatherPipe`, but nope there isn't.)\r\n\r\nSo that's why the memmove percentage was unchanged in my testing. This means that the improvement on Clang and MSVC is probably better than the one in GCC (though it's still going to be small).", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14884', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14884/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14884/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14884/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14884', 'id': 5528247031, 'node_id': 'PR_kwDOALCn2M8AAAABEby2_g', 'number': 14884, 'title': 'GPFifo: Avoid memmove call at end of UpdateGatherPipe', 'user': {'login': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-09-21T14:21:15Z', 'updated_at': '2026-10-29T14:39:30Z', 'closed_at': None, 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14884', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14884', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14884.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14884.patch', 'merged_at': None}, 'body': '`memmove` is optimized for being called a few times with huge sizes, not all the time with small sizes.\r\nBy using a constant size, the call can be inlined to a few SIMD instructions.\r\nUpdateGatherPipe is called pretty often (spends around 0.5% of CPU time on a demanding game according to profiler), so while this is less than a 0.1% performance improvement, it\'s at least a 0.01% improvement. (Actually benchmarking a game is fruitless, performance is too inconsistent.)\r\n\r\n(The functions that would really like the constant copy size are the `memcpy`s in Memmap and PPCCache, which would be beneficial mainly when using the (cached) interpreter or enabling the data cache: the functions that use it are often called with a constant argument, but it doesn\'t propagate since they aren\'t implemented in a header. However, that would require a bit of a rework.)\r\n\r\n<super><sub>I apologize for this "filler" PR (even though I actually spent way too much time wrestling with MSVC, and even [found a bug](https://developercommunity.visualstudio.com/t/MSVC-O2-miscompiles-std::ranges::copy_n/11155522)), it\'s just that memmove is at a non-insignificant 3% in the profiler, and I checked if this was the cause. So, this PR is mostly to prevent anyone else who wanted to try reducing its percentage to not waste time with this, because now it\'s already optimized. Also, Excite Truck does seem a _tiiiny_ little better in every attempt to compare master and PR? I\'m not writing it to the commit message because it\'s more vibes then a scientific measure which again, it\'s too inconsistent to do it properly.</sub></super>', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14884/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/14884/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6499695626', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14884#issuecomment-6499695626', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14884', 'id': 6499695626, 'node_id': 'IC_kwDOALCn2M8AAAABg2l8Cg', 'user': {'login': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T14:39:30Z', 'updated_at': '2026-10-29T14:39:30Z', 'body': "> it's just that memmove is at a non-insignificant 3% in the profiler, and I checked if this was the cause. So, this PR is mostly to prevent anyone else who wanted to try reducing its percentage to not waste time with this, because now it's already optimized.\r\n\r\nAbout that... I found out that in GCC specifically, there's an optimization that if the count is known to be lower than a certain value (which is the case here), [then it's capable of inlining it](https://gcc.godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGEgBykrgAyeAyYAHI%2BAEaYxCBmpAAOqAqETgwe3r4ByanpAqHhUSyx8Yl2mA4ZQgRMxARZPn5cgZXVArX1BEWRMXEJtnUNTTmtQ929JWUJAJS2qF7EyOwc5gDMYcjeWADUJutu9cRMAJ4H2CYaAIIbWzuY%2B4fICgT4ghdXt2abDNteewObheBGIYWAnxudz%2BDyebi8jlohHO60uUJuADdUHh0Ls2CwWKgMZgAPoETCvCCvdAgEBeMIEfxkgBUu2OpF2aQAXqSCLtUFQqEoCBzubzOXgebN9gB2Kw3XaK3Z4Ki7KmSx6fdYAEV26zM0pMcq%2BStNnLetK8DGImCYyAQTGi9AgswO8uupqN2pNSvxhOJEHZbOIxH2ln5guFoo1rvW7q9Xw481onAArLw/BwtKRUJw3NZrJzFstNT8eKQCJok/MANYgSRcAB0Un8ZjMMtb/kk60k/i7%2Bk4kgzVZznF4ChAGgrVfmcFgMEQKFQLCSdDi5EoaBXa/i20MwDJxCtNb4dHJxAnEGiI%2BiYXqp045dvzGIpwA8tFtFVK9xeFu2IIb4MLQD5ZrwWDRF4wBHLQtATr%2BpBYCw%2B7iGBiF4Da1TEvB2aYKoVQIqs5YMpgKZoUi0QnK%2BHhYCOoJ4Cwj68MSxDRKkmDapgyFGEiRgznwBjAAoABqeCYAA7m%2BSSMExMiCCIYjsFIcnyEoagjroXD6PuKAFpY%2Bh4NEE6QPMqBJI4AjwQAtG%2BZi8EScRglgxlQMwbAgNSLGkBiYheOwpiWNYPyzPM7QWX4ECuKMLRBAw6BTP08RaSkaThdFegpQUDAJaUAxaWFNTDI0njNHoBWdEVOUzPlRXpTVkxhH0uVJaFxYrBIyZpsOaG5hwuyqP4ABsVmDZIux7kYaqgse0oQLghAkGG6xcLMvA/loIWkAgtpYPELoDhwQ6kIxqbrI2Gipj8Zipqm/hcOsACcp2pqQmbZr146TtOYGzguEBIFuq70GQFAQIDO4gBiyBJEkJIYlwD0kgY5KvCSqijaetDnpe15oc%2B96yfjr4fl%2BDiyf%2BjAEEBIEjhBUEwXBslIShqzZvgmGONhI54QR5KySRZHZhRVGnDRrNrWCjEISxbFKJx3HALxoA/QJTBCaJElSTJCH8PJojiMpuuqSo6hobo6zaXxAVWPpFEuaZ5kZPBAD0tm7M71K6YFljIxSBD2SxTkUvAoWkd%2BGQuHFdWxfFjXTHleSpRk0eZeFVUJ%2BVDBdCMJVjLYYcdFnlVx4lZW1bnMWvA1xSlytCxLO1ddkemr0jr1/WjXiChQ7s8MPY2vuvGq81EKGGwrWtM7zNtTC7ZQnWHbwjGSINjYPZIMqDTKkgNkNGgr6mg2tz1Y62F963VqQdbto2e/rOsm/6tvGjtgd6zde9p8X798D/Uu27Aw3GDZcQMBhCWYEkBQCBUAihoFjOIOMbx3lfITZB75PzfnJsuACVNgKgTZpgSC0ExCMwQszHi4t0IczwFzNCPNkCEX5oIUiI5hb3jFnRSWskZbsXlihcE/EqCCREmJSS0lMzliNgpA20gjaKBNhpQYBgrZ6RsHbX%2Bbl2BUBYCKFiIBpoMBrJtMy4VrK2QDo5HEwdYCaI8m8LyPlvD%2BVUcFUO9hwqR3cBXPQIQS7NQyvkNK3jkqBIyOnJK%2Bd3GFW6NHTO2ceh%2BOqhMHO2RK7Fxrv4uuCg2pKQXi3N69lOD9SGiNMawBkDICmkeQxs0R6LXHqtb6G1p47QGPtOs6wNBrwelIHsp0%2BxmF7EfMiR0Cmjg4J9Kc38F52WPp/CZTTL4sTSM4SQQA%3D).\r\n(I, like, *assumed* that obviously there had to be a `call memmove` in `UpdateGatherPipe`, but nope there isn't.)\r\n\r\nSo that's why the memmove percentage was unchanged in my testing. This means that the improvement on Clang and MSVC is probably better than the one in GCC (though it's still going to be small).", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6499695626/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, 'minimized': 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-10-29T13:16:12Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15741, 'watchers_count': 15741, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3366, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3366, 'open_issues': 485, 'watchers': 15741, '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': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-29T02:17:36.601276	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'Pokechu22', 'action': 'created', 'id': 11354, 'title': 'DSPHLE: Add Desert Bus libasnd ucode variants', 'url': 'https://github.com/dolphin-emu/dolphin/pull/11354#issuecomment-6486057909', 'safe_author': True, 'body': "> (I came across this because I'm having issues running Desert Bus on Dolphin and decided to snoop around Github to figure out if it's something I'm doing.)\r\n\r\nSee #11350. I don't entirely remember what I was doing there though.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/11354', 'id': 1504075512, 'node_id': 'PR_kwDOALCn2M5F15eI', 'number': 11354, 'title': 'DSPHLE: Add Desert Bus libasnd ucode variants', 'user': {'login': 'Pokechu22', 'id': 8334194, 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8334194?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Pokechu22', 'html_url': 'https://github.com/Pokechu22', 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'closed', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 2, 'created_at': '2022-12-20T06:57:41Z', 'updated_at': '2026-10-29T02:17:34Z', 'closed_at': '2022-12-20T19:01:22Z', 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/11354', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/11354', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/11354.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/11354.patch', 'merged_at': '2022-12-20T19:01:22Z'}, 'body': "The [Desert Bus homebrew](https://wiibrew.org/wiki/Desert_Bus) uses custom libasnd DSP ucode. Specifically, v1.0.4 and v1.0.5 are modified versions of the ucode that was added to the libogc repo in devkitpro/libogc@b1b8ecab3af3745c8df0b401abd512bdf5fcc011 (although the binary that was added in that commit does not match the code, and a matching binary only started being used in 2020 - see #10763 for my other notes). That libogc patch is attributed to the author of the homebrew, for what it's worth.\r\n\r\n<details><summary>The difference between the libogc code and v1.0.4 is this, which swaps the left and right channels for stereo audio:</summary>\r\n\r\n```diff\r\ndiff --git a/dsp_mixer.s b/dsp_mixer_desert_bus_v1.0.4.s\r\nindex 3b52614..9de5b84 100644\r\n--- a/dsp_mixer.s\r\n+++ b/dsp_mixer_v1.0.4.s\r\n@@ -834,10 +834,10 @@ stereo_8bits:\r\n        lrri $ACL0, @$AR2\r\n        mrr  $ACM0, $ACL0\r\n        andi $ACM0, #0xff00\r\n-       mrr  $AXH1, $ACM0\r\n+       mrr  $AXH0, $ACM0\r\n        lsl  $ACC0, #8\r\n\r\n-       mrr  $AXH0, $ACL0\r\n+       mrr  $AXH1, $ACL0\r\n        jmp     out_samp\r\n\r\n mono_16bits:\r\n@@ -852,8 +852,8 @@ stereo_16bits:\r\n\r\n // 16 bits stereo\r\n\r\n-       lrri $AXH1, @$AR2\r\n        lrri $AXH0, @$AR2\r\n+       lrri $AXH1, @$AR2\r\n        jmp     out_samp\r\n\r\n mono_8bits_unsigned:\r\n@@ -892,10 +892,10 @@ stereo_8bits_unsigned:\r\n        xori $ACM0, #0x8080 // convert unsigned->signed\r\n        mrr  $ACL0, $ACM0\r\n        andi $ACM0, #0xff00\r\n-       mrr  $AXH1, $ACM0\r\n+       mrr  $AXH0, $ACM0\r\n        lsl  $ACC0, #8\r\n\r\n-       mrr  $AXH0, $ACL0\r\n+       mrr  $AXH1, $ACL0\r\n        jmp     out_samp\r\n\r\n stereo_16bits_le:\r\n@@ -908,8 +908,8 @@ stereo_16bits_le:\r\n        lsl  $ACC1, #8 // byteswap\r\n        lsl  $ACC0, #8\r\n\r\n-       mrr  $AXH1, $ACM1\r\n-       mrr  $AXH0, $ACM0\r\n+       mrr  $AXH0, $ACM1\r\n+       mrr  $AXH1, $ACM0\r\n        //jmp   out_samp\r\n\r\n out_samp:\r\n```\r\n\r\n</details><details><summary>The difference between v1.0.4 and v1.0.5 is this:</summary>\r\n\r\n```diff\r\ndiff --git a/dsp_mixer_desert_bus_v1.0.4.s b/dsp_mixer_desert_bus_v1.0.5.s\r\nindex 9de5b84..9f5d428 100644\r\n--- a/dsp_mixer_desert_bus_v1.0.4.s\r\n+++ b/dsp_mixer_desert_bus_v1.0.5.s\r\n@@ -190,6 +190,14 @@ MEM_SND:\tequ\tdata_end ; it need 2048 words (4096 bytes)\r\n \tjmp\texception6\r\n \tjmp\texception7\r\n \r\n+\t; decodes as sbclr #0x04\r\n+\t; (note that sbclr has unused/ignored bits currently, and the canon version would be 1204)\r\n+\tcw 0x1234\r\n+\t; decodes as subr'l $ACC0, $AX1.H : $AC1.M, @$AR0\r\n+\tcw 0x5678\r\n+\t; decodes as bloopi #0x11, 0x2222\r\n+\tcw 0x1111\r\n+\tcw 0x2222\r\n \tlri     $CONFIG, #0xff\r\n \tlri\t$SR,#0\r\n \ts16         \r\n```\r\n\r\n</details>\r\n\r\nv1.0.0 and v1.0.3 seem to be lost. They would have originally existed at https://wiibrew.org/wiki/Media:Desertbus.zip but this was not archived; [both versions were uploaded to this location](https://wiibrew.org/w/index.php?title=Special:Log&page=File%3ADesertbus.zip).\r\n\r\nThis change does not impact desert bus booting; see #11350 for that. I'm creating a separate PR so that it can be reviewed faster.", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/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/11354/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6486057909', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/11354#issuecomment-6486057909', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354', 'id': 6486057909, 'node_id': 'IC_kwDOALCn2M8AAAABgpljtQ', 'user': {'login': 'Pokechu22', 'id': 8334194, 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8334194?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Pokechu22', 'html_url': 'https://github.com/Pokechu22', 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T02:17:34Z', 'updated_at': '2026-10-29T02:17:34Z', 'body': "> (I came across this because I'm having issues running Desert Bus on Dolphin and decided to snoop around Github to figure out if it's something I'm doing.)\r\n\r\nSee #11350. I don't entirely remember what I was doing there though.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6486057909/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, 'minimized': 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-10-29T01:35:27Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15735, 'watchers_count': 15735, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3362, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3362, 'open_issues': 485, 'watchers': 15735, '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': 'Pokechu22', 'id': 8334194, 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8334194?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Pokechu22', 'html_url': 'https://github.com/Pokechu22', 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-29T02:10:44.626563	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'edited', 'id': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6485838659', 'safe_author': True, 'body': '>58:48:892 Common/Timer.cpp:230 D[COMMON]: HardwareSleepUntil via MWAITX. TSC: 4392 MHz\r\n\r\nYou should now see logs like this in spammed in debug builds while a game is running (COMMON type, DEBUG verbosity).\r\nThe TSC rate will generally align with the frequency of your CPU.\r\n', 'raw': {'action': 'edited', 'changes': {'body': {'from': '>58:48:892 Common/Timer.cpp:230 D[COMMON]: HardwareSleepUntil via MWAITX. TSC: 4392 MHz\r\n\r\nYou should see logs like this in spammed in debug builds while a game is running (COMMON type, DEBUG verbosity).\r\nThe TSC rate will generally align with the frequency of your CPU.\r\n'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'id': 6050000199, 'node_id': 'PR_kwDOALCn2M8AAAABK5W55Q', 'number': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', '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, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-29T02:03:00Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14956', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.patch', 'merged_at': None}, 'body': '"Precision Frame Timing" should no longer be as power hungry on x86.\nTSC rate for TPAUSE/MWAITX is read from CPUID when available (Intel) or measured otherwise (AMD).\n\nPlease test Intel CPUs.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/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/14956/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6485838659', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6485838659', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6485838659, 'node_id': 'IC_kwDOALCn2M8AAAABgpYLQw', '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}, 'created_at': '2026-10-29T02:03:00Z', 'updated_at': '2026-10-29T02:10:43Z', 'body': '>58:48:892 Common/Timer.cpp:230 D[COMMON]: HardwareSleepUntil via MWAITX. TSC: 4392 MHz\r\n\r\nYou should now see logs like this in spammed in debug builds while a game is running (COMMON type, DEBUG verbosity).\r\nThe TSC rate will generally align with the frequency of your CPU.\r\n', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6485838659/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, 'minimized': 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-10-29T01:35:27Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15735, 'watchers_count': 15735, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3362, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3362, 'open_issues': 485, 'watchers': 15735, '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': 'gh_issue_comment'}
2026-10-29T02:03:02.426207	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6485838659', 'safe_author': True, 'body': '>58:48:892 Common/Timer.cpp:230 D[COMMON]: HardwareSleepUntil via MWAITX. TSC: 4392 MHz\r\n\r\nYou should see logs like this in spammed in debug builds while a game is running (COMMON type, DEBUG verbosity).\r\nThe TSC rate will generally align with the frequency of your CPU.\r\n', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'id': 6050000199, 'node_id': 'PR_kwDOALCn2M8AAAABK5W55Q', 'number': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', '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, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-29T02:03:00Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14956', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.patch', 'merged_at': None}, 'body': '"Precision Frame Timing" should no longer be as power hungry on x86.\nTSC rate for TPAUSE/MWAITX is read from CPUID when available (Intel) or measured otherwise (AMD).\n\nPlease test Intel CPUs.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/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/14956/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6485838659', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6485838659', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6485838659, 'node_id': 'IC_kwDOALCn2M8AAAABgpYLQw', '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}, 'created_at': '2026-10-29T02:03:00Z', 'updated_at': '2026-10-29T02:03:00Z', 'body': '>58:48:892 Common/Timer.cpp:230 D[COMMON]: HardwareSleepUntil via MWAITX. TSC: 4392 MHz\r\n\r\nYou should see logs like this in spammed in debug builds while a game is running (COMMON type, DEBUG verbosity).\r\nThe TSC rate will generally align with the frequency of your CPU.\r\n', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6485838659/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, 'minimized': 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-10-29T01:35:27Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15735, 'watchers_count': 15735, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3362, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 485, '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': 3362, 'open_issues': 485, 'watchers': 15735, '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': 'gh_issue_comment'}
2026-10-28T23:00:04.937785	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'citrusella', 'action': 'created', 'id': 11354, 'title': 'DSPHLE: Add Desert Bus libasnd ucode variants', 'url': 'https://github.com/dolphin-emu/dolphin/pull/11354#issuecomment-6482900630', 'safe_author': False, 'body': "> v1.0.0 and v1.0.3 seem to be lost. They would have originally existed at https://wiibrew.org/wiki/Media:Desertbus.zip but this was not archived; [both versions were uploaded to this location](https://wiibrew.org/w/index.php?title=Special:Log&page=File%3ADesertbus.zip).\r\n\r\nJust so you know, a lot of times files are still stored on-server when deleted in MediaWiki and can be undeleted by an [administrator](https://wiibrew.org/wiki/Special:ListUsers?username=&group=sysop&wpsubmit=&wpFormIdentifier=mw-listusers-form&limit=50), though they'd have to agree to do it. So it's possible they're not *fully lost*.\r\n\r\n(I came across this because I'm having issues running Desert Bus on Dolphin and decided to snoop around Github to figure out if it's something I'm doing.)", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/11354', 'id': 1504075512, 'node_id': 'PR_kwDOALCn2M5F15eI', 'number': 11354, 'title': 'DSPHLE: Add Desert Bus libasnd ucode variants', 'user': {'login': 'Pokechu22', 'id': 8334194, 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/8334194?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Pokechu22', 'html_url': 'https://github.com/Pokechu22', 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'closed', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2022-12-20T06:57:41Z', 'updated_at': '2026-10-28T23:00:02Z', 'closed_at': '2022-12-20T19:01:22Z', 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/11354', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/11354', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/11354.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/11354.patch', 'merged_at': '2022-12-20T19:01:22Z'}, 'body': "The [Desert Bus homebrew](https://wiibrew.org/wiki/Desert_Bus) uses custom libasnd DSP ucode. Specifically, v1.0.4 and v1.0.5 are modified versions of the ucode that was added to the libogc repo in devkitpro/libogc@b1b8ecab3af3745c8df0b401abd512bdf5fcc011 (although the binary that was added in that commit does not match the code, and a matching binary only started being used in 2020 - see #10763 for my other notes). That libogc patch is attributed to the author of the homebrew, for what it's worth.\r\n\r\n<details><summary>The difference between the libogc code and v1.0.4 is this, which swaps the left and right channels for stereo audio:</summary>\r\n\r\n```diff\r\ndiff --git a/dsp_mixer.s b/dsp_mixer_desert_bus_v1.0.4.s\r\nindex 3b52614..9de5b84 100644\r\n--- a/dsp_mixer.s\r\n+++ b/dsp_mixer_v1.0.4.s\r\n@@ -834,10 +834,10 @@ stereo_8bits:\r\n        lrri $ACL0, @$AR2\r\n        mrr  $ACM0, $ACL0\r\n        andi $ACM0, #0xff00\r\n-       mrr  $AXH1, $ACM0\r\n+       mrr  $AXH0, $ACM0\r\n        lsl  $ACC0, #8\r\n\r\n-       mrr  $AXH0, $ACL0\r\n+       mrr  $AXH1, $ACL0\r\n        jmp     out_samp\r\n\r\n mono_16bits:\r\n@@ -852,8 +852,8 @@ stereo_16bits:\r\n\r\n // 16 bits stereo\r\n\r\n-       lrri $AXH1, @$AR2\r\n        lrri $AXH0, @$AR2\r\n+       lrri $AXH1, @$AR2\r\n        jmp     out_samp\r\n\r\n mono_8bits_unsigned:\r\n@@ -892,10 +892,10 @@ stereo_8bits_unsigned:\r\n        xori $ACM0, #0x8080 // convert unsigned->signed\r\n        mrr  $ACL0, $ACM0\r\n        andi $ACM0, #0xff00\r\n-       mrr  $AXH1, $ACM0\r\n+       mrr  $AXH0, $ACM0\r\n        lsl  $ACC0, #8\r\n\r\n-       mrr  $AXH0, $ACL0\r\n+       mrr  $AXH1, $ACL0\r\n        jmp     out_samp\r\n\r\n stereo_16bits_le:\r\n@@ -908,8 +908,8 @@ stereo_16bits_le:\r\n        lsl  $ACC1, #8 // byteswap\r\n        lsl  $ACC0, #8\r\n\r\n-       mrr  $AXH1, $ACM1\r\n-       mrr  $AXH0, $ACM0\r\n+       mrr  $AXH0, $ACM1\r\n+       mrr  $AXH1, $ACM0\r\n        //jmp   out_samp\r\n\r\n out_samp:\r\n```\r\n\r\n</details><details><summary>The difference between v1.0.4 and v1.0.5 is this:</summary>\r\n\r\n```diff\r\ndiff --git a/dsp_mixer_desert_bus_v1.0.4.s b/dsp_mixer_desert_bus_v1.0.5.s\r\nindex 9de5b84..9f5d428 100644\r\n--- a/dsp_mixer_desert_bus_v1.0.4.s\r\n+++ b/dsp_mixer_desert_bus_v1.0.5.s\r\n@@ -190,6 +190,14 @@ MEM_SND:\tequ\tdata_end ; it need 2048 words (4096 bytes)\r\n \tjmp\texception6\r\n \tjmp\texception7\r\n \r\n+\t; decodes as sbclr #0x04\r\n+\t; (note that sbclr has unused/ignored bits currently, and the canon version would be 1204)\r\n+\tcw 0x1234\r\n+\t; decodes as subr'l $ACC0, $AX1.H : $AC1.M, @$AR0\r\n+\tcw 0x5678\r\n+\t; decodes as bloopi #0x11, 0x2222\r\n+\tcw 0x1111\r\n+\tcw 0x2222\r\n \tlri     $CONFIG, #0xff\r\n \tlri\t$SR,#0\r\n \ts16         \r\n```\r\n\r\n</details>\r\n\r\nv1.0.0 and v1.0.3 seem to be lost. They would have originally existed at https://wiibrew.org/wiki/Media:Desertbus.zip but this was not archived; [both versions were uploaded to this location](https://wiibrew.org/w/index.php?title=Special:Log&page=File%3ADesertbus.zip).\r\n\r\nThis change does not impact desert bus booting; see #11350 for that. I'm creating a separate PR so that it can be reviewed faster.", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354/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/11354/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6482900630', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/11354#issuecomment-6482900630', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/11354', 'id': 6482900630, 'node_id': 'IC_kwDOALCn2M8AAAABgmk2lg', 'user': {'login': 'citrusella', 'id': 14182450, 'node_id': 'MDQ6VXNlcjE0MTgyNDUw', 'avatar_url': 'https://avatars.githubusercontent.com/u/14182450?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/citrusella', 'html_url': 'https://github.com/citrusella', 'followers_url': 'https://api.github.com/users/citrusella/followers', 'following_url': 'https://api.github.com/users/citrusella/following{/other_user}', 'gists_url': 'https://api.github.com/users/citrusella/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/citrusella/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/citrusella/subscriptions', 'organizations_url': 'https://api.github.com/users/citrusella/orgs', 'repos_url': 'https://api.github.com/users/citrusella/repos', 'events_url': 'https://api.github.com/users/citrusella/events{/privacy}', 'received_events_url': 'https://api.github.com/users/citrusella/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-28T23:00:02Z', 'updated_at': '2026-10-28T23:00:02Z', 'body': "> v1.0.0 and v1.0.3 seem to be lost. They would have originally existed at https://wiibrew.org/wiki/Media:Desertbus.zip but this was not archived; [both versions were uploaded to this location](https://wiibrew.org/w/index.php?title=Special:Log&page=File%3ADesertbus.zip).\r\n\r\nJust so you know, a lot of times files are still stored on-server when deleted in MediaWiki and can be undeleted by an [administrator](https://wiibrew.org/wiki/Special:ListUsers?username=&group=sysop&wpsubmit=&wpFormIdentifier=mw-listusers-form&limit=50), though they'd have to agree to do it. So it's possible they're not *fully lost*.\r\n\r\n(I came across this because I'm having issues running Desert Bus on Dolphin and decided to snoop around Github to figure out if it's something I'm doing.)", 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6482900630/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, 'minimized': 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-10-28T22:39:26Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15733, 'watchers_count': 15733, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3361, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3361, 'open_issues': 484, 'watchers': 15733, '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': 'citrusella', 'id': 14182450, 'node_id': 'MDQ6VXNlcjE0MTgyNDUw', 'avatar_url': 'https://avatars.githubusercontent.com/u/14182450?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/citrusella', 'html_url': 'https://github.com/citrusella', 'followers_url': 'https://api.github.com/users/citrusella/followers', 'following_url': 'https://api.github.com/users/citrusella/following{/other_user}', 'gists_url': 'https://api.github.com/users/citrusella/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/citrusella/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/citrusella/subscriptions', 'organizations_url': 'https://api.github.com/users/citrusella/orgs', 'repos_url': 'https://api.github.com/users/citrusella/repos', 'events_url': 'https://api.github.com/users/citrusella/events{/privacy}', 'received_events_url': 'https://api.github.com/users/citrusella/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-28T21:55:20.817922	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'SuperSamus', 'action': 'edited', 'id': 14877, 'title': 'PerformanceTracker: Small cleanup, properly use RunningVariance for the standard deviation', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14877#issuecomment-6481465058', 'safe_author': True, 'body': 'Why do math, when you can just test out a bad-case scenario?\r\n\r\nTesting a code that creates a random array of very unstable frametimes, and a few stutters randomly inserted:\r\n```cpp\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n```\r\n\r\nHow close is the final running std, compared to calculating it from scratch in the queue?\r\nRunning a few times, and...\r\n```\r\nActual std is 0.0011613785790244263 seconds\r\nRunning std   0.0011613785791494136, diff 1.2498726012499795e-13\r\n\r\nActual std is 0.0011512422871999381 seconds\r\nRunning std   0.0011512422871978918, diff 2.046323180349141e-15\r\n\r\nActual std is 0.005481212866823841 seconds\r\nRunning std   0.00548121286682146, diff 2.3809079707781677e-15\r\n\r\nActual std is 0.00969206635198026 seconds\r\nRunning std   0.009692066351979268, diff 9.922618282587337e-16\r\n``` \r\n\r\nSo... I suppose nothing to worry about.\r\n\r\n<details>\r\n<summary>Code used for testing</summary>\r\n\r\n```cpp\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <print>\r\n#include <random>\r\n#include <ranges>\r\n#include <span>\r\n#include <vector>\r\n\r\ntemplate <typename T>\r\nclass RunningMean\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x) { m_mean = m_mean + (x - m_mean) / ++m_count; }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_count <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n    m_mean = m_mean - (x - m_mean) / --m_count;\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_count; }\r\n  constexpr T Mean() const { return m_mean; }\r\n  constexpr T Total() const { return m_mean * m_count; }\r\n\r\nprivate:\r\n  size_t m_count = 0;\r\n  T m_mean{};\r\n};\r\n\r\ntemplate <typename T>\r\nclass RunningVariance\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x)\r\n  {\r\n    const auto old_mean = m_running_mean.Mean();\r\n    m_running_mean.Push(x);\r\n    m_variance += (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_running_mean.Count() <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n\r\n    const T old_mean = m_running_mean.Mean();\r\n    m_running_mean.Pop(x);\r\n    m_variance -= (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_running_mean.Count(); }\r\n  constexpr T Mean() const { return m_running_mean.Mean(); }\r\n  constexpr T Total() const { return m_running_mean.Total(); }\r\n\r\n  constexpr T Variance() const { return m_variance / (Count() - 1); }\r\n  T StandardDeviation() const { return std::sqrt(Variance()); }\r\n\r\n  constexpr T PopulationVariance() const { return m_variance / Count(); }\r\n  T PopulationStandardDeviation() const { return std::sqrt(PopulationVariance()); }\r\n\r\nprivate:\r\n  RunningMean<T> m_running_mean;\r\n  T m_variance{};\r\n};\r\n\r\n// Function slopped with AI\r\ntemplate <std::floating_point T>\r\nvoid populate_random(std::span<T> arr, T C, T e, T B, T d, std::size_t M, std::mt19937& rng)\r\n{\r\n  std::uniform_real_distribution<T> U(T{-1}, T{1});\r\n  auto jitter = [&](T center, T limit) { return center + U(rng) * limit; };\r\n\r\n  // 1) Fill everything with C ± e\r\n  std::ranges::generate(arr, [&] { return jitter(C, e); });\r\n\r\n  // 2) Sample M distinct indices, then overwrite those with B ± d\r\n  std::vector<std::size_t> picked;\r\n  picked.reserve(M);\r\n  std::ranges::sample(std::views::iota(std::size_t{0}, arr.size()), std::back_inserter(picked), M,\r\n                      rng);\r\n\r\n  for (std::size_t i : picked)\r\n    arr[i] = jitter(B, d);\r\n}\r\n\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n\r\nint main()\r\n{\r\n  std::mt19937 rng(std::random_device{}());\r\n  // I apologise for allocating an entire vector (which would only be necessary for the final span)\r\n  // instead of generating the random dt on the fly. I\'m lazy.\r\n  std::vector<double> dts(TOTAL_FRAMES);\r\n  populate_random(std::span(dts), ACTUAL_FRAME_DT, ACTUAL_FRAME_ERR, STUTTER_FRAME_DT,\r\n                  STUTTER_FRAME_ERR, AVG_N_FRAMES_PER_STUTTER, rng);\r\n\r\n  const auto end_span = std::span(dts).last(MAX_DT_QUEUE_SIZE);\r\n  const double avg = std::ranges::fold_left(end_span, 0.0, std::plus{}) / MAX_DT_QUEUE_SIZE;\r\n  const double accurate_std = std::sqrt(\r\n      std::ranges::fold_left(\r\n          end_span, 0.0, [avg](double s2, double dt) { return s2 + ((dt - avg) * (dt - avg)); }) /\r\n      (MAX_DT_QUEUE_SIZE - 1));\r\n\r\n  std::println("Actual std is {} seconds", accurate_std);\r\n\r\n  RunningVariance<double> running_variance;\r\n\r\n  for (double dt : std::span(dts).first(MAX_DT_QUEUE_SIZE))\r\n  {\r\n    running_variance.Push(dt);\r\n  }\r\n  for (std::size_t i = MAX_DT_QUEUE_SIZE; i < dts.size(); ++i)\r\n  {\r\n    running_variance.Pop(dts[i - MAX_DT_QUEUE_SIZE]);\r\n    running_variance.Push(dts[i]);\r\n  }\r\n\r\n  std::println("Running std   {}, diff {}", running_variance.StandardDeviation(),\r\n               std::abs(accurate_std - running_variance.StandardDeviation()));\r\n}\r\n```\r\n</details>', 'raw': {'action': 'edited', 'changes': {'body': {'from': 'Why do math, when you can just test out a bad-case scenario?\r\n\r\nTesting a code that creates a random array of very unstable frametimes, and a few stutters randomly inserted:\r\n```cpp\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n```\r\n\r\nHow close is the final running std, compared to calculating it from scratch in the queue?\r\nRunning a few times, and...\r\n```\r\nActual std is 0.0011613785790244263 seconds\r\nRunning std   0.0011613785791494136, diff 1.2498726012499795e-13\r\n\r\nActual std is 0.0011512422871999381 seconds\r\nRunning std   0.0011512422871978918, diff 2.046323180349141e-15\r\n\r\nActual std is 0.005481212866823841 seconds\r\nRunning std   0.00548121286682146, diff 2.3809079707781677e-15\r\n\r\nActual std is 0.00969206635198026 seconds\r\nRunning std   0.009692066351979268, diff 9.922618282587337e-16\r\n``` \r\n\r\nSo... I suppose nothing to worry about.\r\n\r\n<details>\r\n<summary>Code used for testing</summary>\r\n```cpp\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <print>\r\n#include <random>\r\n#include <ranges>\r\n#include <span>\r\n#include <vector>\r\n\r\ntemplate <typename T>\r\nclass RunningMean\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x) { m_mean = m_mean + (x - m_mean) / ++m_count; }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_count <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n    m_mean = m_mean - (x - m_mean) / --m_count;\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_count; }\r\n  constexpr T Mean() const { return m_mean; }\r\n  constexpr T Total() const { return m_mean * m_count; }\r\n\r\nprivate:\r\n  size_t m_count = 0;\r\n  T m_mean{};\r\n};\r\n\r\ntemplate <typename T>\r\nclass RunningVariance\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x)\r\n  {\r\n    const auto old_mean = m_running_mean.Mean();\r\n    m_running_mean.Push(x);\r\n    m_variance += (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_running_mean.Count() <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n\r\n    const T old_mean = m_running_mean.Mean();\r\n    m_running_mean.Pop(x);\r\n    m_variance -= (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_running_mean.Count(); }\r\n  constexpr T Mean() const { return m_running_mean.Mean(); }\r\n  constexpr T Total() const { return m_running_mean.Total(); }\r\n\r\n  constexpr T Variance() const { return m_variance / (Count() - 1); }\r\n  T StandardDeviation() const { return std::sqrt(Variance()); }\r\n\r\n  constexpr T PopulationVariance() const { return m_variance / Count(); }\r\n  T PopulationStandardDeviation() const { return std::sqrt(PopulationVariance()); }\r\n\r\nprivate:\r\n  RunningMean<T> m_running_mean;\r\n  T m_variance{};\r\n};\r\n\r\n// Function slopped with AI\r\ntemplate <std::floating_point T>\r\nvoid populate_random(std::span<T> arr, T C, T e, T B, T d, std::size_t M, std::mt19937& rng)\r\n{\r\n  std::uniform_real_distribution<T> U(T{-1}, T{1});\r\n  auto jitter = [&](T center, T limit) { return center + U(rng) * limit; };\r\n\r\n  // 1) Fill everything with C ± e\r\n  std::ranges::generate(arr, [&] { return jitter(C, e); });\r\n\r\n  // 2) Sample M distinct indices, then overwrite those with B ± d\r\n  std::vector<std::size_t> picked;\r\n  picked.reserve(M);\r\n  std::ranges::sample(std::views::iota(std::size_t{0}, arr.size()), std::back_inserter(picked), M,\r\n                      rng);\r\n\r\n  for (std::size_t i : picked)\r\n    arr[i] = jitter(B, d);\r\n}\r\n\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n\r\nint main()\r\n{\r\n  std::mt19937 rng(std::random_device{}());\r\n  // I apologise for allocating an entire vector (which would only be necessary for the final span)\r\n  // instead of generating the random dt on the fly. I\'m lazy.\r\n  std::vector<double> dts(TOTAL_FRAMES);\r\n  populate_random(std::span(dts), ACTUAL_FRAME_DT, ACTUAL_FRAME_ERR, STUTTER_FRAME_DT,\r\n                  STUTTER_FRAME_ERR, AVG_N_FRAMES_PER_STUTTER, rng);\r\n\r\n  const auto end_span = std::span(dts).last(MAX_DT_QUEUE_SIZE);\r\n  const double avg = std::ranges::fold_left(end_span, 0.0, std::plus{}) / MAX_DT_QUEUE_SIZE;\r\n  const double accurate_std = std::sqrt(\r\n      std::ranges::fold_left(\r\n          end_span, 0.0, [avg](double s2, double dt) { return s2 + ((dt - avg) * (dt - avg)); }) /\r\n      (MAX_DT_QUEUE_SIZE - 1));\r\n\r\n  std::println("Actual std is {} seconds", accurate_std);\r\n\r\n  RunningVariance<double> running_variance;\r\n\r\n  for (double dt : std::span(dts).first(MAX_DT_QUEUE_SIZE))\r\n  {\r\n    running_variance.Push(dt);\r\n  }\r\n  for (std::size_t i = MAX_DT_QUEUE_SIZE; i < dts.size(); ++i)\r\n  {\r\n    running_variance.Pop(dts[i - MAX_DT_QUEUE_SIZE]);\r\n    running_variance.Push(dts[i]);\r\n  }\r\n\r\n  std::println("Running std   {}, diff {}", running_variance.StandardDeviation(),\r\n               std::abs(accurate_std - running_variance.StandardDeviation()));\r\n}\r\n```\r\n</details>'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877', 'id': 5501153399, 'node_id': 'PR_kwDOALCn2M8AAAABEGWgYg', 'number': 14877, 'title': 'PerformanceTracker: Small cleanup, properly use RunningVariance for the standard deviation', 'user': {'login': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 5, 'created_at': '2026-09-18T15:06:30Z', 'updated_at': '2026-10-28T21:46:00Z', 'closed_at': None, 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14877', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14877.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14877.patch', 'merged_at': None}, 'body': '`UpdateStats()` was calculating the standard deviation from the entirety of `m_dt_queue`, which has a noticeable performance impact when the frame rates are very high.\r\nOn a scene so light it runs at 3000 FPS, `UpdateStats()` was taking around 5% of the profiling (at default 1s sample window). Now it doesn\'t.\r\n\r\nI\'m not opening this PR with confidence.\r\nMainly I\'m not a fan of using `MathUtil::RunningVariance<double>` (I mean with `double` specifically, see the comment) since the `static_cast`s are ugly, but I have no better idea other than "the conditions to get an overflow with `DT::rep` are unlikely enough that there\'s no need to care".\r\nBut on the other hand, `double` causes the risk of the measurements getting less and less accurate over time.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/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/14877/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6481465058', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877#issuecomment-6481465058', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877', 'id': 6481465058, 'node_id': 'IC_kwDOALCn2M8AAAABglNO4g', 'user': {'login': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-28T21:45:59Z', 'updated_at': '2026-10-28T21:55:19Z', 'body': 'Why do math, when you can just test out a bad-case scenario?\r\n\r\nTesting a code that creates a random array of very unstable frametimes, and a few stutters randomly inserted:\r\n```cpp\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n```\r\n\r\nHow close is the final running std, compared to calculating it from scratch in the queue?\r\nRunning a few times, and...\r\n```\r\nActual std is 0.0011613785790244263 seconds\r\nRunning std   0.0011613785791494136, diff 1.2498726012499795e-13\r\n\r\nActual std is 0.0011512422871999381 seconds\r\nRunning std   0.0011512422871978918, diff 2.046323180349141e-15\r\n\r\nActual std is 0.005481212866823841 seconds\r\nRunning std   0.00548121286682146, diff 2.3809079707781677e-15\r\n\r\nActual std is 0.00969206635198026 seconds\r\nRunning std   0.009692066351979268, diff 9.922618282587337e-16\r\n``` \r\n\r\nSo... I suppose nothing to worry about.\r\n\r\n<details>\r\n<summary>Code used for testing</summary>\r\n\r\n```cpp\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <print>\r\n#include <random>\r\n#include <ranges>\r\n#include <span>\r\n#include <vector>\r\n\r\ntemplate <typename T>\r\nclass RunningMean\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x) { m_mean = m_mean + (x - m_mean) / ++m_count; }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_count <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n    m_mean = m_mean - (x - m_mean) / --m_count;\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_count; }\r\n  constexpr T Mean() const { return m_mean; }\r\n  constexpr T Total() const { return m_mean * m_count; }\r\n\r\nprivate:\r\n  size_t m_count = 0;\r\n  T m_mean{};\r\n};\r\n\r\ntemplate <typename T>\r\nclass RunningVariance\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x)\r\n  {\r\n    const auto old_mean = m_running_mean.Mean();\r\n    m_running_mean.Push(x);\r\n    m_variance += (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_running_mean.Count() <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n\r\n    const T old_mean = m_running_mean.Mean();\r\n    m_running_mean.Pop(x);\r\n    m_variance -= (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_running_mean.Count(); }\r\n  constexpr T Mean() const { return m_running_mean.Mean(); }\r\n  constexpr T Total() const { return m_running_mean.Total(); }\r\n\r\n  constexpr T Variance() const { return m_variance / (Count() - 1); }\r\n  T StandardDeviation() const { return std::sqrt(Variance()); }\r\n\r\n  constexpr T PopulationVariance() const { return m_variance / Count(); }\r\n  T PopulationStandardDeviation() const { return std::sqrt(PopulationVariance()); }\r\n\r\nprivate:\r\n  RunningMean<T> m_running_mean;\r\n  T m_variance{};\r\n};\r\n\r\n// Function slopped with AI\r\ntemplate <std::floating_point T>\r\nvoid populate_random(std::span<T> arr, T C, T e, T B, T d, std::size_t M, std::mt19937& rng)\r\n{\r\n  std::uniform_real_distribution<T> U(T{-1}, T{1});\r\n  auto jitter = [&](T center, T limit) { return center + U(rng) * limit; };\r\n\r\n  // 1) Fill everything with C ± e\r\n  std::ranges::generate(arr, [&] { return jitter(C, e); });\r\n\r\n  // 2) Sample M distinct indices, then overwrite those with B ± d\r\n  std::vector<std::size_t> picked;\r\n  picked.reserve(M);\r\n  std::ranges::sample(std::views::iota(std::size_t{0}, arr.size()), std::back_inserter(picked), M,\r\n                      rng);\r\n\r\n  for (std::size_t i : picked)\r\n    arr[i] = jitter(B, d);\r\n}\r\n\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n\r\nint main()\r\n{\r\n  std::mt19937 rng(std::random_device{}());\r\n  // I apologise for allocating an entire vector (which would only be necessary for the final span)\r\n  // instead of generating the random dt on the fly. I\'m lazy.\r\n  std::vector<double> dts(TOTAL_FRAMES);\r\n  populate_random(std::span(dts), ACTUAL_FRAME_DT, ACTUAL_FRAME_ERR, STUTTER_FRAME_DT,\r\n                  STUTTER_FRAME_ERR, AVG_N_FRAMES_PER_STUTTER, rng);\r\n\r\n  const auto end_span = std::span(dts).last(MAX_DT_QUEUE_SIZE);\r\n  const double avg = std::ranges::fold_left(end_span, 0.0, std::plus{}) / MAX_DT_QUEUE_SIZE;\r\n  const double accurate_std = std::sqrt(\r\n      std::ranges::fold_left(\r\n          end_span, 0.0, [avg](double s2, double dt) { return s2 + ((dt - avg) * (dt - avg)); }) /\r\n      (MAX_DT_QUEUE_SIZE - 1));\r\n\r\n  std::println("Actual std is {} seconds", accurate_std);\r\n\r\n  RunningVariance<double> running_variance;\r\n\r\n  for (double dt : std::span(dts).first(MAX_DT_QUEUE_SIZE))\r\n  {\r\n    running_variance.Push(dt);\r\n  }\r\n  for (std::size_t i = MAX_DT_QUEUE_SIZE; i < dts.size(); ++i)\r\n  {\r\n    running_variance.Pop(dts[i - MAX_DT_QUEUE_SIZE]);\r\n    running_variance.Push(dts[i]);\r\n  }\r\n\r\n  std::println("Running std   {}, diff {}", running_variance.StandardDeviation(),\r\n               std::abs(accurate_std - running_variance.StandardDeviation()));\r\n}\r\n```\r\n</details>', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6481465058/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, 'minimized': 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-10-28T20:58:48Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15732, 'watchers_count': 15732, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3360, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3360, 'open_issues': 484, 'watchers': 15732, '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': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-28T21:46:02.208059	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'SuperSamus', 'action': 'created', 'id': 14877, 'title': 'PerformanceTracker: Small cleanup, properly use RunningVariance for the standard deviation', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14877#issuecomment-6481465058', 'safe_author': True, 'body': 'Why do math, when you can just test out a bad-case scenario?\r\n\r\nTesting a code that creates a random array of very unstable frametimes, and a few stutters randomly inserted:\r\n```cpp\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n```\r\n\r\nHow close is the final running std, compared to calculating it from scratch in the queue?\r\nRunning a few times, and...\r\n```\r\nActual std is 0.0011613785790244263 seconds\r\nRunning std   0.0011613785791494136, diff 1.2498726012499795e-13\r\n\r\nActual std is 0.0011512422871999381 seconds\r\nRunning std   0.0011512422871978918, diff 2.046323180349141e-15\r\n\r\nActual std is 0.005481212866823841 seconds\r\nRunning std   0.00548121286682146, diff 2.3809079707781677e-15\r\n\r\nActual std is 0.00969206635198026 seconds\r\nRunning std   0.009692066351979268, diff 9.922618282587337e-16\r\n``` \r\n\r\nSo... I suppose nothing to worry about.\r\n\r\n<details>\r\n<summary>Code used for testing</summary>\r\n```cpp\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <print>\r\n#include <random>\r\n#include <ranges>\r\n#include <span>\r\n#include <vector>\r\n\r\ntemplate <typename T>\r\nclass RunningMean\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x) { m_mean = m_mean + (x - m_mean) / ++m_count; }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_count <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n    m_mean = m_mean - (x - m_mean) / --m_count;\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_count; }\r\n  constexpr T Mean() const { return m_mean; }\r\n  constexpr T Total() const { return m_mean * m_count; }\r\n\r\nprivate:\r\n  size_t m_count = 0;\r\n  T m_mean{};\r\n};\r\n\r\ntemplate <typename T>\r\nclass RunningVariance\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x)\r\n  {\r\n    const auto old_mean = m_running_mean.Mean();\r\n    m_running_mean.Push(x);\r\n    m_variance += (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_running_mean.Count() <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n\r\n    const T old_mean = m_running_mean.Mean();\r\n    m_running_mean.Pop(x);\r\n    m_variance -= (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_running_mean.Count(); }\r\n  constexpr T Mean() const { return m_running_mean.Mean(); }\r\n  constexpr T Total() const { return m_running_mean.Total(); }\r\n\r\n  constexpr T Variance() const { return m_variance / (Count() - 1); }\r\n  T StandardDeviation() const { return std::sqrt(Variance()); }\r\n\r\n  constexpr T PopulationVariance() const { return m_variance / Count(); }\r\n  T PopulationStandardDeviation() const { return std::sqrt(PopulationVariance()); }\r\n\r\nprivate:\r\n  RunningMean<T> m_running_mean;\r\n  T m_variance{};\r\n};\r\n\r\n// Function slopped with AI\r\ntemplate <std::floating_point T>\r\nvoid populate_random(std::span<T> arr, T C, T e, T B, T d, std::size_t M, std::mt19937& rng)\r\n{\r\n  std::uniform_real_distribution<T> U(T{-1}, T{1});\r\n  auto jitter = [&](T center, T limit) { return center + U(rng) * limit; };\r\n\r\n  // 1) Fill everything with C ± e\r\n  std::ranges::generate(arr, [&] { return jitter(C, e); });\r\n\r\n  // 2) Sample M distinct indices, then overwrite those with B ± d\r\n  std::vector<std::size_t> picked;\r\n  picked.reserve(M);\r\n  std::ranges::sample(std::views::iota(std::size_t{0}, arr.size()), std::back_inserter(picked), M,\r\n                      rng);\r\n\r\n  for (std::size_t i : picked)\r\n    arr[i] = jitter(B, d);\r\n}\r\n\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n\r\nint main()\r\n{\r\n  std::mt19937 rng(std::random_device{}());\r\n  // I apologise for allocating an entire vector (which would only be necessary for the final span)\r\n  // instead of generating the random dt on the fly. I\'m lazy.\r\n  std::vector<double> dts(TOTAL_FRAMES);\r\n  populate_random(std::span(dts), ACTUAL_FRAME_DT, ACTUAL_FRAME_ERR, STUTTER_FRAME_DT,\r\n                  STUTTER_FRAME_ERR, AVG_N_FRAMES_PER_STUTTER, rng);\r\n\r\n  const auto end_span = std::span(dts).last(MAX_DT_QUEUE_SIZE);\r\n  const double avg = std::ranges::fold_left(end_span, 0.0, std::plus{}) / MAX_DT_QUEUE_SIZE;\r\n  const double accurate_std = std::sqrt(\r\n      std::ranges::fold_left(\r\n          end_span, 0.0, [avg](double s2, double dt) { return s2 + ((dt - avg) * (dt - avg)); }) /\r\n      (MAX_DT_QUEUE_SIZE - 1));\r\n\r\n  std::println("Actual std is {} seconds", accurate_std);\r\n\r\n  RunningVariance<double> running_variance;\r\n\r\n  for (double dt : std::span(dts).first(MAX_DT_QUEUE_SIZE))\r\n  {\r\n    running_variance.Push(dt);\r\n  }\r\n  for (std::size_t i = MAX_DT_QUEUE_SIZE; i < dts.size(); ++i)\r\n  {\r\n    running_variance.Pop(dts[i - MAX_DT_QUEUE_SIZE]);\r\n    running_variance.Push(dts[i]);\r\n  }\r\n\r\n  std::println("Running std   {}, diff {}", running_variance.StandardDeviation(),\r\n               std::abs(accurate_std - running_variance.StandardDeviation()));\r\n}\r\n```\r\n</details>', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877', 'id': 5501153399, 'node_id': 'PR_kwDOALCn2M8AAAABEGWgYg', 'number': 14877, 'title': 'PerformanceTracker: Small cleanup, properly use RunningVariance for the standard deviation', 'user': {'login': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 5, 'created_at': '2026-09-18T15:06:30Z', 'updated_at': '2026-10-28T21:46:00Z', 'closed_at': None, 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14877', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14877.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14877.patch', 'merged_at': None}, 'body': '`UpdateStats()` was calculating the standard deviation from the entirety of `m_dt_queue`, which has a noticeable performance impact when the frame rates are very high.\r\nOn a scene so light it runs at 3000 FPS, `UpdateStats()` was taking around 5% of the profiling (at default 1s sample window). Now it doesn\'t.\r\n\r\nI\'m not opening this PR with confidence.\r\nMainly I\'m not a fan of using `MathUtil::RunningVariance<double>` (I mean with `double` specifically, see the comment) since the `static_cast`s are ugly, but I have no better idea other than "the conditions to get an overflow with `DT::rep` are unlikely enough that there\'s no need to care".\r\nBut on the other hand, `double` causes the risk of the measurements getting less and less accurate over time.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/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/14877/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6481465058', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877#issuecomment-6481465058', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877', 'id': 6481465058, 'node_id': 'IC_kwDOALCn2M8AAAABglNO4g', 'user': {'login': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-28T21:45:59Z', 'updated_at': '2026-10-28T21:45:59Z', 'body': 'Why do math, when you can just test out a bad-case scenario?\r\n\r\nTesting a code that creates a random array of very unstable frametimes, and a few stutters randomly inserted:\r\n```cpp\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n```\r\n\r\nHow close is the final running std, compared to calculating it from scratch in the queue?\r\nRunning a few times, and...\r\n```\r\nActual std is 0.0011613785790244263 seconds\r\nRunning std   0.0011613785791494136, diff 1.2498726012499795e-13\r\n\r\nActual std is 0.0011512422871999381 seconds\r\nRunning std   0.0011512422871978918, diff 2.046323180349141e-15\r\n\r\nActual std is 0.005481212866823841 seconds\r\nRunning std   0.00548121286682146, diff 2.3809079707781677e-15\r\n\r\nActual std is 0.00969206635198026 seconds\r\nRunning std   0.009692066351979268, diff 9.922618282587337e-16\r\n``` \r\n\r\nSo... I suppose nothing to worry about.\r\n\r\n<details>\r\n<summary>Code used for testing</summary>\r\n```cpp\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <print>\r\n#include <random>\r\n#include <ranges>\r\n#include <span>\r\n#include <vector>\r\n\r\ntemplate <typename T>\r\nclass RunningMean\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x) { m_mean = m_mean + (x - m_mean) / ++m_count; }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_count <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n    m_mean = m_mean - (x - m_mean) / --m_count;\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_count; }\r\n  constexpr T Mean() const { return m_mean; }\r\n  constexpr T Total() const { return m_mean * m_count; }\r\n\r\nprivate:\r\n  size_t m_count = 0;\r\n  T m_mean{};\r\n};\r\n\r\ntemplate <typename T>\r\nclass RunningVariance\r\n{\r\npublic:\r\n  constexpr void Clear() { *this = {}; }\r\n\r\n  constexpr void Push(T x)\r\n  {\r\n    const auto old_mean = m_running_mean.Mean();\r\n    m_running_mean.Push(x);\r\n    m_variance += (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n  constexpr void Pop(T x)\r\n  {\r\n    if (m_running_mean.Count() <= 1)\r\n    {\r\n      Clear();\r\n      return;\r\n    }\r\n\r\n    const T old_mean = m_running_mean.Mean();\r\n    m_running_mean.Pop(x);\r\n    m_variance -= (x - old_mean) * (x - m_running_mean.Mean());\r\n  }\r\n\r\n  constexpr size_t Count() const { return m_running_mean.Count(); }\r\n  constexpr T Mean() const { return m_running_mean.Mean(); }\r\n  constexpr T Total() const { return m_running_mean.Total(); }\r\n\r\n  constexpr T Variance() const { return m_variance / (Count() - 1); }\r\n  T StandardDeviation() const { return std::sqrt(Variance()); }\r\n\r\n  constexpr T PopulationVariance() const { return m_variance / Count(); }\r\n  T PopulationStandardDeviation() const { return std::sqrt(PopulationVariance()); }\r\n\r\nprivate:\r\n  RunningMean<T> m_running_mean;\r\n  T m_variance{};\r\n};\r\n\r\n// Function slopped with AI\r\ntemplate <std::floating_point T>\r\nvoid populate_random(std::span<T> arr, T C, T e, T B, T d, std::size_t M, std::mt19937& rng)\r\n{\r\n  std::uniform_real_distribution<T> U(T{-1}, T{1});\r\n  auto jitter = [&](T center, T limit) { return center + U(rng) * limit; };\r\n\r\n  // 1) Fill everything with C ± e\r\n  std::ranges::generate(arr, [&] { return jitter(C, e); });\r\n\r\n  // 2) Sample M distinct indices, then overwrite those with B ± d\r\n  std::vector<std::size_t> picked;\r\n  picked.reserve(M);\r\n  std::ranges::sample(std::views::iota(std::size_t{0}, arr.size()), std::back_inserter(picked), M,\r\n                      rng);\r\n\r\n  for (std::size_t i : picked)\r\n    arr[i] = jitter(B, d);\r\n}\r\n\r\nstatic constexpr std::size_t MAX_DT_QUEUE_SIZE = 4096;\r\n\r\nstatic constexpr double ACTUAL_FRAME_DT = 1.0 / 60.0;\r\nstatic constexpr double ACTUAL_FRAME_ERR = 0.002;\r\nstatic constexpr double STUTTER_FRAME_DT = 0.55;\r\nstatic constexpr double STUTTER_FRAME_ERR = 0.5;\r\n\r\n// If the game actually ran with no stutters at 60 FPS (and the stutter frames were just an illusion\r\n// for Dolphin), this would take 80 days.\r\nstatic constexpr std::size_t TOTAL_FRAMES = MAX_DT_QUEUE_SIZE * 100000;\r\nstatic constexpr std::size_t AVG_N_FRAMES_PER_STUTTER = TOTAL_FRAMES / 3600;\r\n\r\nint main()\r\n{\r\n  std::mt19937 rng(std::random_device{}());\r\n  // I apologise for allocating an entire vector (which would only be necessary for the final span)\r\n  // instead of generating the random dt on the fly. I\'m lazy.\r\n  std::vector<double> dts(TOTAL_FRAMES);\r\n  populate_random(std::span(dts), ACTUAL_FRAME_DT, ACTUAL_FRAME_ERR, STUTTER_FRAME_DT,\r\n                  STUTTER_FRAME_ERR, AVG_N_FRAMES_PER_STUTTER, rng);\r\n\r\n  const auto end_span = std::span(dts).last(MAX_DT_QUEUE_SIZE);\r\n  const double avg = std::ranges::fold_left(end_span, 0.0, std::plus{}) / MAX_DT_QUEUE_SIZE;\r\n  const double accurate_std = std::sqrt(\r\n      std::ranges::fold_left(\r\n          end_span, 0.0, [avg](double s2, double dt) { return s2 + ((dt - avg) * (dt - avg)); }) /\r\n      (MAX_DT_QUEUE_SIZE - 1));\r\n\r\n  std::println("Actual std is {} seconds", accurate_std);\r\n\r\n  RunningVariance<double> running_variance;\r\n\r\n  for (double dt : std::span(dts).first(MAX_DT_QUEUE_SIZE))\r\n  {\r\n    running_variance.Push(dt);\r\n  }\r\n  for (std::size_t i = MAX_DT_QUEUE_SIZE; i < dts.size(); ++i)\r\n  {\r\n    running_variance.Pop(dts[i - MAX_DT_QUEUE_SIZE]);\r\n    running_variance.Push(dts[i]);\r\n  }\r\n\r\n  std::println("Running std   {}, diff {}", running_variance.StandardDeviation(),\r\n               std::abs(accurate_std - running_variance.StandardDeviation()));\r\n}\r\n```\r\n</details>', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6481465058/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, 'minimized': 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-10-28T20:58:48Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15732, 'watchers_count': 15732, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3360, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3360, 'open_issues': 484, 'watchers': 15732, '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': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-28T20:48:16.877261	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 12014, 'title': 'Add CRT shaders', 'url': 'https://github.com/dolphin-emu/dolphin/pull/12014#issuecomment-6480328861', 'safe_author': True, 'body': 'Since this PR has aged, I\'ve added a minor change to "crt_pi" so the number of scanlines is fixed, which I think resolves the moiré problem I mentioned.\r\nI think I was mistaken about "crt-lottes-fast" and it seems to already work properly with higher IRs so long as bilinear filtering is used.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/12014', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/12014/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/12014/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/12014/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/12014', 'id': 1781462996, 'node_id': 'PR_kwDOALCn2M5URoxg', 'number': 12014, 'title': 'Add CRT shaders', 'user': {'login': 'Clownacy', 'id': 7667009, 'node_id': 'MDQ6VXNlcjc2NjcwMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/7667009?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/Clownacy', 'html_url': 'https://github.com/Clownacy', 'followers_url': 'https://api.github.com/users/Clownacy/followers', 'following_url': 'https://api.github.com/users/Clownacy/following{/other_user}', 'gists_url': 'https://api.github.com/users/Clownacy/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/Clownacy/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/Clownacy/subscriptions', 'organizations_url': 'https://api.github.com/users/Clownacy/orgs', 'repos_url': 'https://api.github.com/users/Clownacy/repos', 'events_url': 'https://api.github.com/users/Clownacy/events{/privacy}', 'received_events_url': 'https://api.github.com/users/Clownacy/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 42, 'created_at': '2023-06-29T20:23:15Z', 'updated_at': '2026-10-28T20:48:14Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/12014', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/12014', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/12014.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/12014.patch', 'merged_at': None}, 'body': "I've ported a couple of shaders from RetroArch - particularly the crt-pi and crt-lottes-fast ones. Unlike other shaders such as crt-royale, these shaders are single-pass, allowing them to work within Dolphin's framework. These look pretty good when paired with native resolution and SSAA.\r\n\r\ncrt-lottes-fast:\r\n![image](https://github.com/dolphin-emu/dolphin/assets/7667009/8108b7e1-d140-4d26-bc84-6b612b85ee8f)\r\n\r\nunfiltered:\r\n![image](https://github.com/dolphin-emu/dolphin/assets/7667009/5483d46a-4e15-4062-bb14-adb7c8d40d2b)\r\n\r\ncrt-pi:\r\n![image](https://github.com/dolphin-emu/dolphin/assets/7667009/9cfd1152-908c-4d42-94e0-908a1fa83c1f)\r\n\r\nUnfortunately, I only noticed #11888 after I had already ported crt-pi. Still, crt-pi is specifically optimised for lower-end hardware (Raspberry Pis, in particular), so perhaps these shaders still have some utility.\r\n\r\nVarious settings have been exposed through Dolphin's configuration API, crt-pi in particular boasts extra options that even the RetroArch version does not due to being hardcoded within the GLSL code itself.\r\n\r\nBoth crt-pi and crt-lottes-fast run with every backend that I have tested (OpenGL, Vulkan, Direct3D 11, and Direct3D 12).", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/12014/reactions', 'total_count': 34, '+1': 16, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 18, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/12014/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6480328861', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/12014#issuecomment-6480328861', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/12014', 'id': 6480328861, 'node_id': 'IC_kwDOALCn2M8AAAABgkH4nQ', '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}, 'created_at': '2026-10-28T20:48:14Z', 'updated_at': '2026-10-28T20:48:14Z', 'body': 'Since this PR has aged, I\'ve added a minor change to "crt_pi" so the number of scanlines is fixed, which I think resolves the moiré problem I mentioned.\r\nI think I was mistaken about "crt-lottes-fast" and it seems to already work properly with higher IRs so long as bilinear filtering is used.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6480328861/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, 'minimized': 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-10-28T11:56:18Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15730, 'watchers_count': 15730, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3360, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3360, 'open_issues': 484, 'watchers': 15730, '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': 'gh_issue_comment'}
2026-10-28T19:45:02.275749	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'TellowKrinkle', 'action': 'created', 'id': 13704, 'title': 'CMake: Use CMAKE_CURRENT_SOURCE_DIR instead of CMAKE_SOURCE_DIR', 'url': 'https://github.com/dolphin-emu/dolphin/pull/13704#issuecomment-6478904803', 'safe_author': True, 'body': "How many of these actually need the explicit reference to `CMAKE_CURRENT_SOURCE_DIR`?  I'm pretty sure a number of those functions default to the current source dir if you give them a relative path.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13704', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13704/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13704/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13704/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13704', 'id': 3087454631, 'node_id': 'PR_kwDOALCn2M6Xci1N', 'number': 13704, 'title': 'CMake: Use CMAKE_CURRENT_SOURCE_DIR instead of CMAKE_SOURCE_DIR', 'user': {'login': 'unexploredtest', 'id': 53617231, 'node_id': 'MDQ6VXNlcjUzNjE3MjMx', 'avatar_url': 'https://avatars.githubusercontent.com/u/53617231?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/unexploredtest', 'html_url': 'https://github.com/unexploredtest', 'followers_url': 'https://api.github.com/users/unexploredtest/followers', 'following_url': 'https://api.github.com/users/unexploredtest/following{/other_user}', 'gists_url': 'https://api.github.com/users/unexploredtest/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/unexploredtest/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/unexploredtest/subscriptions', 'organizations_url': 'https://api.github.com/users/unexploredtest/orgs', 'repos_url': 'https://api.github.com/users/unexploredtest/repos', 'events_url': 'https://api.github.com/users/unexploredtest/events{/privacy}', 'received_events_url': 'https://api.github.com/users/unexploredtest/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [{'id': 1667502011, 'node_id': 'MDU6TGFiZWwxNjY3NTAyMDEx', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/needs%20rebase', 'name': 'needs rebase', 'color': '053663', 'default': False, 'description': '', 'archived_at': None, 'archived_by': None}], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2025-05-23T20:22:21Z', 'updated_at': '2026-10-28T19:44:59Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13704', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13704', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/13704.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/13704.patch', 'merged_at': None}, 'body': "Currently Dolphin uses CMAKE_SOURCE_DIR in several places for building the project which causes issues if included as an external project. Replacing CMAKE_SOURCE_DIR variables with the appropriate CMAKE_CURRENT_SOURCE_DIR equivalent fixes the issue and also doesn't change the behavior at all.", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13704/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/13704/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6478904803', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13704#issuecomment-6478904803', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13704', 'id': 6478904803, 'node_id': 'IC_kwDOALCn2M8AAAABgiw94w', 'user': {'login': 'TellowKrinkle', 'id': 3315070, 'node_id': 'MDQ6VXNlcjMzMTUwNzA=', 'avatar_url': 'https://avatars.githubusercontent.com/u/3315070?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TellowKrinkle', 'html_url': 'https://github.com/TellowKrinkle', 'followers_url': 'https://api.github.com/users/TellowKrinkle/followers', 'following_url': 'https://api.github.com/users/TellowKrinkle/following{/other_user}', 'gists_url': 'https://api.github.com/users/TellowKrinkle/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TellowKrinkle/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TellowKrinkle/subscriptions', 'organizations_url': 'https://api.github.com/users/TellowKrinkle/orgs', 'repos_url': 'https://api.github.com/users/TellowKrinkle/repos', 'events_url': 'https://api.github.com/users/TellowKrinkle/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TellowKrinkle/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-28T19:44:59Z', 'updated_at': '2026-10-28T19:44:59Z', 'body': "How many of these actually need the explicit reference to `CMAKE_CURRENT_SOURCE_DIR`?  I'm pretty sure a number of those functions default to the current source dir if you give them a relative path.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6478904803/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, 'minimized': 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-10-28T11:56:18Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15730, 'watchers_count': 15730, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3360, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3360, 'open_issues': 484, 'watchers': 15730, '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': 'TellowKrinkle', 'id': 3315070, 'node_id': 'MDQ6VXNlcjMzMTUwNzA=', 'avatar_url': 'https://avatars.githubusercontent.com/u/3315070?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/TellowKrinkle', 'html_url': 'https://github.com/TellowKrinkle', 'followers_url': 'https://api.github.com/users/TellowKrinkle/followers', 'following_url': 'https://api.github.com/users/TellowKrinkle/following{/other_user}', 'gists_url': 'https://api.github.com/users/TellowKrinkle/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/TellowKrinkle/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/TellowKrinkle/subscriptions', 'organizations_url': 'https://api.github.com/users/TellowKrinkle/orgs', 'repos_url': 'https://api.github.com/users/TellowKrinkle/repos', 'events_url': 'https://api.github.com/users/TellowKrinkle/events{/privacy}', 'received_events_url': 'https://api.github.com/users/TellowKrinkle/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-28T19:12:47.689944	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14877, 'title': 'PerformanceTracker: Small cleanup, properly use RunningVariance for the standard deviation', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14877#issuecomment-6478216983', 'safe_author': True, 'body': "Any idea how long it might take for the measurements to drift enough to be unusable? I'm not mathy enough to figure that out. Are we talking like, a day of continuous emulation, or, like, years? ", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877', 'id': 5501153399, 'node_id': 'PR_kwDOALCn2M8AAAABEGWgYg', 'number': 14877, 'title': 'PerformanceTracker: Small cleanup, properly use RunningVariance for the standard deviation', 'user': {'login': 'SuperSamus', 'id': 40663462, 'node_id': 'MDQ6VXNlcjQwNjYzNDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/40663462?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/SuperSamus', 'html_url': 'https://github.com/SuperSamus', 'followers_url': 'https://api.github.com/users/SuperSamus/followers', 'following_url': 'https://api.github.com/users/SuperSamus/following{/other_user}', 'gists_url': 'https://api.github.com/users/SuperSamus/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/SuperSamus/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/SuperSamus/subscriptions', 'organizations_url': 'https://api.github.com/users/SuperSamus/orgs', 'repos_url': 'https://api.github.com/users/SuperSamus/repos', 'events_url': 'https://api.github.com/users/SuperSamus/events{/privacy}', 'received_events_url': 'https://api.github.com/users/SuperSamus/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-09-18T15:06:30Z', 'updated_at': '2026-10-28T19:12:45Z', 'closed_at': None, 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14877', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14877.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14877.patch', 'merged_at': None}, 'body': '`UpdateStats()` was calculating the standard deviation from the entirety of `m_dt_queue`, which has a noticeable performance impact when the frame rates are very high.\r\nOn a scene so light it runs at 3000 FPS, `UpdateStats()` was taking around 5% of the profiling (at default 1s sample window). Now it doesn\'t.\r\n\r\nI\'m not opening this PR with confidence.\r\nMainly I\'m not a fan of using `MathUtil::RunningVariance<double>` (I mean with `double` specifically, see the comment) since the `static_cast`s are ugly, but I have no better idea other than "the conditions to get an overflow with `DT::rep` are unlikely enough that there\'s no need to care".\r\nBut on the other hand, `double` causes the risk of the measurements getting less and less accurate over time.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877/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/14877/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6478216983', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14877#issuecomment-6478216983', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14877', 'id': 6478216983, 'node_id': 'IC_kwDOALCn2M8AAAABgiG_Fw', '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}, 'created_at': '2026-10-28T19:12:44Z', 'updated_at': '2026-10-28T19:12:44Z', 'body': "Any idea how long it might take for the measurements to drift enough to be unusable? I'm not mathy enough to figure that out. Are we talking like, a day of continuous emulation, or, like, years? ", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6478216983/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, 'minimized': 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-10-28T11:56:18Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15730, 'watchers_count': 15730, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3360, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3360, 'open_issues': 484, 'watchers': 15730, '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': 'gh_issue_comment'}
2026-10-28T18:18:56.261690	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'edited', 'id': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6477041510', 'safe_author': True, 'body': '> May I recommend the AV1 video codec? It is awesome, open, and it is broadly adopted.\r\n> It should work great on hardware made in the last 6 years, or even older with software decoding.\r\n\r\nThis is more of a discussion for #14902 but I think in-browser AV1 decoding availability is less widespread than that of h264, particularly on mobile (Apple) devices. And mobile devices really are the main target of the GBA streaming feature.', 'raw': {'action': 'edited', 'changes': {'body': {'from': '> May I recommend the AV1 video codec? It is awesome, open, and it is broadly adopted.\r\n> It should work great on hardware made in the last 6 years, or even older with software decoding.\r\n\r\nThis is more of a discussion for #14902 but I think in-browser AV1 decoding availability is less widespread than that of h264, particularly on mobile (Apple) devices, and mobile devices really are the main target of the GBA streaming feature.'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'id': 6054308480, 'node_id': 'PR_kwDOALCn2M8AAAABK8xKnQ', 'number': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', '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, 'assignees': [], 'milestone': None, 'comments': 9, 'created_at': '2026-10-27T06:43:26Z', 'updated_at': '2026-10-28T18:18:39Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14957', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14957.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14957.patch', 'merged_at': None}, 'body': 'This adds dynamic linking for FFmpeg.\r\n\r\nFFmpeg is huge and difficult to compile on Windows.\r\nOur slimmed down binaries at https://github.com/dolphin-emu/ext-win-ffmpeg are outdated and lack codecs which is blocking #14902 \r\n\r\nThis will reduce our Windows build sizes (The x64 7z appears to be ~1.8 MB smaller).\r\nBut Users of ffmpeg features require an additional ~80MB of libraries.\r\n\r\nI\'ve only loaded the FFmpeg functions that we currently use. More can be added as needed.\r\nIt\'s only enabled on Windows, though it does also work on Linux with ~~`set(USE_SHARED_FFMPEG ON)`.~~\r\n`set(DYNAMICALLY_LOAD_FFMPEG ON)`\r\n\r\nThe DLLs are loaded from User/Load/Libraries.\r\n\r\nWhen they are missing and the user tries to use frame dumping, Dolphin asks the user if they would like them to be automatically downloaded.\r\n<img width="402" height="165" alt="image" src="https://github.com/user-attachments/assets/d4e5e05c-0e9c-4751-8372-a408a33c31d0" />\r\n\r\nThe DLLs are downloaded from https://github.com/btbn/ffmpeg-builds/releases which is a source that FFmpeg recommends.\r\nWith the exact URLs being:\r\nhttps://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n9.0-latest-win64-gpl-shared-9.0.zip\r\nhttps://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n9.0-latest-winarm64-gpl-shared-9.0.zip\r\n\r\nAll included DLLs are extracted to User/Load/Libraries.\r\n\r\nMaybe we should host the zip file ourselves for security and URL reliability reasons?\r\n\r\n~~This will require that https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2 is merged first so the "FFmpeg-bin" submodule can be adjusted.~~\r\nI\'ve changed our FFmpeg git submodule to a github FFmpeg mirror rather than our own maintained repo.\r\n\r\nWindows x64 is tested.\r\nARM is untested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/reactions', 'total_count': 3, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 1, 'confused': 0, 'heart': 2, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6477041510', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6477041510', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'id': 6477041510, 'node_id': 'IC_kwDOALCn2M8AAAABgg_PZg', '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}, 'created_at': '2026-10-28T18:18:39Z', 'updated_at': '2026-10-28T18:18:54Z', 'body': '> May I recommend the AV1 video codec? It is awesome, open, and it is broadly adopted.\r\n> It should work great on hardware made in the last 6 years, or even older with software decoding.\r\n\r\nThis is more of a discussion for #14902 but I think in-browser AV1 decoding availability is less widespread than that of h264, particularly on mobile (Apple) devices. And mobile devices really are the main target of the GBA streaming feature.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6477041510/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, 'minimized': 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-10-28T11:56:18Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15730, 'watchers_count': 15730, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3358, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3358, 'open_issues': 484, 'watchers': 15730, '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': 'gh_issue_comment'}
2026-10-28T18:18:41.684402	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6477041510', 'safe_author': True, 'body': '> May I recommend the AV1 video codec? It is awesome, open, and it is broadly adopted.\r\n> It should work great on hardware made in the last 6 years, or even older with software decoding.\r\n\r\nThis is more of a discussion for #14902 but I think in-browser AV1 decoding availability is less widespread than that of h264, particularly on mobile (Apple) devices, and mobile devices really are the main target of the GBA streaming feature.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'id': 6054308480, 'node_id': 'PR_kwDOALCn2M8AAAABK8xKnQ', 'number': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', '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, 'assignees': [], 'milestone': None, 'comments': 9, 'created_at': '2026-10-27T06:43:26Z', 'updated_at': '2026-10-28T18:18:39Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14957', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14957.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14957.patch', 'merged_at': None}, 'body': 'This adds dynamic linking for FFmpeg.\r\n\r\nFFmpeg is huge and difficult to compile on Windows.\r\nOur slimmed down binaries at https://github.com/dolphin-emu/ext-win-ffmpeg are outdated and lack codecs which is blocking #14902 \r\n\r\nThis will reduce our Windows build sizes (The x64 7z appears to be ~1.8 MB smaller).\r\nBut Users of ffmpeg features require an additional ~80MB of libraries.\r\n\r\nI\'ve only loaded the FFmpeg functions that we currently use. More can be added as needed.\r\nIt\'s only enabled on Windows, though it does also work on Linux with ~~`set(USE_SHARED_FFMPEG ON)`.~~\r\n`set(DYNAMICALLY_LOAD_FFMPEG ON)`\r\n\r\nThe DLLs are loaded from User/Load/Libraries.\r\n\r\nWhen they are missing and the user tries to use frame dumping, Dolphin asks the user if they would like them to be automatically downloaded.\r\n<img width="402" height="165" alt="image" src="https://github.com/user-attachments/assets/d4e5e05c-0e9c-4751-8372-a408a33c31d0" />\r\n\r\nThe DLLs are downloaded from https://github.com/btbn/ffmpeg-builds/releases which is a source that FFmpeg recommends.\r\nWith the exact URLs being:\r\nhttps://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n9.0-latest-win64-gpl-shared-9.0.zip\r\nhttps://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n9.0-latest-winarm64-gpl-shared-9.0.zip\r\n\r\nAll included DLLs are extracted to User/Load/Libraries.\r\n\r\nMaybe we should host the zip file ourselves for security and URL reliability reasons?\r\n\r\n~~This will require that https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2 is merged first so the "FFmpeg-bin" submodule can be adjusted.~~\r\nI\'ve changed our FFmpeg git submodule to a github FFmpeg mirror rather than our own maintained repo.\r\n\r\nWindows x64 is tested.\r\nARM is untested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/reactions', 'total_count': 3, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 1, 'confused': 0, 'heart': 2, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6477041510', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6477041510', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'id': 6477041510, 'node_id': 'IC_kwDOALCn2M8AAAABgg_PZg', '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}, 'created_at': '2026-10-28T18:18:39Z', 'updated_at': '2026-10-28T18:18:39Z', 'body': '> May I recommend the AV1 video codec? It is awesome, open, and it is broadly adopted.\r\n> It should work great on hardware made in the last 6 years, or even older with software decoding.\r\n\r\nThis is more of a discussion for #14902 but I think in-browser AV1 decoding availability is less widespread than that of h264, particularly on mobile (Apple) devices, and mobile devices really are the main target of the GBA streaming feature.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6477041510/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, 'minimized': 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-10-28T11:56:18Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15730, 'watchers_count': 15730, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3358, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 484, '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': 3358, 'open_issues': 484, 'watchers': 15730, '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': 'gh_issue_comment'}

Recent 'gh_pull_request' events

2026-10-30T06:58:19.532383	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'opened', 'id': 14961, 'title': 'Core: Adjust dual core video thread initialization to avoid ExitGpuLoop racing before RunGpuLoop.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14961', 'head_ref_name': 'fifo-run-exit-race', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-30T03:39:04.268439	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'edited', 'id': 14960, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'head_ref_name': 'state-flock', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-30T03:28:15.110981	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'edited', 'id': 14960, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'head_ref_name': 'state-flock', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-30T03:26:35.293896	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'edited', 'id': 14960, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'head_ref_name': 'state-flock', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-30T03:21:34.950935	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'opened', 'id': 14960, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'head_ref_name': 'state-flock', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-30T00:01:37.069683	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'edited', 'id': 14959, 'title': 'DolphinQt: Move the game list with a configured controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '16d3077acd9785e451d73329e4758193c270266a', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-30T00:01:36.342141	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'synchronize', 'id': 14959, 'title': 'DolphinQt: Move the game list with a configured controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '16d3077acd9785e451d73329e4758193c270266a', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T23:38:56.660284	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'edited', 'id': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '71724f6d6e559b6a64985a18ed22a20995b5b39b', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T23:38:54.887325	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'synchronize', 'id': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '71724f6d6e559b6a64985a18ed22a20995b5b39b', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T21:43:08.880120	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'edited', 'id': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '99888f7be3c88398835035c3f764ecca39cc3791', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T21:40:30.991396	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'edited', 'id': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '99888f7be3c88398835035c3f764ecca39cc3791', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T19:57:46.505740	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'synchronize', 'id': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '99888f7be3c88398835035c3f764ecca39cc3791', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T19:07:54.849738	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'vegerot', 'action': 'opened', 'id': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'head_ref_name': 'game-list-gc-controller', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '43de0fc84297ea973382ce17a2bd0a9201badabc', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T17:57:44.011464	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'CySlaytor', 'action': 'reopened', 'id': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'head_ref_name': 'master', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '640615805c3309e69f6f4ec8685f6449951e1c93', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T17:57:42.821772	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'CySlaytor', 'action': 'synchronize', 'id': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'head_ref_name': 'master', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '640615805c3309e69f6f4ec8685f6449951e1c93', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T16:45:24.591547	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'CySlaytor', 'action': 'closed', 'id': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'head_ref_name': 'master', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T16:45:24.378751	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'CySlaytor', 'action': 'synchronize', 'id': 14596, 'title': 'feat(retroachievements): implement achievement notification sounds', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'head_ref_name': 'master', 'safe_author': False, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T15:25:02.322807	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T14:40:55.915098	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T14:38:29.489163	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'ready_for_review', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T14:38:23.086205	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T14:38:18.352548	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T14:38:16.642735	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T14:38:12.696679	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-29T14:38:10.269900	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14774, 'title': 'Refactor the GameCube microphone code', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14774', 'head_ref_name': 'mic-dedup2', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}

Recent 'gh_pull_request_comment' events

2026-10-28T18:02:57.279727	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14951, 'hash': '6f63dd0f44bc9696e73fbcf2cbae766f902fac50', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14951#discussion_r4404260369', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-28T15:44:47.153269	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14951, 'hash': 'bed47bb5c92217246eb96181de1286cef37eab9f', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14951#discussion_r4402746253', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-28T00:50:00.160962	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14933, 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395816787', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-28T00:37:45.866518	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14933, 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395750502', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-28T00:36:11.332264	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'created', 'id': 14933, 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395742741', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-28T00:34:29.535729	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14933, 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395734156', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-28T00:31:24.843582	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14933, 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395718468', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-28T00:26:04.373798	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'created', 'id': 14933, 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395689626', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-28T00:20:09.420798	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14933, 'hash': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395658286', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-28T00:10:36.602200	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14933, 'hash': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395603757', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-27T23:35:23.868428	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14933, 'hash': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395376474', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-27T23:24:27.034165	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'edited', 'id': 14933, 'hash': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395262287', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-27T23:18:25.777086	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'created', 'id': 14933, 'hash': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395262287', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-27T23:18:25.776425	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'created', 'id': 14933, 'hash': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395078816', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-27T23:18:25.775748	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'created', 'id': 14933, 'hash': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395085881', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-27T13:15:54.432285	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'tygyh', 'action': 'created', 'id': 14783, 'hash': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4389105840', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-27T12:00:01.268506	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14783, 'hash': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4388399307', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-27T11:40:10.294736	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'tygyh', 'action': 'created', 'id': 14783, 'hash': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4388231277', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}
2026-10-26T11:36:58.833073	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14783, 'hash': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4376774084', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-26T11:24:31.800033	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14948, 'hash': 'b3b5f02be632541fa6939c75dedc2dc20c356f87', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4376678525', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-25T23:12:00.932236	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14948, 'hash': 'b3b5f02be632541fa6939c75dedc2dc20c356f87', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4372879923', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-25T16:21:26.799656	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14783, 'hash': '46bc6735c24535c4f35da715199e7093a3045613', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4371498807', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-25T10:40:34.817160	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14948, 'hash': 'c36fdcf8b3ce40a218197731a496748384789ee1', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4370539017', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-25T09:48:21.662774	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14948, 'hash': '56cae13e30a840ca44b9b1ef3e1a07ca384a3a1f', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4370388099', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-25T06:56:00.505347	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14814, 'hash': 'ac62f6b970cf94bc0d258eb2c6288b98c84cf991', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14814#discussion_r4369958773', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}

Recent 'gh_pull_request_review' events

2026-10-29T20:36:18.604258	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14596, 'pr_title': 'feat(retroachievements): implement achievement notification sounds', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14596#pullrequestreview-5704607855', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-29T20:20:03.760901	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14958, 'pr_title': 'Vulkan: Allow custom drivers on Mali devices', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14958#pullrequestreview-5704410599', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-29T20:11:20.952061	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'submitted', 'pr_id': 14958, 'pr_title': 'Vulkan: Allow custom drivers on Mali devices', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14958#pullrequestreview-5704296719', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T22:54:03.817326	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14877, 'pr_title': 'PerformanceTracker: Small cleanup, properly use RunningVariance for the standard deviation', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14877#pullrequestreview-5690760986', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T19:38:00.155903	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 12318, 'pr_title': 'Change Sensor Bar Position Default to Bottom', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/12318#pullrequestreview-5688630935', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T19:37:16.495496	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14951, 'pr_title': 'Core/TimePlayed: Decouple the TimePlayed tracker thread from CPUManager.', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14951#pullrequestreview-5688621943', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T19:35:08.271003	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 12848, 'pr_title': 'Add unit test coverage for `Rectangle::ClampUL`, and remove the unused `ClampLL` function', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/12848#pullrequestreview-5688595525', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T19:31:25.636291	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 13704, 'pr_title': 'CMake: Use CMAKE_CURRENT_SOURCE_DIR instead of CMAKE_SOURCE_DIR', 'state': 'changes_requested', 'url': 'https://github.com/dolphin-emu/dolphin/pull/13704#pullrequestreview-5688548206', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T18:02:56.950466	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14951, 'pr_title': 'Core/TimePlayed: Decouple the TimePlayed tracker thread from CPUManager.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14951#pullrequestreview-5687392027', 'comments': [{'id': 4404260369, 'node_id': 'PRRC_kwDOALCn2M8AAAABBoOuEQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4404260369', 'pull_request_review_id': 5687392027, 'diff_hunk': '@@ -340,6 +284,7 @@ void CPUManager::Break()\n   // finish resulting in the CPU loop never terminating.\n   SetStateLocked(State::Stepping);\n   RunAdjacentSystems(false);\n+  Core::NotifyStateChanged(Core::State::Paused);', 'path': 'Source/Core/Core/HW/CPU.cpp', 'position': 103, 'original_position': 103, 'commit_id': '6f63dd0f44bc9696e73fbcf2cbae766f902fac50', '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': '`CpuThread` sets it to `Running`/`Paused` from `CPUSetInitialExecutionState` so it LGTM.', 'created_at': '2026-10-28T18:02:54Z', 'updated_at': '2026-10-28T18:02:55Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14951#discussion_r4404260369', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14951', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4404260369'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14951#discussion_r4404260369'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14951'}}, 'original_commit_id': 'bed47bb5c92217246eb96181de1286cef37eab9f', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4404260369/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4402746253, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T15:44:47.152379	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14951, 'pr_title': 'Core/TimePlayed: Decouple the TimePlayed tracker thread from CPUManager.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14951#pullrequestreview-5685484903', 'comments': [{'id': 4402746253, 'node_id': 'PRRC_kwDOALCn2M8AAAABBmyTjQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4402746253', 'pull_request_review_id': 5685484903, 'diff_hunk': '@@ -340,6 +284,7 @@ void CPUManager::Break()\n   // finish resulting in the CPU loop never terminating.\n   SetStateLocked(State::Stepping);\n   RunAdjacentSystems(false);\n+  Core::NotifyStateChanged(Core::State::Paused);', 'path': 'Source/Core/Core/HW/CPU.cpp', 'position': 103, 'original_position': 103, 'commit_id': 'bed47bb5c92217246eb96181de1286cef37eab9f', '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': "I believe this line in Core.cpp needs to be removed, or this would fire twice:\nhttps://github.com/jordan-woyak/dolphin/blob/bed47bb5c92217246eb96181de1286cef37eab9f/Source/Core/Core/Core.cpp#L895\n\nBreak is also called in EmuThread, which might override `State::Starting`? I'm not super familiar with this area of the codebase so I'm not sure if this is an issue though", 'created_at': '2026-10-28T15:44:44Z', 'updated_at': '2026-10-28T15:44:44Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14951#discussion_r4402746253', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14951', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4402746253'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14951#discussion_r4402746253'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14951'}}, 'original_commit_id': 'bed47bb5c92217246eb96181de1286cef37eab9f', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4402746253/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T04:56:17.467564	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'mbc07', 'action': 'submitted', 'pr_id': 14848, 'pr_title': 'Qt: Add support for static builds', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14848#pullrequestreview-5677960686', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T02:17:03.228634	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-qt', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 25, 'pr_title': 'Change how we build Qt and make it static', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/ext-win-qt/pull/25#pullrequestreview-5676959830', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T02:15:34.587942	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14848, 'pr_title': 'Qt: Add support for static builds', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14848#pullrequestreview-5676951138', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-28T00:50:00.726198	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676441213', 'comments': [{'id': 4395816787, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgLXUw', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395816787', 'pull_request_review_id': 5676441213, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', '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': 'Okie, I added the nullptr check. Thanks for finding the problem.', 'created_at': '2026-10-28T00:49:58Z', 'updated_at': '2026-10-28T00:49:58Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395816787', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395816787'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395816787'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395816787/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395262287, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T00:37:45.863840	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676364843', 'comments': [{'id': 4395750502, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgHUZg', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395750502', 'pull_request_review_id': 5676364843, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', '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': 'Alternatively we could copy the `shared_ptr` from `m_hooks.back()` rather than `std::move`ing, though that is marginally more expensive, but I think it would solve the transient "wrong" count and null item issue.', 'created_at': '2026-10-28T00:37:43Z', 'updated_at': '2026-10-28T00:37:44Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395750502', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395750502'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395750502'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395750502/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395262287, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T00:36:11.329300	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676355574', 'comments': [{'id': 4395742741, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgG2FQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395742741', 'pull_request_review_id': 5676355574, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'user': {'login': 'iwubcode', 'id': 15224722, 'node_id': 'MDQ6VXNlcjE1MjI0NzIy', 'avatar_url': 'https://avatars.githubusercontent.com/u/15224722?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/iwubcode', 'html_url': 'https://github.com/iwubcode', 'followers_url': 'https://api.github.com/users/iwubcode/followers', 'following_url': 'https://api.github.com/users/iwubcode/following{/other_user}', 'gists_url': 'https://api.github.com/users/iwubcode/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/iwubcode/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/iwubcode/subscriptions', 'organizations_url': 'https://api.github.com/users/iwubcode/orgs', 'repos_url': 'https://api.github.com/users/iwubcode/repos', 'events_url': 'https://api.github.com/users/iwubcode/events{/privacy}', 'received_events_url': 'https://api.github.com/users/iwubcode/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Yeah, the `nullptr` check will be good enough.  Thanks!', 'created_at': '2026-10-28T00:36:09Z', 'updated_at': '2026-10-28T00:36:09Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395742741', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395742741'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395742741'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395742741/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395262287, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T00:34:31.811362	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676345335', 'comments': [{'id': 4395734156, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgGUjA', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395734156', 'pull_request_review_id': 5676345335, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', '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': "`GetConnectionCount` could also specifically count the non-null entries, making it O(N), but I'd rather have that be O(N) than make disconnection O(N). But again, I think concurrent wrong `GetConnectionCount` is a non-issue.", 'created_at': '2026-10-28T00:34:27Z', 'updated_at': '2026-10-28T00:34:27Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395734156', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395734156'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395734156'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395734156/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395262287, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T00:31:24.839825	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676326366', 'comments': [{'id': 4395718468, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgFXRA', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395718468', 'pull_request_review_id': 5676326366, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', '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': "Oh, I think we do need an `if (hook != nullptr)` after the `unlock` in case of concurrent disconnections, because yeah, we will have a `nullptr` in the list for a bit, which other than the thing I'm about to fix, and the transient wrong count, I think that's fine?", 'created_at': '2026-10-28T00:31:22Z', 'updated_at': '2026-10-28T00:31:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395718468', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395718468'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395718468'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395718468/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395262287, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T00:26:04.088332	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676293019', 'comments': [{'id': 4395689626, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgDmmg', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395689626', 'pull_request_review_id': 5676293019, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'user': {'login': 'iwubcode', 'id': 15224722, 'node_id': 'MDQ6VXNlcjE1MjI0NzIy', 'avatar_url': 'https://avatars.githubusercontent.com/u/15224722?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/iwubcode', 'html_url': 'https://github.com/iwubcode', 'followers_url': 'https://api.github.com/users/iwubcode/followers', 'following_url': 'https://api.github.com/users/iwubcode/following{/other_user}', 'gists_url': 'https://api.github.com/users/iwubcode/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/iwubcode/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/iwubcode/subscriptions', 'organizations_url': 'https://api.github.com/users/iwubcode/orgs', 'repos_url': 'https://api.github.com/users/iwubcode/repos', 'events_url': 'https://api.github.com/users/iwubcode/events{/privacy}', 'received_events_url': 'https://api.github.com/users/iwubcode/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '> I guess by "momentarily be wrong" you mean that in the middle of DisconnectAll a concurrent GetConnectionCount call may "count" hooks that are moved from the list, and about to be destructed?\r\n\r\nYes, though I think there are other implications besides `GetConnectionCount()` being wrong.  You are potentially holding onto a nullptr while another thread could be using it?\r\n\r\n>I\'m not sure if that solves anything. Now you can have a stale pointer? And also now the operation is O(N) instead of O(1) ?\r\n\r\nThe advantage is you remove the issue I just described.  So yes you have O(1) but you have a dangerous O(1).  A O(N) for what is generally a small set of callbacks that is safe, is much better imo.', 'created_at': '2026-10-28T00:26:01Z', 'updated_at': '2026-10-28T00:26:02Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395689626', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395689626'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395689626'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395689626/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395262287, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T00:20:14.688517	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676256145', 'comments': [{'id': 4395658286, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgBsLg', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395658286', 'pull_request_review_id': 5676256145, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());\n+      lk.unlock();  // Avoid deadlock from different lock orders.\n+      hook->Disconnect();\n+    }\n+  }\n \n-    // Avoiding an actual iterator because the container may be modified.\n-    for (std::size_t i = 0; i != m_storage->listeners.size(); ++i)\n+  // Destruction only removes internal references.\n+  // Any externally held EventHook can keep a connection alive.\n+  ~HookHolder()\n+  {\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n     {\n-      auto& listener = m_storage->listeners[i];\n+      const EventHook hook = std::move(m_hooks.back());\n+      lk.unlock();  // Avoid deadlock from different lock orders.\n+      hook->ForgetHolder();\n+    }\n+  }\n+\n+private:\n+  mutable std::mutex m_mutex;\n \n-      if (listener->is_pending_removal)\n-        continue;\n+  using ConnectedHooks = std::list<EventHook>;\n+  ConnectedHooks m_hooks;\n+\n+  ConnectedHooks::iterator AddHook(EventHook hook)\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.emplace(m_hooks.end(), std::move(hook));\n+  }\n \n-      std::invoke(listener->callback, args...);\n+  void RemoveHook(ConnectedHooks::iterator it)\n+  {\n+    const EventHook hook = std::move(*it);', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 1, 'original_position': 157, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', '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 think you were right that it was smelly.\r\nI think it was some broken thing I came up with before introducing `shared_from_this()` to `Hook::Disconnect()`.\r\nIt should be fixed now.', 'created_at': '2026-10-28T00:20:06Z', 'updated_at': '2026-10-28T00:20:07Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395658286', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395658286'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395658286'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395658286/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395085881, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-28T00:10:36.601245	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676177215', 'comments': [{'id': 4395603757, 'node_id': 'PRRC_kwDOALCn2M8AAAABBf-XLQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395603757', 'pull_request_review_id': 5676177215, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', '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 think this means if two threads access this holder, the hooks size will potentially momentarily be wrong ( GetConnectionCount() ).\r\n\r\nI guess by "momentarily be wrong" you mean that in the middle of `DisconnectAll` a concurrent `GetConnectionCount` call may "count" hooks that are moved from the list, and about to be destructed? I think that\'s a "benign race". I think there\'s nothing of risk that can actually be done with that count if the other threads are not under your control. It\'s just a diagnostic value. I even considered making `GetConnectionCount` private if not for the unit tests. I think everything is fine so long as the count is zero when `DisconnectAll` returns.\r\n\r\n> And I guess we don\'t remove the hook from the list here because it would stale the iterator that the hook holds onto?\r\n\r\nYes.\r\n\r\n> It\'d be slightly less cheap but instead of erasing by iterator, you could erase by pointer. That\'d allow you to erase from this list (and not need to store the iterator, cleaning up some of the code)\r\n\r\nI\'m not sure if that solves anything. Now you can have a stale pointer? And also now the operation is O(N) instead of O(1) ?', 'created_at': '2026-10-28T00:10:34Z', 'updated_at': '2026-10-28T00:10:34Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395603757', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395603757'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395603757'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395603757/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395262287, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-27T23:35:23.866203	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5675867124', 'comments': [{'id': 4395376474, 'node_id': 'PRRC_kwDOALCn2M8AAAABBfwfWg', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395376474', 'pull_request_review_id': 5675867124, 'diff_hunk': '@@ -0,0 +1,500 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include <gtest/gtest.h>\n+\n+#include <thread>\n+\n+#include "Common/HookableEvent.h"\n+#include "Common/ScopeGuard.h"\n+\n+using Common::EventHook;\n+using Common::HookableEvent;\n+using Common::HookHolder;\n+using Common::WeakEventHook;\n+\n+TEST(HookableEvent, Basic)\n+{\n+  int x = 0;\n+\n+  HookableEvent<> event;\n+  EventHook hook = event.Register([&] { x = 1; });\n+\n+  EXPECT_EQ(event.GetConnectionCount(), 1);\n+\n+  // Callbacks stay connected as long as hook is in scope.\n+  event.Trigger();\n+  EXPECT_EQ(x, 1);\n+\n+  x = 0;\n+\n+  hook.reset();\n+\n+  // Callback is gone because the hook was reset.\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+  event.Trigger();\n+  EXPECT_EQ(x, 0);\n+\n+  // Events can be stored in a container.\n+  HookHolder holder;\n+  constexpr int CONNECTION_COUNT = 55;\n+  for (int i = 0; i != CONNECTION_COUNT; ++i)\n+    holder.Connect(event, [&x, i] { x = i; });\n+\n+  // Callbacks are invoked in connection order.\n+  EXPECT_EQ(holder.GetConnectionCount(), CONNECTION_COUNT);\n+  event.Trigger();\n+  EXPECT_EQ(x, CONNECTION_COUNT - 1);\n+\n+  x = 0;\n+\n+  // Callbacks can be disconnected.\n+  holder.DisconnectAll();\n+\n+  WeakEventHook conn_x2 = holder.Connect(event, [&] { x = 2; });\n+  WeakEventHook conn_x1 = holder.Connect(event, [&] { x = 1; });\n+\n+  holder.Disconnect(conn_x1);\n+  EXPECT_EQ(holder.GetConnectionCount(), 1);\n+  event.Trigger();\n+  EXPECT_EQ(x, 2);\n+\n+  x = 0;\n+\n+  EventHook strong_conn_x2 = conn_x2.lock();\n+  EXPECT_TRUE(strong_conn_x2->IsConnected());\n+  strong_conn_x2->Disconnect();\n+  EXPECT_FALSE(strong_conn_x2->IsConnected());\n+\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+  event.Trigger();\n+  EXPECT_EQ(x, 0);\n+}\n+\n+TEST(HookableEvent, TypedParameters)\n+{\n+  HookableEvent<int, std::string> event;\n+  HookHolder holder;\n+\n+  int x = 0;\n+  std::string y;\n+  holder.Connect(event, [&](int i, std::string s) {\n+    x = i;\n+    y = s;\n+  });\n+\n+  event.Trigger(7, "hello");\n+  EXPECT_EQ(x, 7);\n+  EXPECT_EQ(y, "hello");\n+\n+  // References work.\n+  HookableEvent<int&, std::string&> event2;\n+  holder.Connect(event2, [&](int& i, std::string& s) {\n+    i = x;\n+    s = y;\n+  });\n+\n+  int x2 = 0;\n+  std::string y2;\n+  event2.Trigger(x2, y2);\n+\n+  EXPECT_EQ(x2, 7);\n+  EXPECT_EQ(y2, "hello");\n+}\n+\n+TEST(HookableEvent, HolderOutlived)\n+{\n+  int x = 0;\n+\n+  HookableEvent<> event;\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+\n+  constexpr int CONNECTION_COUNT = 5;\n+\n+  {\n+    HookHolder holder;\n+    EXPECT_EQ(holder.GetConnectionCount(), 0);\n+\n+    for (int y = 1; y <= CONNECTION_COUNT; ++y)\n+      holder.Connect(event, [&x, y] { x = y; });\n+\n+    EXPECT_EQ(holder.GetConnectionCount(), CONNECTION_COUNT);\n+    EXPECT_EQ(event.GetConnectionCount(), CONNECTION_COUNT);\n+\n+    EXPECT_EQ(x, 0);\n+    event.Trigger();\n+    EXPECT_EQ(x, CONNECTION_COUNT);\n+  }\n+\n+  // If the holder dies, the connections are removed.\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+\n+  x = 0;\n+  event.Trigger();\n+  EXPECT_EQ(x, 0);\n+}\n+\n+TEST(HookableEvent, EventOutlived)\n+{\n+  int x = 0;\n+\n+  HookHolder holder;\n+\n+  EXPECT_EQ(holder.GetConnectionCount(), 0);\n+\n+  constexpr int connect_count = 5;\n+\n+  {\n+    HookableEvent<> event;\n+    EXPECT_EQ(event.GetConnectionCount(), 0);\n+\n+    for (int y = 1; y <= connect_count; ++y)\n+      holder.Connect(event, [&x, y] { x = y; });\n+\n+    EXPECT_EQ(holder.GetConnectionCount(), connect_count);\n+    EXPECT_EQ(event.GetConnectionCount(), connect_count);\n+\n+    EXPECT_EQ(x, 0);\n+    event.Trigger();\n+    EXPECT_EQ(x, connect_count);\n+  }\n+\n+  // If the event dies, the connections are removed.\n+  EXPECT_EQ(holder.GetConnectionCount(), 0);\n+}\n+\n+// Connections made from within Trigger are not invoked until next Trigger.\n+TEST(HookableEvent, ConnectWithinTrigger)\n+{\n+  int x = 0;\n+  HookHolder holder;\n+\n+  HookableEvent<> event;\n+  holder.Connect(event, [&] {\n+    holder.Connect(event, [&] { x = 3; });\n+    x = 1;\n+  });\n+  holder.Connect(event, [&] { x = 2; });\n+\n+  EXPECT_EQ(x, 0);\n+  EXPECT_EQ(holder.GetConnectionCount(), 2);\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 2);\n+  EXPECT_EQ(holder.GetConnectionCount(), 3);\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 3);\n+  EXPECT_EQ(holder.GetConnectionCount(), 4);\n+}\n+\n+// Connections removed from within Trigger are not invoked.\n+TEST(HookableEvent, DisconnectWithinTrigger)\n+{\n+  HookHolder holder;\n+\n+  HookableEvent<> event;\n+\n+  WeakEventHook conn_x2;\n+\n+  int x = 0;\n+\n+  auto conn_x1 = holder.Connect(event, [&] {\n+    holder.Disconnect(conn_x2);\n+    x = 1;\n+  });\n+\n+  conn_x2 = holder.Connect(event, [&] { x = 2; });\n+\n+  EXPECT_EQ(x, 0);\n+  EXPECT_EQ(holder.GetConnectionCount(), 2);\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 1);\n+  EXPECT_EQ(holder.GetConnectionCount(), 1);\n+\n+  x = 0;\n+  int y = 0;\n+\n+  // Note that callback destruction timing is immediately on Disconnect.\n+  // (Triggered by the Disconnect in the conn_x1 event)\n+  conn_x2 = holder.Connect(event, [&, sg = Common::ScopeGuard{[&] {\n+                                        y = 1;\n+                                        x = 99;\n+                                      }}] {\n+    x = 99;\n+    y = 99;\n+  });\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 1);\n+  EXPECT_EQ(y, 1);\n+  EXPECT_EQ(holder.GetConnectionCount(), 1);\n+}\n+\n+// Recursive Trigger is allowed.\n+TEST(HookableEvent, RecursiveTrigger)\n+{\n+  int x = 0;\n+  HookHolder holder;\n+  HookableEvent<int> event;\n+\n+  holder.Connect(event, [&](int p) {\n+    ++x;\n+    if (p > 1)\n+      event.Trigger(p - 1);\n+  });\n+\n+  event.Trigger(10);\n+  EXPECT_EQ(x, 10);\n+\n+  holder.DisconnectAll();\n+\n+  x = 0;\n+  int y = 0;\n+\n+  holder.Connect(event, [&](int p) {\n+    ++x;\n+    if (p == 1)\n+    {\n+      holder.Connect(event, [&](int) { ++y; });\n+      event.Trigger(0);\n+      event.DisconnectAll();\n+    }\n+  });\n+\n+  event.Trigger(1);\n+  EXPECT_EQ(x, 2);\n+  EXPECT_EQ(y, 1);\n+}\n+\n+TEST(HookableEvent, SelfDisconnect)\n+{\n+  int x = 0;\n+\n+  HookableEvent<int> event;\n+\n+  struct Obj\n+  {\n+    EventHook hook;\n+  };\n+  auto obj = std::make_shared<Obj>();\n+\n+  // Hook removes itself when passed a 7.\n+  obj->hook = event.Register([&x, obj](int p) mutable {\n+    x = p;\n+    if (p == 7)\n+      obj.reset();', 'path': 'Source/UnitTests/Common/HookableEventTest.cpp', 'position': 287, 'original_position': 287, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', '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': "Additional data would not be usable after the `reset`. Like you said, this causes everything to be destroyed.\r\n\r\nI'd say it's similar to a lambda assigning-to or destroying a `std::function` that currently holds that very lambda. Even the lambda captures would be illegal to use at that point.\r\nPeople that do this certainly need to be careful. They are generally going to want to immediately return from the function, like what's done here, to avoid UB.\r\n\r\nI don't expect this to be a typical use case, but I think it's good that it's possible. ", 'created_at': '2026-10-27T23:35:21Z', 'updated_at': '2026-10-27T23:35:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395376474', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395376474'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395376474'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395376474/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4395078816, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-27T23:18:25.773841	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'submitted', 'pr_id': 14933, 'pr_title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5675506969', 'comments': [{'id': 4395078816, 'node_id': 'PRRC_kwDOALCn2M8AAAABBfeUoA', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395078816', 'pull_request_review_id': 5675506969, 'diff_hunk': '@@ -0,0 +1,500 @@\n+// Copyright 2026 Dolphin Emulator Project\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+\n+#include <gtest/gtest.h>\n+\n+#include <thread>\n+\n+#include "Common/HookableEvent.h"\n+#include "Common/ScopeGuard.h"\n+\n+using Common::EventHook;\n+using Common::HookableEvent;\n+using Common::HookHolder;\n+using Common::WeakEventHook;\n+\n+TEST(HookableEvent, Basic)\n+{\n+  int x = 0;\n+\n+  HookableEvent<> event;\n+  EventHook hook = event.Register([&] { x = 1; });\n+\n+  EXPECT_EQ(event.GetConnectionCount(), 1);\n+\n+  // Callbacks stay connected as long as hook is in scope.\n+  event.Trigger();\n+  EXPECT_EQ(x, 1);\n+\n+  x = 0;\n+\n+  hook.reset();\n+\n+  // Callback is gone because the hook was reset.\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+  event.Trigger();\n+  EXPECT_EQ(x, 0);\n+\n+  // Events can be stored in a container.\n+  HookHolder holder;\n+  constexpr int CONNECTION_COUNT = 55;\n+  for (int i = 0; i != CONNECTION_COUNT; ++i)\n+    holder.Connect(event, [&x, i] { x = i; });\n+\n+  // Callbacks are invoked in connection order.\n+  EXPECT_EQ(holder.GetConnectionCount(), CONNECTION_COUNT);\n+  event.Trigger();\n+  EXPECT_EQ(x, CONNECTION_COUNT - 1);\n+\n+  x = 0;\n+\n+  // Callbacks can be disconnected.\n+  holder.DisconnectAll();\n+\n+  WeakEventHook conn_x2 = holder.Connect(event, [&] { x = 2; });\n+  WeakEventHook conn_x1 = holder.Connect(event, [&] { x = 1; });\n+\n+  holder.Disconnect(conn_x1);\n+  EXPECT_EQ(holder.GetConnectionCount(), 1);\n+  event.Trigger();\n+  EXPECT_EQ(x, 2);\n+\n+  x = 0;\n+\n+  EventHook strong_conn_x2 = conn_x2.lock();\n+  EXPECT_TRUE(strong_conn_x2->IsConnected());\n+  strong_conn_x2->Disconnect();\n+  EXPECT_FALSE(strong_conn_x2->IsConnected());\n+\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+  event.Trigger();\n+  EXPECT_EQ(x, 0);\n+}\n+\n+TEST(HookableEvent, TypedParameters)\n+{\n+  HookableEvent<int, std::string> event;\n+  HookHolder holder;\n+\n+  int x = 0;\n+  std::string y;\n+  holder.Connect(event, [&](int i, std::string s) {\n+    x = i;\n+    y = s;\n+  });\n+\n+  event.Trigger(7, "hello");\n+  EXPECT_EQ(x, 7);\n+  EXPECT_EQ(y, "hello");\n+\n+  // References work.\n+  HookableEvent<int&, std::string&> event2;\n+  holder.Connect(event2, [&](int& i, std::string& s) {\n+    i = x;\n+    s = y;\n+  });\n+\n+  int x2 = 0;\n+  std::string y2;\n+  event2.Trigger(x2, y2);\n+\n+  EXPECT_EQ(x2, 7);\n+  EXPECT_EQ(y2, "hello");\n+}\n+\n+TEST(HookableEvent, HolderOutlived)\n+{\n+  int x = 0;\n+\n+  HookableEvent<> event;\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+\n+  constexpr int CONNECTION_COUNT = 5;\n+\n+  {\n+    HookHolder holder;\n+    EXPECT_EQ(holder.GetConnectionCount(), 0);\n+\n+    for (int y = 1; y <= CONNECTION_COUNT; ++y)\n+      holder.Connect(event, [&x, y] { x = y; });\n+\n+    EXPECT_EQ(holder.GetConnectionCount(), CONNECTION_COUNT);\n+    EXPECT_EQ(event.GetConnectionCount(), CONNECTION_COUNT);\n+\n+    EXPECT_EQ(x, 0);\n+    event.Trigger();\n+    EXPECT_EQ(x, CONNECTION_COUNT);\n+  }\n+\n+  // If the holder dies, the connections are removed.\n+  EXPECT_EQ(event.GetConnectionCount(), 0);\n+\n+  x = 0;\n+  event.Trigger();\n+  EXPECT_EQ(x, 0);\n+}\n+\n+TEST(HookableEvent, EventOutlived)\n+{\n+  int x = 0;\n+\n+  HookHolder holder;\n+\n+  EXPECT_EQ(holder.GetConnectionCount(), 0);\n+\n+  constexpr int connect_count = 5;\n+\n+  {\n+    HookableEvent<> event;\n+    EXPECT_EQ(event.GetConnectionCount(), 0);\n+\n+    for (int y = 1; y <= connect_count; ++y)\n+      holder.Connect(event, [&x, y] { x = y; });\n+\n+    EXPECT_EQ(holder.GetConnectionCount(), connect_count);\n+    EXPECT_EQ(event.GetConnectionCount(), connect_count);\n+\n+    EXPECT_EQ(x, 0);\n+    event.Trigger();\n+    EXPECT_EQ(x, connect_count);\n+  }\n+\n+  // If the event dies, the connections are removed.\n+  EXPECT_EQ(holder.GetConnectionCount(), 0);\n+}\n+\n+// Connections made from within Trigger are not invoked until next Trigger.\n+TEST(HookableEvent, ConnectWithinTrigger)\n+{\n+  int x = 0;\n+  HookHolder holder;\n+\n+  HookableEvent<> event;\n+  holder.Connect(event, [&] {\n+    holder.Connect(event, [&] { x = 3; });\n+    x = 1;\n+  });\n+  holder.Connect(event, [&] { x = 2; });\n+\n+  EXPECT_EQ(x, 0);\n+  EXPECT_EQ(holder.GetConnectionCount(), 2);\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 2);\n+  EXPECT_EQ(holder.GetConnectionCount(), 3);\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 3);\n+  EXPECT_EQ(holder.GetConnectionCount(), 4);\n+}\n+\n+// Connections removed from within Trigger are not invoked.\n+TEST(HookableEvent, DisconnectWithinTrigger)\n+{\n+  HookHolder holder;\n+\n+  HookableEvent<> event;\n+\n+  WeakEventHook conn_x2;\n+\n+  int x = 0;\n+\n+  auto conn_x1 = holder.Connect(event, [&] {\n+    holder.Disconnect(conn_x2);\n+    x = 1;\n+  });\n+\n+  conn_x2 = holder.Connect(event, [&] { x = 2; });\n+\n+  EXPECT_EQ(x, 0);\n+  EXPECT_EQ(holder.GetConnectionCount(), 2);\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 1);\n+  EXPECT_EQ(holder.GetConnectionCount(), 1);\n+\n+  x = 0;\n+  int y = 0;\n+\n+  // Note that callback destruction timing is immediately on Disconnect.\n+  // (Triggered by the Disconnect in the conn_x1 event)\n+  conn_x2 = holder.Connect(event, [&, sg = Common::ScopeGuard{[&] {\n+                                        y = 1;\n+                                        x = 99;\n+                                      }}] {\n+    x = 99;\n+    y = 99;\n+  });\n+\n+  event.Trigger();\n+  EXPECT_EQ(x, 1);\n+  EXPECT_EQ(y, 1);\n+  EXPECT_EQ(holder.GetConnectionCount(), 1);\n+}\n+\n+// Recursive Trigger is allowed.\n+TEST(HookableEvent, RecursiveTrigger)\n+{\n+  int x = 0;\n+  HookHolder holder;\n+  HookableEvent<int> event;\n+\n+  holder.Connect(event, [&](int p) {\n+    ++x;\n+    if (p > 1)\n+      event.Trigger(p - 1);\n+  });\n+\n+  event.Trigger(10);\n+  EXPECT_EQ(x, 10);\n+\n+  holder.DisconnectAll();\n+\n+  x = 0;\n+  int y = 0;\n+\n+  holder.Connect(event, [&](int p) {\n+    ++x;\n+    if (p == 1)\n+    {\n+      holder.Connect(event, [&](int) { ++y; });\n+      event.Trigger(0);\n+      event.DisconnectAll();\n+    }\n+  });\n+\n+  event.Trigger(1);\n+  EXPECT_EQ(x, 2);\n+  EXPECT_EQ(y, 1);\n+}\n+\n+TEST(HookableEvent, SelfDisconnect)\n+{\n+  int x = 0;\n+\n+  HookableEvent<int> event;\n+\n+  struct Obj\n+  {\n+    EventHook hook;\n+  };\n+  auto obj = std::make_shared<Obj>();\n+\n+  // Hook removes itself when passed a 7.\n+  obj->hook = event.Register([&x, obj](int p) mutable {\n+    x = p;\n+    if (p == 7)\n+      obj.reset();', 'path': 'Source/UnitTests/Common/HookableEventTest.cpp', 'position': 287, 'original_position': 287, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'user': {'login': 'iwubcode', 'id': 15224722, 'node_id': 'MDQ6VXNlcjE1MjI0NzIy', 'avatar_url': 'https://avatars.githubusercontent.com/u/15224722?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/iwubcode', 'html_url': 'https://github.com/iwubcode', 'followers_url': 'https://api.github.com/users/iwubcode/followers', 'following_url': 'https://api.github.com/users/iwubcode/following{/other_user}', 'gists_url': 'https://api.github.com/users/iwubcode/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/iwubcode/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/iwubcode/subscriptions', 'organizations_url': 'https://api.github.com/users/iwubcode/orgs', 'repos_url': 'https://api.github.com/users/iwubcode/repos', 'events_url': 'https://api.github.com/users/iwubcode/events{/privacy}', 'received_events_url': 'https://api.github.com/users/iwubcode/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'What if `obj` had data on it, would that be accessible after the hook reset?  The reset will unregister the hook which will destroy the lambda and therefore `obj`?', 'created_at': '2026-10-27T22:54:52Z', 'updated_at': '2026-10-27T23:18:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395078816', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395078816'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395078816'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395078816/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}, {'id': 4395085881, 'node_id': 'PRRC_kwDOALCn2M8AAAABBfewOQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395085881', 'pull_request_review_id': 5675506969, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());\n+      lk.unlock();  // Avoid deadlock from different lock orders.\n+      hook->Disconnect();\n+    }\n+  }\n \n-    // Avoiding an actual iterator because the container may be modified.\n-    for (std::size_t i = 0; i != m_storage->listeners.size(); ++i)\n+  // Destruction only removes internal references.\n+  // Any externally held EventHook can keep a connection alive.\n+  ~HookHolder()\n+  {\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n     {\n-      auto& listener = m_storage->listeners[i];\n+      const EventHook hook = std::move(m_hooks.back());\n+      lk.unlock();  // Avoid deadlock from different lock orders.\n+      hook->ForgetHolder();\n+    }\n+  }\n+\n+private:\n+  mutable std::mutex m_mutex;\n \n-      if (listener->is_pending_removal)\n-        continue;\n+  using ConnectedHooks = std::list<EventHook>;\n+  ConnectedHooks m_hooks;\n+\n+  ConnectedHooks::iterator AddHook(EventHook hook)\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.emplace(m_hooks.end(), std::move(hook));\n+  }\n \n-      std::invoke(listener->callback, args...);\n+  void RemoveHook(ConnectedHooks::iterator it)\n+  {\n+    const EventHook hook = std::move(*it);', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 157, 'original_position': 157, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'user': {'login': 'iwubcode', 'id': 15224722, 'node_id': 'MDQ6VXNlcjE1MjI0NzIy', 'avatar_url': 'https://avatars.githubusercontent.com/u/15224722?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/iwubcode', 'html_url': 'https://github.com/iwubcode', 'followers_url': 'https://api.github.com/users/iwubcode/followers', 'following_url': 'https://api.github.com/users/iwubcode/following{/other_user}', 'gists_url': 'https://api.github.com/users/iwubcode/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/iwubcode/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/iwubcode/subscriptions', 'organizations_url': 'https://api.github.com/users/iwubcode/orgs', 'repos_url': 'https://api.github.com/users/iwubcode/repos', 'events_url': 'https://api.github.com/users/iwubcode/events{/privacy}', 'received_events_url': 'https://api.github.com/users/iwubcode/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "This feels smelly to me.  Is there a reason this is needed?  This variable isn't even used?", 'created_at': '2026-10-27T22:55:54Z', 'updated_at': '2026-10-27T23:18:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395085881', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395085881'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395085881'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395085881/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}, {'id': 4395262287, 'node_id': 'PRRC_kwDOALCn2M8AAAABBfphTw', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395262287', 'pull_request_review_id': 5675506969, 'diff_hunk': '@@ -43,102 +59,276 @@ using EventHook = std::unique_ptr<HookBase>;\n //   my_lovely_event.Trigger("Hello world", 42);\n //\n \n-template <typename... CallbackArgs>\n-class HookableEvent\n+// A container of EventHook objects.\n+// If any held EventHook become disconnected the internal container is appropriately adjusted.\n+//\n+// HookableEvent<> event;\n+// HookHolder holder;\n+//\n+// holder.Connect(event, [&] { fmt::print("triggered 1"); });\n+//\n+// WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\n+// holder.Disconnect(hook);\n+//\n+class HookHolder\n {\n-public:\n-  using CallbackType = std::function<void(CallbackArgs...)>;\n+  template <typename... CallbackArgs>\n+  friend class HookableEvent;\n \n-  // Returns a handle that will unregister the listener when destroyed.\n-  [[nodiscard]] EventHook Register(CallbackType callback)\n+public:\n+  // Registers an EventHook that is stored internally.\n+  // Returns a WeakEventHook that can disconnect or extend the life of the hook.\n+  template <typename... CallbackArgs>\n+  WeakEventHook Connect(HookableEvent<CallbackArgs...>& event,\n+                        HookableEvent<CallbackArgs...>::CallbackType callback)\n   {\n-    DEBUG_LOG_FMT(COMMON, "Registering event hook handler");\n-    std::lock_guard lg(m_storage->listeners_mutex);\n+    return event.AddHook(std::move(callback), this);\n+  }\n \n-    auto& new_listener =\n-        m_storage->listeners.emplace_back(std::make_unique<Listener>(std::move(callback)));\n+  // These are just convenience functions to invoke EventHook::Disconnect()\n+  void Disconnect(EventHook& conn) { conn->Disconnect(); }\n+  void Disconnect(WeakEventHook& conn)\n+  {\n+    if (auto c = conn.lock())\n+      Disconnect(c);\n+  }\n \n-    return std::make_unique<HookImpl>(m_storage, new_listener.get());\n+  std::size_t GetConnectionCount() const\n+  {\n+    std::lock_guard lk{m_mutex};\n+    return m_hooks.size();\n   }\n \n-  // Invokes all registered callbacks.\n-  // Hooks added from within a callback will be invoked.\n-  // Hooks removed from within a callback will be skipped,\n-  //  but destruction of the hook\'s callback will be delayed until Trigger() completes.\n-  void Trigger(const CallbackArgs&... args)\n+  // Disconnect all held connections regardless of externally held EventHook.\n+  void DisconnectAll()\n   {\n-    std::lock_guard lg(m_storage->listeners_mutex);\n-    m_storage->is_triggering = true;\n+    for (std::unique_lock lk{m_mutex}; !m_hooks.empty(); lk.lock())\n+    {\n+      const EventHook hook = std::move(m_hooks.back());', 'path': 'Source/Core/Common/HookableEvent.h', 'position': 119, 'original_position': 119, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'user': {'login': 'iwubcode', 'id': 15224722, 'node_id': 'MDQ6VXNlcjE1MjI0NzIy', 'avatar_url': 'https://avatars.githubusercontent.com/u/15224722?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/iwubcode', 'html_url': 'https://github.com/iwubcode', 'followers_url': 'https://api.github.com/users/iwubcode/followers', 'following_url': 'https://api.github.com/users/iwubcode/following{/other_user}', 'gists_url': 'https://api.github.com/users/iwubcode/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/iwubcode/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/iwubcode/subscriptions', 'organizations_url': 'https://api.github.com/users/iwubcode/orgs', 'repos_url': 'https://api.github.com/users/iwubcode/repos', 'events_url': 'https://api.github.com/users/iwubcode/events{/privacy}', 'received_events_url': 'https://api.github.com/users/iwubcode/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "I *think* this means if two threads access this holder, the hooks size will potentially momentarily be wrong ( `GetConnectionCount()` ).  And I guess we don't remove the hook from the list here because it would stale the iterator that the hook holds onto?\n\nIt'd be slightly less cheap but instead of erasing by iterator, you could erase by pointer.  That'd allow you to erase from this list.", 'created_at': '2026-10-27T23:17:13Z', 'updated_at': '2026-10-27T23:18:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395262287', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395262287'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#discussion_r4395262287'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'original_commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395262287/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-27T13:15:54.223222	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'tygyh', 'action': 'submitted', 'pr_id': 14783, 'pr_title': 'Remove unused includes', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#pullrequestreview-5667622157', 'comments': [{'id': 4389105840, 'node_id': 'PRRC_kwDOALCn2M8AAAABBZxwsA', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4389105840', 'pull_request_review_id': 5667622157, 'diff_hunk': '@@ -3,7 +3,6 @@\n \n #include "VideoCommon/CPMemory.h"\n \n-#include <cstring>', 'path': 'Source/Core/VideoCommon/CPMemory.cpp', 'position': 1, 'original_position': 4, 'commit_id': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', 'user': {'login': 'tygyh', 'id': 32486062, 'node_id': 'MDQ6VXNlcjMyNDg2MDYy', 'avatar_url': 'https://avatars.githubusercontent.com/u/32486062?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/tygyh', 'html_url': 'https://github.com/tygyh', 'followers_url': 'https://api.github.com/users/tygyh/followers', 'following_url': 'https://api.github.com/users/tygyh/following{/other_user}', 'gists_url': 'https://api.github.com/users/tygyh/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/tygyh/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/tygyh/subscriptions', 'organizations_url': 'https://api.github.com/users/tygyh/orgs', 'repos_url': 'https://api.github.com/users/tygyh/repos', 'events_url': 'https://api.github.com/users/tygyh/events{/privacy}', 'received_events_url': 'https://api.github.com/users/tygyh/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "This PR comes from my IDE marking the includes as unused. How come the CI doesn't fail its tests?", 'created_at': '2026-10-27T13:15:51Z', 'updated_at': '2026-10-27T13:15:52Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4389105840', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14783', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4389105840'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4389105840'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14783'}}, 'original_commit_id': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4389105840/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4376774084, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-27T12:00:01.265867	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14783, 'pr_title': 'Remove unused includes', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#pullrequestreview-5666688614', 'comments': [{'id': 4388399307, 'node_id': 'PRRC_kwDOALCn2M8AAAABBZGoyw', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4388399307', 'pull_request_review_id': 5666688614, 'diff_hunk': '@@ -3,7 +3,6 @@\n \n #include "VideoCommon/CPMemory.h"\n \n-#include <cstring>', 'path': 'Source/Core/VideoCommon/CPMemory.cpp', 'position': 1, 'original_position': 4, 'commit_id': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', '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': 'In your build environments, cstring is probably being pulled in transitively. This is not something we can or should rely on. If a source file uses `std::memcpy`, said file should also contain `#include <cstring>`. Like DataReader.h should not have cstring removed among others...', 'created_at': '2026-10-27T11:59:58Z', 'updated_at': '2026-10-27T11:59:59Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4388399307', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14783', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4388399307'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4388399307'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14783'}}, 'original_commit_id': '1742b5c8bb0fffae0e7012b317222ad2e3f434f2', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4388399307/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4376774084, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}

Recent 'gh_push' events

2026-10-29T22:58:12.263922	{'source': 'ghhookparser', 'repo': 'dolphin-emu/sadm', 'pusher': 'OatmealDome', 'before_sha': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'after_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'commits': [{'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-29T18:58:01-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['roles/mastodon/default.nix'], 'removed': [], 'message': 'mastodon: Manually override package version to 4.6.10', 'url': 'https://github.com/dolphin-emu/sadm/commit/855912ebde8af3da1c27fd82351104a095734af0', 'hash': '855912ebde8af3da1c27fd82351104a095734af0'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-29T09:55:33.833841	{'source': 'ghhookparser', 'repo': 'dolphin-emu/analytics-ingest', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': 'e013d99d4ef9d4a1c7792a60cf884cd377c39a47', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-29T09:55:31Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['pyproject.toml', 'uv.lock'], 'removed': [], 'message': 'build(deps-dev): bump black from 26.5.1 to 26.10.1\n\nBumps [black](https://github.com/psf/black) from 26.5.1 to 26.10.1.\n- [Release notes](https://github.com/psf/black/releases)\n- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)\n- [Commits](https://github.com/psf/black/compare/26.5.1...26.10.1)\n\n---\nupdated-dependencies:\n- dependency-name: black\n  dependency-version: 26.10.1\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/analytics-ingest/commit/e013d99d4ef9d4a1c7792a60cf884cd377c39a47', 'hash': 'e013d99d4ef9d4a1c7792a60cf884cd377c39a47'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/black-26.10.1', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-25T12:40:26.192265	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'AdmiralCurtiss', 'before_sha': 'edce78926fc20cea65a0599637788715e03644be', 'after_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'commits': [{'author': {'name': 'Martino Fontana', 'email': 'tinozzo123@gmail.com', 'date': '2026-09-27T10:48:19+02:00', 'username': 'SuperSamus'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/PowerPC/PPCAnalyst.cpp'], 'removed': [], 'message': "PPCAnalyst: Avoid using strncmp\n\nIts usage appears in the profiler, and while small, it's not completely insignificant.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/786d91da28c31c6431a9f079971acb25eb23c925', 'hash': '786d91da28c31c6431a9f079971acb25eb23c925'}, {'author': {'name': 'Admiral H. Curtiss', 'email': 'pikachu025@gmail.com', 'date': '2026-10-25T13:40:23+01:00', 'username': 'AdmiralCurtiss'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/PowerPC/PPCAnalyst.cpp'], 'removed': [], 'message': 'Merge pull request #14939 from SuperSamus/ppc-analyst-no-strncmp\n\nPPCAnalyst: Avoid using strncmp', 'url': 'https://github.com/dolphin-emu/dolphin/commit/3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'hash': '3eb30c7620b4475b2e0404228ba0d2b238a132f1'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-25T11:30:03.758817	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': 'f8e6bed381f52fba6015fbda0568e447e1a984b2', 'after_sha': 'edce78926fc20cea65a0599637788715e03644be', 'commits': [{'author': {'name': 'Martino Fontana', 'email': 'tinozzo123@gmail.com', 'date': '2026-09-05T00:23:14+02:00', 'username': 'SuperSamus'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/PowerPC/Jit64/Jit.cpp', 'Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp', 'Source/Core/Core/PowerPC/Jit64Common/TrampolineInfo.h'], 'removed': [], 'message': "Jit64: Merge m_exception_handler_at_loc in TrampolineInfo\n\nIf MMU is enabled, there's an m_exception_handler_at_loc entry for almost every entry in m_back_patch_info, so keeping them separate is a huge waste: hashmaps aren't free.\nBrings a decent improvement to codegen performance when MMU is enabled.\n\nIf MMU is disabled, however, this increases the size of TrampolineInfo by 8 bytes. It's a little sad, but it's important to prioritize the worst-case performance.\nAlso, it simplifies the next commit, which will reduce the memory usage anyway.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/f0eb5d60b50d01f0609cb26a81136dc6d52beef7', 'hash': 'f0eb5d60b50d01f0609cb26a81136dc6d52beef7'}, {'author': {'name': 'Martino Fontana', 'email': 'tinozzo123@gmail.com', 'date': '2026-09-06T18:14:36+02:00', 'username': 'SuperSamus'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/PowerPC/Jit64/Jit.cpp', 'Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp', 'Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.h', 'Source/Core/Core/PowerPC/JitArm64/Jit.cpp', 'Source/Core/Core/PowerPC/JitArm64/Jit.h', 'Source/Core/Core/PowerPC/JitArm64/JitArm64_BackPatch.cpp', 'Source/Core/Core/PowerPC/JitCommon/JitBase.h'], 'removed': [], 'message': "Jit: Refactor m_back_patch_info/m_fault_to_handler's maps to store a vector per block\n\n(Tested NBA Live 2005)\nProfiling codegen performance showed that one of the slower functions was inserting elements to this map.\nBy inserting instead a vector of all the entries of a block, this disappears from the profiling, and the improvement is noticeable (tested the match intro sequence, though exact numbers are hard to gather).\n\nOn x86 (ARM was already doing it), now erasing a block will also delete the corresponding entries from the map.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/4c9019d6fb53ea81e49f6ed1ffeb70c52418a300', 'hash': '4c9019d6fb53ea81e49f6ed1ffeb70c52418a300'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-10-25T12:30:00+01:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/PowerPC/Jit64/Jit.cpp', 'Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp', 'Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.h', 'Source/Core/Core/PowerPC/Jit64Common/TrampolineInfo.h', 'Source/Core/Core/PowerPC/JitArm64/Jit.cpp', 'Source/Core/Core/PowerPC/JitArm64/Jit.h', 'Source/Core/Core/PowerPC/JitArm64/JitArm64_BackPatch.cpp', 'Source/Core/Core/PowerPC/JitCommon/JitBase.h'], 'removed': [], 'message': 'Merge pull request #14853 from SuperSamus/jit-trampoline-info-optimize\n\nJit: Optimize trampoline info allocation', 'url': 'https://github.com/dolphin-emu/dolphin/commit/edce78926fc20cea65a0599637788715e03644be', 'hash': 'edce78926fc20cea65a0599637788715e03644be'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-25T11:00:47.273693	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': '22b581c670d84e60d11c1b02d38e1c7789ae2dfa', 'after_sha': 'f8e6bed381f52fba6015fbda0568e447e1a984b2', 'commits': [{'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-25T01:26:26-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Common/Thread.cpp', 'Source/Core/Common/Thread.h'], 'removed': [], 'message': 'Common/Thread: Remove unused SwitchCurrentThread function.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/d7c0fdebad493f3244aebfcab9e38a24f6594bde', 'hash': 'd7c0fdebad493f3244aebfcab9e38a24f6594bde'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-25T01:27:52-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Common/Thread.h'], 'removed': [], 'message': 'Common/Thread: Remove unused non-Windows INFINITE macro.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/fa108cf559250aff9d8d0ec812d5bdebf075b7b0', 'hash': 'fa108cf559250aff9d8d0ec812d5bdebf075b7b0'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-10-25T12:00:44+01:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Common/Thread.cpp', 'Source/Core/Common/Thread.h'], 'removed': [], 'message': 'Merge pull request #14952 from jordan-woyak/common-thread-remove-unused\n\nCommon/Thread: Remove some unused things.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f8e6bed381f52fba6015fbda0568e447e1a984b2', 'hash': 'f8e6bed381f52fba6015fbda0568e447e1a984b2'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-24T20:04:27.940617	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': 'b5f580e6f9b5ba442248ac62a25cb4db246aa69c', 'after_sha': '22b581c670d84e60d11c1b02d38e1c7789ae2dfa', 'commits': [{'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-19T12:34:12-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/UnitTests/Core/CoreTimingTest.cpp'], 'removed': [], 'message': 'UnitTests: Fix CoreTiming.SharedSlot test so it can run independently.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/3c72f4d5425875e32d809dab9821afe9bb1d042e', 'hash': '3c72f4d5425875e32d809dab9821afe9bb1d042e'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-24T15:04:25-05:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/UnitTests/Core/CoreTimingTest.cpp'], 'removed': [], 'message': 'Merge pull request #14940 from jordan-woyak/CoreTimingTest-fix\n\nUnitTests: Fix CoreTiming.SharedSlot test so it can run independently.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/22b581c670d84e60d11c1b02d38e1c7789ae2dfa', 'hash': '22b581c670d84e60d11c1b02d38e1c7789ae2dfa'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-24T18:22:26.784936	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'iwubcode', 'before_sha': 'c12121f419c40f99eeb65a9039d9fc95be72e94a', 'after_sha': 'b5f580e6f9b5ba442248ac62a25cb4db246aa69c', 'commits': [{'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-23T11:49:22-04:00', 'username': 'OatmealDome'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Common/Timer.cpp'], 'removed': [], 'message': 'Revert "msvc: use std::chrono for GetLocalTimeSinceJan1970"\n\nThis reverts commit 86da6c98fbd229d87de7cf8b9c7eb94c16923829.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/5ef181ba4dffd6d3d5de47d90de0c22f02657215', 'hash': '5ef181ba4dffd6d3d5de47d90de0c22f02657215'}, {'author': {'name': 'iwubcode', 'email': 'iwubcode@users.noreply.github.com', 'date': '2026-10-24T13:22:24-05:00', 'username': 'iwubcode'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Common/Timer.cpp'], 'removed': [], 'message': 'Merge pull request #14946 from OatmealDome/revert-win-std-chrono\n\nRevert "msvc: use std::chrono for GetLocalTimeSinceJan1970"', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b5f580e6f9b5ba442248ac62a25cb4db246aa69c', 'hash': 'b5f580e6f9b5ba442248ac62a25cb4db246aa69c'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-24T12:16:24.669085	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': 'e1d35f666cc35f6ead55d32ea2679df44d04da72', 'after_sha': 'c12121f419c40f99eeb65a9039d9fc95be72e94a', 'commits': [{'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-04T22:33:27-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/IOS/USB/Emulated/Skylanders/SkylanderFigure.cpp', 'Source/Core/Core/IOS/USB/Emulated/Skylanders/SkylanderFigure.h'], 'removed': [], 'message': 'Skylanders: Replace mbedtls_aes usage with Common::AES and minor warning cleanups.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e56740eabce91b58119ad7a03f5a42db16a3e077', 'hash': 'e56740eabce91b58119ad7a03f5a42db16a3e077'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-10-24T14:16:21+02:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/IOS/USB/Emulated/Skylanders/SkylanderFigure.cpp', 'Source/Core/Core/IOS/USB/Emulated/Skylanders/SkylanderFigure.h'], 'removed': [], 'message': 'Merge pull request #14917 from jordan-woyak/skylanders-common-aes\n\nSkylanders: Replace mbedtls_aes usage with Common::AES.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/c12121f419c40f99eeb65a9039d9fc95be72e94a', 'hash': 'c12121f419c40f99eeb65a9039d9fc95be72e94a'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-23T23:43:13.829132	{'source': 'ghhookparser', 'repo': 'dolphin-emu/fifoci', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': '3b2b272b9e30ee9272e98a082bb177828b55aea1', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-23T23:43:10Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['fifoci/runner/uv.lock'], 'removed': [], 'message': 'build(deps-dev): bump black from 26.5.1 to 26.10.1 in /fifoci/runner\n\nBumps [black](https://github.com/psf/black) from 26.5.1 to 26.10.1.\n- [Release notes](https://github.com/psf/black/releases)\n- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)\n- [Commits](https://github.com/psf/black/compare/26.5.1...26.10.1)\n\n---\nupdated-dependencies:\n- dependency-name: black\n  dependency-version: 26.10.1\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/fifoci/commit/3b2b272b9e30ee9272e98a082bb177828b55aea1', 'hash': '3b2b272b9e30ee9272e98a082bb177828b55aea1'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/fifoci/runner/black-26.10.1', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-23T00:10:39.440717	{'source': 'ghhookparser', 'repo': 'dolphin-emu/central', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': '6ad4b6953af25fade92abf42a6c20548eddffffb', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-23T00:10:37Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps): bump certifi from 2026.7.22 to 2026.10.19\n\nBumps [certifi](https://github.com/certifi/python-certifi) from 2026.7.22 to 2026.10.19.\n- [Commits](https://github.com/certifi/python-certifi/compare/2026.07.22...2026.10.19)\n\n---\nupdated-dependencies:\n- dependency-name: certifi\n  dependency-version: 2026.10.19\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/central/commit/6ad4b6953af25fade92abf42a6c20548eddffffb', 'hash': '6ad4b6953af25fade92abf42a6c20548eddffffb'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/certifi-2026.10.19', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-23T00:10:36.300805	{'source': 'ghhookparser', 'repo': 'dolphin-emu/central', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': '623c06e836606b5b2d6b5a4bfcac08bc3f34925e', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-23T00:10:33Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps-dev): bump black from 26.5.1 to 26.10.1\n\nBumps [black](https://github.com/psf/black) from 26.5.1 to 26.10.1.\n- [Release notes](https://github.com/psf/black/releases)\n- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)\n- [Commits](https://github.com/psf/black/compare/26.5.1...26.10.1)\n\n---\nupdated-dependencies:\n- dependency-name: black\n  dependency-version: 26.10.1\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/central/commit/623c06e836606b5b2d6b5a4bfcac08bc3f34925e', 'hash': '623c06e836606b5b2d6b5a4bfcac08bc3f34925e'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/black-26.10.1', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-22T23:56:03.195102	{'source': 'ghhookparser', 'repo': 'dolphin-emu/netplay-index', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': '8c26dcef9aaaae7181e2f59d7f56a5d3e852e68f', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-22T23:56:00Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps): bump certifi from 2026.7.22 to 2026.10.19\n\nBumps [certifi](https://github.com/certifi/python-certifi) from 2026.7.22 to 2026.10.19.\n- [Commits](https://github.com/certifi/python-certifi/compare/2026.07.22...2026.10.19)\n\n---\nupdated-dependencies:\n- dependency-name: certifi\n  dependency-version: 2026.10.19\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/netplay-index/commit/8c26dcef9aaaae7181e2f59d7f56a5d3e852e68f', 'hash': '8c26dcef9aaaae7181e2f59d7f56a5d3e852e68f'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/certifi-2026.10.19', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-22T23:56:01.607794	{'source': 'ghhookparser', 'repo': 'dolphin-emu/netplay-index', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': '70b6d66b9dde12acf21a57fc84dc83bc1ff3249a', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-22T23:55:59Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps-dev): bump black from 26.5.1 to 26.10.1\n\nBumps [black](https://github.com/psf/black) from 26.5.1 to 26.10.1.\n- [Release notes](https://github.com/psf/black/releases)\n- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)\n- [Commits](https://github.com/psf/black/compare/26.5.1...26.10.1)\n\n---\nupdated-dependencies:\n- dependency-name: black\n  dependency-version: 26.10.1\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/netplay-index/commit/70b6d66b9dde12acf21a57fc84dc83bc1ff3249a', 'hash': '70b6d66b9dde12acf21a57fc84dc83bc1ff3249a'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/black-26.10.1', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-22T20:05:25.812213	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': '10d958e66bb5d7574166a10f57839a288c5a7c64', 'after_sha': 'e1d35f666cc35f6ead55d32ea2679df44d04da72', 'commits': [{'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-04T16:04:21-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Common/Hash.cpp', 'Source/Core/Common/Hash.h'], 'removed': [], 'message': 'Common: Create MD5Context class and ComputeMD5 function to minimize exposure to mbedtls throughout the project.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/db5bbbd6cf340fd8e77244ad452089fae0ff33ae', 'hash': 'db5bbbd6cf340fd8e77244ad452089fae0ff33ae'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-04T16:04:42-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/HW/WiiSave.cpp'], 'removed': [], 'message': 'WiiSave: Use Common::ComputeMD5 instead of mbedtls.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/58a0864d035ccc690698fb76063f2936906bd714', 'hash': '58a0864d035ccc690698fb76063f2936906bd714'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-04T16:05:05-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/IOS/USB/Emulated/Skylanders/SkylanderFigure.cpp'], 'removed': [], 'message': 'SkylanderFigure: Use Common::ComputeMD5 instead of mbedtls.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/304086d3179d5c9f3bc94c4487e943ec449280ab', 'hash': '304086d3179d5c9f3bc94c4487e943ec449280ab'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-04T16:05:09-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/DiscIO/VolumeVerifier.cpp', 'Source/Core/DiscIO/VolumeVerifier.h'], 'removed': [], 'message': 'DiscIO/VolumeVerifier: Use Common::MD5Context instead of mbedtls.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/7e46e85e8fb3cff68f05bc160c7ac3ed77b1414b', 'hash': '7e46e85e8fb3cff68f05bc160c7ac3ed77b1414b'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-22T15:05:23-05:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Common/Hash.cpp', 'Source/Core/Common/Hash.h', 'Source/Core/Core/HW/WiiSave.cpp', 'Source/Core/Core/IOS/USB/Emulated/Skylanders/SkylanderFigure.cpp', 'Source/Core/DiscIO/VolumeVerifier.cpp', 'Source/Core/DiscIO/VolumeVerifier.h'], 'removed': [], 'message': 'Merge pull request #14913 from jordan-woyak/md5\n\nCommon: Introduce MD5Context class and ComputeMD5 function to minimize mbedtls dependence.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e1d35f666cc35f6ead55d32ea2679df44d04da72', 'hash': 'e1d35f666cc35f6ead55d32ea2679df44d04da72'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-22T19:14:49.767406	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': '2c805fee8f232d090c454381bb1b8422242345e1', 'after_sha': '10d958e66bb5d7574166a10f57839a288c5a7c64', 'commits': [{'author': {'name': 'Dentomologist', 'email': 'dentomologist@gmail.com', 'date': '2026-10-20T14:20:23-07:00', 'username': 'Dentomologist'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/DolphinQt/CMakeLists.txt'], 'removed': [], 'message': "CMake: Enforce minimum Qt version 6.2\n\nQt 6.2 has been de facto required since\nafa6e26e5de58e942c8e7ef3a02632ccfb851d3d added a call to\nQPixmap::deviceIndependentSize which was introduced in that Qt version.\n\nQt 6.2 was released 5 years ago and we've required 6.2+ for over 2\nyears, so let's make that requirement explicit in CMakeLists.txt instead\nof having an apparently random compile error if anyone happens to try\nbuilding with an older Qt version.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/33ad9ed02f0f66b5c202a87e4c0896f96c57ff87', 'hash': '33ad9ed02f0f66b5c202a87e4c0896f96c57ff87'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-22T14:14:47-05:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/DolphinQt/CMakeLists.txt'], 'removed': [], 'message': 'Merge pull request #14942 from Dentomologist/cmake_add_explicit_check_for_minimum_qt_version\n\nCMake: Enforce minimum Qt version 6.2', 'url': 'https://github.com/dolphin-emu/dolphin/commit/10d958e66bb5d7574166a10f57839a288c5a7c64', 'hash': '10d958e66bb5d7574166a10f57839a288c5a7c64'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-22T17:12:38.072700	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JMC47', 'before_sha': 'cf5cb7ef81c3e8e7af5c9d566334219ffda9f68b', 'after_sha': '2c805fee8f232d090c454381bb1b8422242345e1', 'commits': [{'author': {'name': 'Tom Pratt', 'email': 'tom.pratt@outlook.com', 'date': '2026-05-11T09:01:20-07:00', 'username': 'tom-pratt'}, 'distinct': False, 'added': [], 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/NetplaySession.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/GameDigestProgress.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/NetplayViewModel.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/ui/NetplayActivity.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/ui/NetplayScreen.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/theme/DolphinTheme.kt', 'Source/Android/app/src/main/res/values/strings.xml', 'Source/Android/jni/NetPlay/NetPlayUICallbacks.h', 'Source/Android/jni/NetPlay/Netplay.cpp'], 'removed': [], 'message': 'Android: Trigger netplay game digest check\n\nAlso trigger abort / dismiss from the host when closing the dialog.\nAdd explicit "finished" property to GameDigestProgress since the UI is different depending on this state.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/66657167e357597b99b0957a4ee27a0da8b36571', 'hash': '66657167e357597b99b0957a4ee27a0da8b36571'}, {'author': {'name': 'JMC47', 'email': 'JMC4789@gmail.com', 'date': '2026-10-22T13:12:33-04:00', 'username': 'JMC47'}, 'distinct': True, 'added': [], 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/NetplaySession.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/GameDigestProgress.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/NetplayViewModel.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/ui/NetplayActivity.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/ui/NetplayScreen.kt', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/theme/DolphinTheme.kt', 'Source/Android/app/src/main/res/values/strings.xml', 'Source/Android/jni/NetPlay/NetPlayUICallbacks.h', 'Source/Android/jni/NetPlay/Netplay.cpp'], 'removed': [], 'message': 'Merge pull request #14734 from tom-pratt/trigger-game-digest-check\n\nAndroid: Trigger netplay game digest check', 'url': 'https://github.com/dolphin-emu/dolphin/commit/2c805fee8f232d090c454381bb1b8422242345e1', 'hash': '2c805fee8f232d090c454381bb1b8422242345e1'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-22T12:26:38.608172	{'source': 'ghhookparser', 'repo': 'dolphin-emu/sadm', 'pusher': 'OatmealDome', 'before_sha': 'd3c0d0059a15878511b86aecc51b488392e0e184', 'after_sha': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'commits': [{'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-22T08:25:03-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['.github/workflows/containers.yml'], 'removed': [], 'message': 'Actions: Add workflow dispatch to build containers workflow', 'url': 'https://github.com/dolphin-emu/sadm/commit/ac077f40caa97d98924f2a6eaa49aec3669a7d0f', 'hash': 'ac077f40caa97d98924f2a6eaa49aec3669a7d0f'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-22T08:25:36-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['flake.lock'], 'removed': [], 'message': "flake.lock: Update\n\nFlake lock file updates:\n\n• Updated input 'agenix':\n    'github:ryantm/agenix/3daa710894355fa2fad8243380af373a2b4046ef?narHash=sha256-n7wew722m1OTBT9DOIMxNX/NF4zfsSUABAO5eW3wikE%3D' (2026-09-30)\n  → 'github:ryantm/agenix/5e5b88a0c8e56f291a108c2fe9934054d9745b2e?narHash=sha256-8tKjSQajD3mUND1GaAuaWTcuyUpgcGsh5V%2Bl4ibzC7U%3D' (2026-10-20)\n• Updated input 'nixpkgs':\n    'github:NixOS/nixpkgs/7993f34ee47e28a3d607a525aadc6c94b73be728?narHash=sha256-ZGq3ptZzA%2BoO0N/Wi/F%2BGbuTijLkYExD01LvpNFAvr0%3D' (2026-10-12)\n  → 'github:NixOS/nixpkgs/da6dc0e7b26060f2f71ce3ef7088fb56ee44fa36?narHash=sha256-MlvRfa1O5Cqc2/a%2BgG%2Bl9TSuowEoCKCmrJ1d9oAVm0I%3D' (2026-10-21)\n• Updated input 'pyproject-build-systems':\n    'github:pyproject-nix/build-system-pkgs/953d35d03a51dbecaf3feb3fb679eb63e90ebeb4?narHash=sha256-pyru9MpuXRiyq0Bd4q0nHpL4T6HCuZT4B%2BalcgAYE4A%3D' (2026-10-05)\n  → 'github:pyproject-nix/build-system-pkgs/a17819c85163988e063806ffc4f6d2716bc8ead8?narHash=sha256-mGOkvueuMGSRiD75ccxFzfEvSlIU9ztjFluHMKOtogY%3D' (2026-10-20)\n• Updated input 'pyproject-build-systems/uv2nix':\n    'github:pyproject-nix/uv2nix/a24323e9e6ecbbf305c238845ff6c612d50467c0?narHash=sha256-wFnDm/o/4OebDlpGFyVXP8DLUx0/gR/jUFuGqmTwsQg%3D' (2026-09-25)\n  → 'github:pyproject-nix/uv2nix/7aba73a3d85454f1118f8cf9de97979b4d26bcac?narHash=sha256-PMtgvHuGijoIAtPtrBm7kJOI6fxzX4LYPAIK%2BQVGY%2BY%3D' (2026-10-16)\n• Updated input 'rust-overlay':\n    'github:oxalica/rust-overlay/3100cf6ff140fb298f09192de610f4037d3bab0f?narHash=sha256-7KXUW3FKbZAstFiK09LJ1sUnPN2dO5RX9ROCZgGbeZw%3D' (2026-10-13)\n  → 'github:oxalica/rust-overlay/5f267b7f323a4d6df0b9c0e3eaa043cbe85386f2?narHash=sha256-E8zFJilWlORqzIUJizyhZ/0WKBOizuM6s1nRSgPRomo%3D' (2026-10-22)\n• Updated input 'uv2nix':\n    'github:pyproject-nix/uv2nix/37462fae7b37be45d78f754d1c39e8813ede0f80?narHash=sha256-39EtILDexiwJqShYD/yu1B73OvF6DigAqF040egC07g%3D' (2026-10-12)\n  → 'github:pyproject-nix/uv2nix/0fdaa03ea3c3c16dbb1fe4d69108f07227a4b42d?narHash=sha256-UWo7wDPi00YXOI1Io7g4vGKuCSPJ863kHJVDzsgqtoM%3D' (2026-10-22)", 'url': 'https://github.com/dolphin-emu/sadm/commit/983c9bd664a2a83971d33b37f57189e99d10a7e9', 'hash': '983c9bd664a2a83971d33b37f57189e99d10a7e9'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-20T10:19:25.215424	{'source': 'ghhookparser', 'repo': 'dolphin-emu/central', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': '9d545400dc491ebcbf08ce45d17550bf1262fed4', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-20T10:19:21Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps): bump multidict from 6.7.1 to 6.9.1\n\nBumps [multidict](https://github.com/aio-libs/multidict) from 6.7.1 to 6.9.1.\n- [Release notes](https://github.com/aio-libs/multidict/releases)\n- [Changelog](https://github.com/aio-libs/multidict/blob/master/CHANGES.rst)\n- [Commits](https://github.com/aio-libs/multidict/compare/v6.7.1...v6.9.1)\n\n---\nupdated-dependencies:\n- dependency-name: multidict\n  dependency-version: 6.9.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/central/commit/9d545400dc491ebcbf08ce45d17550bf1262fed4', 'hash': '9d545400dc491ebcbf08ce45d17550bf1262fed4'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/multidict-6.9.1', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-20T09:45:59.112048	{'source': 'ghhookparser', 'repo': 'dolphin-emu/netplay-index', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': 'dfd09f29f1b90c318de05bdbf38356d337dcbc4d', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-20T09:45:56Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps): bump multidict from 6.7.1 to 6.9.1\n\nBumps [multidict](https://github.com/aio-libs/multidict) from 6.7.1 to 6.9.1.\n- [Release notes](https://github.com/aio-libs/multidict/releases)\n- [Changelog](https://github.com/aio-libs/multidict/blob/master/CHANGES.rst)\n- [Commits](https://github.com/aio-libs/multidict/compare/v6.7.1...v6.9.1)\n\n---\nupdated-dependencies:\n- dependency-name: multidict\n  dependency-version: 6.9.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/netplay-index/commit/dfd09f29f1b90c318de05bdbf38356d337dcbc4d', 'hash': 'dfd09f29f1b90c318de05bdbf38356d337dcbc4d'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/multidict-6.9.1', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-20T06:10:03.224634	{'source': 'ghhookparser', 'repo': 'dolphin-emu/central', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': '6ea630e5224e19d89f7b3c2601ef51e038962fe3', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-20T06:10:00Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps): bump aiohttp from 3.14.3 to 3.14.4\n\n---\nupdated-dependencies:\n- dependency-name: aiohttp\n  dependency-version: 3.14.4\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/central/commit/6ea630e5224e19d89f7b3c2601ef51e038962fe3', 'hash': '6ea630e5224e19d89f7b3c2601ef51e038962fe3'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/aiohttp-3.14.4', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-20T04:23:47.430910	{'source': 'ghhookparser', 'repo': 'dolphin-emu/netplay-index', 'pusher': 'dependabot[bot]', 'before_sha': '0000000000000000000000000000000000000000', 'after_sha': 'c8cdb9edb91b5292fcefa1b834ca2116df47e8f0', 'commits': [{'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'date': '2026-10-20T04:23:45Z', 'username': 'dependabot[bot]'}, 'distinct': True, 'added': [], 'modified': ['uv.lock'], 'removed': [], 'message': 'build(deps): bump aiohttp from 3.14.3 to 3.14.4\n\n---\nupdated-dependencies:\n- dependency-name: aiohttp\n  dependency-version: 3.14.4\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'url': 'https://github.com/dolphin-emu/netplay-index/commit/c8cdb9edb91b5292fcefa1b834ca2116df47e8f0', 'hash': 'c8cdb9edb91b5292fcefa1b834ca2116df47e8f0'}], 'base_ref_name': None, 'ref_name': 'dependabot/uv/aiohttp-3.14.4', 'ref_type': 'heads', 'created': True, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-19T16:56:23.730113	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JMC47', 'before_sha': '1822e3859f061c6f81076c94eb4ba7e6e0a3706c', 'after_sha': 'cf5cb7ef81c3e8e7af5c9d566334219ffda9f68b', 'commits': [{'author': {'name': 'Martino Fontana', 'email': 'tinozzo123@gmail.com', 'date': '2025-12-22T12:28:12+01:00', 'username': 'SuperSamus'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp', 'Source/Core/Core/PowerPC/Jit64/Jit_Branch.cpp', 'Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp', 'Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp', 'Source/Core/Core/PowerPC/PPCAnalyst.cpp', 'Source/Core/Core/PowerPC/PPCAnalyst.h'], 'removed': [], 'message': "Jit: Followed unconditional branches are a property added by the Analyzer, not something to assume\n\nIf an unconditional branch is not the last instruction of the block, assuming that this means that the branch must have been followed is an unsafe assumption on how the analyzer works that may not hold true in the future.\nAs a bonus: JitArm64, unlike x86, didn't skip followed `bcx`s. Now it does.", 'url': 'https://github.com/dolphin-emu/dolphin/commit/69b75fed12eae2d500da89d400d036739ff95b4c', 'hash': '69b75fed12eae2d500da89d400d036739ff95b4c'}, {'author': {'name': 'JMC47', 'email': 'JMC4789@gmail.com', 'date': '2026-10-19T12:56:21-04:00', 'username': 'JMC47'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp', 'Source/Core/Core/PowerPC/Jit64/Jit_Branch.cpp', 'Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp', 'Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp', 'Source/Core/Core/PowerPC/PPCAnalyst.cpp', 'Source/Core/Core/PowerPC/PPCAnalyst.h'], 'removed': [], 'message': 'Merge pull request #14388 from SuperSamus/jit-branch-follow-explicit\n\nJit: Followed unconditional branches are a property added by the Analyzer, not something to assume', 'url': 'https://github.com/dolphin-emu/dolphin/commit/cf5cb7ef81c3e8e7af5c9d566334219ffda9f68b', 'hash': 'cf5cb7ef81c3e8e7af5c9d566334219ffda9f68b'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-19T04:31:10.141871	{'source': 'ghhookparser', 'repo': 'dolphin-emu/sadm', 'pusher': 'OatmealDome', 'before_sha': '7605fd14fb447e2fa9e0faee4994dd631260c8e0', 'after_sha': 'd3c0d0059a15878511b86aecc51b488392e0e184', 'commits': [{'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-17T11:27:04-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['machines/altair/default.nix', 'roles/foreign-builders/default.nix'], 'removed': [], 'message': 'foreign-builder: Don\'t require the "-builder" suffix with image names', 'url': 'https://github.com/dolphin-emu/sadm/commit/fa6ce2e376f9977d58cabf1658a2364ac4f5e601', 'hash': 'fa6ce2e376f9977d58cabf1658a2364ac4f5e601'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-17T12:18:26-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': ['secrets/container-altair-appimage-env.age', 'secrets/container-android-env.age', 'secrets/container-debian-env.age', 'secrets/container-steamrt-env.age', 'secrets/container-ubuntu-lts-env.age'], 'modified': ['roles/foreign-builders/default.nix', 'secrets/secrets.nix'], 'removed': [], 'message': 'foreign-builders: Have one password file for each container', 'url': 'https://github.com/dolphin-emu/sadm/commit/15ee72a373cc26aba8bf6f8f77bd38f032a5a944', 'hash': '15ee72a373cc26aba8bf6f8f77bd38f032a5a944'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-17T12:18:44-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['machines/altair/default.nix'], 'removed': [], 'message': 'machines/altair: Reformat android container definition', 'url': 'https://github.com/dolphin-emu/sadm/commit/2e212152a9d280ee49bb22f04895ca960461f89a', 'hash': '2e212152a9d280ee49bb22f04895ca960461f89a'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-17T12:22:32-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['secrets/oci-registry-password.age'], 'removed': [], 'message': 'secrets: Re-encrypt oci-registry-password with support for deneb', 'url': 'https://github.com/dolphin-emu/sadm/commit/a00c4b68a511011c8070a5ed92229322439737e7', 'hash': 'a00c4b68a511011c8070a5ed92229322439737e7'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-17T12:23:02-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': ['secrets/container-deneb-appimage-env.age'], 'modified': ['machines/deneb/default.nix', 'secrets/secrets.nix'], 'removed': [], 'message': 'machines/deneb: Add AppImage arm64 builder', 'url': 'https://github.com/dolphin-emu/sadm/commit/c1383d702fe381d84bb243e24a7943182e1b2717', 'hash': 'c1383d702fe381d84bb243e24a7943182e1b2717'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-17T12:24:34-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['roles/buildbot/etc/master.cfg', 'roles/central/default.nix', 'secrets/buildbot-workers-passwords.age'], 'removed': [], 'message': 'buildbot: Add AppImage arm64 builder', 'url': 'https://github.com/dolphin-emu/sadm/commit/4c9ac430e0ecc21179545d0266e238716cd56304', 'hash': '4c9ac430e0ecc21179545d0266e238716cd56304'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-18T12:19:03-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['roles/buildbot/etc/master.cfg'], 'removed': [], 'message': 'buildbot: Add support for dev and release AppImage builds', 'url': 'https://github.com/dolphin-emu/sadm/commit/9e9552c060ed8459f9b10fea619f128389915eb7', 'hash': '9e9552c060ed8459f9b10fea619f128389915eb7'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-18T16:14:53-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['roles/foreign-builders/default.nix'], 'removed': [], 'message': 'foreign-builders: Allow individual builders to specify their own extra options', 'url': 'https://github.com/dolphin-emu/sadm/commit/849f1b98d00c650e8256396c5418f2093188ea67', 'hash': '849f1b98d00c650e8256396c5418f2093188ea67'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-19T00:30:02-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['machines/altair/default.nix', 'roles/foreign-builders/default.nix'], 'removed': [], 'message': 'machines/altair: Move /dev/kvm flag to be specific to the Android builder', 'url': 'https://github.com/dolphin-emu/sadm/commit/e2ad180e9f9bf14b25bd8b46ff7cf3712f03d75f', 'hash': 'e2ad180e9f9bf14b25bd8b46ff7cf3712f03d75f'}, {'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-19T00:30:22-04:00', 'username': 'OatmealDome'}, 'distinct': True, 'added': [], 'modified': ['roles/buildbot/etc/master.cfg'], 'removed': [], 'message': 'buildbot: Correct path for deleting the existing AppDir', 'url': 'https://github.com/dolphin-emu/sadm/commit/d3c0d0059a15878511b86aecc51b488392e0e184', 'hash': 'd3c0d0059a15878511b86aecc51b488392e0e184'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-18T18:26:45.010021	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'jordan-woyak', 'before_sha': '41460454e9600f909950fddf0abd13a138430162', 'after_sha': '1822e3859f061c6f81076c94eb4ba7e6e0a3706c', 'commits': [{'author': {'name': 'iwubcode', 'email': 'iwubcode@users.noreply.github.com', 'date': '2026-10-16T01:04:33-05:00', 'username': 'iwubcode'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Core/PowerPC/MMU.cpp', 'Source/Core/VideoBackends/Null/NullGfx.cpp', 'Source/Core/VideoBackends/Null/NullGfx.h', 'Source/Core/VideoBackends/Software/SWEfbInterface.cpp', 'Source/Core/VideoBackends/Software/SWEfbInterface.h', 'Source/Core/VideoCommon/BPFunctions.cpp', 'Source/Core/VideoCommon/EFBInterface.cpp', 'Source/Core/VideoCommon/EFBInterface.h'], 'removed': [], 'message': 'VideoCommon: remove global framebuffer manager from EFBInterface and instead pass it in', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f71b0a48b352379a213a65a0a796cac5aab4ba3f', 'hash': 'f71b0a48b352379a213a65a0a796cac5aab4ba3f'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-18T13:26:42-05:00', 'username': 'jordan-woyak'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Core/PowerPC/MMU.cpp', 'Source/Core/VideoBackends/Null/NullGfx.cpp', 'Source/Core/VideoBackends/Null/NullGfx.h', 'Source/Core/VideoBackends/Software/SWEfbInterface.cpp', 'Source/Core/VideoBackends/Software/SWEfbInterface.h', 'Source/Core/VideoCommon/BPFunctions.cpp', 'Source/Core/VideoCommon/EFBInterface.cpp', 'Source/Core/VideoCommon/EFBInterface.h'], 'removed': [], 'message': 'Merge pull request #14934 from iwubcode/efb_interface_remove_global\n\nVideoCommon: remove global framebuffer manager from EFBInterface', 'url': 'https://github.com/dolphin-emu/dolphin/commit/1822e3859f061c6f81076c94eb4ba7e6e0a3706c', 'hash': '1822e3859f061c6f81076c94eb4ba7e6e0a3706c'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-18T12:51:21.237475	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': '8c19346fa956c37264751868a8ac4d674bfff6de', 'after_sha': '41460454e9600f909950fddf0abd13a138430162', 'commits': [{'author': {'name': 'Acts1631', 'email': 'acts1631kjv@proton.me', 'date': '2026-08-04T11:47:51-04:00', 'username': 'acts-1631'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/Common/TraversalServer.cpp'], 'removed': [], 'message': 'Traversal: update pending-packet time on socket timeout\n\nPending traversal packets were only expired after receive events. If a\nclient did not acknowledge a response and no more packets arrived, the\nserver retained the pending entry indefinitely.\n\nUpdate the current time before handling socket timeouts. Pending packets\nwill then retry and expire while the server is idle.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/93097f65ea9ae8c2c9c85481ba2cf7d0139480cb', 'hash': '93097f65ea9ae8c2c9c85481ba2cf7d0139480cb'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-10-18T14:51:18+02:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['Source/Core/Common/TraversalServer.cpp'], 'removed': [], 'message': 'Merge pull request #14796 from acts-1631/security/traversal-pending-timeout\n\nTraversal: update pending-packet time on socket timeout', 'url': 'https://github.com/dolphin-emu/dolphin/commit/41460454e9600f909950fddf0abd13a138430162', 'hash': '41460454e9600f909950fddf0abd13a138430162'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}

Recent 'internal_log' events

2026-10-30T08:45:01.037619	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:44:59.271806	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:44:48.723127	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:44:48.381280	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-10-30T08:41:55.149865	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/discord/gateway.py', 'lineno': 584, 'msg': 'Shard ID %s has successfully RESUMED session %s.', 'args': "(None, '8a066b165c9b7e535d8f5c282b205eb0')", 'type': 'internal_log'}
2026-10-30T08:41:19.792691	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/discord/gateway.py', 'lineno': 584, 'msg': 'Shard ID %s has successfully RESUMED session %s.', 'args': "(None, '8a066b165c9b7e535d8f5c282b205eb0')", 'type': 'internal_log'}
2026-10-30T08:39:59.271496	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:39:57.537307	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:35:07.868089	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/discord/gateway.py', 'lineno': 584, 'msg': 'Shard ID %s has successfully RESUMED session %s.', 'args': "(None, '8a066b165c9b7e535d8f5c282b205eb0')", 'type': 'internal_log'}
2026-10-30T08:34:57.537003	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:34:55.840824	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:34:48.381054	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:34:48.038488	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-10-30T08:29:55.840523	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:29:54.138207	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:24:54.137902	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:24:52.400499	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:24:48.038228	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:24:47.700690	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}
2026-10-30T08:19:52.400196	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:19:50.734519	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:14:50.734195	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'dreamsyntax,TryTwo,corwin-mcknight,nickbeth,PatrickFerry,linkmauve,RachelBryk,jloehr,cristian64,adamdmoss,gwicks,jjdelvalle,JordanTheToaster,VampireFlower,unknownbrackets,JosJuice,ShimmerGlass,CrossVR,ligfx,kayru,Tilka,mahdihijazi,mathieui,hdcmeta,Lobsterzelda,Sintendo,Zopolis4,CelestialAmber,hrydgard,mmastrac,neobrain,Sam-Belliveau,Sir-Walrus,JoshuaVandaele,crediar,endrift,AdmiralCurtiss,magcius,Ebola16,spxtr,zopieux,jezze,nullgemm,DacoTaco,iwubcode,spycrab,mitaclaw,malleoz,RisingFog,mbc07,Filoppi,Linkinworm,leoetlino,K0bin,riking,randomstuff,hthh,cscd98,zackhow,marcan,Ziek,CookiePLMonster,delroth,Stevoisiak,SuperSamus,Starsam80,yourWaifu,TellowKrinkle,NanoByte011,LAGonauta,aldelaro5,CasualPokePlayer,tygyh,JMC47,Hydr8gon,CrystalGamma,shonumi,galop1n,Dentomologist,orbea,jordan-woyak,Tinob,OatmealDome,Orphis,lioncash,OrN,bentley,sepalani,moncefmechri,kamiyo,EmptyChaos,Buddybenj,Geotale,Parlane,BhaaLseN,archshift,Phatcat,LPFaint99,rlnilsen,smurf3tte,Linktothepast,noahpistilli,Simonx22,skylersaleh,merryhime,MayImilae,SirMangler,ColinDTaylor,LillyJadeKatrin,comex,magumagu,Pokechu22,hackbar,aroulin,glennricster,mandar1jn,Helios747,Gamer64ytb,tom-pratt,skidau,phire,mrgreywater,mimimi085181,deReeperJosh,meffij,degasus,vladfi1,Techjar,krnlyng,FioraAeterna,rukai,booto')", 'type': 'internal_log'}
2026-10-30T08:14:49.128213	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'type': 'internal_log'}
2026-10-30T08:14:47.700474	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 29, 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,CrossVR,Tilka,Pokechu22,iwubcode,OatmealDome,Dentomologist,jordan-woyak,JosJuice,phire,linkmauve,AdmiralCurtiss')", 'type': 'internal_log'}
2026-10-30T08:14:47.363370	{'source': 'logging', 'level': 'INFO', 'pathname': '/nix/store/801nry43pb7wc0ba2clxq82hhw3q1vnj-central-env/lib/python3.13/site-packages/central/github/authz.py', 'lineno': 20, 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'type': 'internal_log'}

Recent 'issue' events

2026-10-30T04:45:03.502585	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14172, 'title': "Can't select any interface language other than English on macOS since v2609", 'author': 'OKVnDa', 'type': 'issue'}
2026-10-30T01:04:36.467489	{'source': 'redmine', 'new': False, 'update': 36, 'issue': 12662, 'title': 'Official Wii Remotes Not Recognized or Paired on M1 - MacOS 12.0 Monterey', 'author': 'OKVnDa', 'type': 'issue'}
2026-10-28T16:43:09.194001	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 14171, 'title': '[Android] Add ability to specify options for Turnip driver', 'author': 'JosJuice', 'type': 'issue'}
2026-10-27T10:46:25.718676	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14171, 'title': '[Android] Add ability to specify options for Turnip driver', 'author': 'markk', 'type': 'issue'}
2026-10-26T19:39:43.894348	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 14170, 'title': '[Android] Dolphin fails to install some GPU drivers', 'author': 'JosJuice', 'type': 'issue'}
2026-10-26T19:23:53.850003	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14170, 'title': '[Android] Dolphin fails to install some GPU drivers', 'author': 'markk', 'type': 'issue'}
2026-10-26T03:52:08.153658	{'source': 'redmine', 'new': False, 'update': 7, 'issue': 13754, 'title': 'SDL conflicts with native GC Adapter handling on Linux', 'author': 'Billiard26', 'type': 'issue'}
2026-10-26T03:42:57.556606	{'source': 'redmine', 'new': False, 'update': 6, 'issue': 13754, 'title': 'SDL conflicts with native GC Adapter handling on Linux', 'author': 'DrZ2A', 'type': 'issue'}
2026-10-24T21:15:34.901809	{'source': 'redmine', 'new': False, 'update': 27, 'issue': 14143, 'title': "Games Can't Start Without Crashing Dolphin", 'author': 'Dentomologist', 'type': 'issue'}
2026-10-24T18:28:54.224107	{'source': 'redmine', 'new': False, 'update': 6, 'issue': 14166, 'title': 'Crash Launching Any Game When Set To New Time Zone "Pacific Time (British Columbia)"', 'author': 'JosJuice', 'type': 'issue'}
2026-10-24T08:42:34.709036	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14169, 'title': 'Having Wii Remote 1/2/3/4 in the Controllers menu set to "Real Wii Remote" makes opening and closing games as well as connecting a Wii Remote take much longer than usual', 'author': 'Nia', 'type': 'issue'}
2026-10-24T02:32:49.117018	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 14168, 'title': 'Issue with Manitoban Time Zone Addition in Microsoft Windows', 'author': 'Billiard26', 'type': 'issue'}
2026-10-24T02:26:45.619599	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14168, 'title': 'Issue with Manitoban Time Zone Addition in Microsoft Windows', 'author': 'FermentedPeach', 'type': 'issue'}
2026-10-23T22:05:03.797277	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14167, 'title': 'WII remote will not reconnect after going into sleep mode ', 'author': 'Rjoe', 'type': 'issue'}
2026-10-23T19:51:28.124502	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 12839, 'title': 'Dolphin Updater looks broken at higher Windows Scaling Settings', 'author': 'WiiGamer56473829', 'type': 'issue'}
2026-10-22T16:26:10.311709	{'source': 'redmine', 'new': False, 'update': 5, 'issue': 14166, 'title': 'Crash Launching Any Game When Set To New Time Zone "Pacific Time (British Columbia)"', 'author': 'TakahashiAkira', 'type': 'issue'}
2026-10-22T14:43:01.631652	{'source': 'redmine', 'new': False, 'update': 26, 'issue': 14143, 'title': "Games Can't Start Without Crashing Dolphin", 'author': 'TakahashiAkira', 'type': 'issue'}
2026-10-22T04:57:38.617248	{'source': 'redmine', 'new': False, 'update': 4, 'issue': 14166, 'title': 'Crash Launching Any Game When Set To New Time Zone "Pacific Time (British Columbia)"', 'author': 'Dentomologist', 'type': 'issue'}
2026-10-21T21:29:31.381766	{'source': 'redmine', 'new': False, 'update': 16, 'issue': 5977, 'title': 'Older Wiimotes (Pre -TR) have broken audio in emulated Bluetooth', 'author': 'Billiard26', 'type': 'issue'}
2026-10-21T21:01:26.151585	{'source': 'redmine', 'new': False, 'update': 15, 'issue': 5977, 'title': 'Older Wiimotes (Pre -TR) have broken audio in emulated Bluetooth', 'author': 'mardy', 'type': 'issue'}
2026-10-21T20:21:58.374940	{'source': 'redmine', 'new': False, 'update': 4, 'issue': 12073, 'title': 'Feature request - Cropping 16:9 letterboxed games', 'author': 'Billiard26', 'type': 'issue'}
2026-10-21T19:46:35.815073	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 12073, 'title': 'Feature request - Cropping 16:9 letterboxed games', 'author': 'WiiGamer56473829', 'type': 'issue'}
2026-10-21T19:16:24.473818	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 14166, 'title': 'Crash Launching Any Game When Set To New Time Zone "Pacific Time (British Columbia)"', 'author': 'Billiard26', 'type': 'issue'}
2026-10-21T18:21:57.352709	{'source': 'redmine', 'new': False, 'update': 2, 'issue': 14166, 'title': 'Crash Launching Any Game When Set To New Time Zone "Pacific Time (British Columbia)"', 'author': 'tehgooch', 'type': 'issue'}
2026-10-21T16:09:25.241751	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14166, 'title': 'Crash Launching Any Game When Set To New Time Zone "Pacific Time (British Columbia)"', 'author': 'tehgooch', 'type': 'issue'}

Recent 'new_dev_version' events

2026-10-25T12:40:28.012701	{'source': 'repomanager', 'hash': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'branch': 'master', 'shortrev': '2609-127', 'author': 'Admiral H. Curtiss', 'message': 'Merge pull request #14939 from SuperSamus/ppc-analyst-no-strncmp\n\nPPCAnalyst: Avoid using strncmp', 'url': 'https://github.com/dolphin-emu/dolphin/commit/3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'type': 'new_dev_version'}
2026-10-25T11:30:05.226936	{'source': 'repomanager', 'hash': 'edce78926fc20cea65a0599637788715e03644be', 'branch': 'master', 'shortrev': '2609-125', 'author': 'JosJuice', 'message': 'Merge pull request #14853 from SuperSamus/jit-trampoline-info-optimize\n\nJit: Optimize trampoline info allocation', 'url': 'https://github.com/dolphin-emu/dolphin/commit/edce78926fc20cea65a0599637788715e03644be', 'type': 'new_dev_version'}
2026-10-25T11:00:49.123302	{'source': 'repomanager', 'hash': 'f8e6bed381f52fba6015fbda0568e447e1a984b2', 'branch': 'master', 'shortrev': '2609-122', 'author': 'JosJuice', 'message': 'Merge pull request #14952 from jordan-woyak/common-thread-remove-unused\n\nCommon/Thread: Remove some unused things.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/f8e6bed381f52fba6015fbda0568e447e1a984b2', 'type': 'new_dev_version'}
2026-10-24T20:04:29.776886	{'source': 'repomanager', 'hash': '22b581c670d84e60d11c1b02d38e1c7789ae2dfa', 'branch': 'master', 'shortrev': '2609-119', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14940 from jordan-woyak/CoreTimingTest-fix\n\nUnitTests: Fix CoreTiming.SharedSlot test so it can run independently.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/22b581c670d84e60d11c1b02d38e1c7789ae2dfa', 'type': 'new_dev_version'}
2026-10-24T18:22:28.219221	{'source': 'repomanager', 'hash': 'b5f580e6f9b5ba442248ac62a25cb4db246aa69c', 'branch': 'master', 'shortrev': '2609-117', 'author': 'iwubcode', 'message': 'Merge pull request #14946 from OatmealDome/revert-win-std-chrono\n\nRevert "msvc: use std::chrono for GetLocalTimeSinceJan1970"', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b5f580e6f9b5ba442248ac62a25cb4db246aa69c', 'type': 'new_dev_version'}
2026-10-24T12:16:26.358764	{'source': 'repomanager', 'hash': 'c12121f419c40f99eeb65a9039d9fc95be72e94a', 'branch': 'master', 'shortrev': '2609-115', 'author': 'JosJuice', 'message': 'Merge pull request #14917 from jordan-woyak/skylanders-common-aes\n\nSkylanders: Replace mbedtls_aes usage with Common::AES.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/c12121f419c40f99eeb65a9039d9fc95be72e94a', 'type': 'new_dev_version'}
2026-10-22T20:05:27.906534	{'source': 'repomanager', 'hash': 'e1d35f666cc35f6ead55d32ea2679df44d04da72', 'branch': 'master', 'shortrev': '2609-113', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14913 from jordan-woyak/md5\n\nCommon: Introduce MD5Context class and ComputeMD5 function to minimize mbedtls dependence.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/e1d35f666cc35f6ead55d32ea2679df44d04da72', 'type': 'new_dev_version'}
2026-10-22T19:14:51.363992	{'source': 'repomanager', 'hash': '10d958e66bb5d7574166a10f57839a288c5a7c64', 'branch': 'master', 'shortrev': '2609-108', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14942 from Dentomologist/cmake_add_explicit_check_for_minimum_qt_version\n\nCMake: Enforce minimum Qt version 6.2', 'url': 'https://github.com/dolphin-emu/dolphin/commit/10d958e66bb5d7574166a10f57839a288c5a7c64', 'type': 'new_dev_version'}
2026-10-22T17:12:39.717300	{'source': 'repomanager', 'hash': '2c805fee8f232d090c454381bb1b8422242345e1', 'branch': 'master', 'shortrev': '2609-106', 'author': 'JMC47', 'message': 'Merge pull request #14734 from tom-pratt/trigger-game-digest-check\n\nAndroid: Trigger netplay game digest check', 'url': 'https://github.com/dolphin-emu/dolphin/commit/2c805fee8f232d090c454381bb1b8422242345e1', 'type': 'new_dev_version'}
2026-10-19T16:56:25.522321	{'source': 'repomanager', 'hash': 'cf5cb7ef81c3e8e7af5c9d566334219ffda9f68b', 'branch': 'master', 'shortrev': '2609-104', 'author': 'JMC47', 'message': 'Merge pull request #14388 from SuperSamus/jit-branch-follow-explicit\n\nJit: Followed unconditional branches are a property added by the Analyzer, not something to assume', 'url': 'https://github.com/dolphin-emu/dolphin/commit/cf5cb7ef81c3e8e7af5c9d566334219ffda9f68b', 'type': 'new_dev_version'}
2026-10-18T18:26:46.939067	{'source': 'repomanager', 'hash': '1822e3859f061c6f81076c94eb4ba7e6e0a3706c', 'branch': 'master', 'shortrev': '2609-102', 'author': 'Jordan Woyak', 'message': 'Merge pull request #14934 from iwubcode/efb_interface_remove_global\n\nVideoCommon: remove global framebuffer manager from EFBInterface', 'url': 'https://github.com/dolphin-emu/dolphin/commit/1822e3859f061c6f81076c94eb4ba7e6e0a3706c', 'type': 'new_dev_version'}
2026-10-18T12:51:22.655287	{'source': 'repomanager', 'hash': '41460454e9600f909950fddf0abd13a138430162', 'branch': 'master', 'shortrev': '2609-100', 'author': 'JosJuice', 'message': 'Merge pull request #14796 from acts-1631/security/traversal-pending-timeout\n\nTraversal: update pending-packet time on socket timeout', 'url': 'https://github.com/dolphin-emu/dolphin/commit/41460454e9600f909950fddf0abd13a138430162', 'type': 'new_dev_version'}
2026-10-18T10:25:50.493181	{'source': 'repomanager', 'hash': '8c19346fa956c37264751868a8ac4d674bfff6de', 'branch': 'master', 'shortrev': '2609-98', 'author': 'JosJuice', 'message': 'Merge pull request #14621 from jordan-woyak/cached-blob-jthread\n\nDiscIO/CachedBlob: Minor cleanup by replacing std::thread with std::jthread.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/8c19346fa956c37264751868a8ac4d674bfff6de', 'type': 'new_dev_version'}
2026-10-18T10:12:05.349589	{'source': 'repomanager', 'hash': 'b869a2ab2035f0ff0c0ca71becb4e33131ebb1b7', 'branch': 'master', 'shortrev': '2609-94', 'author': 'JosJuice', 'message': 'Merge pull request #14793 from JoshuaVandaele/auto-off-warns\n\nCMake: Automatically disable warnings for Externals', 'url': 'https://github.com/dolphin-emu/dolphin/commit/b869a2ab2035f0ff0c0ca71becb4e33131ebb1b7', 'type': 'new_dev_version'}
2026-10-17T17:14:14.679192	{'source': 'repomanager', 'hash': '38d619b07691231f54e6f037fcf30a3b64fdd5a5', 'branch': 'master', 'shortrev': '2609-92', 'author': 'JosJuice', 'message': 'Merge pull request #14804 from JosJuice/jit-set-lazy-memory-region\n\nJit: Use LazyMemoryRegion-backed bit sets', 'url': 'https://github.com/dolphin-emu/dolphin/commit/38d619b07691231f54e6f037fcf30a3b64fdd5a5', 'type': 'new_dev_version'}
2026-10-17T17:12:50.776242	{'source': 'repomanager', 'hash': '1cf8f6d92c95504b3fa41cdf92e1706cfb0d9928', 'branch': 'master', 'shortrev': '2609-87', 'author': 'JosJuice', 'message': 'Merge pull request #14397 from sepalani/tri-accept\n\nAMMediaboard: Change accept non-blocking logic', 'url': 'https://github.com/dolphin-emu/dolphin/commit/1cf8f6d92c95504b3fa41cdf92e1706cfb0d9928', 'type': 'new_dev_version'}

Recent 'notification' events

2026-10-30T08:10:31.639631	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14960 \x0304failed\x03 on builders [pr-osx-universal]: \x1f\x0302https://dolphin.ci/#/builders/7/builds/10878\x03\x1f', 'type': 'notification'}
2026-10-30T07:00:39.598131	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on #14956 (Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.): \x1f\x0302https://dolp.in/pr14956#issuecomment-6516958381\x03\x1f', 'type': 'notification'}
2026-10-30T06:58:19.533293	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 opened pull request #14961: Core: Adjust dual core video thread initialization to avoid ExitGpuLoop racing before RunGpuLoop. (\x0306master\x03...\x0306fifo-run-exit-race\x03): \x1f\x0302https://dolp.in/pr14961\x03\x1f', 'type': 'notification'}
2026-10-30T05:43:20.563243	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303m\ufeffbc07\x03 commented on #14956 (Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.): \x1f\x0302https://dolp.in/pr14956#issuecomment-6515912889\x03\x1f', 'type': 'notification'}
2026-10-30T04:45:03.502824	{'source': 'notifications', 'msg': 'Issue 14172 created: "Can\'t select any interface language other than English on macOS since v2609" by \x0303O\ufeffKVnDa\x03 - \x1f\x0302https://dolp.in/i14172\x03\x1f', 'type': 'notification'}
2026-10-30T03:53:34.816344	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14960 \x0304failed\x03 on builders [pr-osx-universal]: \x1f\x0302https://dolphin.ci/#/builders/7/builds/10876\x03\x1f', 'type': 'notification'}
2026-10-30T03:39:04.268783	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 edited pull request #14960: Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior. (\x0306master\x03...\x0306state-flock\x03): \x1f\x0302https://dolp.in/pr14960\x03\x1f', 'type': 'notification'}
2026-10-30T03:28:15.111298	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 edited pull request #14960: Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior. (\x0306master\x03...\x0306state-flock\x03): \x1f\x0302https://dolp.in/pr14960\x03\x1f', 'type': 'notification'}
2026-10-30T03:26:35.294354	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 edited pull request #14960: Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior. (\x0306master\x03...\x0306state-flock\x03): \x1f\x0302https://dolp.in/pr14960\x03\x1f', 'type': 'notification'}
2026-10-30T03:21:34.951793	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 opened pull request #14960: Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior. (\x0306master\x03...\x0306state-flock\x03): \x1f\x0302https://dolp.in/pr14960\x03\x1f', 'type': 'notification'}
2026-10-30T01:04:36.467726	{'source': 'notifications', 'msg': 'Update 36 to issue 12662 ("Official Wii Remotes Not Recognized or Paired on M1 - MacOS 12.0 Monterey") by \x0303O\ufeffKVnDa\x03 - \x1f\x0302https://dolp.in/i12662/36\x03\x1f', 'type': 'notification'}
2026-10-30T00:02:07.503100	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14959 \x0304failed\x03 on builders [default]: \x1f\x0302<no url>\x03\x1f', 'type': 'notification'}
2026-10-30T00:01:37.069935	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 edited pull request #14959: DolphinQt: Move the game list with a configured controller (\x0306master\x03...\x0306game-list-gc-controller\x03): \x1f\x0302https://dolp.in/pr14959\x03\x1f', 'type': 'notification'}
2026-10-30T00:01:36.342505	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 synchronized pull request #14959: DolphinQt: Move the game list with a configured controller (\x0306master\x03...\x0306game-list-gc-controller\x03): \x1f\x0302https://dolp.in/pr14959\x03\x1f', 'type': 'notification'}
2026-10-29T23:47:11.498291	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 edited a comment on #14959 (DolphinQt: Move the game list with the port 1 controller): \x1f\x0302https://dolp.in/pr14959#issuecomment-6511106624\x03\x1f', 'type': 'notification'}
2026-10-29T23:39:26.140718	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14959 \x0304failed\x03 on builders [default]: \x1f\x0302<no url>\x03\x1f', 'type': 'notification'}
2026-10-29T23:38:57.644520	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 commented on #14959 (DolphinQt: Move the game list with the port 1 controller): \x1f\x0302https://dolp.in/pr14959#issuecomment-6511106624\x03\x1f', 'type': 'notification'}
2026-10-29T23:38:56.660538	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 edited pull request #14959: DolphinQt: Move the game list with the port 1 controller (\x0306master\x03...\x0306game-list-gc-controller\x03): \x1f\x0302https://dolp.in/pr14959\x03\x1f', 'type': 'notification'}
2026-10-29T23:38:54.887641	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 synchronized pull request #14959: DolphinQt: Move the game list with the port 1 controller (\x0306master\x03...\x0306game-list-gc-controller\x03): \x1f\x0302https://dolp.in/pr14959\x03\x1f', 'type': 'notification'}
2026-10-29T22:58:12.264358	{'source': 'notifications', 'msg': '855912 by \x0303O\ufeffatmealDome\x03 [\x03090\x03|\x03091\x03|\x03040\x03] \x1f\x0302https://github.com/dolphin-emu/sadm/commit/855912ebde8af3da1c27fd82351104a095734af0\x03\x1f mastodon: Manually override package version to 4.6.10', 'type': 'notification'}
2026-10-29T22:58:12.264247	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/sadm\x1f\x03] \x0303O\ufeffatmealDome\x03 pushed \x021\x02 new commit to \x0306master\x03', 'type': 'notification'}
2026-10-29T21:43:39.404445	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 commented on #14959 (DolphinQt: Move the game list with the GameCube controller): \x1f\x0302https://dolp.in/pr14959#issuecomment-6509021017\x03\x1f', 'type': 'notification'}
2026-10-29T21:43:08.880401	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 edited pull request #14959: DolphinQt: Move the game list with the GameCube controller (\x0306master\x03...\x0306game-list-gc-controller\x03): \x1f\x0302https://dolp.in/pr14959\x03\x1f', 'type': 'notification'}
2026-10-29T21:40:30.991651	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303v\ufeffegerot\x03 edited pull request #14959: DolphinQt: Move the game list with the GameCube controller (\x0306master\x03...\x0306game-list-gc-controller\x03): \x1f\x0302https://dolp.in/pr14959\x03\x1f', 'type': 'notification'}
2026-10-29T20:36:18.604503	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303J\ufeffoshuaVandaele\x03 approved pull request #14596 (feat(retroachievements): implement achievement notification sounds): \x1f\x0302https://dolp.in/pr14596#pullrequestreview-5704607855\x03\x1f', 'type': 'notification'}

Recent 'pull_request_fifoci_status' events

2026-10-30T07:38:58.813648	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14961, 'type': 'pull_request_fifoci_status'}
2026-10-30T07:34:48.928037	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14961, 'type': 'pull_request_fifoci_status'}
2026-10-30T07:28:10.066740	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14961, 'type': 'pull_request_fifoci_status'}
2026-10-30T07:27:05.290388	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14961, 'type': 'pull_request_fifoci_status'}
2026-10-30T07:14:59.988291	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14961, 'type': 'pull_request_fifoci_status'}
2026-10-30T04:09:25.299789	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14960, 'type': 'pull_request_fifoci_status'}
2026-10-30T04:00:51.031624	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14960, 'type': 'pull_request_fifoci_status'}
2026-10-30T03:47:42.828020	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14960, 'type': 'pull_request_fifoci_status'}
2026-10-29T19:14:16.814938	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '640615805c3309e69f6f4ec8685f6449951e1c93', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14596, 'type': 'pull_request_fifoci_status'}
2026-10-29T19:05:01.961027	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '640615805c3309e69f6f4ec8685f6449951e1c93', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14596, 'type': 'pull_request_fifoci_status'}
2026-10-29T18:51:04.127632	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '640615805c3309e69f6f4ec8685f6449951e1c93', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14596, 'type': 'pull_request_fifoci_status'}
2026-10-29T18:50:51.760326	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '640615805c3309e69f6f4ec8685f6449951e1c93', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14596, 'type': 'pull_request_fifoci_status'}
2026-10-29T18:39:54.300028	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '640615805c3309e69f6f4ec8685f6449951e1c93', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14596, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:57:20.381189	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:56:49.745530	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:50:02.504291	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:45:50.978548	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:38:02.154055	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '5cf17085f9e6061796058f3aeb4dd4d2c5d5e3aa', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:19:29.466277	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'b5c042447062504d8eacf1638263a4fc0c745887', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:18:52.738357	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'b5c042447062504d8eacf1638263a4fc0c745887', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:12:13.741389	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'b5c042447062504d8eacf1638263a4fc0c745887', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:07:56.624467	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'b5c042447062504d8eacf1638263a4fc0c745887', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T14:00:20.441920	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'b5c042447062504d8eacf1638263a4fc0c745887', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T12:43:48.840414	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '26170cf107cdc15707622bbdd54ce7acf9ff09fe', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}
2026-10-29T12:34:02.873374	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '26170cf107cdc15707622bbdd54ce7acf9ff09fe', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14774, 'type': 'pull_request_fifoci_status'}

Recent 'raw_bb_hook' events

2026-10-30T08:10:00.861354	{'source': 'webserver', 'raw': {'buildid': 194989, 'number': 10878, 'builderid': 7, 'buildrequestid': 195571, 'workerid': 8, 'masterid': 1, 'started_at': 1793345928, 'complete_at': 1793347790, 'locks_duration_s': 0, 'complete': True, 'state_string': 'failed configure (failure) (timed out)', 'results': 2, 'properties': {'branchname': ['pr-14960', 'Change'], 'headrev': ['d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'Change'], 'pr_id': [14960, 'Change'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'got_revision': ['d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'GitNoBranch'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [7, 'Builder'], 'workername': ['osx-m1', 'Worker'], 'branch': ['refs/pull/14960/head', 'Build'], 'revision': ['d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'Build'], 'codebase': ['', 'Build'], 'builddir': ['/Users/ci/worker/base/pr-osx-universal', 'Worker'], 'shortrev': ['d49fa7', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-osx-universal', 'Builder'], 'buildnumber': [10878, 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'basedir': ['/Users/ci/worker/base', 'Worker']}, 'buildrequest': {'buildrequestid': 195571, 'buildsetid': 43850, 'builderid': 7, 'priority': 0, 'claimed': True, 'claimed_at': 1793345928, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793345602, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43850, 'external_idstring': None, 'reason': 'rebuild', 'submitted_at': 1793345602, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': 194959, 'sourcestamps': [{'ssid': 13164, 'branch': 'refs/pull/14960/head', 'revision': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793330508, '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/10878'}, 'type': 'raw_bb_hook'}
2026-10-30T07:39:00.307807	{'source': 'webserver', 'raw': {'buildid': 194989, 'number': 10878, 'builderid': 7, 'buildrequestid': 195571, 'workerid': 8, 'masterid': 1, 'started_at': 1793345928, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14960', 'Change'], 'headrev': ['d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'Change'], 'pr_id': [14960, 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [7, 'Builder'], 'workername': ['osx-m1', 'Worker'], 'branch': ['refs/pull/14960/head', 'Build'], 'revision': ['d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'Build'], 'codebase': ['', 'Build'], 'shortrev': ['d49fa7', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-osx-universal', 'Builder'], 'buildnumber': [10878, 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195571, 'buildsetid': 43850, 'builderid': 7, 'priority': 0, 'claimed': True, 'claimed_at': 1793345928, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793345602, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43850, 'external_idstring': None, 'reason': 'rebuild', 'submitted_at': 1793345602, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': 194959, 'sourcestamps': [{'ssid': 13164, 'branch': 'refs/pull/14960/head', 'revision': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793330508, '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/10878'}, 'type': 'raw_bb_hook'}
2026-10-30T07:38:58.156218	{'source': 'webserver', 'raw': {'buildid': 194988, 'number': 9210, 'builderid': 21, 'buildrequestid': 195570, 'workerid': 8, 'masterid': 1, 'started_at': 1793345276, 'complete_at': 1793345928, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builddir': ['/Users/ci/worker/base/pr-fifoci-mtl-osx-m1', 'Worker'], 'warnings-count': [114, 'WarningCountingShellCommand'], 'builderid': [21, 'Builder'], 'branch': ['refs/pull/14961/head', 'Build'], 'codebase': ['', 'Build'], 'basedir': ['/Users/ci/worker/base', 'Worker'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'pr_id': [14961, 'Trigger'], 'buildername': ['pr-fifoci-mtl-osx-m1', 'Builder'], 'buildnumber': [9210, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195570, 'buildsetid': 43849, 'builderid': 21, 'priority': 0, 'claimed': True, 'claimed_at': 1793345276, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793344617, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43849, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793344617, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194976, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194976, 'number': 10877, 'builderid': 7, 'buildrequestid': 195554, 'workerid': 8, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793344617, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 7, 'name': 'pr-osx-universal', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 21, 'name': 'pr-fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/21/builds/9210'}, 'type': 'raw_bb_hook'}
2026-10-30T07:34:48.255621	{'source': 'webserver', 'raw': {'buildid': 194987, 'number': 9515, 'builderid': 35, 'buildrequestid': 195567, 'workerid': 5, 'masterid': 1, 'started_at': 1793345218, 'complete_at': 1793345678, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [35, 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'project': ['', 'Build'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'repository': ['', 'Build'], 'builddir': ['/var/lib/fifoci-worker/worker/pr-fifoci-sw-lin-mesa', 'Worker'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger'], 'pr_id': [14961, 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'buildnumber': [9515, 'Build'], 'codebase': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'branch': ['refs/pull/14961/head', 'Build']}, 'buildrequest': {'buildrequestid': 195567, 'buildsetid': 43847, 'builderid': 35, 'priority': 0, 'claimed': True, 'claimed_at': 1793345218, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343628, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43847, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793343628, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194980, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194980, 'number': 10859, 'builderid': 27, 'buildrequestid': 195560, 'workerid': 10, 'masterid': 1, 'started_at': 1793343518, 'complete_at': 1793343628, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 35, 'name': 'pr-fifoci-sw-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/35/builds/9515'}, 'type': 'raw_bb_hook'}
2026-10-30T07:28:09.480653	{'source': 'webserver', 'raw': {'buildid': 194988, 'number': 9210, 'builderid': 21, 'buildrequestid': 195570, 'workerid': 8, 'masterid': 1, 'started_at': 1793345276, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builderid': [21, 'Builder'], 'branch': ['refs/pull/14961/head', 'Build'], 'codebase': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'pr_id': [14961, 'Trigger'], 'buildername': ['pr-fifoci-mtl-osx-m1', 'Builder'], 'buildnumber': [9210, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195570, 'buildsetid': 43849, 'builderid': 21, 'priority': 0, 'claimed': True, 'claimed_at': 1793345276, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793344617, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43849, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793344617, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194976, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194976, 'number': 10877, 'builderid': 7, 'buildrequestid': 195554, 'workerid': 8, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793344617, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 7, 'name': 'pr-osx-universal', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 21, 'name': 'pr-fifoci-mtl-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/21/builds/9210'}, 'type': 'raw_bb_hook'}
2026-10-30T07:28:09.392637	{'source': 'webserver', 'raw': {'buildid': 194986, 'number': 9208, 'builderid': 19, 'buildrequestid': 195569, 'workerid': 8, 'masterid': 1, 'started_at': 1793344617, 'complete_at': 1793345276, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [19, 'Builder'], 'buildnumber': [9208, 'Build'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'pr_id': [14961, 'Trigger'], 'buildername': ['pr-fifoci-mvk-osx-m1', 'Builder'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builddir': ['/Users/ci/worker/base/pr-fifoci-mvk-osx-m1', 'Worker'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger'], 'basedir': ['/Users/ci/worker/base', 'Worker'], 'warnings-count': [114, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195569, 'buildsetid': 43849, 'builderid': 19, 'priority': 0, 'claimed': True, 'claimed_at': 1793344617, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793344617, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43849, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793344617, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194976, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194976, 'number': 10877, 'builderid': 7, 'buildrequestid': 195554, 'workerid': 8, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793344617, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 7, 'name': 'pr-osx-universal', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 19, 'name': 'pr-fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/19/builds/9208'}, 'type': 'raw_bb_hook'}
2026-10-30T07:27:09.292533	{'source': 'webserver', 'raw': {'buildid': 194987, 'number': 9515, 'builderid': 35, 'buildrequestid': 195567, 'workerid': 5, 'masterid': 1, 'started_at': 1793345218, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [35, 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'project': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'repository': ['', 'Build'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger'], 'pr_id': [14961, 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'buildnumber': [9515, 'Build'], 'codebase': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'branch': ['refs/pull/14961/head', 'Build']}, 'buildrequest': {'buildrequestid': 195567, 'buildsetid': 43847, 'builderid': 35, 'priority': 0, 'claimed': True, 'claimed_at': 1793345218, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343628, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43847, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793343628, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194980, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194980, 'number': 10859, 'builderid': 27, 'buildrequestid': 195560, 'workerid': 10, 'masterid': 1, 'started_at': 1793343518, 'complete_at': 1793343628, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 35, 'name': 'pr-fifoci-sw-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/35/builds/9515'}, 'type': 'raw_bb_hook'}
2026-10-30T07:27:04.666558	{'source': 'webserver', 'raw': {'buildid': 194985, 'number': 5502, 'builderid': 41, 'buildrequestid': 195568, 'workerid': 5, 'masterid': 1, 'started_at': 1793344488, 'complete_at': 1793345218, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['506b3d', 'Trigger'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'pr_id': [14961, 'Trigger'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [41, 'Builder'], 'branch': ['refs/pull/14961/head', 'Build'], 'codebase': ['', 'Build'], 'builddir': ['/var/lib/fifoci-worker/worker/pr-fifoci-vk-lin-mesa', 'Worker'], 'branchname': ['pr-14961', 'Trigger'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'buildername': ['pr-fifoci-vk-lin-mesa', 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [5502, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'warnings-count': [0, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195568, 'buildsetid': 43847, 'builderid': 41, 'priority': 0, 'claimed': True, 'claimed_at': 1793344488, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343628, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43847, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793343628, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194980, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194980, 'number': 10859, 'builderid': 27, 'buildrequestid': 195560, 'workerid': 10, 'masterid': 1, 'started_at': 1793343518, 'complete_at': 1793343628, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 41, 'name': 'pr-fifoci-vk-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/41/builds/5502'}, 'type': 'raw_bb_hook'}
2026-10-30T07:17:09.892826	{'source': 'webserver', 'raw': {'buildid': 194976, 'number': 10877, 'builderid': 7, 'buildrequestid': 195554, 'workerid': 8, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793344617, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'builderid': [7, 'Builder'], 'pr_id': [14961, 'Change'], 'shortrev': ['506b3d', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-osx-universal', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'workername': ['osx-m1', 'Worker'], 'buildnumber': [10877, 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'project': ['', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'codebase': ['', 'Build'], 'basedir': ['/Users/ci/worker/base', 'Worker'], 'builddir': ['/Users/ci/worker/base/pr-osx-universal', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch']}, 'buildrequest': {'buildrequestid': 195554, 'buildsetid': 43846, 'builderid': 7, 'priority': 0, 'claimed': True, 'claimed_at': 1793343513, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, '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/10877'}, 'type': 'raw_bb_hook'}
2026-10-30T07:17:07.802878	{'source': 'webserver', 'raw': {'buildid': 194986, 'number': 9208, 'builderid': 19, 'buildrequestid': 195569, 'workerid': 8, 'masterid': 1, 'started_at': 1793344617, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [19, 'Builder'], 'buildnumber': [9208, 'Build'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'pr_id': [14961, 'Trigger'], 'buildername': ['pr-fifoci-mvk-osx-m1', 'Builder'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger']}, 'buildrequest': {'buildrequestid': 195569, 'buildsetid': 43849, 'builderid': 19, 'priority': 0, 'claimed': True, 'claimed_at': 1793344617, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793344617, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43849, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793344617, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194976, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194976, 'number': 10877, 'builderid': 7, 'buildrequestid': 195554, 'workerid': 8, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793344617, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 7, 'name': 'pr-osx-universal', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 19, 'name': 'pr-fifoci-mvk-osx-m1', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/19/builds/9208'}, 'type': 'raw_bb_hook'}
2026-10-30T07:14:59.271826	{'source': 'webserver', 'raw': {'buildid': 194982, 'number': 9515, 'builderid': 10, 'buildrequestid': 195566, 'workerid': 5, 'masterid': 1, 'started_at': 1793343628, 'complete_at': 1793344488, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'pr_id': [14961, 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'builderid': [10, 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [9515, 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'builddir': ['/var/lib/fifoci-worker/worker/pr-fifoci-ogl-lin-mesa', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger'], 'buildername': ['pr-fifoci-ogl-lin-mesa', 'Builder'], 'project': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195566, 'buildsetid': 43847, 'builderid': 10, 'priority': 0, 'claimed': True, 'claimed_at': 1793343628, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343628, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43847, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793343628, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194980, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194980, 'number': 10859, 'builderid': 27, 'buildrequestid': 195560, 'workerid': 10, 'masterid': 1, 'started_at': 1793343518, 'complete_at': 1793343628, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 10, 'name': 'pr-fifoci-ogl-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/10/builds/9515'}, 'type': 'raw_bb_hook'}
2026-10-30T07:14:54.651690	{'source': 'webserver', 'raw': {'buildid': 194985, 'number': 5502, 'builderid': 41, 'buildrequestid': 195568, 'workerid': 5, 'masterid': 1, 'started_at': 1793344488, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'shortrev': ['506b3d', 'Trigger'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'pr_id': [14961, 'Trigger'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [41, 'Builder'], 'branch': ['refs/pull/14961/head', 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-14961', 'Trigger'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'buildername': ['pr-fifoci-vk-lin-mesa', 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [5502, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'scheduler': ['pr-fifoci-lin', 'Scheduler']}, 'buildrequest': {'buildrequestid': 195568, 'buildsetid': 43847, 'builderid': 41, 'priority': 0, 'claimed': True, 'claimed_at': 1793344488, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343628, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43847, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793343628, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194980, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194980, 'number': 10859, 'builderid': 27, 'buildrequestid': 195560, 'workerid': 10, 'masterid': 1, 'started_at': 1793343518, 'complete_at': 1793343628, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 41, 'name': 'pr-fifoci-vk-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/41/builds/5502'}, 'type': 'raw_bb_hook'}
2026-10-30T07:06:42.083209	{'source': 'webserver', 'raw': {'buildid': 194984, 'number': 10867, 'builderid': 31, 'buildrequestid': 195561, 'workerid': 4, 'masterid': 1, 'started_at': 1793343865, 'complete_at': 1793343990, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'buildnumber': [10867, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'workername': ['windows', 'Worker'], 'branch': ['refs/pull/14961/head', 'Build'], 'codebase': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'sln_exists': ['false', 'SetPropertyFromCommand Step'], 'builderid': [31, 'Builder'], 'basedir': ['c:\\buildbot', 'Worker'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'builddir': ['c:\\buildbot\\pr-win-dbg-x64', 'Worker'], 'warnings-count': [7, 'WarningCountingShellCommand'], 'build_url': ['https://dl.dolphin-emu.org/prs/eb/ee/pr-14961-dolphin-latest-dbg-x64.7z', 'SetProperty']}, 'buildrequest': {'buildrequestid': 195561, 'buildsetid': 43846, 'builderid': 31, 'priority': 0, 'claimed': True, 'claimed_at': 1793343865, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 31, 'name': 'pr-win-dbg-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/31/builds/10867'}, 'type': 'raw_bb_hook'}
2026-10-30T07:04:39.414767	{'source': 'webserver', 'raw': {'buildid': 194983, 'number': 10860, 'builderid': 2, 'buildrequestid': 195553, 'workerid': 4, 'masterid': 1, 'started_at': 1793343743, 'complete_at': 1793343865, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-win-x64', 'Builder'], 'builderid': [2, 'Builder'], 'workername': ['windows', 'Worker'], 'buildnumber': [10860, 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['c:\\buildbot', 'Worker'], 'builddir': ['c:\\buildbot\\pr-win-x64', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'sln_exists': ['false', 'SetPropertyFromCommand Step'], 'warnings-count': [7, 'WarningCountingShellCommand'], 'build_url': ['https://dl.dolphin-emu.org/prs/7e/5d/pr-14961-dolphin-latest-x64.7z', 'SetProperty']}, 'buildrequest': {'buildrequestid': 195553, 'buildsetid': 43846, 'builderid': 2, 'priority': 0, 'claimed': True, 'claimed_at': 1793343743, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, '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/10860'}, 'type': 'raw_bb_hook'}
2026-10-30T07:04:38.565565	{'source': 'webserver', 'raw': {'buildid': 194984, 'number': 10867, 'builderid': 31, 'buildrequestid': 195561, 'workerid': 4, 'masterid': 1, 'started_at': 1793343865, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'buildnumber': [10867, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'workername': ['windows', 'Worker'], 'branch': ['refs/pull/14961/head', 'Build'], 'codebase': ['', 'Build'], 'builderid': [31, 'Builder'], 'repository': ['', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195561, 'buildsetid': 43846, 'builderid': 31, 'priority': 0, 'claimed': True, 'claimed_at': 1793343865, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 31, 'name': 'pr-win-dbg-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/31/builds/10867'}, 'type': 'raw_bb_hook'}
2026-10-30T07:03:55.515425	{'source': 'webserver', 'raw': {'buildid': 194977, 'number': 5947, 'builderid': 44, 'buildrequestid': 195563, 'workerid': 14, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793343827, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'fm_build_url': ['https://flat-manager.dolphin-emu.org/api/v1/build/13276', 'SetPropertyFromCommand Step'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'builderid': [44, 'Builder'], 'pr_id': [14961, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'shortrev': ['506b3d', 'Change'], 'buildnumber': [5947, 'Build'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-flatpak-arm64', 'Builder'], 'repository': ['', 'Build'], 'workername': ['deneb-flatpak', 'Worker'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/var/lib/flatpak-worker/worker', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'builddir': ['/var/lib/flatpak-worker/worker/pr-flatpak-arm64', 'Worker']}, 'buildrequest': {'buildrequestid': 195563, 'buildsetid': 43846, 'builderid': 44, 'priority': 0, 'claimed': True, 'claimed_at': 1793343513, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, '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/5947'}, 'type': 'raw_bb_hook'}
2026-10-30T07:02:38.646701	{'source': 'webserver', 'raw': {'buildid': 194983, 'number': 10860, 'builderid': 2, 'buildrequestid': 195553, 'workerid': 4, 'masterid': 1, 'started_at': 1793343743, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-win-x64', 'Builder'], 'builderid': [2, 'Builder'], 'workername': ['windows', 'Worker'], 'buildnumber': [10860, 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build']}, 'buildrequest': {'buildrequestid': 195553, 'buildsetid': 43846, 'builderid': 2, 'priority': 0, 'claimed': True, 'claimed_at': 1793343743, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, '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/10860'}, 'type': 'raw_bb_hook'}
2026-10-30T07:02:38.384304	{'source': 'webserver', 'raw': {'buildid': 194973, 'number': 10858, 'builderid': 13, 'buildrequestid': 195557, 'workerid': 4, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793343743, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'basedir': ['c:\\buildbot', 'Worker'], 'builddir': ['c:\\buildbot\\pr-win-arm64', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'sln_exists': ['false', 'SetPropertyFromCommand Step'], 'warnings-count': [7, 'WarningCountingShellCommand'], 'build_url': ['https://dl.dolphin-emu.org/prs/5d/f3/pr-14961-dolphin-latest-arm64.7z', 'SetProperty'], 'builderid': [13, 'Builder'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'buildername': ['pr-win-arm64', 'Builder'], 'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'codebase': ['', 'Build'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'workername': ['windows', 'Worker'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'scheduler': ['pr', 'Scheduler'], 'buildnumber': [10858, 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195557, 'buildsetid': 43846, 'builderid': 13, 'priority': 0, 'claimed': True, 'claimed_at': 1793343513, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 13, 'name': 'pr-win-arm64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/13/builds/10858'}, 'type': 'raw_bb_hook'}
2026-10-30T07:02:31.164424	{'source': 'webserver', 'raw': {'buildid': 194981, 'number': 10858, 'builderid': 1, 'buildrequestid': 195552, 'workerid': 9, 'masterid': 1, 'started_at': 1793343623, 'complete_at': 1793343736, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [1, 'Builder'], 'workername': ['debian', 'Worker'], 'branch': ['refs/pull/14961/head', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/buildbot', 'Worker'], 'builddir': ['/buildbot/pr-deb-dbg-x64', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-deb-dbg-x64', 'Builder'], 'buildnumber': [10858, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195552, 'buildsetid': 43846, 'builderid': 1, 'priority': 0, 'claimed': True, 'claimed_at': 1793343623, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 1, 'name': 'pr-deb-dbg-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/1/builds/10858'}, 'type': 'raw_bb_hook'}
2026-10-30T07:02:19.374887	{'source': 'webserver', 'raw': {'buildid': 194978, 'number': 6007, 'builderid': 43, 'buildrequestid': 195562, 'workerid': 13, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793343731, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'fm_build_url': ['https://flat-manager.dolphin-emu.org/api/v1/build/13275', 'SetPropertyFromCommand Step'], 'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'shortrev': ['506b3d', 'Change'], 'workername': ['altair-flatpak', 'Worker'], 'pr_id': [14961, 'Change'], 'buildername': ['pr-flatpak-x64', 'Builder'], 'scheduler': ['pr', 'Scheduler'], 'branch': ['refs/pull/14961/head', 'Build'], 'project': ['', 'Build'], 'builderid': [43, 'Builder'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'buildnumber': [6007, 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/var/lib/flatpak-worker/worker', 'Worker'], 'builddir': ['/var/lib/flatpak-worker/worker/pr-flatpak-x64', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch']}, 'buildrequest': {'buildrequestid': 195562, 'buildsetid': 43846, 'builderid': 43, 'priority': 0, 'claimed': True, 'claimed_at': 1793343513, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, '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/6007'}, 'type': 'raw_bb_hook'}
2026-10-30T07:01:24.367030	{'source': 'webserver', 'raw': {'buildid': 194972, 'number': 105, 'builderid': 50, 'buildrequestid': 195565, 'workerid': 16, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793343684, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'warnings-count': [0, 'WarningCountingShellCommand'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'branch': ['refs/pull/14961/head', 'Build'], 'pr_id': [14961, 'Change'], 'shortrev': ['506b3d', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-appimage-arm64', 'Builder'], 'builderid': [50, 'Builder'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'workername': ['deneb-appimage', 'Worker'], 'buildnumber': [105, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/buildbot', 'Worker'], 'builddir': ['/buildbot/pr-appimage-arm64', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch']}, 'buildrequest': {'buildrequestid': 195565, 'buildsetid': 43846, 'builderid': 50, 'priority': 0, 'claimed': True, 'claimed_at': 1793343513, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 50, 'name': 'pr-appimage-arm64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/50/builds/105'}, 'type': 'raw_bb_hook'}
2026-10-30T07:01:02.663121	{'source': 'webserver', 'raw': {'buildid': 194979, 'number': 111, 'builderid': 49, 'buildrequestid': 195564, 'workerid': 15, 'masterid': 1, 'started_at': 1793343513, 'complete_at': 1793343662, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'warnings-count': [0, 'WarningCountingShellCommand'], 'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-appimage-x64', 'Builder'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [49, 'Builder'], 'workername': ['altair-appimage', 'Worker'], 'buildnumber': [111, 'Build'], 'repository': ['', 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/buildbot', 'Worker'], 'builddir': ['/buildbot/pr-appimage-x64', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch']}, 'buildrequest': {'buildrequestid': 195564, 'buildsetid': 43846, 'builderid': 49, 'priority': 0, 'claimed': True, 'claimed_at': 1793343513, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 49, 'name': 'pr-appimage-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/49/builds/111'}, 'type': 'raw_bb_hook'}
2026-10-30T07:00:56.534347	{'source': 'webserver', 'raw': {'buildid': 194980, 'number': 10859, 'builderid': 27, 'buildrequestid': 195560, 'workerid': 10, 'masterid': 1, 'started_at': 1793343518, 'complete_at': 1793343628, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'builddir': ['/buildbot/pr-ubu-x64', 'Worker'], 'got_revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'GitNoBranch'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-ubu-x64', 'Builder'], 'builderid': [27, 'Builder'], 'workername': ['ubuntu-lts', 'Worker'], 'buildnumber': [10859, 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'pr_id': [14961, 'Change'], 'shortrev': ['506b3d', 'Change'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/buildbot', 'Worker']}, 'buildrequest': {'buildrequestid': 195560, 'buildsetid': 43846, 'builderid': 27, 'priority': 0, 'claimed': True, 'claimed_at': 1793343518, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, '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/10859'}, 'type': 'raw_bb_hook'}
2026-10-30T07:00:54.349417	{'source': 'webserver', 'raw': {'buildid': 194982, 'number': 9515, 'builderid': 10, 'buildrequestid': 195566, 'workerid': 5, 'masterid': 1, 'started_at': 1793343628, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Trigger'], 'pr_id': [14961, 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'builderid': [10, 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [9515, 'Build'], 'branch': ['refs/pull/14961/head', 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'repository': ['', 'Build'], 'branchname': ['pr-14961', 'Trigger'], 'shortrev': ['506b3d', 'Trigger'], 'buildername': ['pr-fifoci-ogl-lin-mesa', 'Builder'], 'project': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195566, 'buildsetid': 43847, 'builderid': 10, 'priority': 0, 'claimed': True, 'claimed_at': 1793343628, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343628, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43847, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793343628, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194980, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': {'buildid': 194980, 'number': 10859, 'builderid': 27, 'buildrequestid': 195560, 'workerid': 10, 'masterid': 1, 'started_at': 1793343518, 'complete_at': 1793343628, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {}}, 'parentbuilder': {'builderid': 27, 'name': 'pr-ubu-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'builder': {'builderid': 10, 'name': 'pr-fifoci-ogl-lin-mesa', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/10/builds/9515'}, 'type': 'raw_bb_hook'}
2026-10-30T07:00:50.632790	{'source': 'webserver', 'raw': {'buildid': 194981, 'number': 10858, 'builderid': 1, 'buildrequestid': 195552, 'workerid': 9, 'masterid': 1, 'started_at': 1793343623, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14961', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Change'], 'shortrev': ['506b3d', 'Change'], 'pr_id': [14961, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [1, 'Builder'], 'workername': ['debian', 'Worker'], 'branch': ['refs/pull/14961/head', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-deb-dbg-x64', 'Builder'], 'buildnumber': [10858, 'Build'], 'revision': ['506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195552, 'buildsetid': 43846, 'builderid': 1, 'priority': 0, 'claimed': True, 'claimed_at': 1793343623, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793343513, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43846, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793343513, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13165, 'branch': 'refs/pull/14961/head', 'revision': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793343513, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 1, 'name': 'pr-deb-dbg-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/1/builds/10858'}, 'type': 'raw_bb_hook'}

Recent 'raw_gh_hook' events

2026-10-30T07:00:39.597408	{'source': 'webserver', 'gh_type': 'issue_comment', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'id': 6050000199, 'node_id': 'PR_kwDOALCn2M8AAAABK5W55Q', 'number': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', '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, 'assignees': [], 'milestone': None, 'comments': 5, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-30T07:00:38Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14956', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.patch', 'merged_at': None}, 'body': '"Precision Frame Timing" should no longer be as power hungry on x86.\nTSC rate for TPAUSE/MWAITX is read from CPUID when available (Intel) or measured otherwise (AMD).\n\nPlease test Intel CPUs.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/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/14956/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6516958381', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6516958381', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6516958381, 'node_id': 'IC_kwDOALCn2M8AAAABhHDkrQ', '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}, 'created_at': '2026-10-30T07:00:37Z', 'updated_at': '2026-10-30T07:00:37Z', 'body': 'It was discussed in discord, but Intel Core i7-11800H appears to not have the necessary WAITPKG so not seeing the logs is normal.\r\nThanks for testing.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6516958381/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, 'minimized': 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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 488, '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': 3371, 'open_issues': 488, 'watchers': 15743, '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-10-30T06:58:19.532393	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'opened', 'number': 14961, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14961', 'id': 5080694922, 'node_id': 'PR_kwDOALCn2M8AAAABLtVAig', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14961', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14961.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14961.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14961', 'number': 14961, 'state': 'open', 'locked': False, 'title': 'Core: Adjust dual core video thread initialization to avoid ExitGpuLoop racing before RunGpuLoop.', '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': "This adds a blocking async request to the dual core video thread initialization to avoid the unlikely situation of `ExitGpuLoop` racing before `RunGpuLoop`.\n\nAnd to avoid the async request from exploding when trying to schedule events before they are registered on subsequent boots, `FifoManager::m_syncing_suspended` needed to be initialized to `false` in `Init`.\n\nAlso, capture `deinit_video` by-value in `gpu_thread`.\nI'm surprised that didn't crash hard with any compilers.. ", 'created_at': '2026-10-30T06:58:16Z', 'updated_at': '2026-10-30T06:58:16Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14961/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14961/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/14961/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/506b3d929f58a4c8cddbd9607b8e6777b8430b29', 'head': {'label': 'jordan-woyak:fifo-run-exit-race', 'ref': 'fifo-run-exit-race', 'sha': '506b3d929f58a4c8cddbd9607b8e6777b8430b29', '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-06-27T21:22:47Z', 'pushed_at': '2026-10-30T06:51:03Z', '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': 529985, 'stargazers_count': 5, 'watchers_count': 5, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': 5, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 488, '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': 3371, 'open_issues': 488, 'watchers': 15743, '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/14961'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14961'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14961'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14961/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14961/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/14961/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/506b3d929f58a4c8cddbd9607b8e6777b8430b29'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'assignee': 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': 2, 'additions': 21, 'deletions': 11, '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 488, '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': 3371, 'open_issues': 488, 'watchers': 15743, '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-10-30T05:43:20.562967	{'source': 'webserver', 'gh_type': 'issue_comment', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'id': 6050000199, 'node_id': 'PR_kwDOALCn2M8AAAABK5W55Q', 'number': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', '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, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-30T05:43:18Z', 'closed_at': None, 'assignee': None, 'author_association': 'MEMBER', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14956', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14956.patch', 'merged_at': None}, 'body': '"Precision Frame Timing" should no longer be as power hungry on x86.\nTSC rate for TPAUSE/MWAITX is read from CPUID when available (Intel) or measured otherwise (AMD).\n\nPlease test Intel CPUs.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956/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/14956/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6515912889', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6515912889', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6515912889, 'node_id': 'IC_kwDOALCn2M8AAAABhGDwuQ', '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-10-30T05:43:18Z', 'updated_at': '2026-10-30T05:43:18Z', 'body': "So, I don't know if I tested this wrong, but I can't notice any difference between this PR and master on my laptop. The ± value for both VPS and FPS remained the same on the few games and scenes I tried, and using an external tool to monitor power consumption, this PR seems to consume about 1 to 1.5 W less CPU power? The variance is minimal, so it might be within the margin of error.\r\n\r\nI didn't compile this myself, but made sure to use the pr-win-dbg-x64 build from the buildbot (downloaded about two hours ago), enable debug logging and the common log, but the `D[COMMON]: HardwareSleepUntil via MWAITX` didn't appear at all. I could see other debug messages, just not this one. Also made sure that Precision Frame Timing was on and Immediately Present XFB and Rush Frame Presentation were off. VBI Skip was also off.\r\n\r\nMy laptop has a Intel Core i7-11800H, in case it's relevant...", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6515912889/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, 'minimized': 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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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': 'raw_gh_hook'}
2026-10-30T03:39:04.268465	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14960, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960', 'id': 5078960445, 'node_id': 'PR_kwDOALCn2M8AAAABLrrJPQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960', 'number': 14960, 'state': 'open', 'locked': False, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', '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': 'This PR adds `DirectIOFile` locks based on POSIX `flock` and Windows `LockFileEx`.\r\n\r\nPreviously, loading states waited for all previous states to compress and reach the filesystem.\r\nA discord user recently experienced noticeable blocking on a slow filesystem.\r\ne.g. "Save State 1" followed by "Load State 2" would unnecessarily wait for state 1 to compress and save.\r\n\r\nFile locks are now used to only wait for slots that are actually being saved.\r\n\r\nPreviously, state saving would write to a uniquely named temporary file, rename the existing slot/DTM files to back them up, and finally rename the temporary to the final location.\r\nConcurrent dolphin instances saving might end up with mismatched slot/DTM files.\r\n\r\nNow, we create a .tmp file next to the real location, complain if the .tmp exists, lock the existing slot file, rename the existing slot/DTM files to back them up, lock the .tmp, rename the .tmp to the real location (it retains the lock), and finally write the data.\r\n\r\nThis allows other threads and processes to open a slot file and acquire a shared file lock to wait for completion of the state save.\r\n\r\nIt\'s still possible for another dolphin instance to read mismatched slot/DTM files when doing a concurrent save/load.\r\nBut I think the filesystem should at least remain consistent now.\r\nI\'m not sure if it\'s feasible to maintain a perfectly atomic slot/DTM state without things getting really complicated.\r\n\r\nI\'m open to someone coming up with some better tmp/locking/renaming algorithm.', 'created_at': '2026-10-30T03:21:32Z', 'updated_at': '2026-10-30T03:39:01Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'e237b23bd50941e186adfd8a03d9df38b536411d', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'head': {'label': 'jordan-woyak:state-flock', 'ref': 'state-flock', 'sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', '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-06-27T21:22:47Z', 'pushed_at': '2026-10-30T03:18:38Z', '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': 529963, 'stargazers_count': 5, 'watchers_count': 5, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': 5, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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/14960'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14960'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'unstable', 'merged_by': None, 'comments': 0, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 4, 'additions': 425, 'deletions': 103, 'changed_files': 5}, 'changes': {'body': {'from': 'This PR adds `DirectIOFile` locks based on POSIX `flock` and Windows `LockFileEx`.\r\n\r\nPreviously, loading states waited for all previous states to compress and reach the filesystem.\r\nA discord user recently experienced noticeable blocking on a slow filesystem.\r\ne.g. "Save State 1" followed by "Load State 2" would unnecessarily wait for state 1 to compress and save.\r\n\r\nFile locks are now used to only wait for slots that are actually being saved.\r\n\r\nPreviously, state saving would write to a uniquely named temporary file, rename the existing slot/DTM files to back them up, and finally rename the temporary to the final location.\r\nConcurrent dolphin instances saving might end up with mismatched slot/DTM files.\r\n\r\nNow, we create a .tmp file next to the real location, complain if the .tmp exists, lock the .tmp, lock the existing slot file, rename the existing slot/DTM files to back them up, rename the .tmp to the real location (it retains the lock), and finally write the data.\r\n\r\nThis allows other threads and processes to open a slot file and acquire a shared file lock to wait for completion of the state save.\r\n\r\nIt\'s still possible for another dolphin instance to read mismatched slot/DTM files when doing a concurrent save/load.\r\nBut I think the filesystem should at least remain consistent now.\r\nI\'m not sure if it\'s feasible to maintain a perfectly atomic slot/DTM state without things getting really complicated.\r\n\r\nI\'m open to someone coming up with some better tmp/locking/renaming algorithm.'}}, '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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-10-30T03:28:15.110996	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14960, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960', 'id': 5078960445, 'node_id': 'PR_kwDOALCn2M8AAAABLrrJPQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960', 'number': 14960, 'state': 'open', 'locked': False, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', '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': 'This PR adds `DirectIOFile` locks based on POSIX `flock` and Windows `LockFileEx`.\r\n\r\nPreviously, loading states waited for all previous states to compress and reach the filesystem.\r\nA discord user recently experienced noticeable blocking on a slow filesystem.\r\ne.g. "Save State 1" followed by "Load State 2" would unnecessarily wait for state 1 to compress and save.\r\n\r\nFile locks are now used to only wait for slots that are actually being saved.\r\n\r\nPreviously, state saving would write to a uniquely named temporary file, rename the existing slot/DTM files to back them up, and finally rename the temporary to the final location.\r\nConcurrent dolphin instances saving might end up with mismatched slot/DTM files.\r\n\r\nNow, we create a .tmp file next to the real location, complain if the .tmp exists, lock the .tmp, lock the existing slot file, rename the existing slot/DTM files to back them up, rename the .tmp to the real location (it retains the lock), and finally write the data.\r\n\r\nThis allows other threads and processes to open a slot file and acquire a shared file lock to wait for completion of the state save.\r\n\r\nIt\'s still possible for another dolphin instance to read mismatched slot/DTM files when doing a concurrent save/load.\r\nBut I think the filesystem should at least remain consistent now.\r\nI\'m not sure if it\'s feasible to maintain a perfectly atomic slot/DTM state without things getting really complicated.\r\n\r\nI\'m open to someone coming up with some better tmp/locking/renaming algorithm.', 'created_at': '2026-10-30T03:21:32Z', 'updated_at': '2026-10-30T03:28:12Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'e237b23bd50941e186adfd8a03d9df38b536411d', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'head': {'label': 'jordan-woyak:state-flock', 'ref': 'state-flock', 'sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', '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-06-27T21:22:47Z', 'pushed_at': '2026-10-30T03:18:38Z', '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': 529963, 'stargazers_count': 5, 'watchers_count': 5, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': 5, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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/14960'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14960'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'unstable', 'merged_by': None, 'comments': 0, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 4, 'additions': 425, 'deletions': 103, 'changed_files': 5}, 'changes': {'body': {'from': 'This PR adds `DirectIOFile` locks based on POSIX `flock` and Windows `LockFileEx`.\r\n\r\nPreviously, loading states waited for all previous states to compress and reach the filesystem.\r\nA discord user recently experienced noticeable blocking on a slow filesystem.\r\ne.g. "Save State 1" followed by "Load State 2" would unnecessarily wait for state 1 to compress and save.\r\n\r\nFile locks are now used to only wait for slots that are actually being saved.\r\n\r\nPreviously, state saving would write to a uniquely named temporary file, rename the existing slot/DTM files to back them up, and finally rename the temporary to the final location.\r\nConcurrent dolphin instances saving might end up with mismatched slot/DTM files.\r\n\r\nNow, we create a .tmp file next to the real location, complain if the .tmp exists, lock the .tmp, lock the existing slot file, rename the existing slot/DTM files to back them up, rename the .tmp to the real location (it retains the lock), and finally write the data.\r\n\r\nThis allows other threads and processes to open a slot file and acquire a shared file lock to wait for completion of the state save.\r\n\r\nIt\'s still possible for another dolphin instance to read mismatched slot/DTM files when doing a concurrent save/load.\r\nBut I think the filesystem should at least remain consistent now.\r\nI\'m not sure if it\'s feasible to maintain a perfectly atomic slot/DTM state without things getting really complicated.'}}, '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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-10-30T03:26:35.293913	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14960, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960', 'id': 5078960445, 'node_id': 'PR_kwDOALCn2M8AAAABLrrJPQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960', 'number': 14960, 'state': 'open', 'locked': False, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', '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': 'This PR adds `DirectIOFile` locks based on POSIX `flock` and Windows `LockFileEx`.\r\n\r\nPreviously, loading states waited for all previous states to compress and reach the filesystem.\r\nA discord user recently experienced noticeable blocking on a slow filesystem.\r\ne.g. "Save State 1" followed by "Load State 2" would unnecessarily wait for state 1 to compress and save.\r\n\r\nFile locks are now used to only wait for slots that are actually being saved.\r\n\r\nPreviously, state saving would write to a uniquely named temporary file, rename the existing slot/DTM files to back them up, and finally rename the temporary to the final location.\r\nConcurrent dolphin instances saving might end up with mismatched slot/DTM files.\r\n\r\nNow, we create a .tmp file next to the real location, complain if the .tmp exists, lock the .tmp, lock the existing slot file, rename the existing slot/DTM files to back them up, rename the .tmp to the real location (it retains the lock), and finally write the data.\r\n\r\nThis allows other threads and processes to open a slot file and acquire a shared file lock to wait for completion of the state save.\r\n\r\nIt\'s still possible for another dolphin instance to read mismatched slot/DTM files when doing a concurrent save/load.\r\nBut I think the filesystem should at least remain consistent now.\r\nI\'m not sure if it\'s feasible to maintain a perfectly atomic slot/DTM state without things getting really complicated.', 'created_at': '2026-10-30T03:21:32Z', 'updated_at': '2026-10-30T03:26:32Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'e237b23bd50941e186adfd8a03d9df38b536411d', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'head': {'label': 'jordan-woyak:state-flock', 'ref': 'state-flock', 'sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', '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-06-27T21:22:47Z', 'pushed_at': '2026-10-30T03:18:38Z', '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': 529963, 'stargazers_count': 5, 'watchers_count': 5, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': 5, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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/14960'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14960'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'unstable', 'merged_by': None, 'comments': 0, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 4, 'additions': 425, 'deletions': 103, 'changed_files': 5}, 'changes': {'body': {'from': 'This PR adds `DirectIOFile` locks based on POSIX `flock` and Windows `LockFileEx`.\n\nPreviously, loading states waited for all previous states to compress and reach the filesystem.\nA discord user recently experienced noticeable blocking on a slow filesystem.\ne.g. "Save State 1" followed by "Load State 2" would unnecessarily wait for state 1 to compress and save.\n\nFile locks are now used to only wait for slots that are actually being saved.\n\nPreviously, state saving would write to a uniquely named temporary file, rename the existing slot/DTM files to back them up, and finally rename the temporary to the final location.\nConcurrent dolphin instances saving might end up with mismatched slot/DTM files.\n\nNow, we create a .tmp file next to the real location, complain if the .tmp exists, lock the .tmp, lock the existing slot file, rename the existing slot/DTM files to back them up, rename the .tmp to the real location (it retains the lock), and finally write the data.\n\nThis allows other threads and processes to open a slot file and acquire a shared file lock to wait for completion of the state save.'}}, '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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-10-30T03:21:34.950944	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'opened', 'number': 14960, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960', 'id': 5078960445, 'node_id': 'PR_kwDOALCn2M8AAAABLrrJPQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14960', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14960.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960', 'number': 14960, 'state': 'open', 'locked': False, 'title': 'Core/State: Use new DirectIOFile file locks to improve interthread/interprocess state save behavior.', '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': 'This PR adds `DirectIOFile` locks based on POSIX `flock` and Windows `LockFileEx`.\n\nPreviously, loading states waited for all previous states to compress and reach the filesystem.\nA discord user recently experienced noticeable blocking on a slow filesystem.\ne.g. "Save State 1" followed by "Load State 2" would unnecessarily wait for state 1 to compress and save.\n\nFile locks are now used to only wait for slots that are actually being saved.\n\nPreviously, state saving would write to a uniquely named temporary file, rename the existing slot/DTM files to back them up, and finally rename the temporary to the final location.\nConcurrent dolphin instances saving might end up with mismatched slot/DTM files.\n\nNow, we create a .tmp file next to the real location, complain if the .tmp exists, lock the .tmp, lock the existing slot file, rename the existing slot/DTM files to back them up, rename the .tmp to the real location (it retains the lock), and finally write the data.\n\nThis allows other threads and processes to open a slot file and acquire a shared file lock to wait for completion of the state save.', 'created_at': '2026-10-30T03:21:32Z', 'updated_at': '2026-10-30T03:21:32Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': None, 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33', 'head': {'label': 'jordan-woyak:state-flock', 'ref': 'state-flock', 'sha': 'd49fa7436e99eaa9e096a4b0d23c7669eb198c33', '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-06-27T21:22:47Z', 'pushed_at': '2026-10-30T03:18:38Z', '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': 529963, 'stargazers_count': 5, 'watchers_count': 5, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': 5, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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/14960'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14960'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14960/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14960/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/14960/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/d49fa7436e99eaa9e096a4b0d23c7669eb198c33'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'assignee': 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': 4, 'additions': 425, 'deletions': 103, 'changed_files': 5}, '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-10-30T01:31:11Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15743, 'watchers_count': 15743, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3371, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 487, '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': 3371, 'open_issues': 487, 'watchers': 15743, '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-10-30T00:01:37.069700	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14959, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'id': 5074015032, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'number': 14959, 'state': 'open', 'locked': False, 'title': 'DolphinQt: Move the game list with a configured controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'When no game is running, any GameCube port (`1`–`4`) with a connected controller can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller`:** Polls `Pad::GetStatus(channel)` across configured `Standard Controller` ports (`0`–`3`) and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U`:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` across ports `1`–`4` (including port 2 / port 4 while port 1 is mapped to keyboard):** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-30T00:01:34Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '6713dfa4bf23d166d8cfffeda8f37b0400f52ec1', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/16d3077acd9785e451d73329e4758193c270266a', 'head': {'label': 'vegerot:game-list-gc-controller', 'ref': 'game-list-gc-controller', 'sha': '16d3077acd9785e451d73329e4758193c270266a', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1438848406, 'node_id': 'R_kgDOVcMVlg', 'name': 'dolphin', 'full_name': 'vegerot/dolphin', 'private': False, 'owner': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/vegerot/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/vegerot/dolphin', 'forks_url': 'https://api.github.com/repos/vegerot/dolphin/forks', 'keys_url': 'https://api.github.com/repos/vegerot/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/vegerot/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/vegerot/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/vegerot/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/vegerot/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/vegerot/dolphin/events', 'assignees_url': 'https://api.github.com/repos/vegerot/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/vegerot/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/vegerot/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/vegerot/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/vegerot/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/vegerot/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/vegerot/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/vegerot/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/vegerot/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/vegerot/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/vegerot/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/vegerot/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/vegerot/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/vegerot/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/vegerot/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/vegerot/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/vegerot/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/vegerot/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/vegerot/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/vegerot/dolphin/merges', 'archive_url': 'https://api.github.com/repos/vegerot/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/vegerot/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/vegerot/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/vegerot/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/vegerot/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/vegerot/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/vegerot/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/vegerot/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/vegerot/dolphin/deployments', 'created_at': '2026-10-29T19:07:33Z', 'updated_at': '2026-10-29T19:07:33Z', 'pushed_at': '2026-10-30T00:01:33Z', 'git_url': 'git://github.com/vegerot/dolphin.git', 'ssh_url': 'git@github.com:vegerot/dolphin.git', 'clone_url': 'https://github.com/vegerot/dolphin.git', 'svn_url': 'https://github.com/vegerot/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 525896, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14959'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14959'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/16d3077acd9785e451d73329e4758193c270266a'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 4, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 2, 'additions': 180, 'deletions': 0, 'changed_files': 7}, 'changes': {'title': {'from': 'DolphinQt: Move the game list with the port 1 controller'}}, '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-30T00:01:36.342153	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'synchronize', 'number': 14959, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'id': 5074015032, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'number': 14959, 'state': 'open', 'locked': False, 'title': 'DolphinQt: Move the game list with a configured controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'When no game is running, any GameCube port (`1`–`4`) with a connected controller can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller`:** Polls `Pad::GetStatus(channel)` across configured `Standard Controller` ports (`0`–`3`) and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U`:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` across ports `1`–`4` (including port 2 / port 4 while port 1 is mapped to keyboard):** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-30T00:01:34Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '6713dfa4bf23d166d8cfffeda8f37b0400f52ec1', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/16d3077acd9785e451d73329e4758193c270266a', 'head': {'label': 'vegerot:game-list-gc-controller', 'ref': 'game-list-gc-controller', 'sha': '16d3077acd9785e451d73329e4758193c270266a', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1438848406, 'node_id': 'R_kgDOVcMVlg', 'name': 'dolphin', 'full_name': 'vegerot/dolphin', 'private': False, 'owner': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/vegerot/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/vegerot/dolphin', 'forks_url': 'https://api.github.com/repos/vegerot/dolphin/forks', 'keys_url': 'https://api.github.com/repos/vegerot/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/vegerot/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/vegerot/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/vegerot/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/vegerot/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/vegerot/dolphin/events', 'assignees_url': 'https://api.github.com/repos/vegerot/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/vegerot/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/vegerot/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/vegerot/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/vegerot/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/vegerot/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/vegerot/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/vegerot/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/vegerot/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/vegerot/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/vegerot/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/vegerot/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/vegerot/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/vegerot/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/vegerot/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/vegerot/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/vegerot/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/vegerot/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/vegerot/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/vegerot/dolphin/merges', 'archive_url': 'https://api.github.com/repos/vegerot/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/vegerot/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/vegerot/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/vegerot/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/vegerot/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/vegerot/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/vegerot/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/vegerot/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/vegerot/dolphin/deployments', 'created_at': '2026-10-29T19:07:33Z', 'updated_at': '2026-10-29T19:07:33Z', 'pushed_at': '2026-10-30T00:01:33Z', 'git_url': 'git://github.com/vegerot/dolphin.git', 'ssh_url': 'git@github.com:vegerot/dolphin.git', 'clone_url': 'https://github.com/vegerot/dolphin.git', 'svn_url': 'https://github.com/vegerot/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 525896, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14959'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14959'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/16d3077acd9785e451d73329e4758193c270266a'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 4, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 2, 'additions': 180, 'deletions': 0, 'changed_files': 7}, 'before': '71724f6d6e559b6a64985a18ed22a20995b5b39b', 'after': '16d3077acd9785e451d73329e4758193c270266a', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T23:47:11.498073	{'source': 'webserver', 'gh_type': 'issue_comment', 'raw': {'action': 'edited', 'changes': {'body': {'from': '@jordan-woyak Thanks for the feedback! I reworked the PR into two commits:\n\n1. **Commit 1 (`Standard Controller`):** Uses port 1\'s `Standard Controller` mapping (`Pad::GetStatus(0)`) so any mapped controller works, while skipping ports whose default device is the platform keyboard/mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) so default keyboard users don\'t get double inputs. It also delegates cursor movement directly to Qt\'s item views via `QKeyEvent`.\n2. **Commit 2 (`GameCube Adapter for Wii U`):** Kept native adapter support as a separate 28-line commit on top. When any port is set to `"GameCube Adapter for Wii U"`, Dolphin sets `SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE` to `"0"` and reads the USB adapter directly via `GCAdapter`, so `Standard Controller` / `ControllerInterface` cannot see the controller in native adapter mode. Happy to move that second commit to a follow-up PR if you\'d prefer!\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n'}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T23:38:55Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': 'When no game is running, the controller configured on port 1 can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller` on port 1:** Polls `Pad::GetStatus(0)` and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U` on port 1:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` profile:** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/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/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6511106624', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6511106624, 'node_id': 'IC_kwDOALCn2M8AAAABhBeaQA', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T23:38:55Z', 'updated_at': '2026-10-29T23:47:10Z', 'body': "@jordan-woyak Good idea.  I added your feature in a separate commit.\r\n\r\nI play Melee with a GameCube controller, so only adding regular HID controller support wouldn't work for me.  However, it was only 28 extra lines to add support for both, so I did that.  What do you think?\r\n", 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624/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, 'minimized': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T23:38:57.644285	{'source': 'webserver', 'gh_type': 'issue_comment', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T23:38:55Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': 'When no game is running, the controller configured on port 1 can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller` on port 1:** Polls `Pad::GetStatus(0)` and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U` on port 1:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` profile:** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/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/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6511106624', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6511106624, 'node_id': 'IC_kwDOALCn2M8AAAABhBeaQA', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T23:38:55Z', 'updated_at': '2026-10-29T23:38:55Z', 'body': '@jordan-woyak Thanks for the feedback! I reworked the PR into two commits:\n\n1. **Commit 1 (`Standard Controller`):** Uses port 1\'s `Standard Controller` mapping (`Pad::GetStatus(0)`) so any mapped controller works, while skipping ports whose default device is the platform keyboard/mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) so default keyboard users don\'t get double inputs. It also delegates cursor movement directly to Qt\'s item views via `QKeyEvent`.\n2. **Commit 2 (`GameCube Adapter for Wii U`):** Kept native adapter support as a separate 28-line commit on top. When any port is set to `"GameCube Adapter for Wii U"`, Dolphin sets `SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE` to `"0"` and reads the USB adapter directly via `GCAdapter`, so `Standard Controller` / `ControllerInterface` cannot see the controller in native adapter mode. Happy to move that second commit to a follow-up PR if you\'d prefer!\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6511106624/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, 'minimized': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T23:38:56.660294	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14959, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'id': 5074015032, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'number': 14959, 'state': 'open', 'locked': False, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'When no game is running, the controller configured on port 1 can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller` on port 1:** Polls `Pad::GetStatus(0)` and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U` on port 1:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` profile:** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T23:38:53Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'b69f66ea07ddee3fd99e39dd9723b9ef9fe7b693', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/71724f6d6e559b6a64985a18ed22a20995b5b39b', 'head': {'label': 'vegerot:game-list-gc-controller', 'ref': 'game-list-gc-controller', 'sha': '71724f6d6e559b6a64985a18ed22a20995b5b39b', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1438848406, 'node_id': 'R_kgDOVcMVlg', 'name': 'dolphin', 'full_name': 'vegerot/dolphin', 'private': False, 'owner': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/vegerot/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/vegerot/dolphin', 'forks_url': 'https://api.github.com/repos/vegerot/dolphin/forks', 'keys_url': 'https://api.github.com/repos/vegerot/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/vegerot/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/vegerot/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/vegerot/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/vegerot/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/vegerot/dolphin/events', 'assignees_url': 'https://api.github.com/repos/vegerot/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/vegerot/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/vegerot/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/vegerot/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/vegerot/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/vegerot/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/vegerot/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/vegerot/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/vegerot/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/vegerot/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/vegerot/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/vegerot/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/vegerot/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/vegerot/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/vegerot/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/vegerot/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/vegerot/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/vegerot/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/vegerot/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/vegerot/dolphin/merges', 'archive_url': 'https://api.github.com/repos/vegerot/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/vegerot/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/vegerot/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/vegerot/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/vegerot/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/vegerot/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/vegerot/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/vegerot/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/vegerot/dolphin/deployments', 'created_at': '2026-10-29T19:07:33Z', 'updated_at': '2026-10-29T19:07:33Z', 'pushed_at': '2026-10-29T23:38:52Z', 'git_url': 'git://github.com/vegerot/dolphin.git', 'ssh_url': 'git@github.com:vegerot/dolphin.git', 'clone_url': 'https://github.com/vegerot/dolphin.git', 'svn_url': 'https://github.com/vegerot/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 525896, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14959'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14959'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/71724f6d6e559b6a64985a18ed22a20995b5b39b'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 4, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 2, 'additions': 168, 'deletions': 0, 'changed_files': 7}, 'changes': {'title': {'from': 'DolphinQt: Move the game list with the GameCube controller'}}, '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T23:38:54.887335	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'synchronize', 'number': 14959, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'id': 5074015032, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'number': 14959, 'state': 'open', 'locked': False, 'title': 'DolphinQt: Move the game list with the port 1 controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'When no game is running, the controller configured on port 1 can move the game list selection (D-pad or main stick) and launch the selected game (`A`). While a game is running, controller inputs go only to the game.\n\nThe pull request is split into two commits:\n\n1. **`Standard Controller` on port 1:** Polls `Pad::GetStatus(0)` and sends `QKeyEvent` arrow presses to the active game list view (`QTableView` or `QListView`) or emits `GameSelected()` on `A`. Ports whose default device is the platform keyboard and mouse (`DEFAULT_DEVICE_SORT_PRIORITY`) are skipped because Qt already handles keyboard navigation on the game list. Navigation is suppressed when hotkeys are disabled (settings, controller mapping, or file dialogs), when another window or popup menu is active, when the search box (`QLineEdit`) has focus, or when the game list is hidden or empty.\n2. **`GameCube Adapter for Wii U` on port 1:** When any port is set to `"GameCube Adapter for Wii U"`, Dolphin disables SDL\'s GameCube driver (`SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE=0`) and reads the USB adapter directly through `GCAdapter`, bypassing `ControllerInterface` mappings. `GCAdapter::Peek` returns the latest controller state for a connected port without consuming the initial neutral calibration reading ("origin") reserved for `GCAdapter::Input()`.\n\n## Test Plan\n\nBuilt and tested `Dolphin.exe` (Release x64, MSVC 19.51.36260) on Windows 11:\n\n- **Physical GameCube controller on `GameCube Adapter for Wii U` (`057E:0337`):** D-pad and main stick moved the game list selection on a fresh launch, and `A` started the selected game.\n- **Non-keyboard `Standard Controller` profile:** Stepped one game per press, launched the selected game on `A` without duplicate boots, and ignored controller presses while the game ran.\n- **Default keyboard `Standard Controller` profile:** Verified keyboard navigation is unaffected (no double-stepping and `X` does not launch a game).\n\n## AI Disclosure\n\nBoth commits (`DolphinQt` game list controller navigation and `GCAdapter::Peek`) were written with AI assistance (Claude Opus 5.5 and Gemini 4 Argon). The human author reviewed and tested the changes and takes responsibility for them.\n\nCo-Authored-By: Gemini 4 Argon <noreply@google.com>\n', 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T23:38:53Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'b69f66ea07ddee3fd99e39dd9723b9ef9fe7b693', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/71724f6d6e559b6a64985a18ed22a20995b5b39b', 'head': {'label': 'vegerot:game-list-gc-controller', 'ref': 'game-list-gc-controller', 'sha': '71724f6d6e559b6a64985a18ed22a20995b5b39b', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1438848406, 'node_id': 'R_kgDOVcMVlg', 'name': 'dolphin', 'full_name': 'vegerot/dolphin', 'private': False, 'owner': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/vegerot/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/vegerot/dolphin', 'forks_url': 'https://api.github.com/repos/vegerot/dolphin/forks', 'keys_url': 'https://api.github.com/repos/vegerot/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/vegerot/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/vegerot/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/vegerot/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/vegerot/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/vegerot/dolphin/events', 'assignees_url': 'https://api.github.com/repos/vegerot/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/vegerot/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/vegerot/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/vegerot/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/vegerot/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/vegerot/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/vegerot/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/vegerot/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/vegerot/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/vegerot/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/vegerot/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/vegerot/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/vegerot/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/vegerot/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/vegerot/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/vegerot/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/vegerot/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/vegerot/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/vegerot/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/vegerot/dolphin/merges', 'archive_url': 'https://api.github.com/repos/vegerot/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/vegerot/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/vegerot/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/vegerot/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/vegerot/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/vegerot/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/vegerot/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/vegerot/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/vegerot/dolphin/deployments', 'created_at': '2026-10-29T19:07:33Z', 'updated_at': '2026-10-29T19:07:33Z', 'pushed_at': '2026-10-29T23:38:52Z', 'git_url': 'git://github.com/vegerot/dolphin.git', 'ssh_url': 'git@github.com:vegerot/dolphin.git', 'clone_url': 'https://github.com/vegerot/dolphin.git', 'svn_url': 'https://github.com/vegerot/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 525896, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14959'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14959'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/71724f6d6e559b6a64985a18ed22a20995b5b39b'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': None, 'rebaseable': None, 'mergeable_state': 'unknown', 'merged_by': None, 'comments': 3, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 2, 'additions': 168, 'deletions': 0, 'changed_files': 7}, 'before': '99888f7be3c88398835035c3f764ecca39cc3791', 'after': '71724f6d6e559b6a64985a18ed22a20995b5b39b', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T23:01:33.688580	{'source': 'webserver', 'gh_type': 'check_run', 'raw': {'action': 'completed', 'check_run': {'id': 123783382174, 'name': 'altair', 'node_id': 'CR_kwDOALAO3s8AAAAc0hCEng', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'external_id': '0670d724-d045-5ff1-b7d2-3c176a960267', 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382174', 'html_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382174', 'details_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382174', 'status': 'completed', 'conclusion': 'success', 'started_at': '2026-10-29T22:58:15Z', 'completed_at': '2026-10-29T23:01:31Z', 'output': {'title': None, 'summary': None, 'text': None, 'annotations_count': 0, 'annotations_url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382174/annotations'}, 'check_suite': {'id': 111060772343, 'node_id': 'CS_kwDOALAO3s8AAAAZ27zl9w', 'head_branch': 'master', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'status': 'completed', 'conclusion': 'success', 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-suites/111060772343', 'before': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'after': '855912ebde8af3da1c27fd82351104a095734af0', 'pull_requests': [], 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'created_at': '2026-10-29T22:58:12Z', 'updated_at': '2026-10-29T23:01:32Z'}, 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'pull_requests': []}, 'repository': {'id': 11538142, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTUzODE0Mg==', 'name': 'sadm', 'full_name': 'dolphin-emu/sadm', '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/sadm', 'description': 'Scripts and configurations for the Dolphin Emulator infrastructure', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/sadm', 'forks_url': 'https://api.github.com/repos/dolphin-emu/sadm/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/sadm/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/sadm/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/sadm/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/sadm/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/sadm/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/sadm/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/sadm/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/sadm/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/sadm/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/sadm/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/sadm/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/sadm/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/sadm/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/sadm/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/sadm/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/sadm/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/sadm/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/sadm/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/sadm/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/sadm/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/sadm/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/sadm/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/sadm/deployments', 'created_at': '2013-07-19T22:07:05Z', 'updated_at': '2026-10-29T22:58:14Z', 'pushed_at': '2026-10-29T22:58:10Z', 'git_url': 'git://github.com/dolphin-emu/sadm.git', 'ssh_url': 'git@github.com:dolphin-emu/sadm.git', 'clone_url': 'https://github.com/dolphin-emu/sadm.git', 'svn_url': 'https://github.com/dolphin-emu/sadm', 'homepage': '', 'size': 1333, 'stargazers_count': 50, 'watchers_count': 50, 'language': 'Nix', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 42, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 4, 'license': {'key': 'mit', 'name': 'MIT License', 'spdx_id': 'MIT', 'url': 'https://api.github.com/licenses/mit', 'node_id': 'MDc6TGljZW5zZTEz'}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 42, 'open_issues': 4, 'watchers': 50, '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': 'OatmealDome', 'id': 11504941, 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'avatar_url': 'https://avatars.githubusercontent.com/u/11504941?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/OatmealDome', 'html_url': 'https://github.com/OatmealDome', 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T22:59:44.441357	{'source': 'webserver', 'gh_type': 'check_run', 'raw': {'action': 'completed', 'check_run': {'id': 123783382682, 'name': 'deneb', 'node_id': 'CR_kwDOALAO3s8AAAAc0hCGmg', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'external_id': 'fb488b6c-85b5-55a6-afa0-dee6cc201abf', 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382682', 'html_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382682', 'details_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382682', 'status': 'completed', 'conclusion': 'success', 'started_at': '2026-10-29T22:58:17Z', 'completed_at': '2026-10-29T22:59:41Z', 'output': {'title': None, 'summary': None, 'text': None, 'annotations_count': 0, 'annotations_url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382682/annotations'}, 'check_suite': {'id': 111060772343, 'node_id': 'CS_kwDOALAO3s8AAAAZ27zl9w', 'head_branch': 'master', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'status': 'in_progress', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-suites/111060772343', 'before': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'after': '855912ebde8af3da1c27fd82351104a095734af0', 'pull_requests': [], 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'created_at': '2026-10-29T22:58:12Z', 'updated_at': '2026-10-29T22:58:18Z'}, 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'pull_requests': []}, 'repository': {'id': 11538142, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTUzODE0Mg==', 'name': 'sadm', 'full_name': 'dolphin-emu/sadm', '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/sadm', 'description': 'Scripts and configurations for the Dolphin Emulator infrastructure', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/sadm', 'forks_url': 'https://api.github.com/repos/dolphin-emu/sadm/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/sadm/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/sadm/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/sadm/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/sadm/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/sadm/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/sadm/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/sadm/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/sadm/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/sadm/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/sadm/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/sadm/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/sadm/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/sadm/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/sadm/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/sadm/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/sadm/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/sadm/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/sadm/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/sadm/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/sadm/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/sadm/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/sadm/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/sadm/deployments', 'created_at': '2013-07-19T22:07:05Z', 'updated_at': '2026-10-29T22:58:14Z', 'pushed_at': '2026-10-29T22:58:10Z', 'git_url': 'git://github.com/dolphin-emu/sadm.git', 'ssh_url': 'git@github.com:dolphin-emu/sadm.git', 'clone_url': 'https://github.com/dolphin-emu/sadm.git', 'svn_url': 'https://github.com/dolphin-emu/sadm', 'homepage': '', 'size': 1333, 'stargazers_count': 50, 'watchers_count': 50, 'language': 'Nix', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 42, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 4, 'license': {'key': 'mit', 'name': 'MIT License', 'spdx_id': 'MIT', 'url': 'https://api.github.com/licenses/mit', 'node_id': 'MDc6TGljZW5zZTEz'}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 42, 'open_issues': 4, 'watchers': 50, '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': 'OatmealDome', 'id': 11504941, 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'avatar_url': 'https://avatars.githubusercontent.com/u/11504941?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/OatmealDome', 'html_url': 'https://github.com/OatmealDome', 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T22:58:14.586395	{'source': 'webserver', 'gh_type': 'check_run', 'raw': {'action': 'created', 'check_run': {'id': 123783382682, 'name': 'deneb', 'node_id': 'CR_kwDOALAO3s8AAAAc0hCGmg', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'external_id': 'fb488b6c-85b5-55a6-afa0-dee6cc201abf', 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382682', 'html_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382682', 'details_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382682', 'status': 'queued', 'conclusion': None, 'started_at': '2026-10-29T22:58:13Z', 'completed_at': None, 'output': {'title': None, 'summary': None, 'text': None, 'annotations_count': 0, 'annotations_url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382682/annotations'}, 'check_suite': {'id': 111060772343, 'node_id': 'CS_kwDOALAO3s8AAAAZ27zl9w', 'head_branch': 'master', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'status': 'queued', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-suites/111060772343', 'before': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'after': '855912ebde8af3da1c27fd82351104a095734af0', 'pull_requests': [], 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'created_at': '2026-10-29T22:58:12Z', 'updated_at': '2026-10-29T22:58:12Z'}, 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'pull_requests': []}, 'repository': {'id': 11538142, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTUzODE0Mg==', 'name': 'sadm', 'full_name': 'dolphin-emu/sadm', '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/sadm', 'description': 'Scripts and configurations for the Dolphin Emulator infrastructure', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/sadm', 'forks_url': 'https://api.github.com/repos/dolphin-emu/sadm/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/sadm/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/sadm/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/sadm/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/sadm/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/sadm/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/sadm/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/sadm/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/sadm/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/sadm/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/sadm/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/sadm/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/sadm/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/sadm/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/sadm/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/sadm/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/sadm/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/sadm/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/sadm/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/sadm/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/sadm/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/sadm/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/sadm/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/sadm/deployments', 'created_at': '2013-07-19T22:07:05Z', 'updated_at': '2026-10-22T12:26:35Z', 'pushed_at': '2026-10-29T22:58:10Z', 'git_url': 'git://github.com/dolphin-emu/sadm.git', 'ssh_url': 'git@github.com:dolphin-emu/sadm.git', 'clone_url': 'https://github.com/dolphin-emu/sadm.git', 'svn_url': 'https://github.com/dolphin-emu/sadm', 'homepage': '', 'size': 1333, 'stargazers_count': 50, 'watchers_count': 50, 'language': 'Nix', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 42, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 4, 'license': {'key': 'mit', 'name': 'MIT License', 'spdx_id': 'MIT', 'url': 'https://api.github.com/licenses/mit', 'node_id': 'MDc6TGljZW5zZTEz'}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 42, 'open_issues': 4, 'watchers': 50, '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': 'OatmealDome', 'id': 11504941, 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'avatar_url': 'https://avatars.githubusercontent.com/u/11504941?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/OatmealDome', 'html_url': 'https://github.com/OatmealDome', 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T22:58:14.512795	{'source': 'webserver', 'gh_type': 'check_run', 'raw': {'action': 'created', 'check_run': {'id': 123783382174, 'name': 'altair', 'node_id': 'CR_kwDOALAO3s8AAAAc0hCEng', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'external_id': '0670d724-d045-5ff1-b7d2-3c176a960267', 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382174', 'html_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382174', 'details_url': 'https://github.com/dolphin-emu/sadm/actions/runs/40969791766/job/123783382174', 'status': 'queued', 'conclusion': None, 'started_at': '2026-10-29T22:58:13Z', 'completed_at': None, 'output': {'title': None, 'summary': None, 'text': None, 'annotations_count': 0, 'annotations_url': 'https://api.github.com/repos/dolphin-emu/sadm/check-runs/123783382174/annotations'}, 'check_suite': {'id': 111060772343, 'node_id': 'CS_kwDOALAO3s8AAAAZ27zl9w', 'head_branch': 'master', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'status': 'queued', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-suites/111060772343', 'before': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'after': '855912ebde8af3da1c27fd82351104a095734af0', 'pull_requests': [], 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'created_at': '2026-10-29T22:58:12Z', 'updated_at': '2026-10-29T22:58:12Z'}, 'app': {'id': 15368, 'client_id': 'Iv1.05c79e9ad1f6bdfa', 'slug': 'github-actions', 'node_id': 'MDM6QXBwMTUzNjg=', 'owner': {'login': 'github', 'id': 9919, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjk5MTk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/9919?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/github', 'html_url': 'https://github.com/github', 'followers_url': 'https://api.github.com/users/github/followers', 'following_url': 'https://api.github.com/users/github/following{/other_user}', 'gists_url': 'https://api.github.com/users/github/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/github/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/github/subscriptions', 'organizations_url': 'https://api.github.com/users/github/orgs', 'repos_url': 'https://api.github.com/users/github/repos', 'events_url': 'https://api.github.com/users/github/events{/privacy}', 'received_events_url': 'https://api.github.com/users/github/received_events', 'type': 'Organization', 'user_view_type': 'public', 'site_admin': False}, 'name': 'GitHub Actions', 'description': 'Automate your workflow from idea to production', 'external_url': 'https://help.github.com/en/actions', 'html_url': 'https://github.com/apps/github-actions', 'created_at': '2018-07-30T09:30:17Z', 'updated_at': '2026-06-18T16:17:48Z', 'permissions': {'actions': 'write', 'administration': 'read', 'artifact_metadata': 'write', 'attestations': 'write', 'checks': 'write', 'code_quality': 'write', 'contents': 'write', 'copilot_requests': 'write', 'deployments': 'write', 'discussions': 'write', 'drives': 'write', 'issues': 'write', 'merge_queues': 'write', 'metadata': 'read', 'models': 'read', 'packages': 'write', 'pages': 'write', 'pull_requests': 'write', 'repository_hooks': 'write', 'repository_projects': 'write', 'security_events': 'write', 'statuses': 'write', 'vulnerability_alerts': 'read'}, 'events': ['branch_protection_rule', 'check_run', 'check_suite', 'create', 'delete', 'deployment', 'deployment_status', 'discussion', 'discussion_comment', 'fork', 'gollum', 'issues', 'issue_comment', 'label', 'merge_group', 'milestone', 'page_build', 'public', 'pull_request', 'pull_request_review', 'pull_request_review_comment', 'push', 'registry_package', 'release', 'repository', 'repository_dispatch', 'status', 'watch', 'workflow_dispatch', 'workflow_run']}, 'pull_requests': []}, 'repository': {'id': 11538142, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTUzODE0Mg==', 'name': 'sadm', 'full_name': 'dolphin-emu/sadm', '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/sadm', 'description': 'Scripts and configurations for the Dolphin Emulator infrastructure', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/sadm', 'forks_url': 'https://api.github.com/repos/dolphin-emu/sadm/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/sadm/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/sadm/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/sadm/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/sadm/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/sadm/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/sadm/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/sadm/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/sadm/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/sadm/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/sadm/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/sadm/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/sadm/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/sadm/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/sadm/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/sadm/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/sadm/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/sadm/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/sadm/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/sadm/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/sadm/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/sadm/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/sadm/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/sadm/deployments', 'created_at': '2013-07-19T22:07:05Z', 'updated_at': '2026-10-22T12:26:35Z', 'pushed_at': '2026-10-29T22:58:10Z', 'git_url': 'git://github.com/dolphin-emu/sadm.git', 'ssh_url': 'git@github.com:dolphin-emu/sadm.git', 'clone_url': 'https://github.com/dolphin-emu/sadm.git', 'svn_url': 'https://github.com/dolphin-emu/sadm', 'homepage': '', 'size': 1333, 'stargazers_count': 50, 'watchers_count': 50, 'language': 'Nix', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 42, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 4, 'license': {'key': 'mit', 'name': 'MIT License', 'spdx_id': 'MIT', 'url': 'https://api.github.com/licenses/mit', 'node_id': 'MDc6TGljZW5zZTEz'}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 42, 'open_issues': 4, 'watchers': 50, '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': 'OatmealDome', 'id': 11504941, 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'avatar_url': 'https://avatars.githubusercontent.com/u/11504941?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/OatmealDome', 'html_url': 'https://github.com/OatmealDome', 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T22:58:12.606298	{'source': 'webserver', 'gh_type': 'check_suite', 'raw': {'action': 'requested', 'check_suite': {'id': 111060766579, 'node_id': 'CS_kwDOALAO3s8AAAAZ27zPcw', 'head_branch': 'master', 'head_sha': '855912ebde8af3da1c27fd82351104a095734af0', 'status': 'queued', 'conclusion': None, 'url': 'https://api.github.com/repos/dolphin-emu/sadm/check-suites/111060766579', 'before': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'after': '855912ebde8af3da1c27fd82351104a095734af0', 'pull_requests': [], '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-10-29T22:58:11Z', 'updated_at': '2026-10-29T22:58:11Z', 'rerequestable': True, 'runs_rerequestable': True, 'latest_check_runs_count': 0, 'check_runs_url': 'https://api.github.com/repos/dolphin-emu/sadm/check-suites/111060766579/check-runs', 'head_commit': {'id': '855912ebde8af3da1c27fd82351104a095734af0', 'tree_id': '6d40e19cd4bfdc0a23f4d881f4f0e7a8dfa080e8', 'message': 'mastodon: Manually override package version to 4.6.10', 'timestamp': '2026-10-29T22:58:01Z', 'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me'}, 'committer': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me'}}}, 'repository': {'id': 11538142, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTUzODE0Mg==', 'name': 'sadm', 'full_name': 'dolphin-emu/sadm', '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/sadm', 'description': 'Scripts and configurations for the Dolphin Emulator infrastructure', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/sadm', 'forks_url': 'https://api.github.com/repos/dolphin-emu/sadm/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/sadm/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/sadm/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/sadm/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/sadm/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/sadm/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/sadm/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/sadm/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/sadm/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/sadm/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/sadm/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/sadm/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/sadm/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/sadm/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/sadm/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/sadm/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/sadm/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/sadm/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/sadm/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/sadm/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/sadm/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/sadm/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/sadm/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/sadm/deployments', 'created_at': '2013-07-19T22:07:05Z', 'updated_at': '2026-10-22T12:26:35Z', 'pushed_at': '2026-10-29T22:58:10Z', 'git_url': 'git://github.com/dolphin-emu/sadm.git', 'ssh_url': 'git@github.com:dolphin-emu/sadm.git', 'clone_url': 'https://github.com/dolphin-emu/sadm.git', 'svn_url': 'https://github.com/dolphin-emu/sadm', 'homepage': '', 'size': 1333, 'stargazers_count': 50, 'watchers_count': 50, 'language': 'Nix', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 42, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 4, 'license': {'key': 'mit', 'name': 'MIT License', 'spdx_id': 'MIT', 'url': 'https://api.github.com/licenses/mit', 'node_id': 'MDc6TGljZW5zZTEz'}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 42, 'open_issues': 4, 'watchers': 50, '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': 'OatmealDome', 'id': 11504941, 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'avatar_url': 'https://avatars.githubusercontent.com/u/11504941?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/OatmealDome', 'html_url': 'https://github.com/OatmealDome', 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T22:58:12.263937	{'source': 'webserver', 'gh_type': 'push', 'raw': {'ref': 'refs/heads/master', 'before': '983c9bd664a2a83971d33b37f57189e99d10a7e9', 'after': '855912ebde8af3da1c27fd82351104a095734af0', 'repository': {'id': 11538142, 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTUzODE0Mg==', 'name': 'sadm', 'full_name': 'dolphin-emu/sadm', '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/sadm', 'description': 'Scripts and configurations for the Dolphin Emulator infrastructure', 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/sadm', 'forks_url': 'https://api.github.com/repos/dolphin-emu/sadm/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/sadm/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/sadm/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/sadm/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/sadm/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/sadm/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/sadm/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/sadm/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/sadm/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/sadm/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/sadm/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/sadm/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/sadm/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/sadm/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/sadm/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/sadm/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/sadm/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/sadm/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/sadm/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/sadm/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/sadm/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/sadm/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/sadm/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/sadm/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/sadm/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/sadm/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/sadm/deployments', 'created_at': 1374271625, 'updated_at': '2026-10-22T12:26:35Z', 'pushed_at': 1793314690, 'git_url': 'git://github.com/dolphin-emu/sadm.git', 'ssh_url': 'git@github.com:dolphin-emu/sadm.git', 'clone_url': 'https://github.com/dolphin-emu/sadm.git', 'svn_url': 'https://github.com/dolphin-emu/sadm', 'homepage': '', 'size': 1333, 'stargazers_count': 50, 'watchers_count': 50, 'language': 'Nix', 'has_issues': True, 'has_projects': False, 'has_downloads': True, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 42, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 4, 'license': {'key': 'mit', 'name': 'MIT License', 'spdx_id': 'MIT', 'url': 'https://api.github.com/licenses/mit', 'node_id': 'MDc6TGljZW5zZTEz'}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 42, 'open_issues': 4, 'watchers': 50, 'default_branch': 'master', 'stargazers': 50, 'master_branch': 'master', 'organization': 'dolphin-emu', 'custom_properties': {}}, 'pusher': {'name': 'OatmealDome', 'email': 'OatmealDome@users.noreply.github.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': 'OatmealDome', 'id': 11504941, 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'avatar_url': 'https://avatars.githubusercontent.com/u/11504941?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/OatmealDome', 'html_url': 'https://github.com/OatmealDome', 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created': False, 'deleted': False, 'base_ref': None, 'compare': 'https://github.com/dolphin-emu/sadm/compare/983c9bd664a2...855912ebde8a', 'commits': [{'id': '855912ebde8af3da1c27fd82351104a095734af0', 'tree_id': '6d40e19cd4bfdc0a23f4d881f4f0e7a8dfa080e8', 'distinct': True, 'message': 'mastodon: Manually override package version to 4.6.10', 'timestamp': '2026-10-29T18:58:01-04:00', 'url': 'https://github.com/dolphin-emu/sadm/commit/855912ebde8af3da1c27fd82351104a095734af0', 'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-29T18:58:01-04:00', 'username': 'OatmealDome'}, 'committer': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-29T18:58:01-04:00', 'username': 'OatmealDome'}, 'added': [], 'removed': [], 'modified': ['roles/mastodon/default.nix']}], 'head_commit': {'id': '855912ebde8af3da1c27fd82351104a095734af0', 'tree_id': '6d40e19cd4bfdc0a23f4d881f4f0e7a8dfa080e8', 'distinct': True, 'message': 'mastodon: Manually override package version to 4.6.10', 'timestamp': '2026-10-29T18:58:01-04:00', 'url': 'https://github.com/dolphin-emu/sadm/commit/855912ebde8af3da1c27fd82351104a095734af0', 'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-29T18:58:01-04:00', 'username': 'OatmealDome'}, 'committer': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'date': '2026-10-29T18:58:01-04:00', 'username': 'OatmealDome'}, 'added': [], 'removed': [], 'modified': ['roles/mastodon/default.nix']}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T21:43:39.404237	{'source': 'webserver', 'gh_type': 'issue_comment', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'id': 6106694641, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'number': 14959, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T21:43:37Z', 'closed_at': None, 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': False, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'merged_at': None}, 'body': "Player 1's configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\r\n\r\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\r\n\r\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat).\r\n\r\n## Test Plan\r\n\r\nThis was built and launched. Release x64, MSVC 19.51.36260, `Dolphin.exe` from this branch.\r\n\r\n- `D-pad Up` moved the highlight up\r\n- `D-pad Down` moved it down\r\n- `A` started the highlighted game. \r\n\r\nThis patch was written with Grok. The human author is responsible for it.\r\n\r\nCo-Authored-By: Grok <noreply@x.ai>\r\n", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/reactions', 'total_count': 1, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 1, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6509021017', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959#issuecomment-6509021017', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'id': 6509021017, 'node_id': 'IC_kwDOALCn2M8AAAABg_fHWQ', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-29T21:43:37Z', 'updated_at': '2026-10-29T21:43:37Z', 'body': "@JoshuaVandaele \r\n\r\n> > This machine has no DolphinQt build, so the window itself was not launched.\r\n> \r\n> Have those changes been tested and reviewed at all?\r\n\r\n\r\nThey have definitely been reviewed and tested.  My bad! 🤦🏼\u200d♀️  I manually built and tested my patch, but I didn't tell Grok I had so the PR description it wrote was wrong.\r\n\r\nI reviewed the code and read the PR description, but I missed that sentence in the description.", 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6509021017/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, 'minimized': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T21:43:08.880131	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14959, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'id': 5074015032, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'number': 14959, 'state': 'open', 'locked': False, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': "Player 1's configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\r\n\r\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\r\n\r\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat).\r\n\r\n## Test Plan\r\n\r\nThis was built and launched. Release x64, MSVC 19.51.36260, `Dolphin.exe` from this branch.\r\n\r\n- `D-pad Up` moved the highlight up\r\n- `D-pad Down` moved it down\r\n- `A` started the highlighted game. \r\n\r\nThis patch was written with Grok. The human author is responsible for it.\r\n\r\nCo-Authored-By: Grok <noreply@x.ai>\r\n", 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T21:43:05Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'b69f66ea07ddee3fd99e39dd9723b9ef9fe7b693', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/99888f7be3c88398835035c3f764ecca39cc3791', 'head': {'label': 'vegerot:game-list-gc-controller', 'ref': 'game-list-gc-controller', 'sha': '99888f7be3c88398835035c3f764ecca39cc3791', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1438848406, 'node_id': 'R_kgDOVcMVlg', 'name': 'dolphin', 'full_name': 'vegerot/dolphin', 'private': False, 'owner': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/vegerot/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/vegerot/dolphin', 'forks_url': 'https://api.github.com/repos/vegerot/dolphin/forks', 'keys_url': 'https://api.github.com/repos/vegerot/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/vegerot/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/vegerot/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/vegerot/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/vegerot/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/vegerot/dolphin/events', 'assignees_url': 'https://api.github.com/repos/vegerot/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/vegerot/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/vegerot/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/vegerot/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/vegerot/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/vegerot/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/vegerot/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/vegerot/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/vegerot/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/vegerot/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/vegerot/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/vegerot/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/vegerot/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/vegerot/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/vegerot/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/vegerot/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/vegerot/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/vegerot/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/vegerot/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/vegerot/dolphin/merges', 'archive_url': 'https://api.github.com/repos/vegerot/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/vegerot/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/vegerot/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/vegerot/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/vegerot/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/vegerot/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/vegerot/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/vegerot/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/vegerot/dolphin/deployments', 'created_at': '2026-10-29T19:07:33Z', 'updated_at': '2026-10-29T19:07:33Z', 'pushed_at': '2026-10-29T19:57:43Z', 'git_url': 'git://github.com/vegerot/dolphin.git', 'ssh_url': 'git@github.com:vegerot/dolphin.git', 'clone_url': 'https://github.com/vegerot/dolphin.git', 'svn_url': 'https://github.com/vegerot/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 525896, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14959'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14959'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/99888f7be3c88398835035c3f764ecca39cc3791'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'unstable', 'merged_by': None, 'comments': 2, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 2, 'additions': 287, 'deletions': 0, 'changed_files': 8}, 'changes': {'body': {'from': 'Player 1\'s configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\n\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\n\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat).\n\nThis was also built and launched. Release x64, MSVC 19.51.36260, `Dolphin.exe` from this branch. The list had `Alpha.dol` and `Beta.dol`. With port 1 set to Standard Controller and the default keyboard profile:\n\n- D-pad Up (`T`) moved the highlight from Beta to Alpha.\n- D-pad Down (`G`) moved it from Alpha to Beta.\n- A (`X`) started the highlighted game. The 4-byte file then showed "Failed to init core", so Play ran.\n\nThis patch was written with Grok. The human author is responsible for it.\n\nCo-Authored-By: Grok <noreply@x.ai>\n'}}, '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T21:40:30.991405	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14959, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959', 'id': 5074015032, 'node_id': 'PR_kwDOALCn2M8AAAABLm9TOA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14959', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14959.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959', 'number': 14959, 'state': 'open', 'locked': False, 'title': 'DolphinQt: Move the game list with the GameCube controller', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Player 1\'s configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\n\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\n\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat).\n\nThis was also built and launched. Release x64, MSVC 19.51.36260, `Dolphin.exe` from this branch. The list had `Alpha.dol` and `Beta.dol`. With port 1 set to Standard Controller and the default keyboard profile:\n\n- D-pad Up (`T`) moved the highlight from Beta to Alpha.\n- D-pad Down (`G`) moved it from Alpha to Beta.\n- A (`X`) started the highlighted game. The 4-byte file then showed "Failed to init core", so Play ran.\n\nThis patch was written with Grok. The human author is responsible for it.\n\nCo-Authored-By: Grok <noreply@x.ai>\n', 'created_at': '2026-10-29T19:07:51Z', 'updated_at': '2026-10-29T21:40:27Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'b69f66ea07ddee3fd99e39dd9723b9ef9fe7b693', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/99888f7be3c88398835035c3f764ecca39cc3791', 'head': {'label': 'vegerot:game-list-gc-controller', 'ref': 'game-list-gc-controller', 'sha': '99888f7be3c88398835035c3f764ecca39cc3791', 'user': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1438848406, 'node_id': 'R_kgDOVcMVlg', 'name': 'dolphin', 'full_name': 'vegerot/dolphin', 'private': False, 'owner': {'login': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/vegerot/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/vegerot/dolphin', 'forks_url': 'https://api.github.com/repos/vegerot/dolphin/forks', 'keys_url': 'https://api.github.com/repos/vegerot/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/vegerot/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/vegerot/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/vegerot/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/vegerot/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/vegerot/dolphin/events', 'assignees_url': 'https://api.github.com/repos/vegerot/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/vegerot/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/vegerot/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/vegerot/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/vegerot/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/vegerot/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/vegerot/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/vegerot/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/vegerot/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/vegerot/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/vegerot/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/vegerot/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/vegerot/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/vegerot/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/vegerot/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/vegerot/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/vegerot/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/vegerot/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/vegerot/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/vegerot/dolphin/merges', 'archive_url': 'https://api.github.com/repos/vegerot/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/vegerot/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/vegerot/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/vegerot/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/vegerot/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/vegerot/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/vegerot/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/vegerot/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/vegerot/dolphin/deployments', 'created_at': '2026-10-29T19:07:33Z', 'updated_at': '2026-10-29T19:07:33Z', 'pushed_at': '2026-10-29T19:57:43Z', 'git_url': 'git://github.com/vegerot/dolphin.git', 'ssh_url': 'git@github.com:vegerot/dolphin.git', 'clone_url': 'https://github.com/vegerot/dolphin.git', 'svn_url': 'https://github.com/vegerot/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 525896, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14959'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14959'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14959/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14959/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/14959/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/99888f7be3c88398835035c3f764ecca39cc3791'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'unstable', 'merged_by': None, 'comments': 2, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 2, 'additions': 287, 'deletions': 0, 'changed_files': 8}, 'changes': {'body': {'from': "Player 1's configured GameCube controller can move the game list and start the highlighted game. During a game, those buttons stay game buttons.\n\nThe Wii U adapter is not an SDL device, so Hotkey Settings cannot bind it. `GCAdapter::Peek` reads the adapter and leaves the origin sample for the game. A Standard Controller port uses the existing pad profile. The search box, an open menu, and another window do not take these presses.\n\nA one-off program checked the pad decision (directions, stick, button edges, first poll, repeat). This machine has no DolphinQt build, so the window itself was not launched.\n\nThis patch was written with Grok. The human author is responsible for it.\n\nCo-Authored-By: Grok <noreply@x.ai>\n"}}, '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'vegerot', 'id': 5297725, 'node_id': 'MDQ6VXNlcjUyOTc3MjU=', 'avatar_url': 'https://avatars.githubusercontent.com/u/5297725?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/vegerot', 'html_url': 'https://github.com/vegerot', 'followers_url': 'https://api.github.com/users/vegerot/followers', 'following_url': 'https://api.github.com/users/vegerot/following{/other_user}', 'gists_url': 'https://api.github.com/users/vegerot/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/vegerot/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/vegerot/subscriptions', 'organizations_url': 'https://api.github.com/users/vegerot/orgs', 'repos_url': 'https://api.github.com/users/vegerot/repos', 'events_url': 'https://api.github.com/users/vegerot/events{/privacy}', 'received_events_url': 'https://api.github.com/users/vegerot/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-29T20:36:18.604276	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5704607855, 'node_id': 'PRR_kwDOALCn2M8AAAABVAVobw', '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': None, 'commit_id': '640615805c3309e69f6f4ec8685f6449951e1c93', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596#pullrequestreview-5704607855', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14596#pullrequestreview-5704607855'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596'}}, 'submitted_at': '2026-10-29T20:36:15Z', 'updated_at': '2026-10-29T20:36:15Z', 'author_association': 'CONTRIBUTOR'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596', 'id': 3535607114, 'node_id': 'PR_kwDOALCn2M7SvRVK', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14596', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14596.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596', 'number': 14596, 'state': 'open', 'locked': False, 'title': 'feat(retroachievements): implement achievement notification sounds', 'user': {'login': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Hi there, I\'m a RetroAchievements develoepr. I\'ve been spending a lot of time with the RetroAchievements integration lately and felt like the experience was a bit too "quiet" popping an achievement or submitting a leaderboard feels a lot more rewarding when there\'s a satisfying audio cue to go along with the OSD notification.\r\n\r\nThis PR implements a cross-platform audio feedback system for the Achievement Manager. I\'ve added support for the following events:\r\n\r\n- **info.wav**: Plays for a successful login or general information messages.\r\n- **unlock.wav**: The "Achievement Unlocked" chime.\r\n- **lb.wav**: Notification for when a leaderboard attempt starts.\r\n- **lbcancel.wav**: Feedback for when a leaderboard is canceled or failed.\r\n- **lbsubmit.wav**: And this for when a score is successfully submitted.\r\n\r\nhttps://github.com/user-attachments/assets/50ad3d02-8cc8-46ea-8959-8bf199d5e9bb\r\n\r\nI sourced these from Andre Louis\'s public domain archive (http://onj3.andrelouis.com/phonetones/), specifically choosing clean, non-intrusive notification tones that wouldn\'t feel out of place during gameplay.\r\n\r\nImplementation-wise, I\'ve tried to make this as "plug-and-play" as possible for the end-user. Windows uses native mixing, while Linux and macOS use the SDL3 fallback. For Android, I\'ve added a small helper that handles the JNI calls on the UI thread and automatically extracts the audio assets from the APK into the Sys folder.\r\n\r\nI\'ve tested this on both Windows and my Galaxy S9, and the timing of the cues feels great alongside the OSD. I\'d love to hear what you guys think about the sounds or the general implementation!', 'created_at': '2026-04-15T18:43:01Z', 'updated_at': '2026-10-29T20:16:32Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '09a0cc65a461c3b873eb7a98d9201d253a9b1d7e', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596/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/14596/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/640615805c3309e69f6f4ec8685f6449951e1c93', 'head': {'label': 'CySlaytor:master', 'ref': 'master', 'sha': '640615805c3309e69f6f4ec8685f6449951e1c93', 'user': {'login': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1209371214, 'node_id': 'R_kgDOSBWKTg', 'name': 'dolphin', 'full_name': 'CySlaytor/dolphin', 'private': False, 'owner': {'login': 'CySlaytor', 'id': 202352967, 'node_id': 'U_kgDODA-pRw', 'avatar_url': 'https://avatars.githubusercontent.com/u/202352967?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/CySlaytor', 'html_url': 'https://github.com/CySlaytor', 'followers_url': 'https://api.github.com/users/CySlaytor/followers', 'following_url': 'https://api.github.com/users/CySlaytor/following{/other_user}', 'gists_url': 'https://api.github.com/users/CySlaytor/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/CySlaytor/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/CySlaytor/subscriptions', 'organizations_url': 'https://api.github.com/users/CySlaytor/orgs', 'repos_url': 'https://api.github.com/users/CySlaytor/repos', 'events_url': 'https://api.github.com/users/CySlaytor/events{/privacy}', 'received_events_url': 'https://api.github.com/users/CySlaytor/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/CySlaytor/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/CySlaytor/dolphin', 'forks_url': 'https://api.github.com/repos/CySlaytor/dolphin/forks', 'keys_url': 'https://api.github.com/repos/CySlaytor/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/CySlaytor/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/CySlaytor/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/CySlaytor/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/CySlaytor/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/CySlaytor/dolphin/events', 'assignees_url': 'https://api.github.com/repos/CySlaytor/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/CySlaytor/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/CySlaytor/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/CySlaytor/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/CySlaytor/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/CySlaytor/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/CySlaytor/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/CySlaytor/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/CySlaytor/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/CySlaytor/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/CySlaytor/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/CySlaytor/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/CySlaytor/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/CySlaytor/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/CySlaytor/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/CySlaytor/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/CySlaytor/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/CySlaytor/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/CySlaytor/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/CySlaytor/dolphin/merges', 'archive_url': 'https://api.github.com/repos/CySlaytor/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/CySlaytor/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/CySlaytor/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/CySlaytor/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/CySlaytor/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/CySlaytor/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/CySlaytor/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/CySlaytor/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/CySlaytor/dolphin/deployments', 'created_at': '2026-04-13T11:08:57Z', 'updated_at': '2026-10-29T17:55:50Z', 'pushed_at': '2026-10-29T17:55:45Z', 'git_url': 'git://github.com/CySlaytor/dolphin.git', 'ssh_url': 'git@github.com:CySlaytor/dolphin.git', 'clone_url': 'https://github.com/CySlaytor/dolphin.git', 'svn_url': 'https://github.com/CySlaytor/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 520658, 'stargazers_count': 0, 'watchers_count': 0, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14596'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14596'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14596/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14596/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/14596/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/640615805c3309e69f6f4ec8685f6449951e1c93'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'raw_gh_hook'}
2026-10-29T20:20:03.760910	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5704410599, 'node_id': 'PRR_kwDOALCn2M8AAAABVAJl5w', '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': 'I can confirm this makes the "GPU Driver" option appear on a Mali device', 'commit_id': 'a8fc326a6b0e9945919b174aed09a9639b5b10a0', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958#pullrequestreview-5704410599', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14958#pullrequestreview-5704410599'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958'}}, 'submitted_at': '2026-10-29T20:20:01Z', 'updated_at': '2026-10-29T20:20:01Z', 'author_association': 'CONTRIBUTOR'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958', 'id': 5059067500, 'node_id': 'PR_kwDOALCn2M8AAAABLYs-bA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958', 'number': 14958, 'state': 'open', 'locked': False, 'title': 'Vulkan: Allow custom drivers on Mali devices', 'user': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Custom drivers that target mali kbase API are popping up.  This allows their usage.\nTested on an Anbernic rg476h with malisx2 driver. \nI have read the contributing guidelines.', 'created_at': '2026-10-28T23:02:09Z', 'updated_at': '2026-10-29T20:11:19Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'ae31e6442a3ce5736aeb762ded029067bc65aea4', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958/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/14958/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/a8fc326a6b0e9945919b174aed09a9639b5b10a0', 'head': {'label': 'bmdhacks:mali-custom-driver', 'ref': 'mali-custom-driver', 'sha': 'a8fc326a6b0e9945919b174aed09a9639b5b10a0', 'user': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1437712343, 'node_id': 'R_kgDOVbG_1w', 'name': 'dolphin', 'full_name': 'bmdhacks/dolphin', 'private': False, 'owner': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/bmdhacks/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/bmdhacks/dolphin', 'forks_url': 'https://api.github.com/repos/bmdhacks/dolphin/forks', 'keys_url': 'https://api.github.com/repos/bmdhacks/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/bmdhacks/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/bmdhacks/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/bmdhacks/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/bmdhacks/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/bmdhacks/dolphin/events', 'assignees_url': 'https://api.github.com/repos/bmdhacks/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/bmdhacks/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/bmdhacks/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/bmdhacks/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/bmdhacks/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/bmdhacks/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/bmdhacks/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/bmdhacks/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/bmdhacks/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/bmdhacks/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/bmdhacks/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/bmdhacks/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/bmdhacks/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/bmdhacks/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/bmdhacks/dolphin/merges', 'archive_url': 'https://api.github.com/repos/bmdhacks/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/bmdhacks/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/bmdhacks/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/bmdhacks/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/bmdhacks/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/bmdhacks/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/bmdhacks/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/bmdhacks/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/bmdhacks/dolphin/deployments', 'created_at': '2026-10-28T22:51:38Z', 'updated_at': '2026-10-28T22:51:38Z', 'pushed_at': '2026-10-28T22:54:43Z', 'git_url': 'git://github.com/bmdhacks/dolphin.git', 'ssh_url': 'git@github.com:bmdhacks/dolphin.git', 'clone_url': 'https://github.com/bmdhacks/dolphin.git', 'svn_url': 'https://github.com/bmdhacks/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 520477, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14958'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14958'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958/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/14958/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/a8fc326a6b0e9945919b174aed09a9639b5b10a0'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': 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-10-29T20:18:20Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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': 'raw_gh_hook'}
2026-10-29T20:11:20.952077	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5704296719, 'node_id': 'PRR_kwDOALCn2M8AAAABVACpDw', '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': "Alright then. I don't know anything about Mali custom drivers, but I don't see any reason to not allow it.", 'commit_id': 'a8fc326a6b0e9945919b174aed09a9639b5b10a0', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958#pullrequestreview-5704296719', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14958#pullrequestreview-5704296719'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958'}}, 'submitted_at': '2026-10-29T20:11:19Z', 'updated_at': '2026-10-29T20:11:19Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958', 'id': 5059067500, 'node_id': 'PR_kwDOALCn2M8AAAABLYs-bA', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14958', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14958.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958', 'number': 14958, 'state': 'open', 'locked': False, 'title': 'Vulkan: Allow custom drivers on Mali devices', 'user': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'Custom drivers that target mali kbase API are popping up.  This allows their usage.\nTested on an Anbernic rg476h with malisx2 driver. \nI have read the contributing guidelines.', 'created_at': '2026-10-28T23:02:09Z', 'updated_at': '2026-10-29T20:07:26Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'ae31e6442a3ce5736aeb762ded029067bc65aea4', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958/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/14958/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/a8fc326a6b0e9945919b174aed09a9639b5b10a0', 'head': {'label': 'bmdhacks:mali-custom-driver', 'ref': 'mali-custom-driver', 'sha': 'a8fc326a6b0e9945919b174aed09a9639b5b10a0', 'user': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1437712343, 'node_id': 'R_kgDOVbG_1w', 'name': 'dolphin', 'full_name': 'bmdhacks/dolphin', 'private': False, 'owner': {'login': 'bmdhacks', 'id': 1010987, 'node_id': 'MDQ6VXNlcjEwMTA5ODc=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1010987?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/bmdhacks', 'html_url': 'https://github.com/bmdhacks', 'followers_url': 'https://api.github.com/users/bmdhacks/followers', 'following_url': 'https://api.github.com/users/bmdhacks/following{/other_user}', 'gists_url': 'https://api.github.com/users/bmdhacks/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/bmdhacks/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/bmdhacks/subscriptions', 'organizations_url': 'https://api.github.com/users/bmdhacks/orgs', 'repos_url': 'https://api.github.com/users/bmdhacks/repos', 'events_url': 'https://api.github.com/users/bmdhacks/events{/privacy}', 'received_events_url': 'https://api.github.com/users/bmdhacks/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/bmdhacks/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/bmdhacks/dolphin', 'forks_url': 'https://api.github.com/repos/bmdhacks/dolphin/forks', 'keys_url': 'https://api.github.com/repos/bmdhacks/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/bmdhacks/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/bmdhacks/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/bmdhacks/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/bmdhacks/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/bmdhacks/dolphin/events', 'assignees_url': 'https://api.github.com/repos/bmdhacks/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/bmdhacks/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/bmdhacks/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/bmdhacks/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/bmdhacks/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/bmdhacks/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/bmdhacks/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/bmdhacks/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/bmdhacks/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/bmdhacks/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/bmdhacks/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/bmdhacks/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/bmdhacks/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/bmdhacks/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/bmdhacks/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/bmdhacks/dolphin/merges', 'archive_url': 'https://api.github.com/repos/bmdhacks/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/bmdhacks/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/bmdhacks/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/bmdhacks/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/bmdhacks/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/bmdhacks/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/bmdhacks/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/bmdhacks/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/bmdhacks/dolphin/deployments', 'created_at': '2026-10-28T22:51:38Z', 'updated_at': '2026-10-28T22:51:38Z', 'pushed_at': '2026-10-28T22:54:43Z', 'git_url': 'git://github.com/bmdhacks/dolphin.git', 'ssh_url': 'git@github.com:bmdhacks/dolphin.git', 'clone_url': 'https://github.com/bmdhacks/dolphin.git', 'svn_url': 'https://github.com/bmdhacks/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 520477, 'stargazers_count': 0, 'watchers_count': 0, 'language': None, 'has_issues': False, 'has_projects': True, 'has_downloads': False, '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': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', '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-10-29T20:06:37Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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/14958'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14958'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14958/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14958/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/14958/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/a8fc326a6b0e9945919b174aed09a9639b5b10a0'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': 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-10-29T20:06:37Z', 'pushed_at': '2026-10-25T12:40: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': 561403, 'stargazers_count': 15742, 'watchers_count': 15742, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3369, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 486, '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': 3369, 'open_issues': 486, 'watchers': 15742, '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'}