Status for Dolphin Central

Recent events

2026-10-28T07:22:58.787235	{'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-28T07:22:58.441065	{'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-28T07:22:30.871120	{'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-28T07:22:29.236177	{'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-28T07:17:29.235867	{'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-28T07:17:27.523702	{'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-28T07:12:58.440837	{'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-28T07:12:58.088409	{'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-28T07:12:27.523383	{'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-28T07:12:25.781967	{'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-28T07:07:25.781653	{'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-28T07:07:23.980335	{'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-28T07:02:58.088163	{'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-28T07:02:57.624563	{'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-28T07:02:23.979975	{'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-28T07:02:22.209852	{'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-28T06:57:22.209526	{'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-28T06:57:20.508322	{'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-28T06:52:57.624315	{'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-28T06:52:57.266474	{'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-28T06:52:20.507995	{'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-28T06:52:18.752750	{'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-28T06:47:18.752376	{'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-28T06:47:17.007752	{'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-28T06:42:57.266246	{'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'}

Recent 'build_status' events

2026-10-28T01:29:32.957568	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-win-dbg-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/31/builds/10853', 'description': 'Build succeeded on builder pr-win-dbg-x64', 'type': 'build_status'}
2026-10-28T01:24:33.628511	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-flatpak-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/43/builds/5993', 'description': 'Build succeeded on builder pr-flatpak-x64', 'type': 'build_status'}
2026-10-28T01:23:00.923582	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-deb-dbg-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/1/builds/10844', 'description': 'Build succeeded on builder pr-deb-dbg-x64', 'type': 'build_status'}
2026-10-28T01:21:58.126677	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-win-dbg-x64', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/31/builds/10853', 'description': 'Auto build in progress on builder pr-win-dbg-x64', 'type': 'build_status'}
2026-10-28T01:21:57.426166	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'shortrev': 'dc1017', 'service': 'pr-win-dbg-x64', 'pr': 14933, 'success': False, 'pending': False, 'url': 'https://dolphin.ci/#/builders/31/builds/10852', 'description': 'Build failed on builder pr-win-dbg-x64', 'type': 'build_status'}
2026-10-28T01:21:56.197441	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'shortrev': 'dc1017', 'service': 'pr-win-dbg-x64', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/31/builds/10852', 'description': 'Auto build in progress on builder pr-win-dbg-x64', 'type': 'build_status'}
2026-10-28T01:21:55.525405	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-win-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/2/builds/10846', 'description': 'Build succeeded on builder pr-win-x64', 'type': 'build_status'}
2026-10-28T01:16:16.282627	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-flatpak-arm64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/44/builds/5933', 'description': 'Build succeeded on builder pr-flatpak-arm64', 'type': 'build_status'}
2026-10-28T01:13:10.021295	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-osx-universal', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/7/builds/10863', 'description': 'Build succeeded on builder pr-osx-universal', 'type': 'build_status'}
2026-10-28T01:08:54.453826	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-appimage-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/49/builds/97', 'description': 'Build succeeded on builder pr-appimage-x64', 'type': 'build_status'}
2026-10-28T01:08:45.756673	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-deb-dbg-x64', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/1/builds/10844', 'description': 'Auto build in progress on builder pr-deb-dbg-x64', 'type': 'build_status'}
2026-10-28T01:08:45.071097	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-deb-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/26/builds/10843', 'description': 'Build succeeded on builder pr-deb-x64', 'type': 'build_status'}
2026-10-28T01:07:39.227762	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-ubu-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/27/builds/10845', 'description': 'Build succeeded on builder pr-ubu-x64', 'type': 'build_status'}
2026-10-28T01:05:34.895119	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-android', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/22/builds/10850', 'description': 'Build succeeded on builder pr-android', 'type': 'build_status'}
2026-10-28T01:05:06.822155	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-appimage-arm64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/50/builds/91', 'description': 'Build succeeded on builder pr-appimage-arm64', 'type': 'build_status'}
2026-10-28T01:04:24.956933	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-win-x64', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/2/builds/10846', 'description': 'Auto build in progress on builder pr-win-x64', 'type': 'build_status'}
2026-10-28T01:04:24.244197	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'shortrev': 'dc1017', 'service': 'pr-win-x64', 'pr': 14933, 'success': False, 'pending': False, 'url': 'https://dolphin.ci/#/builders/2/builds/10845', 'description': 'Build failed on builder pr-win-x64', 'type': 'build_status'}
2026-10-28T01:04:22.583803	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'shortrev': 'dc1017', 'service': 'pr-win-x64', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/2/builds/10845', 'description': 'Auto build in progress on builder pr-win-x64', 'type': 'build_status'}
2026-10-28T01:04:21.864214	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-win-arm64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/13/builds/10844', 'description': 'Build succeeded on builder pr-win-arm64', 'type': 'build_status'}
2026-10-28T00:57:17.151538	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-osx-universal', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/7/builds/10863', 'description': 'Auto build in progress on builder pr-osx-universal', 'type': 'build_status'}
2026-10-28T00:52:51.222125	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-freebsd-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/11/builds/10852', 'description': 'Build succeeded on builder pr-freebsd-x64', 'type': 'build_status'}
2026-10-28T00:51:06.752050	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-flatpak-x64', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/43/builds/5993', 'description': 'Auto build in progress on builder pr-flatpak-x64', 'type': 'build_status'}
2026-10-28T00:51:06.053400	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'shortrev': 'dc1017', 'service': 'pr-flatpak-x64', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/43/builds/5992', 'description': 'Build succeeded on builder pr-flatpak-x64', 'type': 'build_status'}
2026-10-28T00:49:58.554798	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'pr-ubu-x64', 'pr': 14933, 'success': False, 'pending': True, 'url': 'https://dolphin.ci/#/builders/27/builds/10845', 'description': 'Auto build in progress on builder pr-ubu-x64', 'type': 'build_status'}
2026-10-28T00:49:57.874264	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'shortrev': 'e212bc', 'service': 'lint', 'pr': 14933, 'success': True, 'pending': False, 'url': 'https://dolphin.ci/#/builders/9/builds/10848', 'description': 'Build succeeded on builder lint', 'type': 'build_status'}

Recent 'command_message' events

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-28T05:36:36.084465	{'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-6461551396', 'safe_author': True, 'body': '> How exactly should we test this? I\'m currently using a Intel CPU...\r\n\r\n<img width="250" height="47" alt="image" src="https://github.com/user-attachments/assets/1f986321-1527-4429-95c6-ce14565f49f8" />\r\n\r\nMmmm, I suppose outside of seeing if the "Precision Frame Timing" setting produces the same or better frame time variance (smoother line here with a low ± number), with the ImmediateXFB and RushFramePresentation settings off, it would be good to know if `tsc_mhz` is being calculated properly in "x64CPUDetect.cpp", but that would require running dolphin in a debugger because the values aren\'t logged anywhere right now.. :(', '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': 2, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-28T05:36:33Z', '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/6461551396', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6461551396', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6461551396, 'node_id': 'IC_kwDOALCn2M8AAAABgSNzJA', '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-28T05:36:33Z', 'updated_at': '2026-10-28T05:36:33Z', 'body': '> How exactly should we test this? I\'m currently using a Intel CPU...\r\n\r\n<img width="250" height="47" alt="image" src="https://github.com/user-attachments/assets/1f986321-1527-4429-95c6-ce14565f49f8" />\r\n\r\nMmmm, I suppose outside of seeing if the "Precision Frame Timing" setting produces the same or better frame time variance (smoother line here with a low ± number), with the ImmediateXFB and RushFramePresentation settings off, it would be good to know if `tsc_mhz` is being calculated properly in "x64CPUDetect.cpp", but that would require running dolphin in a debugger because the values aren\'t logged anywhere right now.. :(', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6461551396/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-28T03:31: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': 15731, 'watchers_count': 15731, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15731, '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-28T05:00:12.286699	{'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-6461071809', 'safe_author': True, 'body': "How exactly should we test this? I'm currently using a Intel CPU...", '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': 1, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-28T05:00:10Z', '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/6461071809', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6461071809', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6461071809, 'node_id': 'IC_kwDOALCn2M8AAAABgRwhwQ', '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-28T05:00:10Z', 'updated_at': '2026-10-28T05:00:10Z', 'body': "How exactly should we test this? I'm currently using a Intel CPU...", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6461071809/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-28T03:31: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': 15731, 'watchers_count': 15731, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15731, '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-27T23:12:19.337149	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14927, 'title': 'Externals: Replace submodules with FetchContent', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14927#issuecomment-6455885517', 'safe_author': True, 'body': 'Maybe you should initially just change one of our submodules to use FetchContent ?\r\nI think changing them all makes this PR look scary.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14927', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14927/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14927/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14927/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14927', 'id': 5780774739, 'node_id': 'PR_kwDOALCn2M8AAAABHkJzvw', 'number': 14927, 'title': 'Externals: Replace submodules with FetchContent', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 1, 'created_at': '2026-10-09T15:42:43Z', 'updated_at': '2026-10-27T23:12:17Z', '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/14927', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14927', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14927.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14927.patch', 'merged_at': None}, 'body': "This replaces our Git submodule usage with CMake's FetchContent. This brings a few advantages, such as automatically only pulling what you need, and doing away with having to tinker with `git submodule`. I took the opportunity to do some minor-ish cleanups as well.\n\nBased on #14793", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14927/reactions', 'total_count': 1, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 1, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14927/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6455885517', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14927#issuecomment-6455885517', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14927', 'id': 6455885517, 'node_id': 'IC_kwDOALCn2M8AAAABgMz-zQ', '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-27T23:12:17Z', 'updated_at': '2026-10-27T23:12:17Z', 'body': 'Maybe you should initially just change one of our submodules to use FetchContent ?\r\nI think changing them all makes this PR look scary.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6455885517/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-27T20:47:49Z', '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': 15727, 'watchers_count': 15727, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15727, '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-27T22:48:04.869653	{'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-6455488423', 'safe_author': True, 'body': "> > It's only enabled on Windows, though it does also work on Linux with `set(USE_SHARED_FFMPEG ON)`.\r\n> \r\n> Is this worth an [`option`](https://cmake.org/cmake/help/latest/command/option.html) (or [dependent option](https://cmake.org/cmake/help/latest/module/CMakeDependentOption.html)) in CMake?\r\n\r\nMmm, it looks like Linux is usually going to be using shared ffmpeg libraries regardless.\r\nI should probably rename the `SHARED_FFMPEG` variables I added to something more like `DYNAMICALLY_LOAD_FFMPEG`.\r\nAnd I don't expect this functionality to be overly useful on Linux. I think people generally just have the ffmpeg libraries installed?\r\nmacOS will probably want to have this functionality at some point if feasible, though.", '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': 4, 'created_at': '2026-10-27T06:43:26Z', 'updated_at': '2026-10-27T22:48:03Z', '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\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': 2, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, '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/6455488423', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6455488423', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'id': 6455488423, 'node_id': 'IC_kwDOALCn2M8AAAABgMbvpw', '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-27T22:48:02Z', 'updated_at': '2026-10-27T22:48:02Z', 'body': "> > It's only enabled on Windows, though it does also work on Linux with `set(USE_SHARED_FFMPEG ON)`.\r\n> \r\n> Is this worth an [`option`](https://cmake.org/cmake/help/latest/command/option.html) (or [dependent option](https://cmake.org/cmake/help/latest/module/CMakeDependentOption.html)) in CMake?\r\n\r\nMmm, it looks like Linux is usually going to be using shared ffmpeg libraries regardless.\r\nI should probably rename the `SHARED_FFMPEG` variables I added to something more like `DYNAMICALLY_LOAD_FFMPEG`.\r\nAnd I don't expect this functionality to be overly useful on Linux. I think people generally just have the ffmpeg libraries installed?\r\nmacOS will probably want to have this functionality at some point if feasible, though.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6455488423/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-27T20:47:49Z', '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': 15727, 'watchers_count': 15727, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15727, '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-27T22:00:05.401128	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'BtbN', '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-6454668605', 'safe_author': False, 'body': "https://github.com/yt-dlp/FFmpeg-Builds is one of the major forks that has largely automated staying up to date. If you want to be in control yourself when version shifts happen, that's a good option imo", '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': 3, 'created_at': '2026-10-27T06:43:26Z', 'updated_at': '2026-10-27T22:00: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/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\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': 2, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, '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/6454668605', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6454668605', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'id': 6454668605, 'node_id': 'IC_kwDOALCn2M8AAAABgLptPQ', 'user': {'login': 'BtbN', 'id': 294293, 'node_id': 'MDQ6VXNlcjI5NDI5Mw==', 'avatar_url': 'https://avatars.githubusercontent.com/u/294293?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/BtbN', 'html_url': 'https://github.com/BtbN', 'followers_url': 'https://api.github.com/users/BtbN/followers', 'following_url': 'https://api.github.com/users/BtbN/following{/other_user}', 'gists_url': 'https://api.github.com/users/BtbN/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/BtbN/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/BtbN/subscriptions', 'organizations_url': 'https://api.github.com/users/BtbN/orgs', 'repos_url': 'https://api.github.com/users/BtbN/repos', 'events_url': 'https://api.github.com/users/BtbN/events{/privacy}', 'received_events_url': 'https://api.github.com/users/BtbN/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-27T22:00:00Z', 'updated_at': '2026-10-27T22:00:00Z', 'body': "https://github.com/yt-dlp/FFmpeg-Builds is one of the major forks that has largely automated staying up to date. If you want to be in control yourself when version shifts happen, that's a good option imo", 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6454668605/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-27T20:47:49Z', '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': 15727, 'watchers_count': 15727, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15727, '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': 'BtbN', 'id': 294293, 'node_id': 'MDQ6VXNlcjI5NDI5Mw==', 'avatar_url': 'https://avatars.githubusercontent.com/u/294293?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/BtbN', 'html_url': 'https://github.com/BtbN', 'followers_url': 'https://api.github.com/users/BtbN/followers', 'following_url': 'https://api.github.com/users/BtbN/following{/other_user}', 'gists_url': 'https://api.github.com/users/BtbN/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/BtbN/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/BtbN/subscriptions', 'organizations_url': 'https://api.github.com/users/BtbN/orgs', 'repos_url': 'https://api.github.com/users/BtbN/repos', 'events_url': 'https://api.github.com/users/BtbN/events{/privacy}', 'received_events_url': 'https://api.github.com/users/BtbN/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-27T21:57:33.743559	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', '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-6454625936', 'safe_author': True, 'body': "> This will reduce our Windows build sizes (The x64 7z appears to be ~1.8 MB smaller).\r\n\r\nThe extracted executable is about 3.5MB smaller\r\n\r\n> It's only enabled on Windows, though it does also work on Linux with `set(USE_SHARED_FFMPEG ON)`.\r\n\r\nIs this worth an [`option`](https://cmake.org/cmake/help/latest/command/option.html) (or [dependent option](https://cmake.org/cmake/help/latest/module/CMakeDependentOption.html)) in CMake?\r\n\r\n> Maybe we should host the zip file ourselves for security and URL reliability reasons?\r\n\r\n> The 9.0 downloads will be replaced by 9.1 in the near future.\r\n> So the only permanently stable URL is the latest master download.\r\n> I usually build the latest version of the current and previously released ABI, plus master on CI.\r\n\r\nPerhaps https://github.com/dolphin-emu/ext-win-ffmpeg/ could be turned into a fork and/or mirror of https://github.com/btbn/ffmpeg-builds, including releases? Off of a quick Google search, there appears to be pre-made actions for that: https://github.com/marketplace/actions/mirror-the-release-of-another-repository-to-your-repository\r\n\r\n", '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': 2, 'created_at': '2026-10-27T06:43:26Z', 'updated_at': '2026-10-27T21:57:31Z', '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\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': 2, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, '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/6454625936', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6454625936', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'id': 6454625936, 'node_id': 'IC_kwDOALCn2M8AAAABgLnGkA', '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-27T21:57:31Z', 'updated_at': '2026-10-27T21:57:31Z', 'body': "> This will reduce our Windows build sizes (The x64 7z appears to be ~1.8 MB smaller).\r\n\r\nThe extracted executable is about 3.5MB smaller\r\n\r\n> It's only enabled on Windows, though it does also work on Linux with `set(USE_SHARED_FFMPEG ON)`.\r\n\r\nIs this worth an [`option`](https://cmake.org/cmake/help/latest/command/option.html) (or [dependent option](https://cmake.org/cmake/help/latest/module/CMakeDependentOption.html)) in CMake?\r\n\r\n> Maybe we should host the zip file ourselves for security and URL reliability reasons?\r\n\r\n> The 9.0 downloads will be replaced by 9.1 in the near future.\r\n> So the only permanently stable URL is the latest master download.\r\n> I usually build the latest version of the current and previously released ABI, plus master on CI.\r\n\r\nPerhaps https://github.com/dolphin-emu/ext-win-ffmpeg/ could be turned into a fork and/or mirror of https://github.com/btbn/ffmpeg-builds, including releases? Off of a quick Google search, there appears to be pre-made actions for that: https://github.com/marketplace/actions/mirror-the-release-of-another-repository-to-your-repository\r\n\r\n", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6454625936/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-27T20:47:49Z', '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': 15727, 'watchers_count': 15727, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15727, '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-27T21:18:35.447753	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'BtbN', '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-6453812608', 'safe_author': False, 'body': 'The 9.0 downloads will be replaced by 9.1 in the near future.\r\nSo the only permanently stable URL is the latest master download.\r\nI usually build the latest version of the current and previously released ABI, plus master on CI.', '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': 1, 'created_at': '2026-10-27T06:43:26Z', 'updated_at': '2026-10-27T21:18:33Z', '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\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': 2, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, '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/6453812608', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14957#issuecomment-6453812608', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'id': 6453812608, 'node_id': 'IC_kwDOALCn2M8AAAABgK1dgA', 'user': {'login': 'BtbN', 'id': 294293, 'node_id': 'MDQ6VXNlcjI5NDI5Mw==', 'avatar_url': 'https://avatars.githubusercontent.com/u/294293?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/BtbN', 'html_url': 'https://github.com/BtbN', 'followers_url': 'https://api.github.com/users/BtbN/followers', 'following_url': 'https://api.github.com/users/BtbN/following{/other_user}', 'gists_url': 'https://api.github.com/users/BtbN/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/BtbN/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/BtbN/subscriptions', 'organizations_url': 'https://api.github.com/users/BtbN/orgs', 'repos_url': 'https://api.github.com/users/BtbN/repos', 'events_url': 'https://api.github.com/users/BtbN/events{/privacy}', 'received_events_url': 'https://api.github.com/users/BtbN/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-27T21:18:33Z', 'updated_at': '2026-10-27T21:18:33Z', 'body': 'The 9.0 downloads will be replaced by 9.1 in the near future.\r\nSo the only permanently stable URL is the latest master download.\r\nI usually build the latest version of the current and previously released ABI, plus master on CI.', 'author_association': 'NONE', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6453812608/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-27T20:47:49Z', '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': 15727, 'watchers_count': 15727, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15727, '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': 'BtbN', 'id': 294293, 'node_id': 'MDQ6VXNlcjI5NDI5Mw==', 'avatar_url': 'https://avatars.githubusercontent.com/u/294293?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/BtbN', 'html_url': 'https://github.com/BtbN', 'followers_url': 'https://api.github.com/users/BtbN/followers', 'following_url': 'https://api.github.com/users/BtbN/following{/other_user}', 'gists_url': 'https://api.github.com/users/BtbN/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/BtbN/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/BtbN/subscriptions', 'organizations_url': 'https://api.github.com/users/BtbN/orgs', 'repos_url': 'https://api.github.com/users/BtbN/repos', 'events_url': 'https://api.github.com/users/BtbN/events{/privacy}', 'received_events_url': 'https://api.github.com/users/BtbN/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-27T20:48:27.618476	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-ffmpeg', 'author': 'jordan-woyak', 'action': 'created', 'id': 2, 'title': 'Remove binaries and update headers.', 'url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6453186121', 'safe_author': True, 'body': "A shallow clone of FFmpeg checks out pretty quickly here. I think that's my plan now, then we don't even need this repo.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'repository_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/events', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'id': 6054161326, 'node_id': 'PR_kwDOHFjEXc8AAAABK8pqqg', 'number': 2, 'title': 'Remove binaries and update headers.', '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': 'closed', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-10-27T06:30:42Z', 'updated_at': '2026-10-27T20:48:25Z', 'closed_at': '2026-10-27T20:48:24Z', '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/ext-win-ffmpeg/pulls/2', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'diff_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.diff', 'patch_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.patch', 'merged_at': None}, 'body': 'In preparation for Dolphin dynamically linking with FFmpeg on Windows.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/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/ext-win-ffmpeg/issues/2/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6453186121', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6453186121', 'issue_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'id': 6453186121, 'node_id': 'IC_kwDOHFjEXc8AAAABgKPOSQ', '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-27T20:48:24Z', 'updated_at': '2026-10-27T20:48:24Z', 'body': "A shallow clone of FFmpeg checks out pretty quickly here. I think that's my plan now, then we don't even need this repo.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6453186121/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': 475579485, 'node_id': 'R_kgDOHFjEXQ', 'name': 'ext-win-ffmpeg', 'full_name': 'dolphin-emu/ext-win-ffmpeg', '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/ext-win-ffmpeg', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/deployments', 'created_at': '2022-03-29T18:55:40Z', 'updated_at': '2024-02-11T02:07:54Z', 'pushed_at': '2022-03-29T18:58:38Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-ffmpeg.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-ffmpeg.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg', 'homepage': None, 'size': 12027, 'stargazers_count': 3, 'watchers_count': 3, 'language': 'C', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 1, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 1, 'watchers': 3, '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-27T20:38:55.675886	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-ffmpeg', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 2, 'title': 'Remove binaries and update headers.', 'url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452999960', 'safe_author': True, 'body': '> Alternatively, maybe we don\'t need this repo and we can just use the headers from a "real" FFmpeg repo?\r\n> I was thinking the headers were generated somewhat with FFmpeg\'s custom build system, but maybe not?\r\n\r\nTaking a look at FFmpeg\'s repo (https://code.ffmpeg.org/FFmpeg/FFmpeg), it does look like the headers follow the same directory structure as here, but of course the repo is much larger. It would make it less work to update in the future though.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'repository_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/events', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'id': 6054161326, 'node_id': 'PR_kwDOHFjEXc8AAAABK8pqqg', 'number': 2, 'title': 'Remove binaries and update headers.', '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-27T06:30:42Z', 'updated_at': '2026-10-27T20:38:53Z', '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/ext-win-ffmpeg/pulls/2', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'diff_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.diff', 'patch_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.patch', 'merged_at': None}, 'body': 'In preparation for Dolphin dynamically linking with FFmpeg on Windows.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/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/ext-win-ffmpeg/issues/2/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452999960', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452999960', 'issue_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'id': 6452999960, 'node_id': 'IC_kwDOHFjEXc8AAAABgKD3GA', '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-27T20:38:53Z', 'updated_at': '2026-10-27T20:38:53Z', 'body': '> Alternatively, maybe we don\'t need this repo and we can just use the headers from a "real" FFmpeg repo?\r\n> I was thinking the headers were generated somewhat with FFmpeg\'s custom build system, but maybe not?\r\n\r\nTaking a look at FFmpeg\'s repo (https://code.ffmpeg.org/FFmpeg/FFmpeg), it does look like the headers follow the same directory structure as here, but of course the repo is much larger. It would make it less work to update in the future though.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452999960/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': 475579485, 'node_id': 'R_kgDOHFjEXQ', 'name': 'ext-win-ffmpeg', 'full_name': 'dolphin-emu/ext-win-ffmpeg', '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/ext-win-ffmpeg', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/deployments', 'created_at': '2022-03-29T18:55:40Z', 'updated_at': '2024-02-11T02:07:54Z', 'pushed_at': '2022-03-29T18:58:38Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-ffmpeg.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-ffmpeg.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg', 'homepage': None, 'size': 12027, 'stargazers_count': 3, 'watchers_count': 3, 'language': 'C', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 3, '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-27T20:31:25.723551	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-ffmpeg', 'author': 'jordan-woyak', 'action': 'edited', 'id': 2, 'title': 'Remove binaries and update headers.', 'url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452659329', 'safe_author': True, 'body': '> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. The includes previously weren\'t identical for some reason.\r\n\r\nEdit:\r\nAlternatively, maybe we don\'t need this repo and we can just use the headers from a "real" FFmpeg repo?\r\nI was thinking the headers were generated somewhat with FFmpeg\'s custom build system, but maybe not?', 'raw': {'action': 'edited', 'changes': {'body': {'from': "> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. The includes previously weren't identical for some reason."}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'repository_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/events', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'id': 6054161326, 'node_id': 'PR_kwDOHFjEXc8AAAABK8pqqg', 'number': 2, 'title': 'Remove binaries and update headers.', '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': 2, 'created_at': '2026-10-27T06:30:42Z', 'updated_at': '2026-10-27T20:24:51Z', '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/ext-win-ffmpeg/pulls/2', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'diff_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.diff', 'patch_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.patch', 'merged_at': None}, 'body': 'In preparation for Dolphin dynamically linking with FFmpeg on Windows.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/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/ext-win-ffmpeg/issues/2/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452659329', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452659329', 'issue_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'id': 6452659329, 'node_id': 'IC_kwDOHFjEXc8AAAABgJvEgQ', '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-27T20:22:30Z', 'updated_at': '2026-10-27T20:31:24Z', 'body': '> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. The includes previously weren\'t identical for some reason.\r\n\r\nEdit:\r\nAlternatively, maybe we don\'t need this repo and we can just use the headers from a "real" FFmpeg repo?\r\nI was thinking the headers were generated somewhat with FFmpeg\'s custom build system, but maybe not?', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452659329/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': 475579485, 'node_id': 'R_kgDOHFjEXQ', 'name': 'ext-win-ffmpeg', 'full_name': 'dolphin-emu/ext-win-ffmpeg', '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/ext-win-ffmpeg', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/deployments', 'created_at': '2022-03-29T18:55:40Z', 'updated_at': '2024-02-11T02:07:54Z', 'pushed_at': '2022-03-29T18:58:38Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-ffmpeg.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-ffmpeg.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg', 'homepage': None, 'size': 12027, 'stargazers_count': 3, 'watchers_count': 3, 'language': 'C', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 3, '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-27T20:24:53.164725	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-ffmpeg', 'author': 'jordan-woyak', 'action': 'edited', 'id': 2, 'title': 'Remove binaries and update headers.', 'url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452659329', 'safe_author': True, 'body': "> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. The includes previously weren't identical for some reason.", 'raw': {'action': 'edited', 'changes': {'body': {'from': "> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. They previously weren't identical for some reason."}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'repository_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/events', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'id': 6054161326, 'node_id': 'PR_kwDOHFjEXc8AAAABK8pqqg', 'number': 2, 'title': 'Remove binaries and update headers.', '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': 2, 'created_at': '2026-10-27T06:30:42Z', 'updated_at': '2026-10-27T20:22:30Z', '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/ext-win-ffmpeg/pulls/2', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'diff_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.diff', 'patch_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.patch', 'merged_at': None}, 'body': 'In preparation for Dolphin dynamically linking with FFmpeg on Windows.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/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/ext-win-ffmpeg/issues/2/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452659329', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452659329', 'issue_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'id': 6452659329, 'node_id': 'IC_kwDOHFjEXc8AAAABgJvEgQ', '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-27T20:22:30Z', 'updated_at': '2026-10-27T20:24:51Z', 'body': "> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. The includes previously weren't identical for some reason.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452659329/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': 475579485, 'node_id': 'R_kgDOHFjEXQ', 'name': 'ext-win-ffmpeg', 'full_name': 'dolphin-emu/ext-win-ffmpeg', '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/ext-win-ffmpeg', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/deployments', 'created_at': '2022-03-29T18:55:40Z', 'updated_at': '2024-02-11T02:07:54Z', 'pushed_at': '2022-03-29T18:58:38Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-ffmpeg.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-ffmpeg.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg', 'homepage': None, 'size': 12027, 'stargazers_count': 3, 'watchers_count': 3, 'language': 'C', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 3, '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-27T20:22:32.670477	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-ffmpeg', 'author': 'jordan-woyak', 'action': 'created', 'id': 2, 'title': 'Remove binaries and update headers.', 'url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452659329', 'safe_author': True, 'body': "> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. They previously weren't identical for some reason.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'repository_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/events', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'id': 6054161326, 'node_id': 'PR_kwDOHFjEXc8AAAABK8pqqg', 'number': 2, 'title': 'Remove binaries and update headers.', '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': 2, 'created_at': '2026-10-27T06:30:42Z', 'updated_at': '2026-10-27T20:22:30Z', '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/ext-win-ffmpeg/pulls/2', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'diff_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.diff', 'patch_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.patch', 'merged_at': None}, 'body': 'In preparation for Dolphin dynamically linking with FFmpeg on Windows.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/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/ext-win-ffmpeg/issues/2/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452659329', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452659329', 'issue_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'id': 6452659329, 'node_id': 'IC_kwDOHFjEXc8AAAABgJvEgQ', '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-27T20:22:30Z', 'updated_at': '2026-10-27T20:22:30Z', 'body': "> The ARM64 and x64 directories appear identical when I run `diff` between the two\r\n\r\nOkie, I suppose I can combine them. They previously weren't identical for some reason.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452659329/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': 475579485, 'node_id': 'R_kgDOHFjEXQ', 'name': 'ext-win-ffmpeg', 'full_name': 'dolphin-emu/ext-win-ffmpeg', '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/ext-win-ffmpeg', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/deployments', 'created_at': '2022-03-29T18:55:40Z', 'updated_at': '2024-02-11T02:07:54Z', 'pushed_at': '2022-03-29T18:58:38Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-ffmpeg.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-ffmpeg.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg', 'homepage': None, 'size': 12027, 'stargazers_count': 3, 'watchers_count': 3, 'language': 'C', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 3, '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-27T20:19:58.634543	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-ffmpeg', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 2, 'title': 'Remove binaries and update headers.', 'url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452608463', 'safe_author': True, 'body': 'The ARM64 and x64 directories appear identical when I run `diff` between the two', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'repository_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/events', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'id': 6054161326, 'node_id': 'PR_kwDOHFjEXc8AAAABK8pqqg', 'number': 2, 'title': 'Remove binaries and update headers.', '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': 1, 'created_at': '2026-10-27T06:30:42Z', 'updated_at': '2026-10-27T20:19:56Z', '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/ext-win-ffmpeg/pulls/2', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'diff_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.diff', 'patch_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2.patch', 'merged_at': None}, 'body': 'In preparation for Dolphin dynamically linking with FFmpeg on Windows.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2/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/ext-win-ffmpeg/issues/2/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452608463', 'html_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2#issuecomment-6452608463', 'issue_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/2', 'id': 6452608463, 'node_id': 'IC_kwDOHFjEXc8AAAABgJr9zw', '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-27T20:19:55Z', 'updated_at': '2026-10-27T20:19:55Z', 'body': 'The ARM64 and x64 directories appear identical when I run `diff` between the two', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments/6452608463/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': 475579485, 'node_id': 'R_kgDOHFjEXQ', 'name': 'ext-win-ffmpeg', 'full_name': 'dolphin-emu/ext-win-ffmpeg', '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/ext-win-ffmpeg', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-ffmpeg/deployments', 'created_at': '2022-03-29T18:55:40Z', 'updated_at': '2024-02-11T02:07:54Z', 'pushed_at': '2022-03-29T18:58:38Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-ffmpeg.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-ffmpeg.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-ffmpeg', 'homepage': None, 'size': 12027, 'stargazers_count': 3, 'watchers_count': 3, 'language': 'C', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 5, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 2, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 5, 'open_issues': 2, 'watchers': 3, '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-27T13:21:27.417379	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14953, 'title': 'JitCache: Misc optimizations and cleanup', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6442947325', 'safe_author': True, 'body': '> On the topic of `std::views::chunk_by`, what GCC version is the AppImage builder using?\r\n\r\nThe configuration step reports 12.2.0', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'id': 6029698044, 'node_id': 'PR_kwDOALCn2M8AAAABKo-b1g', 'number': 14953, 'title': 'JitCache: Misc optimizations and cleanup', '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': 6, 'created_at': '2026-10-25T21:45:25Z', 'updated_at': '2026-10-27T13:21:24Z', '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/14953', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.patch', 'merged_at': None}, 'body': 'It\'s more cleanups than optimizations since the block cache isn\'t the biggest bottleneck in the codegen performance, but it still does have an impact.\r\n\r\nBefore:\r\n<img width="1479" height="882" alt="JIT_data_oriented" src="https://github.com/user-attachments/assets/11528ba6-bb9b-45d5-96b6-acf0e3f661a3" />\r\n\r\nAfter:\r\n<img width="1479" height="882" alt="JIT_after_block_cache_opts" src="https://github.com/user-attachments/assets/4a6446e4-0565-4be4-ba5f-8a8627d639db" />\r\n\r\n<super><sub>Comparison screenshots include `#14806`. They were also made in the original version of the PR, where RangeSet uses `std::flat_map`.</sub></super>\r\n\r\nARM is untested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/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/14953/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6442947325', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6442947325', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'id': 6442947325, 'node_id': 'IC_kwDOALCn2M8AAAABgAeS_Q', '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-27T13:21:24Z', 'updated_at': '2026-10-27T13:21:24Z', 'body': '> On the topic of `std::views::chunk_by`, what GCC version is the AppImage builder using?\r\n\r\nThe configuration step reports 12.2.0', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6442947325/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-27T12:06:40Z', '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': 15725, 'watchers_count': 15725, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3355, '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': 3355, 'open_issues': 484, 'watchers': 15725, '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-27T13:18:14.963418	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'SuperSamus', 'action': 'created', 'id': 14953, 'title': 'JitCache: Misc optimizations and cleanup', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6442880520', 'safe_author': True, 'body': "> You could create a `FlatMapWhenAvailable` alias template that falls back to `std::map` on older targets.\r\n\r\nProblem:\r\n\r\nhttps://github.com/dolphin-emu/dolphin/pull/14953/changes#diff-eefc4e808bdb93c16f95ab2f44c7a8c9ab55900dcff43444aa7f436e8286b33aR196-R199\r\n\r\nI don't want this to be messier than it needs to be.\r\n\r\nOn the other hand, I have problems with how `std::flat_map` is implemented. The sfl-library (#14852) has a better implementation, but it still doesn't satisfy all my whims.\r\n<super><sub>Seriously, how is there *nothing* that implements a map using a single allocation while also keeping the key and value as separate spans (instead of a pair)?</sub></super>\r\nMaybe I should make my own library...\r\n\r\nOn the topic of `std::views::chunk_by`, what GCC version is the AppImage builder using?\r\n\r\nAnyway, this PR isn't urgent.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'id': 6029698044, 'node_id': 'PR_kwDOALCn2M8AAAABKo-b1g', 'number': 14953, 'title': 'JitCache: Misc optimizations and cleanup', '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-10-25T21:45:25Z', 'updated_at': '2026-10-27T13:18:13Z', '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/14953', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.patch', 'merged_at': None}, 'body': 'It\'s more cleanups than optimizations since the block cache isn\'t the biggest bottleneck in the codegen performance, but it still does have an impact.\r\n\r\nBefore:\r\n<img width="1479" height="882" alt="JIT_data_oriented" src="https://github.com/user-attachments/assets/11528ba6-bb9b-45d5-96b6-acf0e3f661a3" />\r\n\r\nAfter:\r\n<img width="1479" height="882" alt="JIT_after_block_cache_opts" src="https://github.com/user-attachments/assets/4a6446e4-0565-4be4-ba5f-8a8627d639db" />\r\n\r\n<super><sub>Comparison screenshots include `#14806`. They were also made in the original version of the PR, where RangeSet uses `std::flat_map`.</sub></super>\r\n\r\nARM is untested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/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/14953/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6442880520', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6442880520', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'id': 6442880520, 'node_id': 'IC_kwDOALCn2M8AAAABgAaOCA', '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-27T13:18:13Z', 'updated_at': '2026-10-27T13:18:13Z', 'body': "> You could create a `FlatMapWhenAvailable` alias template that falls back to `std::map` on older targets.\r\n\r\nProblem:\r\n\r\nhttps://github.com/dolphin-emu/dolphin/pull/14953/changes#diff-eefc4e808bdb93c16f95ab2f44c7a8c9ab55900dcff43444aa7f436e8286b33aR196-R199\r\n\r\nI don't want this to be messier than it needs to be.\r\n\r\nOn the other hand, I have problems with how `std::flat_map` is implemented. The sfl-library (#14852) has a better implementation, but it still doesn't satisfy all my whims.\r\n<super><sub>Seriously, how is there *nothing* that implements a map using a single allocation while also keeping the key and value as separate spans (instead of a pair)?</sub></super>\r\nMaybe I should make my own library...\r\n\r\nOn the topic of `std::views::chunk_by`, what GCC version is the AppImage builder using?\r\n\r\nAnyway, this PR isn't urgent.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6442880520/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-27T12:06:40Z', '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': 15725, 'watchers_count': 15725, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3355, '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': 3355, 'open_issues': 484, 'watchers': 15725, '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-27T12:05:46.097570	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14783, 'title': 'Remove unused includes', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783#issuecomment-6441445758', 'safe_author': True, 'body': 'Please don\'t remove includes solely because "it compiles fine without them on my machine." An include is considered unused when we don\'t use anything from the corresponding header, not simply because removing it doesn\'t break the build. Relying on transitive includes can cause issues across different build environments (and has.)', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14783', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14783/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14783/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14783/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783', 'id': 5039143901, 'node_id': 'PR_kwDOALCn2M75es3u', 'number': 14783, 'title': 'Remove unused includes', '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}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 4, 'created_at': '2026-08-01T21:36:01Z', 'updated_at': '2026-10-27T12:05:43Z', '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/14783', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14783.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14783.patch', 'merged_at': None}, 'body': None, 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14783/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/14783/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6441445758', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783#issuecomment-6441445758', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14783', 'id': 6441445758, 'node_id': 'IC_kwDOALCn2M8AAAABf_Cpfg', '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-27T12:05:43Z', 'updated_at': '2026-10-27T12:05:43Z', 'body': 'Please don\'t remove includes solely because "it compiles fine without them on my machine." An include is considered unused when we don\'t use anything from the corresponding header, not simply because removing it doesn\'t break the build. Relying on transitive includes can cause issues across different build environments (and has.)', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6441445758/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-27T09:02:14Z', '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': 15724, 'watchers_count': 15724, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3354, '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': 3354, 'open_issues': 484, 'watchers': 15724, '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-27T07:40:05.184767	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'edited', 'id': 14322, 'title': 'IOS/USB: Add "Connect USB Keyboard" support for HID', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14322#issuecomment-6389829515', 'safe_author': True, 'body': "I'd like to confirm some of the behaviours I'm unsure of, before proceeding further. So I'm switching this PR back to draft and I'm going to write some hardware tests.\r\n\r\n**EDIT:** Got some more missing commands from libogc/libogc2 usbkeyboard/basic_stdin example:\r\n```\r\n35:50:758 Core\\IOS\\USB\\Emulated\\HIDKeyboard.cpp:223 W[IOS_USB]: Unknown command, req=08, type=80\r\n35:50:766 Core\\IOS\\USB\\Emulated\\HIDKeyboard.cpp:223 W[IOS_USB]: Unknown command, req=09, type=00\r\n35:50:777 Core\\IOS\\USB\\Emulated\\HIDKeyboard.cpp:223 W[IOS_USB]: Unknown command, req=03, type=a1\r\n```\r\nPlus, pressed keys are registered twice, so there might be something wrong on my implementation.", 'raw': {'action': 'edited', 'changes': {'body': {'from': "I'd like to confirm some of the behaviours I'm unsure of, before proceeding further. So I'm switching this PR back to draft and I'm going to write some hardware tests."}}, 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14322', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14322/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14322/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14322/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14322', 'id': 3900738846, 'node_id': 'PR_kwDOALCn2M7Brwdv', 'number': 14322, 'title': 'IOS/USB: Add "Connect USB Keyboard" support for HID', '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': [{'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': 5, 'created_at': '2026-02-05T10:06:11Z', 'updated_at': '2026-10-24T21:35:59Z', 'closed_at': None, 'assignee': None, 'author_association': 'CONTRIBUTOR', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': True, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14322', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14322', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14322.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14322.patch', 'merged_at': None}, 'body': "A split version of https://github.com/dolphin-emu/dolphin/pull/13708, based on https://github.com/dolphin-emu/dolphin/pull/14321.\r\n\r\nThis enables keyboard emulation to work with HID games like Dragon Quest X, Monster Hunter G, and Monster Hunter Tri.\r\n![image](https://github.com/user-attachments/assets/71517a2f-f3ec-480f-a935-d07385712283)\r\n\r\nThe supported OSes are based on `Common::KeyboardContext` actual support _(currently Windows only)_. Supporting new OSes won't necessitate changes to this PR as this will be entirely handled by the KeyboardContext class.\r\n\r\nReady to be reviewed and merged.", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14322/reactions', 'total_count': 1, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 1, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'timeline_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14322/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6389829515', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14322#issuecomment-6389829515', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14322', 'id': 6389829515, 'node_id': 'IC_kwDOALCn2M8AAAABfN0Piw', '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-24T21:35:59Z', 'updated_at': '2026-10-27T07:40:03Z', 'body': "I'd like to confirm some of the behaviours I'm unsure of, before proceeding further. So I'm switching this PR back to draft and I'm going to write some hardware tests.\r\n\r\n**EDIT:** Got some more missing commands from libogc/libogc2 usbkeyboard/basic_stdin example:\r\n```\r\n35:50:758 Core\\IOS\\USB\\Emulated\\HIDKeyboard.cpp:223 W[IOS_USB]: Unknown command, req=08, type=80\r\n35:50:766 Core\\IOS\\USB\\Emulated\\HIDKeyboard.cpp:223 W[IOS_USB]: Unknown command, req=09, type=00\r\n35:50:777 Core\\IOS\\USB\\Emulated\\HIDKeyboard.cpp:223 W[IOS_USB]: Unknown command, req=03, type=a1\r\n```\r\nPlus, pressed keys are registered twice, so there might be something wrong on my implementation.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6389829515/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-27T03:34:40Z', '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': 15723, 'watchers_count': 15723, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, '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': 3353, 'open_issues': 484, 'watchers': 15723, '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-27T07:07:48.102442	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'sepalani', 'action': 'created', 'id': 14669, 'title': 'GameSettings: Add Taiko no Tatsujin Wii', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14669#issuecomment-6435925992', 'safe_author': True, 'body': "> This fixes the [black screen issue](https://bugs.dolphin-emu.org/issues/14005) (unsure if it's MacOS-specific).\r\n\r\nAre other Taiko games affected (e.g Taiko no Tatsujin: Chougoukaban)?\r\n\r\nI don't have the original Taiko no Tatsujin Wii but I do have the Chougoukaban one which has a similar player mode selection screen. That said, I'm on Windows and don't have this black screen issue with this game.\r\n\r\nI tested it against Intel Arc and Nvidia RTX4070 Laptop GPUs with the D3D, Vulkan and OpenGL backends.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14669', 'id': 4559022680, 'node_id': 'PR_kwDOALCn2M7hKDmi', 'number': 14669, 'title': 'GameSettings: Add Taiko no Tatsujin Wii', 'user': {'login': 'olipra', 'id': 109831019, 'node_id': 'U_kgDOBovjaw', 'avatar_url': 'https://avatars.githubusercontent.com/u/109831019?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/olipra', 'html_url': 'https://github.com/olipra', 'followers_url': 'https://api.github.com/users/olipra/followers', 'following_url': 'https://api.github.com/users/olipra/following{/other_user}', 'gists_url': 'https://api.github.com/users/olipra/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/olipra/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/olipra/subscriptions', 'organizations_url': 'https://api.github.com/users/olipra/orgs', 'repos_url': 'https://api.github.com/users/olipra/repos', 'events_url': 'https://api.github.com/users/olipra/events{/privacy}', 'received_events_url': 'https://api.github.com/users/olipra/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-05-31T21:10:35Z', 'updated_at': '2026-10-27T07:07:45Z', '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/14669', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14669', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14669.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14669.patch', 'merged_at': None}, 'body': "This fixes the [black screen issue](https://bugs.dolphin-emu.org/issues/14005) (unsure if it's MacOS-specific).", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/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/14669/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6435925992', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14669#issuecomment-6435925992', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669', 'id': 6435925992, 'node_id': 'IC_kwDOALCn2M8AAAABf5xv6A', '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-27T07:07:45Z', 'updated_at': '2026-10-27T07:07:45Z', 'body': "> This fixes the [black screen issue](https://bugs.dolphin-emu.org/issues/14005) (unsure if it's MacOS-specific).\r\n\r\nAre other Taiko games affected (e.g Taiko no Tatsujin: Chougoukaban)?\r\n\r\nI don't have the original Taiko no Tatsujin Wii but I do have the Chougoukaban one which has a similar player mode selection screen. That said, I'm on Windows and don't have this black screen issue with this game.\r\n\r\nI tested it against Intel Arc and Nvidia RTX4070 Laptop GPUs with the D3D, Vulkan and OpenGL backends.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6435925992/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-27T03:34:40Z', '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': 15723, 'watchers_count': 15723, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, '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': 3353, 'open_issues': 484, 'watchers': 15723, '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-27T00:36:10.182303	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14669, 'title': 'GameSettings: Add Taiko no Tatsujin Wii', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14669#issuecomment-6430746636', 'safe_author': True, 'body': 'I do not experience the black screen in this game with `Fast Depth Calculation` in OpenGL or Vulkan.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14669', 'id': 4559022680, 'node_id': 'PR_kwDOALCn2M7hKDmi', 'number': 14669, 'title': 'GameSettings: Add Taiko no Tatsujin Wii', 'user': {'login': 'olipra', 'id': 109831019, 'node_id': 'U_kgDOBovjaw', 'avatar_url': 'https://avatars.githubusercontent.com/u/109831019?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/olipra', 'html_url': 'https://github.com/olipra', 'followers_url': 'https://api.github.com/users/olipra/followers', 'following_url': 'https://api.github.com/users/olipra/following{/other_user}', 'gists_url': 'https://api.github.com/users/olipra/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/olipra/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/olipra/subscriptions', 'organizations_url': 'https://api.github.com/users/olipra/orgs', 'repos_url': 'https://api.github.com/users/olipra/repos', 'events_url': 'https://api.github.com/users/olipra/events{/privacy}', 'received_events_url': 'https://api.github.com/users/olipra/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'open', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 2, 'created_at': '2026-05-31T21:10:35Z', 'updated_at': '2026-10-27T00:36:08Z', '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/14669', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14669', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14669.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14669.patch', 'merged_at': None}, 'body': "This fixes the [black screen issue](https://bugs.dolphin-emu.org/issues/14005) (unsure if it's MacOS-specific).", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669/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/14669/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6430746636', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14669#issuecomment-6430746636', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14669', 'id': 6430746636, 'node_id': 'IC_kwDOALCn2M8AAAABf01oDA', '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-27T00:36:08Z', 'updated_at': '2026-10-27T00:36:08Z', 'body': 'I do not experience the black screen in this game with `Fast Depth Calculation` in OpenGL or Vulkan.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6430746636/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-26T23:31:22Z', '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': 15721, 'watchers_count': 15721, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 483, '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': 3353, 'open_issues': 483, 'watchers': 15721, '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-26T23:58:04.088237	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'created', 'id': 14953, 'title': 'JitCache: Misc optimizations and cleanup', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6430203274', 'safe_author': True, 'body': "> `std::flat_map` is supported since GCC 15 and Clang 20. What should I do about that? Should I wait for the builders to use newer versions?\r\n\r\nFyi, we currently target GCC 12/Clang 18 as per\r\nhttps://github.com/dolphin-emu/dolphin/blob/3eb30c7620b4475b2e0404228ba0d2b238a132f1/CMakeLists.txt#L52-L63\r\n\r\nThis is also a problem for `std::views::chunk_by` which is supported since libstdc++13. I personally don't mind bumping the requirements, but Debian trixie has GCC 14 which is probably going to be a blocker for anything above that", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'id': 6029698044, 'node_id': 'PR_kwDOALCn2M8AAAABKo-b1g', 'number': 14953, 'title': 'JitCache: Misc optimizations and cleanup', '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-10-25T21:45:25Z', 'updated_at': '2026-10-26T23:58:02Z', '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/14953', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.patch', 'merged_at': None}, 'body': 'It\'s more cleanups than optimizations since the block cache isn\'t the biggest bottleneck in the codegen performance, but it still does have an impact.\r\n\r\nBefore:\r\n<img width="1479" height="882" alt="JIT_data_oriented" src="https://github.com/user-attachments/assets/11528ba6-bb9b-45d5-96b6-acf0e3f661a3" />\r\n\r\nAfter:\r\n<img width="1479" height="882" alt="JIT_after_block_cache_opts" src="https://github.com/user-attachments/assets/4a6446e4-0565-4be4-ba5f-8a8627d639db" />\r\n\r\n<super><sub>Comparison screenshots include `#14806`. They were also made in the original version of the PR, where RangeSet uses `std::flat_map`.</sub></super>\r\n\r\nARM is untested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/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/14953/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6430203274', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6430203274', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'id': 6430203274, 'node_id': 'IC_kwDOALCn2M8AAAABf0Udig', '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-26T23:58:01Z', 'updated_at': '2026-10-26T23:58:01Z', 'body': "> `std::flat_map` is supported since GCC 15 and Clang 20. What should I do about that? Should I wait for the builders to use newer versions?\r\n\r\nFyi, we currently target GCC 12/Clang 18 as per\r\nhttps://github.com/dolphin-emu/dolphin/blob/3eb30c7620b4475b2e0404228ba0d2b238a132f1/CMakeLists.txt#L52-L63\r\n\r\nThis is also a problem for `std::views::chunk_by` which is supported since libstdc++13. I personally don't mind bumping the requirements, but Debian trixie has GCC 14 which is probably going to be a blocker for anything above that", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6430203274/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-26T23:31:22Z', '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': 15721, 'watchers_count': 15721, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 483, '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': 3353, 'open_issues': 483, 'watchers': 15721, '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-26T23:50:32.635077	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14953, 'title': 'JitCache: Misc optimizations and cleanup', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6430099118', 'safe_author': True, 'body': '> `std::flat_map` is supported since GCC 15 and Clang 20. What should I do about that? Should I wait for the builders to use newer versions?\r\n\r\nYou could create a `FlatMapWhenAvailable` alias template that falls back to `std::map` on older targets.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'id': 6029698044, 'node_id': 'PR_kwDOALCn2M8AAAABKo-b1g', 'number': 14953, 'title': 'JitCache: Misc optimizations and cleanup', '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': 3, 'created_at': '2026-10-25T21:45:25Z', 'updated_at': '2026-10-26T23:50: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/14953', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.patch', 'merged_at': None}, 'body': 'It\'s more cleanups than optimizations since the block cache isn\'t the biggest bottleneck in the codegen performance, but it still does have an impact.\r\n\r\nBefore:\r\n<img width="1479" height="882" alt="JIT_data_oriented" src="https://github.com/user-attachments/assets/11528ba6-bb9b-45d5-96b6-acf0e3f661a3" />\r\n\r\nAfter:\r\n<img width="1479" height="882" alt="JIT_after_block_cache_opts" src="https://github.com/user-attachments/assets/4a6446e4-0565-4be4-ba5f-8a8627d639db" />\r\n\r\n<super><sub>Comparison screenshots include `#14806`. They were also made in the original version of the PR, where RangeSet uses `std::flat_map`.</sub></super>\r\n\r\nARM is untested.', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/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/14953/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6430099118', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6430099118', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'id': 6430099118, 'node_id': 'IC_kwDOALCn2M8AAAABf0OGrg', '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-26T23:50:30Z', 'updated_at': '2026-10-26T23:50:30Z', 'body': '> `std::flat_map` is supported since GCC 15 and Clang 20. What should I do about that? Should I wait for the builders to use newer versions?\r\n\r\nYou could create a `FlatMapWhenAvailable` alias template that falls back to `std::map` on older targets.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6430099118/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-26T23:31:22Z', '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': 15721, 'watchers_count': 15721, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 483, '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': 3353, 'open_issues': 483, 'watchers': 15721, '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-26T17:49:44.695855	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14866, 'title': 'VideoCommon: Option for byte to memset in RAM when `EFBToTextureEnable = True`', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14866#issuecomment-6423322459', 'safe_author': True, 'body': "I feel like this is one of the less important settings to save, but I don't have a strong opinion on it, so you can keep it as it currently is in this PR if you'd like. Eventually I would like to completely replace the format so we're no longer stuck with this fixed-length binary format header.", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14866', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14866/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14866/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14866/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14866', 'id': 5450486505, 'node_id': 'PR_kwDOALCn2M8AAAABDdmL8Q', 'number': 14866, 'title': 'VideoCommon: Option for byte to memset in RAM when `EFBToTextureEnable = True`', '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-14T14:15:30Z', 'updated_at': '2026-10-26T17:49:42Z', '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/14866', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14866', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14866.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14866.patch', 'merged_at': None}, 'body': 'The main use case is for games that in theory should be compatible with `EFBToTextureEnable = True`, as the CPU never reads the EFB texture and only writes to it completely.\r\nHowever, if what the CPU writes is only zeros, if the texture in RAM was already zeros then Dolphin wouldn\'t notice the change in RAM and thus wouldn\'t invalidate the texture in VRAM.\r\nThis happens in Rhythm Heaven Fever, and with this change it doesn\'t require `EFBToTextureEnable = False` anymore.\r\n\r\nBut there are other use cases, like setting a clear value that is closer to what the EFB copy would be, like in Excite Truck. (`EFBToTextureEnable` is still `False` by default.)\r\n\r\nClear 0x00             |  Clear 0xFF | EFB2RAM\r\n:-------------------------:|:-------------------------:|:-------------------------:\r\n <img width="2407" height="1344" alt="ExciteTruckClear0" src="https://github.com/user-attachments/assets/f543376e-5356-469f-9226-6f017f228e1e" /> | <img width="2407" height="1344" alt="ExciteTruckClear255" src="https://github.com/user-attachments/assets/06a10ce6-725c-47d8-ae1f-e15aa1bd6f3b" />  |  <img width="2407" height="1344" alt="ExciteTruckEFB2RAM" src="https://github.com/user-attachments/assets/3b2b729b-710c-4ad7-99ec-e8e703935062" />\r\n\r\n(Note: because of the lack of #14648, currently in multiplayer the shadow texture isn\'t used from VRAM, so with this change, with `EFBToTextureEnable = True` everything in multiplayer will be as if in shadow.)\r\n\r\nOther games are more subjective (and not changed here): for instance Mario Kart Wii samples the EFB copy to decide whether to display a sun flare.\r\nCurrently with `EFBToTextureEnable = True` (default) it will never be shown, but maybe someone would prefer for the flare to always be shown, even behind walls.\r\n\r\nThe option currently only supports setting a single byte (that will be memset to the entire texture), as setting a color would be more complex given that a texture can be in multiple formats, and there is no use case (yet) for it.\r\n(Maybe it could be a bool, memsetting either 0x00 or 0xFF?)', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14866/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/14866/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6423322459', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14866#issuecomment-6423322459', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14866', 'id': 6423322459, 'node_id': 'IC_kwDOALCn2M8AAAABftwfWw', '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-26T17:49:42Z', 'updated_at': '2026-10-26T17:49:42Z', 'body': "I feel like this is one of the less important settings to save, but I don't have a strong opinion on it, so you can keep it as it currently is in this PR if you'd like. Eventually I would like to completely replace the format so we're no longer stuck with this fixed-length binary format header.", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6423322459/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-26T16:13:02Z', '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': 15720, 'watchers_count': 15720, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 481, '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': 3353, 'open_issues': 481, 'watchers': 15720, '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-26T17:01:24.277600	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14954, 'title': 'Jit: Add PPC64LE backend', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14954#issuecomment-6422203611', 'safe_author': True, 'body': "I'm closing this for several reasons. The second and third ones can be discussed, but just the first one alone means we cannot accept this PR.\r\n\r\n* We don't allow any AI use in this part of the code base\r\n* We can't accept such a large amount of code in a single pull request\r\n* The ratio of benefit versus maintenance burden is rather questionable", 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14954', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14954/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14954/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14954/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14954', 'id': 6032521100, 'node_id': 'PR_kwDOALCn2M8AAAABKrNDhQ', 'number': 14954, 'title': 'Jit: Add PPC64LE backend', 'user': {'login': 'runlevel5', 'id': 135605, 'node_id': 'MDQ6VXNlcjEzNTYwNQ==', 'avatar_url': 'https://avatars.githubusercontent.com/u/135605?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/runlevel5', 'html_url': 'https://github.com/runlevel5', 'followers_url': 'https://api.github.com/users/runlevel5/followers', 'following_url': 'https://api.github.com/users/runlevel5/following{/other_user}', 'gists_url': 'https://api.github.com/users/runlevel5/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/runlevel5/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/runlevel5/subscriptions', 'organizations_url': 'https://api.github.com/users/runlevel5/orgs', 'repos_url': 'https://api.github.com/users/runlevel5/repos', 'events_url': 'https://api.github.com/users/runlevel5/events{/privacy}', 'received_events_url': 'https://api.github.com/users/runlevel5/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'labels': [], 'state': 'closed', 'locked': False, 'assignees': [], 'milestone': None, 'comments': 3, 'created_at': '2026-10-26T03:01:35Z', 'updated_at': '2026-10-26T17:01:21Z', 'closed_at': '2026-10-26T17:01:20Z', 'assignee': None, 'author_association': 'NONE', 'issue_field_values': [], 'type': None, 'active_lock_reason': None, 'draft': True, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14954', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14954', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14954.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14954.patch', 'merged_at': None}, 'body': "## Changes\n\n- ppc64le host support: a PPC64 emitter and disassembler, and the host rounding mode.\n- JitPPC64, the default CPU core on ppc64. It compiles every instruction that Jit64 or JitArm64 compiles, with register caching, fastmem, MMU support with an inline data TLB lookup, and a 128 MiB code space.\n- Page table translations that MemoryManager keeps for the JIT's slow accesses to look up: for the pages that 64 KiB host pages keep out of fastmem, and the accesses that faulted before a page was mapped.\n- POWER9 and Power10 instructions where the host has them. In theory POWER8 is also supported though untested because of lacking hardware\n- Paired-single arithmetic and quantized integer pairs on both halves at once with VSX.\n- The downcount in a host register, CR fields in the register cache, and guest returns predicted with a host stack, as the other JITs do.\n- A vertex loader, a vpmsumd texture hash and VSX XFB decoding for ppc64.\n- Interpreter: fix the carry of addme and subfme, and FPSCR[FPCC] after compares, which kept the bits that were set before.\n- cputest and a fuzzer (Tools/ppc64-jit-tests), which compare the JIT with the interpreter, and unit tests for the emitter and the JIT's routines.\n\n## Testing\n\nDolphin's CI has no ppc64le runners, so these are run by hand on POWER9 (bare metal) and Power10 (KVM) hosts:\n\n- **cputest** (`Tools/ppc64-jit-tests`) runs every instruction the JIT compiles on random and edge-case inputs, on the interpreter and on the JIT, and compares the results. It runs at each Power ISA level the host has (`DOLPHIN_PPC64_ISA=2.07`, `3.0`, `3.1`), with and without fastmem, in MMU mode, with FPRF, and with tiny code chunks to stress block linking.\n- **The fuzzer** (`fuzz.c`, `fuzz.py`) generates random programs and runs each on both cores. It covers integer, CR, floating-point and paired-single instructions, every form of load and store, string and cache instructions, and branches. It also raises exceptions: traps, system calls, and DSIs from paged memory in MMU mode. When a program differs, it is reduced to the fewest instructions that still differ. About 5 million programs have run on Power10 at ISA 2.07, 3.0 and 3.1.\n- The unit tests, and Luigi's Mansion's frames compared with the cached interpreter's.\n\n## FAQ\n\n### Q1. Will you be upstreaming this backend?\n\nI hope so however I think it might be rejected. I am afraid that the dolphin authors are lacking of hardware so it is unreasonable to push the maintenance burden on the team. Having said that if the upstream team is willing to accept this work, I am more than happy to contribute to the project with maintenance work.\n\nEven if the PR is rejected, I hope the team would leave it open so that PowerPC community can still access the source codes and adopt it downstream.\n\n### Q2. Will this work on Linux PPC64BE (Big Endian)?\n\nNo. BE is dead. In theory I could get the backend work with BE easily however the problem lies in the graphic stacks, GPU driver support for BE is horrible. Plus all major Linux distributions have dropped support for PPC64BE.\n\n### Q3. Will this work on PowerMac G5?\n\nNo. G5 is running PPC 970 CPU which is pre-VSX (POWER7 or newer). In theory I could get the backend ported but I do not have the hardware to test. Plus the graphic cards that PowerMac G5 supports are so out of date and under-powered, in theory they could still work but I doubt the performance would be as good as modern GPU.\n\n### Q4. What pagesize does it support?\n\nTested with 64k pagesize. But it should work with 4k pagesize too.\n\n### Q5. How correct is the implementation?\n\nIt is 100% on par with x86_64 and ARM64 backend in term of correctness. I did not intend to fix quirky behavior of x86_64 so those quirks would get carried over to PPC64LE JIT backend too. I also refrain from making changes to shared codes (even if it helps improve the performance of some games) because of better compatibility with upstream.\n\n", 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14954/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/14954/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6422203611', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14954#issuecomment-6422203611', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14954', 'id': 6422203611, 'node_id': 'IC_kwDOALCn2M8AAAABfssM2w', '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-26T17:01:20Z', 'updated_at': '2026-10-26T17:01:20Z', 'body': "I'm closing this for several reasons. The second and third ones can be discussed, but just the first one alone means we cannot accept this PR.\r\n\r\n* We don't allow any AI use in this part of the code base\r\n* We can't accept such a large amount of code in a single pull request\r\n* The ratio of benefit versus maintenance burden is rather questionable", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6422203611/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-26T16:13:02Z', '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': 15720, 'watchers_count': 15720, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 481, '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': 3353, 'open_issues': 481, 'watchers': 15720, '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-26T16:51:55.168763	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JMC47', 'action': 'created', 'id': 14806, 'title': 'JitRegCache: Refactor using a data oriented design', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14806#issuecomment-6421925901', 'safe_author': True, 'body': 'This greatly improves NBA Live 2005, and finally reduces the "lag" when going into and out of cockpit mode in Rogue Squadron 2 to nearly nothing (aside from the frames it drops naturally during the transition.)  It also seems to help various other menu/pause/etc. transitions across RS2 and RS3.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14806', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14806/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14806/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14806/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14806', 'id': 5110605233, 'node_id': 'PR_kwDOALCn2M79BvzF', 'number': 14806, 'title': 'JitRegCache: Refactor using a data oriented design', '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': 2, 'created_at': '2026-08-10T13:29:41Z', 'updated_at': '2026-10-26T16:51:52Z', '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/14806', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14806', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14806.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14806.patch', 'merged_at': None}, 'body': '(Revival of #14403.)\r\n\r\nReplace the "array of structure" design with a "structure of array". Boolean members are represented by a bitset.\r\nThe main benefit is that filtering the registers in regcache operations can be done in one simple bitwise instruction.\r\nThis is especially useful on `Flush`, as callers don\'t need anymore to limit the iterated registers for performance reasons.\r\n\r\nGives some noticeable improvements to JIT codegen performance, and makes the first commit of #13261 obsolete (on x86). \r\n\r\nThe change only applies to the x86 regcache.\r\n\r\n(Profiling was done this way: open NBA Live 2005, load a savestate of the match start, pause 4 times, stop.)\r\n\r\nBefore:\r\n<img width="1479" height="882" alt="JIT_before" src="https://github.com/user-attachments/assets/ee758a1b-3fa3-4853-9099-7e44fc9d069e" />\r\n\r\nAfter (see how the RegCache percentages are much lower, most of them not even appearing anymore):\r\n<img width="1479" height="882" alt="JIT_data_oriented" src="https://github.com/user-attachments/assets/ebc3f114-629e-4c3e-b432-f5547db6340f" />\r\n\r\n\r\nWhile `Flush()` is much lower, it\'s still there due to how frequently it\'s called. The only idea I have to improve it further is by moving everything into a header file. Speaking of which...\r\n\r\n<details>\r\n<summary>Notes for the future</summary>\r\n\r\nInstead of replicating the changes to the ARM regcache, I\'d prefer that they used the same interface.\r\nWhile deduplicating code is always nice, the main reason is that I have a long-term plan to have the JIT support in-block branches, which is something that would rely a lot on the register cache, but has very few ISA-specific differences otherwise.\r\n\r\nI made a proof of concept of what it should like [in this branch](https://github.com/SuperSamus/dolphin/commits/regcache-dod/) (it\'s still only on x86, and it\'s based on an older version).\r\nIt\'s linked only for skimming purposes, but the short version is that it makes use of [CRTP](https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) to allow the main regcache interface to get constant parameters from the implementation.\r\nFor instance, x86 has 16 GPRs (32 when APX comes out) and 16 FPU, while ARM has 32 GPRs (but they are also used for the CRs) and 32 FPU, so this allows to use the appropriately sized bitset. Other example, ARM can\'t use memory as a destination like x86 can, so the constraint class is different between the two.\r\n\r\nOne requirement of CRTP is it has to put everything into headers because templates, which one one hand it makes some operations a little faster since it allows them to be inlined without LTO. On the other it will hurt compilation times, though I suppose that can be mitigated through by building all the JIT stuff in [unity](https://cmake.org/cmake/help/latest/prop_tgt/UNITY_BUILD.html).\r\n<super><sub>Small note: if Dolphin has a plan to use xbyak for code emission in the future, since it\'s header-only and the header is huge, then unity builds for the JIT stuff are also a good idea for that.</sub></super>\r\n\r\nAnyway, these notes are more of a proof of concept that I\'m sharing mostly to collect feedback.\r\n</details>\r\n', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14806/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/14806/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6421925901', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14806#issuecomment-6421925901', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14806', 'id': 6421925901, 'node_id': 'IC_kwDOALCn2M8AAAABfsbQDQ', 'user': {'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'created_at': '2026-10-26T16:51:52Z', 'updated_at': '2026-10-26T16:51:52Z', 'body': 'This greatly improves NBA Live 2005, and finally reduces the "lag" when going into and out of cockpit mode in Rogue Squadron 2 to nearly nothing (aside from the frames it drops naturally during the transition.)  It also seems to help various other menu/pause/etc. transitions across RS2 and RS3.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6421925901/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-26T16:13:02Z', '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': 15720, 'watchers_count': 15720, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 482, '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': 3353, 'open_issues': 482, 'watchers': 15720, 'default_branch': 'master', 'custom_properties': {}}, 'organization': {'login': 'dolphin-emu', 'id': 5050316, 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'url': 'https://api.github.com/orgs/dolphin-emu', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'avatar_url': 'https://avatars.githubusercontent.com/u/5050316?v=4', 'description': ''}, 'sender': {'login': 'JMC47', 'id': 6598209, 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'avatar_url': 'https://avatars.githubusercontent.com/u/6598209?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JMC47', 'html_url': 'https://github.com/JMC47', 'followers_url': 'https://api.github.com/users/JMC47/followers', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'gh_issue_comment'}
2026-10-26T16:50:59.937186	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'created', 'id': 14953, 'title': 'JitCache: Misc optimizations and cleanup', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6421899974', 'safe_author': True, 'body': 'I would say leave that commit out of this PR.', 'raw': {'action': 'created', 'issue': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/labels{/name}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/comments', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/events', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'id': 6029698044, 'node_id': 'PR_kwDOALCn2M8AAAABKo-b1g', 'number': 14953, 'title': 'JitCache: Misc optimizations and cleanup', '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': 2, 'created_at': '2026-10-25T21:45:25Z', 'updated_at': '2026-10-26T16:50:58Z', '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/14953', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14953.patch', 'merged_at': None}, 'body': 'It\'s more cleanups than optimizations since the block cache isn\'t the biggest bottleneck in the codegen performance, but it still does have an impact.\n\nBefore:\n<img width="1479" height="882" alt="JIT_data_oriented" src="https://github.com/user-attachments/assets/11528ba6-bb9b-45d5-96b6-acf0e3f661a3" />\n\nAfter:\n<img width="1479" height="882" alt="JIT_after_block_cache_opts" src="https://github.com/user-attachments/assets/4a6446e4-0565-4be4-ba5f-8a8627d639db" />\n\n\n<super><sub>Comparison screenshots include `#14806`.</sub></super>', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953/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/14953/timeline', 'performed_via_github_app': None, 'state_reason': None}, 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6421899974', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14953#issuecomment-6421899974', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14953', 'id': 6421899974, 'node_id': 'IC_kwDOALCn2M8AAAABfsZqxg', '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-26T16:50:58Z', 'updated_at': '2026-10-26T16:50:58Z', 'body': 'I would say leave that commit out of this PR.', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6421899974/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-26T16:13:02Z', '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': 15720, 'watchers_count': 15720, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3353, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 482, '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': 3353, 'open_issues': 482, 'watchers': 15720, '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'}

Recent 'gh_pull_request' events

2026-10-28T01:53:08.127748	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'assigned', 'id': 13495, 'title': 'CoreTiming/VideoCommon: Add "Sync to Host Refresh Rate" setting.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/13495', 'head_ref_name': 'vsync-timing', 'safe_author': True, 'base_sha': 'e6f3ae17627e4344da95b13424af5baf4c892b08', 'head_sha': '6eaef37e69e7b289d66aa53a9f44b7778f013275', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-28T01:51:45.769239	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'iwubcode', 'action': 'assigned', 'id': 14933, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'head_ref_name': 'hookable-event-better', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-28T00:49:37.106353	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'synchronize', 'id': 14933, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'head_ref_name': 'hookable-event-better', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-28T00:23:32.266029	{'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.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'head_ref_name': 'ffmpeg-dlls', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '27eac67b181791fdf60ac41943d3ed68ce531b0a', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-28T00:19:01.446895	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'synchronize', 'id': 14933, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'head_ref_name': 'hookable-event-better', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T23:19:16.451300	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'synchronize', 'id': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'head_ref_name': 'ffmpeg-dlls', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '27eac67b181791fdf60ac41943d3ed68ce531b0a', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T21:15:19.870428	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'unlabeled', 'id': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'head_ref_name': 'ffmpeg-dlls', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '7dcd15880ec709c893258191919f513e0f4ae200', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T21:11:18.684824	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'synchronize', 'id': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'head_ref_name': 'ffmpeg-dlls', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '7dcd15880ec709c893258191919f513e0f4ae200', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T21:09:51.518651	{'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.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'head_ref_name': 'ffmpeg-dlls', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '78e41a2311b02dd0f892cb7bbe56bba8afca6f89', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T21:09:26.310394	{'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.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'head_ref_name': 'ffmpeg-dlls', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '78e41a2311b02dd0f892cb7bbe56bba8afca6f89', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T21:08:38.872518	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'synchronize', 'id': 14957, 'title': 'Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14957', 'head_ref_name': 'ffmpeg-dlls', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '78e41a2311b02dd0f892cb7bbe56bba8afca6f89', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T20:48:27.599020	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-ffmpeg', 'author': 'jordan-woyak', 'action': 'closed', 'id': 2, 'title': 'Remove binaries and update headers.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/ext-win-ffmpeg/pull/2', 'head_ref_name': 'headers-only', 'safe_author': True, 'base_sha': '9bc087fbca36ce5a85eb4fd73f0c73813593e5a2', 'head_sha': 'af39a830e1eec304ced881ce1ca7e62cc9dff76b', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T19:45:55.019802	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'edited', 'id': 14848, 'title': 'Qt: Add support for static builds', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14848', 'head_ref_name': 'static-qt', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T19:45:43.424815	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'synchronize', 'id': 14956, 'title': 'Common/Timer: Make "Precision Frame Timing" use x86 TPAUSE/MWAITX instead of spin waiting when available.', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14956', 'head_ref_name': 'tsc-sleep', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'c9157c4063cb071ebfb15966d8502c6a6544242b', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T19:43:41.186656	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-qt', 'author': 'JoshuaVandaele', 'action': 'edited', 'id': 25, 'title': 'Change how we build Qt and make it static', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/ext-win-qt/pull/25', 'head_ref_name': 'static-qt', 'safe_author': True, 'base_sha': '306289108d29a4b31a5460f7b55d28fde7b96d1b', 'head_sha': 'ce738630c102a1fba3183069efe4c2c3820dfe60', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T19:42:16.942066	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'synchronize', 'id': 14848, 'title': 'Qt: Add support for static builds', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14848', 'head_ref_name': 'static-qt', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T19:40:35.525260	{'source': 'ghhookparser', 'repo': 'dolphin-emu/ext-win-qt', 'author': 'JoshuaVandaele', 'action': 'synchronize', 'id': 25, 'title': 'Change how we build Qt and make it static', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/ext-win-qt/pull/25', 'head_ref_name': 'static-qt', 'safe_author': True, 'base_sha': '306289108d29a4b31a5460f7b55d28fde7b96d1b', 'head_sha': 'ce738630c102a1fba3183069efe4c2c3820dfe60', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T19:14:09.976654	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'synchronize', 'id': 14257, 'title': 'Playground PR - Please ignore', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14257', 'head_ref_name': 'testbranch', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '09dad66716b1ef1ee10353ca18e1145e63be85ed', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T17:29:29.110556	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'SuperSamus', 'action': 'synchronize', 'id': 14806, 'title': 'JitRegCache: Refactor using a data oriented design', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14806', 'head_ref_name': 'regcache-data-oriented', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'b2cb57537f844d86be87d19714d91dba3c34f462', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T14:46:10.318627	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'tygyh', 'action': 'synchronize', 'id': 14783, 'title': 'Remove unused includes', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783', 'head_ref_name': 'Videocommon/Remove-unused-includes', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '1ad3c48fdec6df648229a7da36bff52241082432', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T14:45:07.837059	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'tygyh', 'action': 'synchronize', 'id': 14783, 'title': 'Remove unused includes', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783', 'head_ref_name': 'Videocommon/Remove-unused-includes', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '39f053423ebc5da5547b0f6cd9adcbb2a8798337', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T14:04:55.605819	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'tygyh', 'action': 'synchronize', 'id': 14783, 'title': 'Remove unused includes', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14783', 'head_ref_name': 'Videocommon/Remove-unused-includes', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '6260a8e1ff3170a308c5901ae5f0c8662e940d03', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T13:18:09.998300	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'SuperSamus', 'action': 'synchronize', 'id': 14806, 'title': 'JitRegCache: Refactor using a data oriented design', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14806', 'head_ref_name': 'regcache-data-oriented', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'd919667f64e9805b56b3550b93ff2afd1284c1d1', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T13:17:40.608042	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'SuperSamus', 'action': 'synchronize', 'id': 14953, 'title': 'JitCache: Misc optimizations and cleanup', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14953', 'head_ref_name': 'block-cache-optimizations', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': 'fe547c2d1a834b0d9a3a90f27957fd95ed5e4d0a', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}
2026-10-27T12:09:06.995565	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'synchronize', 'id': 14257, 'title': 'Playground PR - Please ignore', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14257', 'head_ref_name': 'testbranch', 'safe_author': True, 'base_sha': '3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'head_sha': '14d615058e274d8a88856532c8b3348217930961', 'merged': False, 'requested_reviewers': [], 'type': 'gh_pull_request'}

Recent 'gh_pull_request_comment' events

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'}
2026-10-25T06:48:31.315852	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'created', 'id': 14948, 'hash': '56cae13e30a840ca44b9b1ef3e1a07ca384a3a1f', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4369940585', 'is_part_of_review': False, 'type': 'gh_pull_request_comment'}
2026-10-25T03:13:40.528289	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'TellowKrinkle', 'action': 'created', 'id': 14916, 'hash': '62fc846755d4692168a26a707c7784e6198f641a', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14916#discussion_r4369488423', 'is_part_of_review': True, 'type': 'gh_pull_request_comment'}

Recent 'gh_pull_request_review' events

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'}
2026-10-27T11:40:10.293023	{'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-5666466107', 'comments': [{'id': 4388231277, 'node_id': 'PRRC_kwDOALCn2M8AAAABBY8YbQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4388231277', 'pull_request_review_id': 5666466107, 'diff_hunk': '@@ -3,7 +3,6 @@\n \n #include "VideoCommon/CPMemory.h"\n \n-#include <cstring>', 'path': 'Source/Core/VideoCommon/CPMemory.cpp', 'position': 4, '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': "That's really weird. I can build without issues. I'll readd the include either way.", 'created_at': '2026-10-27T11:40:07Z', 'updated_at': '2026-10-27T11:40:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4388231277', '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/4388231277'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4388231277'}, '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/4388231277/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-27T00:02:23.707134	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14948, 'pr_title': 'CMake: Only trim flags on MSVC, be a little more selective of what to remove', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#pullrequestreview-5660693533', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-26T11:36:58.577805	{'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-5651346582', 'comments': [{'id': 4376774084, 'node_id': 'PRRC_kwDOALCn2M8AAAABBOBFxA', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4376774084', 'pull_request_review_id': 5651346582, 'diff_hunk': '@@ -3,7 +3,6 @@\n \n #include "VideoCommon/CPMemory.h"\n \n-#include <cstring>', 'path': 'Source/Core/VideoCommon/CPMemory.cpp', 'position': 4, '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': 'This is also not an unused header:\n\n```\nFAILED: [code=1] Source/Core/VideoCommon/CMakeFiles/videocommon.dir/CPMemory.cpp.o\n/usr/sbin/ccache /usr/sbin/g++ -DAUTOUPDATE=1 -DDATA_DIR=\\"/usr/local/share/dolphin-emu/\\" -DGLSLANG_IS_SHARED_LIBRARY=1 -DHAS_OPENGL -DHAS_VULKAN -DHAVE_CPPIPC -DHAVE_EGL=1 -DHAVE_FFMPEG -DHAVE_LIBEVDEV=1 -DHAVE_LIBSYSTEMD -DHAVE_LIBUDEV=1 -DHAVE_SDL3 -DHAVE_X11=1 -DHAVE_XRANDR=1 -DIMGUI_USER_CONFIG=\\"imgui_user_config.h\\" -DRC_CLIENT_SUPPORTS_HASH -DTINYGLTF_NOEXCEPTION -DTINYGLTF_NO_EXTERNAL_IMAGE -DTINYGLTF_USE_CPP14 -DUSE_ANALYTICS=1 -DUSE_MEMORYWATCHER=1 -DUSE_PIPES=1 -DUSE_RETRO_ACHIEVEMENTS -DUSE_UPNP -D_ARCH_64=1 -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_M_X86_64=1 -D__LIBUSB__ -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -I/dolphin/Source/Core -I/dolphin/Externals/discord-rpc/include -I/dolphin/Externals/picojson -I/build/Source/Core -I/dolphin/Externals/mbedtls/include -I/dolphin/Externals/expr/include -I/dolphin/Externals/rcheevos -I/dolphin/Externals/imgui -I/dolphin/Externals/imgui/imgui -I/dolphin/Externals/implot/implot -I/dolphin/Externals/tinygltf -isystem /usr/include/minizip-ng -isystem /usr/include/libusb-1.0 -isystem /usr/include/hidapi -O3 -DNDEBUG -std=c++23   -I/usr/include -msse2 -fdiagnostics-color -fno-strict-aliasing -fno-exceptions -fvisibility-inlines-hidden -fvisibility=hidden -fomit-frame-pointer -Wall -Wtype-limits -Wsign-compare -Wignored-qualifiers -Wuninitialized -Wlogical-op -Wshadow -Winit-self -Wmissing-declarations -Wimplicit-fallthrough -Wno-stringop-truncation -Werror=format -Wno-trigraphs -DWITH_GZFILEOP -MD -MT Source/Core/VideoCommon/CMakeFiles/videocommon.dir/CPMemory.cpp.o -MF Source/Core/VideoCommon/CMakeFiles/videocommon.dir/CPMemory.cpp.o.d -o Source/Core/VideoCommon/CMakeFiles/videocommon.dir/CPMemory.cpp.o -c /dolphin/Source/Core/VideoCommon/CPMemory.cpp\n/dolphin/Source/Core/VideoCommon/CPMemory.cpp: In function ‘void CopyPreprocessCPStateFromMain()’:\n/dolphin/Source/Core/VideoCommon/CPMemory.cpp:21:8: error: ‘memcpy’ is not a member of ‘std’; did you mean ‘wmemcpy’?\n   21 |   std::memcpy(static_cast<void*>(&g_preprocess_cp_state),\n      |        ^~~~~~\n      |        wmemcpy\n```\n\nThere may be other instances of this, I stopped at the first build failure.', 'created_at': '2026-10-26T11:36:55Z', 'updated_at': '2026-10-26T11:36:55Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4376774084', '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/4376774084'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4376774084'}, '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/4376774084/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-26T11:24:31.799175	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14948, 'pr_title': 'CMake: Only trim flags on MSVC, be a little more selective of what to remove', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#pullrequestreview-5651221163', 'comments': [{'id': 4376678525, 'node_id': 'PRRC_kwDOALCn2M8AAAABBN7QfQ', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4376678525', 'pull_request_review_id': 5651221163, 'diff_hunk': '@@ -1,17 +1,30 @@\n function(dolphin_disable_warnings target)\n-  get_target_property(target_flags ${target} COMPILE_OPTIONS)\n-  set(new_flags)\n-  foreach(flag IN LISTS target_flags)\n-    # all warning flags start with "/W" or "/w" or "-W" or "-w"\n-    if (NOT flag MATCHES "^[-/][Ww]")\n-      list(APPEND new_flags "${flag}")\n-    endif()\n-  endforeach()\n-  set_target_properties(${target} PROPERTIES COMPILE_OPTIONS "${new_flags}")\n+  if(MSVC)\n+    # MSVC warns with D9025 if multiple contradicting warning flags co-exist\n+    get_target_property(target_flags ${target} COMPILE_OPTIONS)\n+    if(target_flags)\n+      # This should match /external:W0, /Wall, /w, /wd4326, /Wv:17, but not /Work\n+      set(warn_re "/(external:)?[Ww](([0-4Xvdeo]|all)[0-9:-]*)?")\n+      # This should match /W4 in $<$<CONFIG:Debug>:/W4>, only /W4 in $<IF:$<CONFIG:Debug>,/F,/W4>, nothing in $<$<CONFIG:Debug>:/I:C:/Work>\n+      set(expres_re "(,|>:)(${warn_re})([,>])")\n+      set(new_flags)\n+      foreach(flag IN LISTS target_flags)\n+        if("${flag}" MATCHES "^${warn_re}$")\n+          continue()\n+        endif()\n+\n+        if("${flag}" MATCHES "^\\\\$<")\n+          while("${flag}" MATCHES "${expres_re}")\n+            string(REGEX REPLACE "${expres_re}" "\\\\1\\\\${CMAKE_MATCH_COUNT}" flag "${flag}")', 'path': 'CMake/DolphinDisableWarnings.cmake', 'position': 27, 'original_position': 27, 'commit_id': 'b3b5f02be632541fa6939c75dedc2dc20c356f87', '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': "It was convenient while working on it since `CMAKE_MATCH_COUNT` always points at the last matching group (which in this case is always the character right after the warning flag). I could change it to be hardcoded to `\\\\1\\\\6` but I don't think it's worth it (i.e. if someone changes `warn_re` in the future it would silently fail while this would account for that).", 'created_at': '2026-10-26T11:24:29Z', 'updated_at': '2026-10-26T11:24:29Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4376678525', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14948', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4376678525'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4376678525'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14948'}}, 'original_commit_id': 'b3b5f02be632541fa6939c75dedc2dc20c356f87', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4376678525/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}, 'in_reply_to_id': 4372879923, 'is_copilot_code_review': False, 'copilot_code_review_sources': []}], 'type': 'gh_pull_request_review'}
2026-10-25T23:12:00.931371	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'jordan-woyak', 'action': 'submitted', 'pr_id': 14948, 'pr_title': 'CMake: Only trim flags on MSVC, be a little more selective of what to remove', 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14948#pullrequestreview-5645824275', 'comments': [{'id': 4372879923, 'node_id': 'PRRC_kwDOALCn2M8AAAABBKTaMw', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4372879923', 'pull_request_review_id': 5645824275, 'diff_hunk': '@@ -1,17 +1,30 @@\n function(dolphin_disable_warnings target)\n-  get_target_property(target_flags ${target} COMPILE_OPTIONS)\n-  set(new_flags)\n-  foreach(flag IN LISTS target_flags)\n-    # all warning flags start with "/W" or "/w" or "-W" or "-w"\n-    if (NOT flag MATCHES "^[-/][Ww]")\n-      list(APPEND new_flags "${flag}")\n-    endif()\n-  endforeach()\n-  set_target_properties(${target} PROPERTIES COMPILE_OPTIONS "${new_flags}")\n+  if(MSVC)\n+    # MSVC warns with D9025 if multiple contradicting warning flags co-exist\n+    get_target_property(target_flags ${target} COMPILE_OPTIONS)\n+    if(target_flags)\n+      # This should match /external:W0, /Wall, /w, /wd4326, /Wv:17, but not /Work\n+      set(warn_re "/(external:)?[Ww](([0-4Xvdeo]|all)[0-9:-]*)?")\n+      # This should match /W4 in $<$<CONFIG:Debug>:/W4>, only /W4 in $<IF:$<CONFIG:Debug>,/F,/W4>, nothing in $<$<CONFIG:Debug>:/I:C:/Work>\n+      set(expres_re "(,|>:)(${warn_re})([,>])")\n+      set(new_flags)\n+      foreach(flag IN LISTS target_flags)\n+        if("${flag}" MATCHES "^${warn_re}$")\n+          continue()\n+        endif()\n+\n+        if("${flag}" MATCHES "^\\\\$<")\n+          while("${flag}" MATCHES "${expres_re}")\n+            string(REGEX REPLACE "${expres_re}" "\\\\1\\\\${CMAKE_MATCH_COUNT}" flag "${flag}")', 'path': 'CMake/DolphinDisableWarnings.cmake', 'position': 27, 'original_position': 27, 'commit_id': 'b3b5f02be632541fa6939c75dedc2dc20c356f87', 'user': {'login': 'jordan-woyak', 'id': 1768214, 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'avatar_url': 'https://avatars.githubusercontent.com/u/1768214?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/jordan-woyak', 'html_url': 'https://github.com/jordan-woyak', 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': '```suggestion\n            string(REGEX REPLACE "${expres_re}" "\\\\1\\\\3" flag "${flag}")\n```\nI suppose you could also remove the inner-most parens in `express_re` and use `\\\\2` ?\nOr is there a reason you used `CMAKE_MATCH_COUNT` ?', 'created_at': '2026-10-25T23:11:57Z', 'updated_at': '2026-10-25T23:11:57Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4372879923', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14948', 'author_association': 'MEMBER', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4372879923'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14948#discussion_r4372879923'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14948'}}, 'original_commit_id': 'b3b5f02be632541fa6939c75dedc2dc20c356f87', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4372879923/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-25T16:21:26.704874	{'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-5644109232', 'comments': [{'id': 4371498807, 'node_id': 'PRRC_kwDOALCn2M8AAAABBI_HNw', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4371498807', 'pull_request_review_id': 5644109232, 'diff_hunk': '@@ -4,7 +4,6 @@\n #include "VideoCommon/AbstractStagingTexture.h"\n \n #include <algorithm>\n-#include <cstring>', 'path': 'Source/Core/VideoCommon/AbstractStagingTexture.cpp', 'position': 4, 'original_position': 4, 'commit_id': '46bc6735c24535c4f35da715199e7093a3045613', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'This header is not unused:\n\n```\nFAILED: [code=1] Source/Core/VideoCommon/CMakeFiles/videocommon.dir/AbstractStagingTexture.cpp.o \n/usr/sbin/ccache /usr/sbin/g++ -DAUTOUPDATE=1 -DDATA_DIR=\\"/usr/local/share/dolphin-emu/\\" -DGLSLANG_IS_SHARED_LIBRARY=1 -DHAS_OPENGL -DHAS_VULKAN -DHAVE_CPPIPC -DHAVE_EGL=1 -DHAVE_FFMPEG -DHAVE_LIBEVDEV=1 -DHAVE_LIBSYSTEMD -DHAVE_LIBUDEV=1 -DHAVE_SDL3 -DHAVE_X11=1 -DHAVE_XRANDR=1 -DIMGUI_USER_CONFIG=\\"imgui_user_config.h\\" -DRC_CLIENT_SUPPORTS_HASH -DTINYGLTF_NOEXCEPTION -DTINYGLTF_NO_EXTERNAL_IMAGE -DTINYGLTF_USE_CPP14 -DUSE_ANALYTICS=1 -DUSE_MEMORYWATCHER=1 -DUSE_PIPES=1 -DUSE_RETRO_ACHIEVEMENTS -DUSE_UPNP -D_ARCH_64=1 -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_M_X86_64=1 -D__LIBUSB__ -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -I/dolphin/Source/Core -I/dolphin/Externals/discord-rpc/include -I/dolphin/Externals/picojson -I/build/Source/Core -I/dolphin/Externals/mbedtls/include -I/dolphin/Externals/expr/include -I/dolphin/Externals/rcheevos -I/dolphin/Externals/imgui -I/dolphin/Externals/imgui/imgui -I/dolphin/Externals/implot/implot -I/dolphin/Externals/tinygltf -isystem /usr/include/minizip-ng -isystem /usr/include/libusb-1.0 -isystem /usr/include/hidapi -O3 -DNDEBUG -std=c++23   -I/usr/include -msse2 -fdiagnostics-color -fno-strict-aliasing -fno-exceptions -fvisibility-inlines-hidden -fvisibility=hidden -fomit-frame-pointer -Wall -Wtype-limits -Wsign-compare -Wignored-qualifiers -Wuninitialized -Wlogical-op -Wshadow -Winit-self -Wmissing-declarations -Wimplicit-fallthrough -Wno-stringop-truncation -Werror=format -Wno-trigraphs -DWITH_GZFILEOP -MD -MT Source/Core/VideoCommon/CMakeFiles/videocommon.dir/AbstractStagingTexture.cpp.o -MF Source/Core/VideoCommon/CMakeFiles/videocommon.dir/AbstractStagingTexture.cpp.o.d -o Source/Core/VideoCommon/CMakeFiles/videocommon.dir/AbstractStagingTexture.cpp.o -c /dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp: In member function ‘void AbstractStagingTexture::ReadTexels(const MathUtil::Rectangle<int>&, void*, u32)’:\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp:52:10: error: ‘memcpy’ is not a member of ‘std’; did you mean ‘wmemcpy’?\n   52 |     std::memcpy(out_ptr, current_ptr, m_map_stride * rect.GetHeight());\n      |          ^~~~~~\n      |          wmemcpy\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp:61:10: error: ‘memcpy’ is not a member of ‘std’; did you mean ‘wmemcpy’?\n   61 |     std::memcpy(dst_ptr, current_ptr, copy_size);\n      |          ^~~~~~\n      |          wmemcpy\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp: In member function ‘void AbstractStagingTexture::ReadTexel(u32, u32, void*)’:\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp:75:8: error: ‘memcpy’ is not a member of ‘std’; did you mean ‘wmemcpy’?\n   75 |   std::memcpy(out_ptr, src_ptr, m_texel_size);\n      |        ^~~~~~\n      |        wmemcpy\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp: In member function ‘void AbstractStagingTexture::WriteTexels(const MathUtil::Rectangle<int>&, const void*, u32)’:\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp:96:10: error: ‘memcpy’ is not a member of ‘std’; did you mean ‘wmemcpy’?\n   96 |     std::memcpy(current_ptr, in_ptr, m_map_stride * rect.GetHeight());\n      |          ^~~~~~\n      |          wmemcpy\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp:105:10: error: ‘memcpy’ is not a member of ‘std’; did you mean ‘wmemcpy’?\n  105 |     std::memcpy(current_ptr, src_ptr, copy_size);\n      |          ^~~~~~\n      |          wmemcpy\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp: In member function ‘void AbstractStagingTexture::WriteTexel(u32, u32, const void*)’:\n/dolphin/Source/Core/VideoCommon/AbstractStagingTexture.cpp:119:8: error: ‘memcpy’ is not a member of ‘std’; did you mean ‘wmemcpy’?\n  119 |   std::memcpy(dest_ptr, in_ptr, m_texel_size);\n      |        ^~~~~~\n      |        wmemcpy\n```', 'created_at': '2026-10-25T16:21:24Z', 'updated_at': '2026-10-25T16:21:24Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4371498807', '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/4371498807'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14783#discussion_r4371498807'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14783'}}, 'original_commit_id': '46bc6735c24535c4f35da715199e7093a3045613', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4371498807/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-25T12:40:27.579141	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'AdmiralCurtiss', 'action': 'submitted', 'pr_id': 14939, 'pr_title': 'PPCAnalyst: Avoid using strncmp', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14939#pullrequestreview-5643234695', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-25T11:43:57.817752	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JosJuice', 'action': 'submitted', 'pr_id': 14939, 'pr_title': 'PPCAnalyst: Avoid using strncmp', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14939#pullrequestreview-5643038432', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-25T11:05:24.781503	{'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-5642856202', 'comments': [], 'type': 'gh_pull_request_review'}
2026-10-25T10:44:23.236917	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'author': 'JoshuaVandaele', 'action': 'submitted', 'pr_id': 14952, 'pr_title': 'Common/Thread: Remove some unused things.', 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/14952#pullrequestreview-5642787977', 'comments': [], 'type': 'gh_pull_request_review'}

Recent 'gh_push' events

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'}
2026-10-18T10:25:49.009860	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': 'b869a2ab2035f0ff0c0ca71becb4e33131ebb1b7', 'after_sha': '8c19346fa956c37264751868a8ac4d674bfff6de', 'commits': [{'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-09T14:50:48-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['CMakeLists.txt'], 'removed': [], 'message': 'CMakeLists: Bump version requirements to allow use of std::jthread.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/5bcd55eef5323db2d83bd181f128409edc1d902e', 'hash': '5bcd55eef5323db2d83bd181f128409edc1d902e'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-09T14:51:43-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/CMakeLists.txt'], 'removed': [], 'message': 'CMakeLists: Add -fexperimental-library to allow use of std::jthread with libc++ 18.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/0f56e58742a64a993e4f2f7b34cbafccb613ebcd', 'hash': '0f56e58742a64a993e4f2f7b34cbafccb613ebcd'}, {'author': {'name': 'Jordan Woyak', 'email': 'jordan.woyak@gmail.com', 'date': '2026-10-09T14:52:08-05:00', 'username': 'jordan-woyak'}, 'distinct': False, 'added': [], 'modified': ['Source/Core/DiscIO/CachedBlob.cpp'], 'removed': [], 'message': 'DiscIO/CachedBlob: Minor cleanup by replacing std::thread with std::jthread.', 'url': 'https://github.com/dolphin-emu/dolphin/commit/1acbcaceffdf11d5b6d90fe2c864a8683b930908', 'hash': '1acbcaceffdf11d5b6d90fe2c864a8683b930908'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-10-18T12:25:46+02:00', 'username': 'JosJuice'}, 'distinct': True, 'added': [], 'modified': ['CMakeLists.txt', 'Source/CMakeLists.txt', 'Source/Core/DiscIO/CachedBlob.cpp'], 'removed': [], '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', 'hash': '8c19346fa956c37264751868a8ac4d674bfff6de'}], 'base_ref_name': None, 'ref_name': 'master', 'ref_type': 'heads', 'created': False, 'deleted': False, 'forced': False, 'type': 'gh_push'}
2026-10-18T10:12:03.828555	{'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'pusher': 'JosJuice', 'before_sha': '38d619b07691231f54e6f037fcf30a3b64fdd5a5', 'after_sha': 'b869a2ab2035f0ff0c0ca71becb4e33131ebb1b7', 'commits': [{'author': {'name': 'Joshua Vandaële', 'email': 'joshua@vandaele.software', 'date': '2026-08-03T18:50:13+02:00', 'username': 'JoshuaVandaele'}, 'distinct': False, 'added': ['CMake/DolphinDisableWarnings.cmake'], 'modified': ['CMake/DolphinLibraryTools.cmake', 'CMakeLists.txt', 'Externals/Bochs_disasm/CMakeLists.txt', 'Externals/FreeSurround/CMakeLists.txt', 'Externals/LZO/CMakeLists.txt', 'Externals/SDL/CMakeLists.txt', 'Externals/SFML/CMakeLists.txt', 'Externals/bzip2/CMakeLists.txt', 'Externals/cpp-ipc/CMakeLists.txt', 'Externals/cpp-optparse/CMakeLists.txt', 'Externals/cubeb/CMakeLists.txt', 'Externals/discord-rpc/src/CMakeLists.txt', 'Externals/ed25519/CMakeLists.txt', 'Externals/enet/CMakeLists.txt', 'Externals/fmt/CMakeLists.txt', 'Externals/glslang/CMakeLists.txt', 'Externals/hidapi/CMakeLists.txt', 'Externals/imgui/CMakeLists.txt', 'Externals/implot/CMakeLists.txt', 'Externals/libiconv/CMakeLists.txt', 'Externals/liblzma/CMakeLists.txt', 'Externals/libusb/CMakeLists.txt', 'Externals/lz4/CMakeLists.txt', 'Externals/mGBA/CMakeLists.txt', 'Externals/mbedtls/library/CMakeLists.txt', 'Externals/miniupnpc/CMakeLists.txt', 'Externals/minizip-ng/CMakeLists.txt', 'Externals/pugixml/CMakeLists.txt', 'Externals/rcheevos/CMakeLists.txt', 'Externals/spirv_cross/CMakeLists.txt', 'Externals/tinygltf/CMakeLists.txt', 'Externals/xxhash/CMakeLists.txt', 'Externals/zlib-ng/CMakeLists.txt', 'Externals/zstd/CMakeLists.txt'], 'removed': ['CMake/DolphinDisableWarningsMSVC.cmake'], 'message': 'CMake: Automatically disable warnings for Externals', 'url': 'https://github.com/dolphin-emu/dolphin/commit/89660f5beae0a3f307ac1587c016e93a4efaed63', 'hash': '89660f5beae0a3f307ac1587c016e93a4efaed63'}, {'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'date': '2026-10-18T12:12:01+02:00', 'username': 'JosJuice'}, 'distinct': True, 'added': ['CMake/DolphinDisableWarnings.cmake'], 'modified': ['CMake/DolphinLibraryTools.cmake', 'CMakeLists.txt', 'Externals/Bochs_disasm/CMakeLists.txt', 'Externals/FreeSurround/CMakeLists.txt', 'Externals/LZO/CMakeLists.txt', 'Externals/SDL/CMakeLists.txt', 'Externals/SFML/CMakeLists.txt', 'Externals/bzip2/CMakeLists.txt', 'Externals/cpp-ipc/CMakeLists.txt', 'Externals/cpp-optparse/CMakeLists.txt', 'Externals/cubeb/CMakeLists.txt', 'Externals/discord-rpc/src/CMakeLists.txt', 'Externals/ed25519/CMakeLists.txt', 'Externals/enet/CMakeLists.txt', 'Externals/fmt/CMakeLists.txt', 'Externals/glslang/CMakeLists.txt', 'Externals/hidapi/CMakeLists.txt', 'Externals/imgui/CMakeLists.txt', 'Externals/implot/CMakeLists.txt', 'Externals/libiconv/CMakeLists.txt', 'Externals/liblzma/CMakeLists.txt', 'Externals/libusb/CMakeLists.txt', 'Externals/lz4/CMakeLists.txt', 'Externals/mGBA/CMakeLists.txt', 'Externals/mbedtls/library/CMakeLists.txt', 'Externals/miniupnpc/CMakeLists.txt', 'Externals/minizip-ng/CMakeLists.txt', 'Externals/pugixml/CMakeLists.txt', 'Externals/rcheevos/CMakeLists.txt', 'Externals/spirv_cross/CMakeLists.txt', 'Externals/tinygltf/CMakeLists.txt', 'Externals/xxhash/CMakeLists.txt', 'Externals/zlib-ng/CMakeLists.txt', 'Externals/zstd/CMakeLists.txt'], 'removed': ['CMake/DolphinDisableWarningsMSVC.cmake'], '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', 'hash': 'b869a2ab2035f0ff0c0ca71becb4e33131ebb1b7'}], '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-28T07:22:58.787235	{'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-28T07:22:58.441065	{'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-28T07:22:30.871120	{'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-28T07:22:29.236177	{'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-28T07:17:29.235867	{'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-28T07:17:27.523702	{'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-28T07:12:58.440837	{'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-28T07:12:58.088409	{'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-28T07:12:27.523383	{'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-28T07:12:25.781967	{'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-28T07:07:25.781653	{'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-28T07:07:23.980335	{'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-28T07:02:58.088163	{'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-28T07:02:57.624563	{'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-28T07:02:23.979975	{'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-28T07:02:22.209852	{'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-28T06:57:22.209526	{'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-28T06:57:20.508322	{'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-28T06:52:57.624315	{'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-28T06:52:57.266474	{'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-28T06:52:20.507995	{'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-28T06:52:18.752750	{'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-28T06:47:18.752376	{'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-28T06:47:17.007752	{'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-28T06:42:57.266246	{'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'}

Recent 'issue' events

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'}
2026-10-19T16:12:10.962205	{'source': 'redmine', 'new': True, 'update': 0, 'issue': 14165, 'title': "Motion sometimes don't recognized in 3 WarioWare Smooth Moves mini-games (spin/rotation - Emulated controllers)", 'author': 'GaussTek', 'type': 'issue'}
2026-10-19T00:51:12.815927	{'source': 'redmine', 'new': False, 'update': 3, 'issue': 14141, 'title': 'Emulator Closes/Crashes If I Do Anything Since Update  (Even If I Install a Different Version)', 'author': 'oftheseaisme', '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-28T05:36:36.084750	{'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-6461551396\x03\x1f', 'type': 'notification'}
2026-10-28T05:00:12.287005	{'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-6461071809\x03\x1f', 'type': 'notification'}
2026-10-28T04:56:17.467863	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303m\ufeffbc07\x03 approved pull request #14848 (Qt: Add support for static builds): \x1f\x0302https://dolp.in/pr14848#pullrequestreview-5677960686\x03\x1f', 'type': 'notification'}
2026-10-28T02:17:03.228935	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/ext-win-qt\x03\x1f] \x0303j\ufeffordan-woyak\x03 approved pull request #25 (Change how we build Qt and make it static): \x1f\x0302https://github.com/dolphin-emu/ext-win-qt/pull/25#pullrequestreview-5676959830\x03\x1f', 'type': 'notification'}
2026-10-28T02:15:34.588144	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 approved pull request #14848 (Qt: Add support for static builds): \x1f\x0302https://dolp.in/pr14848#pullrequestreview-5676951138\x03\x1f', 'type': 'notification'}
2026-10-28T01:53:08.128077	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303i\ufeffwubcode\x03 assigned pull request #13495: CoreTiming/VideoCommon: Add "Sync to Host Refresh Rate" setting. (\x0306master\x03...\x0306vsync-timing\x03): \x1f\x0302https://dolp.in/pr13495\x03\x1f', 'type': 'notification'}
2026-10-28T01:51:45.769521	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303i\ufeffwubcode\x03 assigned pull request #14933:  Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests. (\x0306master\x03...\x0306hookable-event-better\x03): \x1f\x0302https://dolp.in/pr14933\x03\x1f', 'type': 'notification'}
2026-10-28T01:22:27.427542	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14933 \x0304failed\x03 on builders [pr-win-dbg-x64]: \x1f\x0302https://dolphin.ci/#/builders/31/builds/10852\x03\x1f', 'type': 'notification'}
2026-10-28T01:04:54.245713	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14933 \x0304failed\x03 on builders [pr-win-x64]: \x1f\x0302https://dolphin.ci/#/builders/2/builds/10845\x03\x1f', 'type': 'notification'}
2026-10-28T00:50:00.161247	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on #14933 e212bc: \x1f\x0302https://dolp.in/pr14933#discussion_r4395816787\x03\x1f', 'type': 'notification'}
2026-10-28T00:49:37.107300	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 synchronized pull request #14933:  Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests. (\x0306master\x03...\x0306hookable-event-better\x03): \x1f\x0302https://dolp.in/pr14933\x03\x1f', 'type': 'notification'}
2026-10-28T00:37:45.865378	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on pull request #14933 ( Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.): \x1f\x0302https://dolp.in/pr14933#pullrequestreview-5676364843\x03\x1f', 'type': 'notification'}
2026-10-28T00:36:11.332668	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303i\ufeffwubcode\x03 commented on #14933 dc1017: \x1f\x0302https://dolp.in/pr14933#discussion_r4395742741\x03\x1f', 'type': 'notification'}
2026-10-28T00:34:29.536179	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on #14933 dc1017: \x1f\x0302https://dolp.in/pr14933#discussion_r4395734156\x03\x1f', 'type': 'notification'}
2026-10-28T00:31:24.844559	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on #14933 dc1017: \x1f\x0302https://dolp.in/pr14933#discussion_r4395718468\x03\x1f', 'type': 'notification'}
2026-10-28T00:26:04.089688	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303i\ufeffwubcode\x03 commented on pull request #14933 ( Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.): \x1f\x0302https://dolp.in/pr14933#pullrequestreview-5676293019\x03\x1f', 'type': 'notification'}
2026-10-28T00:23:32.266413	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 edited pull request #14957: Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs. (\x0306master\x03...\x0306ffmpeg-dlls\x03): \x1f\x0302https://dolp.in/pr14957\x03\x1f', 'type': 'notification'}
2026-10-28T00:20:14.688925	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on pull request #14933 ( Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.): \x1f\x0302https://dolp.in/pr14933#pullrequestreview-5676256145\x03\x1f', 'type': 'notification'}
2026-10-28T00:19:01.447596	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 synchronized pull request #14933:  Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests. (\x0306master\x03...\x0306hookable-event-better\x03): \x1f\x0302https://dolp.in/pr14933\x03\x1f', 'type': 'notification'}
2026-10-28T00:10:36.602442	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on #14933 de7769: \x1f\x0302https://dolp.in/pr14933#discussion_r4395603757\x03\x1f', 'type': 'notification'}
2026-10-27T23:40:05.315244	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] build for #14957 \x0304failed\x03 on builders [pr-freebsd-x64]: \x1f\x0302https://dolphin.ci/#/builders/11/builds/10850\x03\x1f', 'type': 'notification'}
2026-10-27T23:35:23.866447	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on pull request #14933 ( Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.): \x1f\x0302https://dolp.in/pr14933#pullrequestreview-5675867124\x03\x1f', 'type': 'notification'}
2026-10-27T23:19:16.451968	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 synchronized pull request #14957: Common/DolphinQt: Dynamically load FFmpeg and automate downloading of the DLLs. (\x0306master\x03...\x0306ffmpeg-dlls\x03): \x1f\x0302https://dolp.in/pr14957\x03\x1f', 'type': 'notification'}
2026-10-27T23:18:25.774141	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303i\ufeffwubcode\x03 reviewed and commented on pull request #14933 ( Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.): \x1f\x0302https://dolp.in/pr14933#pullrequestreview-5675506969\x03\x1f', 'type': 'notification'}
2026-10-27T23:12:19.337425	{'source': 'notifications', 'msg': '[\x1f\x0313dolphin-emu/dolphin\x03\x1f] \x0303j\ufeffordan-woyak\x03 commented on #14927 (Externals: Replace submodules with FetchContent): \x1f\x0302https://dolp.in/pr14927#issuecomment-6455885517\x03\x1f', 'type': 'notification'}

Recent 'pull_request_fifoci_status' events

2026-10-28T01:57:52.595569	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-28T01:48:13.868001	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-28T01:35:03.891416	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-28T01:33:46.993386	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-28T01:24:10.980858	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-28T01:05:54.537855	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-28T00:57:16.465388	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-28T00:46:11.040639	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14933, 'type': 'pull_request_fifoci_status'}
2026-10-27T23:54:19.327272	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '27eac67b181791fdf60ac41943d3ed68ce531b0a', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T23:53:09.610258	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '27eac67b181791fdf60ac41943d3ed68ce531b0a', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T23:46:57.254539	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '27eac67b181791fdf60ac41943d3ed68ce531b0a', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T23:42:10.924998	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '27eac67b181791fdf60ac41943d3ed68ce531b0a', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T23:34:49.434295	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '27eac67b181791fdf60ac41943d3ed68ce531b0a', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T22:37:17.653336	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7dcd15880ec709c893258191919f513e0f4ae200', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T22:20:27.028074	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'c9157c4063cb071ebfb15966d8502c6a6544242b', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14956, 'type': 'pull_request_fifoci_status'}
2026-10-27T22:04:50.938109	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7dcd15880ec709c893258191919f513e0f4ae200', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T22:04:41.034526	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7dcd15880ec709c893258191919f513e0f4ae200', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T21:54:15.555503	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7dcd15880ec709c893258191919f513e0f4ae200', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T21:52:57.677023	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '7dcd15880ec709c893258191919f513e0f4ae200', 'service': 'pr-fifoci-mvk-osx-m1', 'pr': 14957, 'type': 'pull_request_fifoci_status'}
2026-10-27T21:35:46.752865	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'service': 'pr-fifoci-ogl-lin-mesa', 'pr': 14848, 'type': 'pull_request_fifoci_status'}
2026-10-27T21:17:55.331120	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'c9157c4063cb071ebfb15966d8502c6a6544242b', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14956, 'type': 'pull_request_fifoci_status'}
2026-10-27T21:05:35.463315	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14848, 'type': 'pull_request_fifoci_status'}
2026-10-27T20:58:16.145306	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': '09dad66716b1ef1ee10353ca18e1145e63be85ed', 'service': 'pr-fifoci-sw-lin-mesa', 'pr': 14257, 'type': 'pull_request_fifoci_status'}
2026-10-27T20:55:03.676911	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'c9157c4063cb071ebfb15966d8502c6a6544242b', 'service': 'pr-fifoci-mtl-osx-m1', 'pr': 14956, 'type': 'pull_request_fifoci_status'}
2026-10-27T20:49:14.406752	{'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'hash': 'c9157c4063cb071ebfb15966d8502c6a6544242b', 'service': 'pr-fifoci-vk-lin-mesa', 'pr': 14956, 'type': 'pull_request_fifoci_status'}

Recent 'raw_bb_hook' events

2026-10-28T01:57:51.949753	{'source': 'webserver', 'raw': {'buildid': 194722, 'number': 9501, 'builderid': 35, 'buildrequestid': 195301, 'workerid': 5, 'masterid': 1, 'started_at': 1793152093, 'complete_at': 1793152671, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14933', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'branch': ['refs/pull/14933/head', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'builddir': ['/var/lib/fifoci-worker/worker/pr-fifoci-sw-lin-mesa', 'Worker'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'shortrev': ['e212bc', 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'builderid': [35, 'Builder'], 'buildnumber': [9501, 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'codebase': ['', 'Build'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'warnings-count': [2, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195301, 'buildsetid': 43791, 'builderid': 35, 'priority': 0, 'claimed': True, 'claimed_at': 1793152093, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149657, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43791, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793149657, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194708, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194708, 'number': 10845, 'builderid': 27, 'buildrequestid': 195294, 'workerid': 10, 'masterid': 1, 'started_at': 1793148594, 'complete_at': 1793149658, '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/9501'}, 'type': 'raw_bb_hook'}
2026-10-28T01:48:13.304933	{'source': 'webserver', 'raw': {'buildid': 194722, 'number': 9501, 'builderid': 35, 'buildrequestid': 195301, 'workerid': 5, 'masterid': 1, 'started_at': 1793152093, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'branchname': ['pr-14933', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'branch': ['refs/pull/14933/head', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'shortrev': ['e212bc', 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'builderid': [35, 'Builder'], 'buildnumber': [9501, 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195301, 'buildsetid': 43791, 'builderid': 35, 'priority': 0, 'claimed': True, 'claimed_at': 1793152093, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149657, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43791, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793149657, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194708, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194708, 'number': 10845, 'builderid': 27, 'buildrequestid': 195294, 'workerid': 10, 'masterid': 1, 'started_at': 1793148594, 'complete_at': 1793149658, '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/9501'}, 'type': 'raw_bb_hook'}
2026-10-28T01:48:13.178752	{'source': 'webserver', 'raw': {'buildid': 194721, 'number': 5488, 'builderid': 41, 'buildrequestid': 195302, 'workerid': 5, 'masterid': 1, 'started_at': 1793151226, 'complete_at': 1793152093, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'buildnumber': [5488, 'Build'], 'project': ['', 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'branchname': ['pr-14933', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'workername': ['altair-fifoci', 'Worker'], 'codebase': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'shortrev': ['e212bc', 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'builderid': [41, 'Builder'], 'branch': ['refs/pull/14933/head', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builddir': ['/var/lib/fifoci-worker/worker/pr-fifoci-vk-lin-mesa', 'Worker'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'buildername': ['pr-fifoci-vk-lin-mesa', 'Builder'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'warnings-count': [2, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195302, 'buildsetid': 43791, 'builderid': 41, 'priority': 0, 'claimed': True, 'claimed_at': 1793151226, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149657, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43791, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793149657, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194708, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194708, 'number': 10845, 'builderid': 27, 'buildrequestid': 195294, 'workerid': 10, 'masterid': 1, 'started_at': 1793148594, 'complete_at': 1793149658, '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/5488'}, 'type': 'raw_bb_hook'}
2026-10-28T01:35:03.170032	{'source': 'webserver', 'raw': {'buildid': 194720, 'number': 9197, 'builderid': 21, 'buildrequestid': 195304, 'workerid': 8, 'masterid': 1, 'started_at': 1793150650, 'complete_at': 1793151303, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'buildername': ['pr-fifoci-mtl-osx-m1', 'Builder'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['e212bc', 'Trigger'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'branch': ['refs/pull/14933/head', 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'warnings-count': [114, 'WarningCountingShellCommand'], 'branchname': ['pr-14933', 'Trigger'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'pr_id': [14933, 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [21, 'Builder'], 'workername': ['osx-m1', 'Worker'], 'buildnumber': [9197, 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'codebase': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/Users/ci/worker/base', 'Worker'], 'builddir': ['/Users/ci/worker/base/pr-fifoci-mtl-osx-m1', 'Worker']}, 'buildrequest': {'buildrequestid': 195304, 'buildsetid': 43792, 'builderid': 21, 'priority': 0, 'claimed': True, 'claimed_at': 1793150650, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149988, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43792, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793149988, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194710, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194710, 'number': 10863, 'builderid': 7, 'buildrequestid': 195288, 'workerid': 8, 'masterid': 1, 'started_at': 1793149035, 'complete_at': 1793149988, '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/9197'}, 'type': 'raw_bb_hook'}
2026-10-28T01:33:46.473956	{'source': 'webserver', 'raw': {'buildid': 194721, 'number': 5488, 'builderid': 41, 'buildrequestid': 195302, 'workerid': 5, 'masterid': 1, 'started_at': 1793151226, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'buildnumber': [5488, 'Build'], 'project': ['', 'Build'], 'branchname': ['pr-14933', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'workername': ['altair-fifoci', 'Worker'], 'codebase': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'shortrev': ['e212bc', 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'builderid': [41, 'Builder'], 'branch': ['refs/pull/14933/head', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'buildername': ['pr-fifoci-vk-lin-mesa', 'Builder'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build']}, 'buildrequest': {'buildrequestid': 195302, 'buildsetid': 43791, 'builderid': 41, 'priority': 0, 'claimed': True, 'claimed_at': 1793151226, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149657, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43791, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793149657, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194708, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194708, 'number': 10845, 'builderid': 27, 'buildrequestid': 195294, 'workerid': 10, 'masterid': 1, 'started_at': 1793148594, 'complete_at': 1793149658, '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/5488'}, 'type': 'raw_bb_hook'}
2026-10-28T01:33:46.351863	{'source': 'webserver', 'raw': {'buildid': 194715, 'number': 9501, 'builderid': 10, 'buildrequestid': 195300, 'workerid': 5, 'masterid': 1, 'started_at': 1793149658, 'complete_at': 1793151226, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'buildername': ['pr-fifoci-ogl-lin-mesa', 'Builder'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builddir': ['/var/lib/fifoci-worker/worker/pr-fifoci-ogl-lin-mesa', 'Worker'], 'branchname': ['pr-14933', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'buildnumber': [9501, 'Build'], 'project': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'branch': ['refs/pull/14933/head', 'Build'], 'shortrev': ['e212bc', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'builderid': [10, 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'repository': ['', 'Build'], 'codebase': ['', 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'warnings-count': [2, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195300, 'buildsetid': 43791, 'builderid': 10, 'priority': 0, 'claimed': True, 'claimed_at': 1793149658, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149657, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43791, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793149657, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194708, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194708, 'number': 10845, 'builderid': 27, 'buildrequestid': 195294, 'workerid': 10, 'masterid': 1, 'started_at': 1793148594, 'complete_at': 1793149658, '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/9501'}, 'type': 'raw_bb_hook'}
2026-10-28T01:29:32.050307	{'source': 'webserver', 'raw': {'buildid': 194719, 'number': 10853, 'builderid': 31, 'buildrequestid': 195295, 'workerid': 4, 'masterid': 1, 'started_at': 1793150516, 'complete_at': 1793150971, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'buildername': ['pr-win-dbg-x64', 'Builder'], 'workername': ['windows', 'Worker'], 'branch': ['refs/pull/14933/head', 'Build'], 'project': ['', 'Build'], 'basedir': ['c:\\buildbot', 'Worker'], 'sln_exists': ['false', 'SetPropertyFromCommand Step'], 'shortrev': ['e212bc', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [10853, 'Build'], 'repository': ['', 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'branchname': ['pr-14933', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'pr_id': [14933, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [31, 'Builder'], 'warnings-count': [403, 'WarningCountingShellCommand'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'codebase': ['', 'Build'], 'builddir': ['c:\\buildbot\\pr-win-dbg-x64', 'Worker'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'build_url': ['https://dl.dolphin-emu.org/prs/4e/b9/pr-14933-dolphin-latest-dbg-x64.7z', 'SetProperty']}, 'buildrequest': {'buildrequestid': 195295, 'buildsetid': 43790, 'builderid': 31, 'priority': 0, 'claimed': True, 'claimed_at': 1793150516, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/10853'}, 'type': 'raw_bb_hook'}
2026-10-28T01:24:32.664123	{'source': 'webserver', 'raw': {'buildid': 194709, 'number': 5993, 'builderid': 43, 'buildrequestid': 195296, 'workerid': 13, 'masterid': 1, 'started_at': 1793148664, 'complete_at': 1793150672, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'pr_id': [14933, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-flatpak-x64', 'Builder'], 'workername': ['altair-flatpak', 'Worker'], 'branch': ['refs/pull/14933/head', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'builderid': [43, 'Builder'], 'buildnumber': [5993, 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'codebase': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builddir': ['/var/lib/flatpak-worker/worker/pr-flatpak-x64', 'Worker'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'branchname': ['pr-14933', 'Change'], 'shortrev': ['e212bc', 'Change'], 'basedir': ['/var/lib/flatpak-worker/worker', 'Worker'], 'fm_build_url': ['https://flat-manager.dolphin-emu.org/api/v1/build/13248', 'SetPropertyFromCommand Step']}, 'buildrequest': {'buildrequestid': 195296, 'buildsetid': 43790, 'builderid': 43, 'priority': 0, 'claimed': True, 'claimed_at': 1793148664, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/5993'}, 'type': 'raw_bb_hook'}
2026-10-28T01:24:10.426721	{'source': 'webserver', 'raw': {'buildid': 194720, 'number': 9197, 'builderid': 21, 'buildrequestid': 195304, 'workerid': 8, 'masterid': 1, 'started_at': 1793150650, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'buildername': ['pr-fifoci-mtl-osx-m1', 'Builder'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['e212bc', 'Trigger'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'branch': ['refs/pull/14933/head', 'Build'], 'branchname': ['pr-14933', 'Trigger'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'pr_id': [14933, 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [21, 'Builder'], 'workername': ['osx-m1', 'Worker'], 'buildnumber': [9197, 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'codebase': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build']}, 'buildrequest': {'buildrequestid': 195304, 'buildsetid': 43792, 'builderid': 21, 'priority': 0, 'claimed': True, 'claimed_at': 1793150650, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149988, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43792, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793149988, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194710, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194710, 'number': 10863, 'builderid': 7, 'buildrequestid': 195288, 'workerid': 8, 'masterid': 1, 'started_at': 1793149035, 'complete_at': 1793149988, '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/9197'}, 'type': 'raw_bb_hook'}
2026-10-28T01:24:10.294326	{'source': 'webserver', 'raw': {'buildid': 194717, 'number': 9195, 'builderid': 19, 'buildrequestid': 195303, 'workerid': 8, 'masterid': 1, 'started_at': 1793149988, 'complete_at': 1793150650, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'branch': ['refs/pull/14933/head', 'Build'], 'got_revision': ['ca98b3030bcc70e67158ce899a5589aa2ec65d32', 'GitNoBranch'], 'shortrev': ['e212bc', 'Trigger'], 'builderid': [19, 'Builder'], 'repository': ['', 'Build'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'buildername': ['pr-fifoci-mvk-osx-m1', 'Builder'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/Users/ci/worker/base', 'Worker'], 'branchname': ['pr-14933', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'workername': ['osx-m1', 'Worker'], 'buildnumber': [9195, 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'builddir': ['/Users/ci/worker/base/pr-fifoci-mvk-osx-m1', 'Worker'], 'warnings-count': [114, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195303, 'buildsetid': 43792, 'builderid': 19, 'priority': 0, 'claimed': True, 'claimed_at': 1793149988, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149988, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43792, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793149988, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194710, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194710, 'number': 10863, 'builderid': 7, 'buildrequestid': 195288, 'workerid': 8, 'masterid': 1, 'started_at': 1793149035, 'complete_at': 1793149988, '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/9195'}, 'type': 'raw_bb_hook'}
2026-10-28T01:22:59.987678	{'source': 'webserver', 'raw': {'buildid': 194716, 'number': 10844, 'builderid': 1, 'buildrequestid': 195286, 'workerid': 9, 'masterid': 1, 'started_at': 1793149723, 'complete_at': 1793150579, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['e212bc', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [10844, 'Build'], 'project': ['', 'Build'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'pr_id': [14933, 'Change'], 'builderid': [1, 'Builder'], 'repository': ['', 'Build'], 'workername': ['debian', 'Worker'], 'codebase': ['', 'Build'], 'basedir': ['/buildbot', 'Worker'], 'branchname': ['pr-14933', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-deb-dbg-x64', 'Builder'], 'branch': ['refs/pull/14933/head', 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builddir': ['/buildbot/pr-deb-dbg-x64', 'Worker'], 'warnings-count': [2, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195286, 'buildsetid': 43790, 'builderid': 1, 'priority': 0, 'claimed': True, 'claimed_at': 1793149723, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/10844'}, 'type': 'raw_bb_hook'}
2026-10-28T01:21:56.901039	{'source': 'webserver', 'raw': {'buildid': 194719, 'number': 10853, 'builderid': 31, 'buildrequestid': 195295, 'workerid': 4, 'masterid': 1, 'started_at': 1793150516, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'buildername': ['pr-win-dbg-x64', 'Builder'], 'workername': ['windows', 'Worker'], 'branch': ['refs/pull/14933/head', 'Build'], 'project': ['', 'Build'], 'shortrev': ['e212bc', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [10853, 'Build'], 'repository': ['', 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'branchname': ['pr-14933', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'pr_id': [14933, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [31, 'Builder'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195295, 'buildsetid': 43790, 'builderid': 31, 'priority': 0, 'claimed': True, 'claimed_at': 1793150516, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/10853'}, 'type': 'raw_bb_hook'}
2026-10-28T01:21:56.683611	{'source': 'webserver', 'raw': {'buildid': 194718, 'number': 10852, 'builderid': 31, 'buildrequestid': 195276, 'workerid': 4, 'masterid': 1, 'started_at': 1793150514, 'complete_at': 1793150516, 'locks_duration_s': 0, 'complete': True, 'state_string': 'failed update (failure)', 'results': 2, 'properties': {'pr_id': [14933, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'workername': ['windows', 'Worker'], 'repository': ['', 'Build'], 'builddir': ['c:\\buildbot\\pr-win-dbg-x64', 'Worker'], 'basedir': ['c:\\buildbot', 'Worker'], 'branchname': ['pr-14933', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Change'], 'shortrev': ['dc1017', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'builderid': [31, 'Builder'], 'buildnumber': [10852, 'Build'], 'branch': ['refs/pull/14933/head', 'Build'], 'revision': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build']}, 'buildrequest': {'buildrequestid': 195276, 'buildsetid': 43787, 'builderid': 31, 'priority': 0, 'claimed': True, 'claimed_at': 1793150514, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793146755, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43787, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793146755, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13150, 'branch': 'refs/pull/14933/head', 'revision': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793146755, '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/10852'}, 'type': 'raw_bb_hook'}
2026-10-28T01:21:54.645128	{'source': 'webserver', 'raw': {'buildid': 194718, 'number': 10852, 'builderid': 31, 'buildrequestid': 195276, 'workerid': 4, 'masterid': 1, 'started_at': 1793150514, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'pr_id': [14933, 'Change'], 'scheduler': ['pr', 'Scheduler'], 'workername': ['windows', 'Worker'], 'repository': ['', 'Build'], 'branchname': ['pr-14933', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Change'], 'shortrev': ['dc1017', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'builderid': [31, 'Builder'], 'buildnumber': [10852, 'Build'], 'branch': ['refs/pull/14933/head', 'Build'], 'revision': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build']}, 'buildrequest': {'buildrequestid': 195276, 'buildsetid': 43787, 'builderid': 31, 'priority': 0, 'claimed': True, 'claimed_at': 1793150514, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793146755, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43787, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793146755, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13150, 'branch': 'refs/pull/14933/head', 'revision': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793146755, '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/10852'}, 'type': 'raw_bb_hook'}
2026-10-28T01:21:54.546662	{'source': 'webserver', 'raw': {'buildid': 194712, 'number': 10846, 'builderid': 2, 'buildrequestid': 195287, 'workerid': 4, 'masterid': 1, 'started_at': 1793149463, 'complete_at': 1793150514, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14933', 'Change'], 'pr_id': [14933, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-win-x64', 'Builder'], 'workername': ['windows', 'Worker'], 'buildnumber': [10846, 'Build'], 'branch': ['refs/pull/14933/head', 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['c:\\buildbot', 'Worker'], 'builddir': ['c:\\buildbot\\pr-win-x64', 'Worker'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'shortrev': ['e212bc', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'builderid': [2, 'Builder'], 'codebase': ['', 'Build'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'sln_exists': ['false', 'SetPropertyFromCommand Step'], 'warnings-count': [4737, 'WarningCountingShellCommand'], 'build_url': ['https://dl.dolphin-emu.org/prs/14/36/pr-14933-dolphin-latest-x64.7z', 'SetProperty']}, 'buildrequest': {'buildrequestid': 195287, 'buildsetid': 43790, 'builderid': 2, 'priority': 0, 'claimed': True, 'claimed_at': 1793149463, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/10846'}, 'type': 'raw_bb_hook'}
2026-10-28T01:16:15.312527	{'source': 'webserver', 'raw': {'buildid': 194705, 'number': 5933, 'builderid': 44, 'buildrequestid': 195297, 'workerid': 14, 'masterid': 1, 'started_at': 1793148590, 'complete_at': 1793150175, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'pr_id': [14933, 'Change'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'repository': ['', 'Build'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'shortrev': ['e212bc', 'Change'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'buildername': ['pr-flatpak-arm64', 'Builder'], 'codebase': ['', 'Build'], 'builddir': ['/var/lib/flatpak-worker/worker/pr-flatpak-arm64', 'Worker'], 'branchname': ['pr-14933', 'Change'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildnumber': [5933, 'Build'], 'fm_build_url': ['https://flat-manager.dolphin-emu.org/api/v1/build/13247', 'SetPropertyFromCommand Step'], 'builderid': [44, 'Builder'], 'workername': ['deneb-flatpak', 'Worker'], 'branch': ['refs/pull/14933/head', 'Build'], 'basedir': ['/var/lib/flatpak-worker/worker', 'Worker']}, 'buildrequest': {'buildrequestid': 195297, 'buildsetid': 43790, 'builderid': 44, 'priority': 0, 'claimed': True, 'claimed_at': 1793148590, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/5933'}, 'type': 'raw_bb_hook'}
2026-10-28T01:13:09.242320	{'source': 'webserver', 'raw': {'buildid': 194717, 'number': 9195, 'builderid': 19, 'buildrequestid': 195303, 'workerid': 8, 'masterid': 1, 'started_at': 1793149988, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr-fifoci-osx', 'Scheduler'], 'branch': ['refs/pull/14933/head', 'Build'], 'shortrev': ['e212bc', 'Trigger'], 'builderid': [19, 'Builder'], 'repository': ['', 'Build'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'buildername': ['pr-fifoci-mvk-osx-m1', 'Builder'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'branchname': ['pr-14933', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'workername': ['osx-m1', 'Worker'], 'buildnumber': [9195, 'Build'], 'codebase': ['', 'Build'], 'project': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195303, 'buildsetid': 43792, 'builderid': 19, 'priority': 0, 'claimed': True, 'claimed_at': 1793149988, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149988, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43792, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-osx' triggered this build", 'submitted_at': 1793149988, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194710, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194710, 'number': 10863, 'builderid': 7, 'buildrequestid': 195288, 'workerid': 8, 'masterid': 1, 'started_at': 1793149035, 'complete_at': 1793149988, '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/9195'}, 'type': 'raw_bb_hook'}
2026-10-28T01:13:09.069005	{'source': 'webserver', 'raw': {'buildid': 194710, 'number': 10863, 'builderid': 7, 'buildrequestid': 195288, 'workerid': 8, 'masterid': 1, 'started_at': 1793149035, 'complete_at': 1793149988, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14933', 'Change'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'shortrev': ['e212bc', 'Change'], 'pr_id': [14933, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-osx-universal', 'Builder'], 'builderid': [7, 'Builder'], 'buildnumber': [10863, 'Build'], 'branch': ['refs/pull/14933/head', 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'codebase': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'scheduler': ['pr', 'Scheduler'], 'workername': ['osx-m1', 'Worker'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'basedir': ['/Users/ci/worker/base', 'Worker'], 'builddir': ['/Users/ci/worker/base/pr-osx-universal', 'Worker']}, 'buildrequest': {'buildrequestid': 195288, 'buildsetid': 43790, 'builderid': 7, 'priority': 0, 'claimed': True, 'claimed_at': 1793149035, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/10863'}, 'type': 'raw_bb_hook'}
2026-10-28T01:08:53.499286	{'source': 'webserver', 'raw': {'buildid': 194706, 'number': 97, 'builderid': 49, 'buildrequestid': 195298, 'workerid': 15, 'masterid': 1, 'started_at': 1793148590, 'complete_at': 1793149733, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'shortrev': ['e212bc', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildnumber': [97, 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'branchname': ['pr-14933', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'codebase': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'builderid': [49, 'Builder'], 'workername': ['altair-appimage', 'Worker'], 'branch': ['refs/pull/14933/head', 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'project': ['', 'Build'], 'basedir': ['/buildbot', 'Worker'], 'builddir': ['/buildbot/pr-appimage-x64', 'Worker'], 'pr_id': [14933, 'Change'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'buildername': ['pr-appimage-x64', 'Builder'], 'warnings-count': [10, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195298, 'buildsetid': 43790, 'builderid': 49, 'priority': 0, 'claimed': True, 'claimed_at': 1793148590, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/97'}, 'type': 'raw_bb_hook'}
2026-10-28T01:08:44.180671	{'source': 'webserver', 'raw': {'buildid': 194716, 'number': 10844, 'builderid': 1, 'buildrequestid': 195286, 'workerid': 9, 'masterid': 1, 'started_at': 1793149723, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'shortrev': ['e212bc', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildnumber': [10844, 'Build'], 'project': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'pr_id': [14933, 'Change'], 'builderid': [1, 'Builder'], 'repository': ['', 'Build'], 'workername': ['debian', 'Worker'], 'codebase': ['', 'Build'], 'branchname': ['pr-14933', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-deb-dbg-x64', 'Builder'], 'branch': ['refs/pull/14933/head', 'Build'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build']}, 'buildrequest': {'buildrequestid': 195286, 'buildsetid': 43790, 'builderid': 1, 'priority': 0, 'claimed': True, 'claimed_at': 1793149723, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/10844'}, 'type': 'raw_bb_hook'}
2026-10-28T01:08:44.039002	{'source': 'webserver', 'raw': {'buildid': 194701, 'number': 10843, 'builderid': 26, 'buildrequestid': 195293, 'workerid': 9, 'masterid': 1, 'started_at': 1793148590, 'complete_at': 1793149723, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14933', 'Change'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'branch': ['refs/pull/14933/head', 'Build'], 'codebase': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'shortrev': ['e212bc', 'Change'], 'pr_id': [14933, 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'buildername': ['pr-deb-x64', 'Builder'], 'builderid': [26, 'Builder'], 'workername': ['debian', 'Worker'], 'buildnumber': [10843, 'Build'], 'repository': ['', 'Build'], 'project': ['', 'Build'], 'builddir': ['/buildbot/pr-deb-x64', 'Worker'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'warnings-count': [3, 'WarningCountingShellCommand'], 'basedir': ['/buildbot', 'Worker']}, 'buildrequest': {'buildrequestid': 195293, 'buildsetid': 43790, 'builderid': 26, 'priority': 0, 'claimed': True, 'claimed_at': 1793148590, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': None, 'parentbuilder': None, 'builder': {'builderid': 26, 'name': 'pr-deb-x64', 'masterids': [1], 'description': None, 'description_format': None, 'description_html': None, 'projectid': None, 'tags': []}, 'url': 'https://dolphin.ci/#/builders/26/builds/10843'}, 'type': 'raw_bb_hook'}
2026-10-28T01:07:38.442968	{'source': 'webserver', 'raw': {'buildid': 194715, 'number': 9501, 'builderid': 10, 'buildrequestid': 195300, 'workerid': 5, 'masterid': 1, 'started_at': 1793149658, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Trigger'], 'buildername': ['pr-fifoci-ogl-lin-mesa', 'Builder'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'branchname': ['pr-14933', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'buildnumber': [9501, 'Build'], 'project': ['', 'Build'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'branch': ['refs/pull/14933/head', 'Build'], 'shortrev': ['e212bc', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'builderid': [10, 'Builder'], 'workername': ['altair-fifoci', 'Worker'], 'repository': ['', 'Build'], 'codebase': ['', 'Build']}, 'buildrequest': {'buildrequestid': 195300, 'buildsetid': 43791, 'builderid': 10, 'priority': 0, 'claimed': True, 'claimed_at': 1793149658, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793149657, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43791, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793149657, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194708, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, 'patch': None}]}, 'parentbuild': {'buildid': 194708, 'number': 10845, 'builderid': 27, 'buildrequestid': 195294, 'workerid': 10, 'masterid': 1, 'started_at': 1793148594, 'complete_at': 1793149658, '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/9501'}, 'type': 'raw_bb_hook'}
2026-10-28T01:07:38.248240	{'source': 'webserver', 'raw': {'buildid': 194708, 'number': 10845, 'builderid': 27, 'buildrequestid': 195294, 'workerid': 10, 'masterid': 1, 'started_at': 1793148594, 'complete_at': 1793149658, 'locks_duration_s': 0, 'complete': True, 'state_string': 'build successful', 'results': 0, 'properties': {'branchname': ['pr-14933', 'Change'], 'headrev': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Change'], 'shortrev': ['e212bc', 'Change'], 'repo': ['dolphin-emu/dolphin', 'Change'], 'buildername': ['pr-ubu-x64', 'Builder'], 'builderid': [27, 'Builder'], 'buildnumber': [10845, 'Build'], 'branch': ['refs/pull/14933/head', 'Build'], 'project': ['', 'Build'], 'pr_id': [14933, 'Change'], 'revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'Build'], 'repository': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'basedir': ['/buildbot', 'Worker'], 'builddir': ['/buildbot/pr-ubu-x64', 'Worker'], 'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'scheduler': ['pr', 'Scheduler'], 'workername': ['ubuntu-lts', 'Worker'], 'codebase': ['', 'Build'], 'got_revision': ['e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'GitNoBranch'], 'warnings-count': [2, 'WarningCountingShellCommand']}, 'buildrequest': {'buildrequestid': 195294, 'buildsetid': 43790, 'builderid': 27, 'priority': 0, 'claimed': True, 'claimed_at': 1793148594, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793148590, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43790, 'external_idstring': None, 'reason': "The AnyBranchScheduler scheduler named 'pr' triggered this build", 'submitted_at': 1793148590, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': None, 'parent_relationship': None, 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13151, 'branch': 'refs/pull/14933/head', 'revision': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793148590, '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/10845'}, 'type': 'raw_bb_hook'}
2026-10-28T01:05:56.819845	{'source': 'webserver', 'raw': {'buildid': 194714, 'number': 9500, 'builderid': 35, 'buildrequestid': 195282, 'workerid': 5, 'masterid': 1, 'started_at': 1793149555, 'complete_at': 1793149556, 'locks_duration_s': 0, 'complete': True, 'state_string': 'failed update (failure)', 'results': 2, 'properties': {'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'branch': ['refs/pull/14933/head', 'Build'], 'shortrev': ['dc1017', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [35, 'Builder'], 'repository': ['', 'Build'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'codebase': ['', 'Build'], 'basedir': ['/var/lib/fifoci-worker/worker', 'Worker'], 'branchname': ['pr-14933', 'Trigger'], 'headrev': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [9500, 'Build'], 'revision': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build'], 'builddir': ['/var/lib/fifoci-worker/worker/pr-fifoci-sw-lin-mesa', 'Worker']}, 'buildrequest': {'buildrequestid': 195282, 'buildsetid': 43788, 'builderid': 35, 'priority': 0, 'claimed': True, 'claimed_at': 1793149555, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793147684, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43788, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793147684, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194695, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13150, 'branch': 'refs/pull/14933/head', 'revision': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793146755, 'patch': None}]}, 'parentbuild': {'buildid': 194695, 'number': 10844, 'builderid': 27, 'buildrequestid': 195275, 'workerid': 10, 'masterid': 1, 'started_at': 1793146759, 'complete_at': 1793147684, '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/9500'}, 'type': 'raw_bb_hook'}
2026-10-28T01:05:55.591631	{'source': 'webserver', 'raw': {'buildid': 194714, 'number': 9500, 'builderid': 35, 'buildrequestid': 195282, 'workerid': 5, 'masterid': 1, 'started_at': 1793149555, 'complete_at': None, 'locks_duration_s': 0, 'complete': False, 'state_string': 'starting', 'results': None, 'properties': {'baserev': ['3eb30c7620b4475b2e0404228ba0d2b238a132f1', 'Change'], 'branch': ['refs/pull/14933/head', 'Build'], 'shortrev': ['dc1017', 'Trigger'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'builderid': [35, 'Builder'], 'repository': ['', 'Build'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'codebase': ['', 'Build'], 'branchname': ['pr-14933', 'Trigger'], 'headrev': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Trigger'], 'pr_id': [14933, 'Trigger'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'workername': ['altair-fifoci', 'Worker'], 'buildnumber': [9500, 'Build'], 'revision': ['dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'Build'], 'project': ['', 'Build'], 'owners': [['Central (on behalf of: jordan-woyak)'], 'Build']}, 'buildrequest': {'buildrequestid': 195282, 'buildsetid': 43788, 'builderid': 35, 'priority': 0, 'claimed': True, 'claimed_at': 1793149555, 'claimed_by_masterid': 1, 'complete': False, 'results': -1, 'submitted_at': 1793147684, 'complete_at': None, 'waited_for': False, 'properties': None}, 'buildset': {'bsid': 43788, 'external_idstring': None, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'submitted_at': 1793147684, 'complete': False, 'complete_at': None, 'results': -1, 'parent_buildid': 194695, 'parent_relationship': 'Triggered from', 'rebuilt_buildid': None, 'sourcestamps': [{'ssid': 13150, 'branch': 'refs/pull/14933/head', 'revision': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'project': '', 'repository': '', 'codebase': '', 'created_at': 1793146755, 'patch': None}]}, 'parentbuild': {'buildid': 194695, 'number': 10844, 'builderid': 27, 'buildrequestid': 195275, 'workerid': 10, 'masterid': 1, 'started_at': 1793146759, 'complete_at': 1793147684, '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/9500'}, 'type': 'raw_bb_hook'}

Recent 'raw_gh_hook' events

2026-10-28T05:36:36.084495	{'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': 2, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-28T05:36:33Z', '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/6461551396', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6461551396', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6461551396, 'node_id': 'IC_kwDOALCn2M8AAAABgSNzJA', '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-28T05:36:33Z', 'updated_at': '2026-10-28T05:36:33Z', 'body': '> How exactly should we test this? I\'m currently using a Intel CPU...\r\n\r\n<img width="250" height="47" alt="image" src="https://github.com/user-attachments/assets/1f986321-1527-4429-95c6-ce14565f49f8" />\r\n\r\nMmmm, I suppose outside of seeing if the "Precision Frame Timing" setting produces the same or better frame time variance (smoother line here with a low ± number), with the ImmediateXFB and RushFramePresentation settings off, it would be good to know if `tsc_mhz` is being calculated properly in "x64CPUDetect.cpp", but that would require running dolphin in a debugger because the values aren\'t logged anywhere right now.. :(', 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6461551396/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-28T03:31: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': 15731, 'watchers_count': 15731, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15731, '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-28T05:00:12.286729	{'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': 1, 'created_at': '2026-10-26T23:29:19Z', 'updated_at': '2026-10-28T05:00:10Z', '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/6461071809', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14956#issuecomment-6461071809', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14956', 'id': 6461071809, 'node_id': 'IC_kwDOALCn2M8AAAABgRwhwQ', '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-28T05:00:10Z', 'updated_at': '2026-10-28T05:00:10Z', 'body': "How exactly should we test this? I'm currently using a Intel CPU...", 'author_association': 'MEMBER', 'reactions': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/6461071809/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-28T03:31: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': 15731, 'watchers_count': 15731, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15731, '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-28T04:56:17.467580	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5677960686, 'node_id': 'PRR_kwDOALCn2M8AAAABUm7N7g', '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}, 'body': "I forgot to publish my review. I tested this a while ago on Windows 11 (tested again now, just to be sure) and it's working as expected. Didn't notice anything weird or broken in comparison to master, so LGTM...", 'commit_id': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14848#pullrequestreview-5677960686', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14848#pullrequestreview-5677960686'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848'}}, 'submitted_at': '2026-10-28T04:56:15Z', 'updated_at': '2026-10-28T04:56:15Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848', 'id': 4456066985, 'node_id': 'PR_kwDOALCn2M8AAAABCZovqQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14848', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14848.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14848.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14848', 'number': 14848, 'state': 'open', 'locked': False, 'title': 'Qt: Add support for static builds', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'This allows Qt to be static on all Desktop platforms. Most notably, on Windows this gets rid of the DLL files we ship alongside Dolphin, and reduces the binary size by ~8-9MB. This has been tested on Linux and Windows, but should also work on macOS as well.\r\n\r\n<img width="1429" height="414" alt="image" src="https://github.com/user-attachments/assets/be711f13-5401-40c6-967d-e70f89edd4e9" />\r\n\r\nDepends on https://github.com/dolphin-emu/ext-win-qt/pull/25.\r\nThe person merging should change `QT_REPO` and the surrounding variables in `Source/Core/DolphinQt/CMakeLists.txt` to use https://github.com/dolphin-emu/ext-win-qt/ instead of my fork..', 'created_at': '2026-09-06T12:14:18Z', 'updated_at': '2026-10-28T02:15:32Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '1b403b59bccffdebec5acad8dfac9af1cdbdbcb7', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848/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/14848/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'head': {'label': 'JoshuaVandaele:static-qt', 'ref': 'static-qt', 'sha': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 915253252, 'node_id': 'R_kgDONo2oBA', 'name': 'dolphin', 'full_name': 'JoshuaVandaele/dolphin', 'private': False, 'owner': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JoshuaVandaele/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/JoshuaVandaele/dolphin', 'forks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/forks', 'keys_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/events', 'assignees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/merges', 'archive_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/deployments', 'created_at': '2025-01-11T11:19:57Z', 'updated_at': '2026-10-25T13:00:05Z', 'pushed_at': '2026-10-27T19:42:13Z', 'git_url': 'git://github.com/JoshuaVandaele/dolphin.git', 'ssh_url': 'git@github.com:JoshuaVandaele/dolphin.git', 'clone_url': 'https://github.com/JoshuaVandaele/dolphin.git', 'svn_url': 'https://github.com/JoshuaVandaele/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 522352, 'stargazers_count': 1, 'watchers_count': 1, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 1, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 1, 'open_issues': 0, 'watchers': 1, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '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-28T03:31: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': 15731, 'watchers_count': 15731, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15731, '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/14848'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14848'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14848'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14848/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848/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/14848/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/6f4334d90a7b73c04840a2fece4b1fb1fb400bd8'}}, 'author_association': 'CONTRIBUTOR', '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-28T03:31: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': 15731, 'watchers_count': 15731, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15731, '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-28T02:17:03.228653	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676959830, 'node_id': 'PRR_kwDOAW9ayM8AAAABUl-IVg', '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': 'Tested in the https://github.com/dolphin-emu/dolphin/pull/14848 PR.', 'commit_id': 'ce738630c102a1fba3183069efe4c2c3820dfe60', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/ext-win-qt/pull/25#pullrequestreview-5676959830', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25', '_links': {'html': {'href': 'https://github.com/dolphin-emu/ext-win-qt/pull/25#pullrequestreview-5676959830'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25'}}, 'submitted_at': '2026-10-28T02:17:01Z', 'updated_at': '2026-10-28T02:17:01Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25', 'id': 4456066485, 'node_id': 'PR_kwDOAW9ayM8AAAABCZottQ', 'html_url': 'https://github.com/dolphin-emu/ext-win-qt/pull/25', 'diff_url': 'https://github.com/dolphin-emu/ext-win-qt/pull/25.diff', 'patch_url': 'https://github.com/dolphin-emu/ext-win-qt/pull/25.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/25', 'number': 25, 'state': 'open', 'locked': False, 'title': 'Change how we build Qt and make it static', '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': 'Qt is no longer built using the previous Python script, and now entirely relies on CMake. This has the the same advantages of the previous build (only building what we need), but has the added advantages of downloading only what we need, and working across all platforms (albeit only the Windows binaries are shareable.)\r\n\r\nInstead of keeping Binaries in a Git repo (which GitHub is unhappy about, and stopped me from pushing due to repo history size), we now build Qt using a GitHub Action which automatically builds and creates a release on tag creation, with 4 artifacts: x64 binaries, ARM binaries, and their PDBs. This has the added bonus of allowing us to only fetch what we need (see https://github.com/dolphin-emu/dolphin/pull/14848)', 'created_at': '2026-09-06T12:14:09Z', 'updated_at': '2026-10-27T19:43:37Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '0b2b14326625406a7e052f59cbd13893d857ebd9', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25/comments', 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/comments{/number}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/25/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/statuses/ce738630c102a1fba3183069efe4c2c3820dfe60', 'head': {'label': 'JoshuaVandaele:static-qt', 'ref': 'static-qt', 'sha': 'ce738630c102a1fba3183069efe4c2c3820dfe60', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 1087299796, 'node_id': 'R_kgDOQM7g1A', 'name': 'ext-win-qt', 'full_name': 'JoshuaVandaele/ext-win-qt', 'private': False, 'owner': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JoshuaVandaele/ext-win-qt', 'description': None, 'fork': True, 'url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt', 'forks_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/forks', 'keys_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/teams', 'hooks_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/hooks', 'issue_events_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/events', 'assignees_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/tags', 'blobs_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/languages', 'stargazers_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/stargazers', 'contributors_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/contributors', 'subscribers_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/subscribers', 'subscription_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/subscription', 'commits_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/merges', 'archive_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/downloads', 'issues_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/labels{/name}', 'releases_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JoshuaVandaele/ext-win-qt/deployments', 'created_at': '2025-10-31T17:22:29Z', 'updated_at': '2026-02-17T00:23:34Z', 'pushed_at': '2026-10-27T19:40:29Z', 'git_url': 'git://github.com/JoshuaVandaele/ext-win-qt.git', 'ssh_url': 'git@github.com:JoshuaVandaele/ext-win-qt.git', 'clone_url': 'https://github.com/JoshuaVandaele/ext-win-qt.git', 'svn_url': 'https://github.com/JoshuaVandaele/ext-win-qt', 'homepage': None, 'size': 1126241, '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': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 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': '306289108d29a4b31a5460f7b55d28fde7b96d1b', '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': 24074952, 'node_id': 'MDEwOlJlcG9zaXRvcnkyNDA3NDk1Mg==', 'name': 'ext-win-qt', 'full_name': 'dolphin-emu/ext-win-qt', '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/ext-win-qt', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/deployments', 'created_at': '2014-09-15T21:37:27Z', 'updated_at': '2026-06-26T19:23:38Z', 'pushed_at': '2026-06-26T18:52:06Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-qt.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-qt.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-qt.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-qt', 'homepage': None, 'size': 765915, 'stargazers_count': 10, 'watchers_count': 10, 'language': 'C++', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 18, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 1, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 18, 'open_issues': 1, 'watchers': 10, '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'}}, '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25'}, 'html': {'href': 'https://github.com/dolphin-emu/ext-win-qt/pull/25'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/25'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/25/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25/comments'}, 'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls/25/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/statuses/ce738630c102a1fba3183069efe4c2c3820dfe60'}}, 'author_association': 'NONE', 'auto_merge': None, 'assignee': None, 'active_lock_reason': None}, 'repository': {'id': 24074952, 'node_id': 'MDEwOlJlcG9zaXRvcnkyNDA3NDk1Mg==', 'name': 'ext-win-qt', 'full_name': 'dolphin-emu/ext-win-qt', '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/ext-win-qt', 'description': None, 'fork': False, 'url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt', 'forks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/forks', 'keys_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/teams', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/hooks', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/events{/number}', 'events_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/events', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/assignees{/user}', 'branches_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/branches{/branch}', 'tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/tags', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/stargazers', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/contributors', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/subscribers', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/subscription', 'commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/contents/{+path}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/merges', 'archive_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/downloads', 'issues_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/issues{/number}', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/labels{/name}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/releases{/id}', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/ext-win-qt/deployments', 'created_at': '2014-09-15T21:37:27Z', 'updated_at': '2026-06-26T19:23:38Z', 'pushed_at': '2026-06-26T18:52:06Z', 'git_url': 'git://github.com/dolphin-emu/ext-win-qt.git', 'ssh_url': 'git@github.com:dolphin-emu/ext-win-qt.git', 'clone_url': 'https://github.com/dolphin-emu/ext-win-qt.git', 'svn_url': 'https://github.com/dolphin-emu/ext-win-qt', 'homepage': None, 'size': 765915, 'stargazers_count': 10, 'watchers_count': 10, 'language': 'C++', 'has_issues': True, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 18, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 1, 'license': None, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 18, 'open_issues': 1, 'watchers': 10, '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-28T02:15:34.587958	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676951138, 'node_id': 'PRR_kwDOALCn2M8AAAABUl9mYg', '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': 'Tested and this seems to be working. I had to delete my CMake cache.', 'commit_id': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'state': 'approved', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14848#pullrequestreview-5676951138', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14848#pullrequestreview-5676951138'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848'}}, 'submitted_at': '2026-10-28T02:15:32Z', 'updated_at': '2026-10-28T02:15:32Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848', 'id': 4456066985, 'node_id': 'PR_kwDOALCn2M8AAAABCZovqQ', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14848', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14848.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14848.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14848', 'number': 14848, 'state': 'open', 'locked': False, 'title': 'Qt: Add support for static builds', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'body': 'This allows Qt to be static on all Desktop platforms. Most notably, on Windows this gets rid of the DLL files we ship alongside Dolphin, and reduces the binary size by ~8-9MB. This has been tested on Linux and Windows, but should also work on macOS as well.\r\n\r\n<img width="1429" height="414" alt="image" src="https://github.com/user-attachments/assets/be711f13-5401-40c6-967d-e70f89edd4e9" />\r\n\r\nDepends on https://github.com/dolphin-emu/ext-win-qt/pull/25.\r\nThe person merging should change `QT_REPO` and the surrounding variables in `Source/Core/DolphinQt/CMakeLists.txt` to use https://github.com/dolphin-emu/ext-win-qt/ instead of my fork..', 'created_at': '2026-09-06T12:14:18Z', 'updated_at': '2026-10-27T19:45:51Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '1b403b59bccffdebec5acad8dfac9af1cdbdbcb7', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848/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/14848/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'head': {'label': 'JoshuaVandaele:static-qt', 'ref': 'static-qt', 'sha': '6f4334d90a7b73c04840a2fece4b1fb1fb400bd8', 'user': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'repo': {'id': 915253252, 'node_id': 'R_kgDONo2oBA', 'name': 'dolphin', 'full_name': 'JoshuaVandaele/dolphin', 'private': False, 'owner': {'login': 'JoshuaVandaele', 'id': 24195176, 'node_id': 'MDQ6VXNlcjI0MTk1MTc2', 'avatar_url': 'https://avatars.githubusercontent.com/u/24195176?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/JoshuaVandaele', 'html_url': 'https://github.com/JoshuaVandaele', 'followers_url': 'https://api.github.com/users/JoshuaVandaele/followers', 'following_url': 'https://api.github.com/users/JoshuaVandaele/following{/other_user}', 'gists_url': 'https://api.github.com/users/JoshuaVandaele/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/JoshuaVandaele/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/JoshuaVandaele/subscriptions', 'organizations_url': 'https://api.github.com/users/JoshuaVandaele/orgs', 'repos_url': 'https://api.github.com/users/JoshuaVandaele/repos', 'events_url': 'https://api.github.com/users/JoshuaVandaele/events{/privacy}', 'received_events_url': 'https://api.github.com/users/JoshuaVandaele/received_events', 'type': 'User', 'user_view_type': 'public', 'site_admin': False}, 'html_url': 'https://github.com/JoshuaVandaele/dolphin', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'fork': True, 'url': 'https://api.github.com/repos/JoshuaVandaele/dolphin', 'forks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/forks', 'keys_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/collaborators{/collaborator}', 'teams_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/teams', 'hooks_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/hooks', 'issue_events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/events{/number}', 'events_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/events', 'assignees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/assignees{/user}', 'branches_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/branches{/branch}', 'tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/tags', 'blobs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/blobs{/sha}', 'git_tags_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/tags{/sha}', 'git_refs_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/refs{/sha}', 'trees_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/trees{/sha}', 'statuses_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/statuses/{sha}', 'languages_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/stargazers', 'contributors_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contributors', 'subscribers_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscribers', 'subscription_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/subscription', 'commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/commits{/sha}', 'git_commits_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/git/commits{/sha}', 'comments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/comments{/number}', 'issue_comment_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues/comments{/number}', 'contents_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/contents/{+path}', 'compare_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/compare/{base}...{head}', 'merges_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/merges', 'archive_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/{archive_format}{/ref}', 'downloads_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/downloads', 'issues_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/issues{/number}', 'pulls_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/pulls{/number}', 'milestones_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/milestones{/number}', 'notifications_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/notifications{?since,all,participating}', 'labels_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/labels{/name}', 'releases_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/releases{/id}', 'deployments_url': 'https://api.github.com/repos/JoshuaVandaele/dolphin/deployments', 'created_at': '2025-01-11T11:19:57Z', 'updated_at': '2026-10-25T13:00:05Z', 'pushed_at': '2026-10-27T19:42:13Z', 'git_url': 'git://github.com/JoshuaVandaele/dolphin.git', 'ssh_url': 'git@github.com:JoshuaVandaele/dolphin.git', 'clone_url': 'https://github.com/JoshuaVandaele/dolphin.git', 'svn_url': 'https://github.com/JoshuaVandaele/dolphin', 'homepage': 'https://dolphin-emu.org', 'size': 522352, 'stargazers_count': 1, 'watchers_count': 1, 'language': 'C++', 'has_issues': False, 'has_projects': True, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 1, 'mirror_url': None, 'archived': False, 'disabled': False, 'open_issues_count': 0, 'license': {'key': 'other', 'name': 'Other', 'spdx_id': 'NOASSERTION', 'url': None, 'node_id': 'MDc6TGljZW5zZTA='}, 'allow_forking': True, 'is_template': False, 'web_commit_signoff_required': False, 'has_pull_requests': True, 'pull_request_creation_policy': 'all', 'topics': [], 'visibility': 'public', 'forks': 1, 'open_issues': 0, 'watchers': 1, 'default_branch': 'master', 'allow_squash_merge': True, 'allow_merge_commit': True, 'allow_rebase_merge': True, 'allow_auto_merge': False, 'delete_branch_on_merge': False, 'allow_update_branch': False, 'use_squash_pr_title_as_default': False, 'squash_merge_commit_message': 'COMMIT_MESSAGES', 'squash_merge_commit_title': 'COMMIT_OR_PR_TITLE', 'merge_commit_message': 'PR_TITLE', 'merge_commit_title': 'MERGE_MESSAGE'}}, 'base': {'label': 'dolphin-emu:master', 'ref': 'master', 'sha': '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14848'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14848'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14848'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14848/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14848/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/14848/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/6f4334d90a7b73c04840a2fece4b1fb1fb400bd8'}}, 'author_association': 'CONTRIBUTOR', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T01:53:08.127758	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'assigned', 'number': 13495, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13495', 'id': 2444758518, 'node_id': 'PR_kwDOALCn2M6RuA32', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/13495', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/13495.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/13495.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13495', 'number': 13495, 'state': 'open', 'locked': False, 'title': 'CoreTiming/VideoCommon: Add "Sync to Host Refresh Rate" setting.', '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 guess DuckStation and PCSX2 have a feature similar to this.\r\n\r\nThe setting is currently in the main config `Advanced` tab.\r\n<img width="527" height="386" alt="image" src="https://github.com/user-attachments/assets/cbb836cf-1570-4168-89c0-471422b4edea" />\r\n\r\n"V-Sync" must also be enabled.\r\n"Immediately Present XFB" and "Skip Presenting Duplicate Frames" should be disabled for best results.\r\n\r\nI\'m hoping for some comments on how well it works for people.\r\n\r\nTODO:\r\n- [x] Make it work with Vulkan\'s "Backend Multithreading".\r\n- [x] Make it work with Immediate XFB.\r\n- [x] Inform Mixer of the altered speed? (or not, I guess it\'s fine being ~0.1% off)', 'created_at': '2025-04-08T03:18:55Z', 'updated_at': '2026-10-28T01:53:06Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '69fb7981022a6fafdb496473ee25163cee406028', 'assignees': [{'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}], 'requested_reviewers': [], 'requested_teams': [], 'labels': [{'id': 221809816, 'node_id': 'MDU6TGFiZWwyMjE4MDk4MTY=', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/RFC', 'name': 'RFC', 'color': 'FF6D00', 'default': False, 'description': 'Request for comments', 'archived_at': None, 'archived_by': None}], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13495/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13495/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/13495/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/6eaef37e69e7b289d66aa53a9f44b7778f013275', 'head': {'label': 'jordan-woyak:vsync-timing', 'ref': 'vsync-timing', 'sha': '6eaef37e69e7b289d66aa53a9f44b7778f013275', '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-28T00:49:34Z', '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': 529907, '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': 'e6f3ae17627e4344da95b13424af5baf4c892b08', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/13495'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/13495'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13495'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/13495/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/13495/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/13495/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/6eaef37e69e7b289d66aa53a9f44b7778f013275'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'assignee': {'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}, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'clean', 'merged_by': None, 'comments': 14, 'review_comments': 4, 'maintainer_can_modify': True, 'commits': 1, 'additions': 70, 'deletions': 11, 'changed_files': 7}, 'assignee': {'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}, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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': '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}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-28T01:51:45.769248	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'assigned', 'number': 14933, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T01:51:44Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'e843ad5a77c4d320891b01d6e0b8a6f49dac2aa5', 'assignees': [{'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}], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:49:34Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008'}}, 'author_association': 'MEMBER', 'auto_merge': None, 'assignee': {'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}, 'active_lock_reason': None, 'merged': False, 'mergeable': True, 'rebaseable': False, 'mergeable_state': 'clean', 'merged_by': None, 'comments': 0, 'review_comments': 17, 'maintainer_can_modify': True, 'commits': 2, 'additions': 762, 'deletions': 68, 'changed_files': 3}, 'assignee': {'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}, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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': '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}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-28T00:50:00.726225	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676441213, 'node_id': 'PRR_kwDOALCn2M8AAAABUleefQ', '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': None, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676441213', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676441213'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'submitted_at': '2026-10-28T00:49:58Z', 'updated_at': '2026-10-28T00:49:58Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:49:35Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'e843ad5a77c4d320891b01d6e0b8a6f49dac2aa5', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:49:34Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:50:00.160972	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395816787', 'pull_request_review_id': 5676441213, 'id': 4395816787, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgLXUw', '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', 'commit_id': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'original_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': '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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 107, 'original_line': 107, 'side': 'RIGHT', 'in_reply_to_id': 4395262287, 'author_association': 'MEMBER', 'original_position': 119, 'position': 119, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:49:35Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'e843ad5a77c4d320891b01d6e0b8a6f49dac2aa5', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:49:34Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:49:37.106367	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'synchronize', 'number': 14933, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:49:35Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:49:34Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/e212bcdf6384b22ee8559b51bd932da0e0d5e008'}}, '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': 16, 'maintainer_can_modify': True, 'commits': 2, 'additions': 762, 'deletions': 68, 'changed_files': 3}, 'before': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'after': 'e212bcdf6384b22ee8559b51bd932da0e0d5e008', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:37:45.866532	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395750502', 'pull_request_review_id': 5676364843, 'id': 4395750502, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgHUZg', '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', 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'original_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': '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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 107, 'original_line': 107, 'side': 'RIGHT', 'in_reply_to_id': 4395262287, 'author_association': 'MEMBER', 'original_position': 119, 'position': 119, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:36:09Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:37:45.863869	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676364843, 'node_id': 'PRR_kwDOALCn2M8AAAABUlZ0Kw', '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': None, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676364843', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676364843'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'submitted_at': '2026-10-28T00:37:43Z', 'updated_at': '2026-10-28T00:37:43Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:36:09Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:36:11.332281	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395742741', 'pull_request_review_id': 5676355574, 'id': 4395742741, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgG2FQ', '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', 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'original_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': '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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 107, 'original_line': 107, 'side': 'RIGHT', 'in_reply_to_id': 4395262287, 'author_association': 'CONTRIBUTOR', 'original_position': 119, 'position': 119, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:34:27Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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': '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}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-28T00:36:11.329335	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676355574, 'node_id': 'PRR_kwDOALCn2M8AAAABUlZP9g', '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': None, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676355574', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676355574'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'submitted_at': '2026-10-28T00:36:09Z', 'updated_at': '2026-10-28T00:36:09Z', 'author_association': 'CONTRIBUTOR'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:34:27Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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': '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}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-28T00:34:31.811392	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676345335, 'node_id': 'PRR_kwDOALCn2M8AAAABUlYn9w', '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': None, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676345335', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676345335'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'submitted_at': '2026-10-28T00:34:27Z', 'updated_at': '2026-10-28T00:34:27Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:31:22Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:34:29.535743	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395734156', 'pull_request_review_id': 5676345335, 'id': 4395734156, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgGUjA', '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', 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'original_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': "`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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 107, 'original_line': 107, 'side': 'RIGHT', 'in_reply_to_id': 4395262287, 'author_association': 'MEMBER', 'original_position': 119, 'position': 119, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:31:22Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:31:24.843599	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395718468', 'pull_request_review_id': 5676326366, 'id': 4395718468, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgFXRA', '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', 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'original_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': "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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 107, 'original_line': 107, 'side': 'RIGHT', 'in_reply_to_id': 4395262287, 'author_association': 'MEMBER', 'original_position': 119, 'position': 119, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:26:02Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:31:24.839845	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676326366, 'node_id': 'PRR_kwDOALCn2M8AAAABUlXd3g', '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': None, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676326366', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676326366'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'submitted_at': '2026-10-28T00:31:22Z', 'updated_at': '2026-10-28T00:31:22Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:26:02Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:26:04.373812	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395689626', 'pull_request_review_id': 5676293019, 'id': 4395689626, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgDmmg', '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', 'commit_id': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'original_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 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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 107, 'original_line': 107, 'side': 'RIGHT', 'in_reply_to_id': 4395262287, 'author_association': 'CONTRIBUTOR', 'original_position': 119, 'position': 119, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:20:07Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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': '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}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-28T00:26:04.088350	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676293019, 'node_id': 'PRR_kwDOALCn2M8AAAABUlVbmw', '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': None, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676293019', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676293019'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'submitted_at': '2026-10-28T00:26:02Z', 'updated_at': '2026-10-28T00:26:02Z', 'author_association': 'CONTRIBUTOR'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:20:07Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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': '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}, 'installation': {'id': 35437981, 'node_id': 'MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMzU0Mzc5ODE='}}, 'type': 'raw_gh_hook'}
2026-10-28T00:23:32.266044	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'edited', 'number': 14957, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14957', 'id': 5029776029, 'node_id': 'PR_kwDOALCn2M8AAAABK8xKnQ', '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', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957', 'number': 14957, 'state': 'open', 'locked': False, '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}, '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.', 'created_at': '2026-10-27T06:43:26Z', 'updated_at': '2026-10-28T00:23:29Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': 'fdee221ceaaca8cc256726a7ae31df540f133e26', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14957/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14957/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/14957/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/27eac67b181791fdf60ac41943d3ed68ce531b0a', 'head': {'label': 'jordan-woyak:ffmpeg-dlls', 'ref': 'ffmpeg-dlls', 'sha': '27eac67b181791fdf60ac41943d3ed68ce531b0a', '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14957'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14957'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14957/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14957/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/14957/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/27eac67b181791fdf60ac41943d3ed68ce531b0a'}}, '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': 4, 'review_comments': 0, 'maintainer_can_modify': True, 'commits': 3, 'additions': 650, 'deletions': 31, 'changed_files': 14}, 'changes': {'body': {'from': '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\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.'}}, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:20:14.688535	{'source': 'webserver', 'gh_type': 'pull_request_review', 'raw': {'action': 'submitted', 'review': {'id': 5676256145, 'node_id': 'PRR_kwDOALCn2M8AAAABUlTLkQ', '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': None, 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'state': 'commented', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676256145', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933#pullrequestreview-5676256145'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933'}}, 'submitted_at': '2026-10-28T00:20:07Z', 'updated_at': '2026-10-28T00:20:07Z', 'author_association': 'MEMBER'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:18:58Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:20:09.420814	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395658286', 'pull_request_review_id': 5676256145, 'id': 4395658286, 'node_id': 'PRRC_kwDOALCn2M8AAAABBgBsLg', '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', 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'original_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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': None, 'original_line': 139, 'side': 'RIGHT', 'in_reply_to_id': 4395085881, 'author_association': 'MEMBER', 'original_position': 157, 'position': 1, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:18:58Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '9d3500883b831b8886185d5189cdab5f2ad4a994', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, 'author_association': 'MEMBER', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:19:01.446906	{'source': 'webserver', 'gh_type': 'pull_request', 'raw': {'action': 'synchronize', 'number': 14933, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-28T00:18:58Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '06f7a951d6bdc72db77069c07f5e2ddf69747aba', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-28T00:18:56Z', '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': 529907, '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/dc10176e2c77b1ba897d8dd4d3b6947d8fe427df'}}, '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': 10, 'maintainer_can_modify': True, 'commits': 2, 'additions': 758, 'deletions': 68, 'changed_files': 3}, 'before': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'after': 'dc10176e2c77b1ba897d8dd4d3b6947d8fe427df', '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-28T00:11:16Z', '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': 15728, 'watchers_count': 15728, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15728, '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-28T00:10:36.602207	{'source': 'webserver', 'gh_type': 'pull_request_review_comment', 'raw': {'action': 'created', 'comment': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/4395603757', 'pull_request_review_id': 5676177215, 'id': 4395603757, 'node_id': 'PRRC_kwDOALCn2M8AAAABBf-XLQ', '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', 'commit_id': 'de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'original_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', '_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'}}, '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}, 'start_line': None, 'original_start_line': None, 'start_side': None, 'line': 107, 'original_line': 107, 'side': 'RIGHT', 'in_reply_to_id': 4395262287, 'author_association': 'MEMBER', 'original_position': 119, 'position': 119, 'subject_type': 'line'}, 'pull_request': {'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933', 'id': 4879527125, 'node_id': 'PR_kwDOALCn2M8AAAABItes1Q', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/14933', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.diff', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/14933.patch', 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933', 'number': 14933, 'state': 'open', 'locked': False, 'title': ' Common: Rewrite HookableEvent. More features. Better behavioral guarantees. Unit tests.', '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': 'In trying to deal with objects with complicated lifetimes I found our `HookableEvent` lacking.\r\n\r\nThere are now more behavior guarantees and possibilities.\r\n- Recursive `Trigger` works.\r\n- Disconnect within `Trigger` works and instantly destructs the callback.\r\n- Register/Connect within `Trigger` works and is *not* invoked until next `Trigger`\r\n- An `EventHook` callback can indirectly hold a `EventHook` to itself.\r\n  - keeping itself alive until it wants or until the `HookableEvent` goes out of scope.\r\n\r\nThe existing `HookableEvent` -> `EventHook` system was a one-to-many relationship.\r\nIt made a particular scenario inconvenient:\r\ne.g. Some class produces many objects and wishes to connect events with them, with either the producer or the many objects going out of scope first.\r\n\r\nThe one-to-many relationship required maintaining a list of `EventHook`, manually removing them based on the instance lifetime.\r\n\r\nA new `HookHolder` class is a introduced that can hold many `EventHook`, allowing for a many-to-many relationship.\r\nThe internal container is automatically adjusted as hooks are disconnected.\r\n```cpp\r\n  HookableEvent<> event;\r\n  HookHolder holder;\r\n  \r\n  holder.Connect(event, [&] { fmt::print("triggered 1"); });\r\n  \r\n  WeakEventHook hook = holder.Connect(event, [&] { fmt::print("triggered 2"); });\r\n  holder.Disconnect(hook);\r\n```\r\n`HookHolder` creates a system analogous to Qt\'s `connect`.\r\nIn Qt one doesn\'t need to manually maintain a container of "hooks" to keep a `connect` active, you just derive from `QObject`.\r\nSimilarly here, now you can just have one `HookHolder`.\r\n\r\nI\'ve added a bunch of unit tests.\r\n', 'created_at': '2026-10-15T20:38:45Z', 'updated_at': '2026-10-27T23:35:21Z', 'closed_at': None, 'merged_at': None, 'merge_commit_sha': '06f7a951d6bdc72db77069c07f5e2ddf69747aba', 'assignees': [], 'requested_reviewers': [], 'requested_teams': [], 'labels': [], 'milestone': None, 'draft': False, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/commits', 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/comments', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/de776988b7f306f4b0b8fe8e5568615eb8e0f3dc', 'head': {'label': 'jordan-woyak:hookable-event-better', 'ref': 'hookable-event-better', 'sha': '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}, '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-27T23:19:13Z', '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': 529907, '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': '22b581c670d84e60d11c1b02d38e1c7789ae2dfa', '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-27T20:47:49Z', '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': 15727, 'watchers_count': 15727, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15727, '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/14933'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/14933'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/14933/comments'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/14933/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/14933/commits'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/de776988b7f306f4b0b8fe8e5568615eb8e0f3dc'}}, 'author_association': 'MEMBER', '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-27T20:47:49Z', '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': 15727, 'watchers_count': 15727, 'language': 'C++', 'has_issues': False, 'has_projects': False, 'has_downloads': False, 'has_wiki': True, 'has_pages': False, 'has_discussions': False, 'forks_count': 3356, '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': 3356, 'open_issues': 484, 'watchers': 15727, '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'}