When software I depend on breaks, I report it upstream: what I saw, how to reproduce it, the numbers I measured, and where in the code I think the fault is. Where I can, I send the fix as well. These are my contributions to other people’s projects, newest first, with the outcome as GitHub shows it today.
rommapp/rommFixed#5200 a deduplicated save upload that leaves the wrong version newest
closed as completed, fixed by #5204, in RomM 5.4.0
When a device uploads a save whose bytes already exist in the same slot, RomM quietly returns the older matching version without marking it as the newest or recording that the device now holds it. A client that later asks for the slot’s newest save gets a different, older version than the one it just uploaded, and silently rolls back. I traced the branch to its line numbers, showed the sequence that triggered it, and proposed either bumping the match or telling the client it was deduplicated. The maintainer fixed it the same day by bumping the match: a duplicate of an older version now becomes the slot’s newest save.
rommapp/rommOpen#5199 a start screen that defaults to another device’s save state
open
RomM’s web player opens a game on the newest progress it can find, and a save state uploaded by a companion app on another device ties with that device’s save to the second and wins. Loaded in the browser, that state starts the game as if from scratch, and quitting then writes a blank save. The server keeps no record of which device or emulator build wrote a state, so it cannot tell the two apart; I asked for that record and for the default to prefer the player’s own state or the newest save.
rommapp/argosy-launcherFixed#497 a conflict dialog that says the wrong thing will happen
closed as completed, fixed in Argosy 2.21.0
When the server holds a newer save from another device, Argosy’s dialog says that pressing Overwrite will replace it. Against RomM 5.3.1 it does not: the upload becomes a new version and the other device’s save stays, unchanged. I showed the rows before and after the press, on two versions of the app, and asked for wording that matches a server that keeps versions. Since 2.21.0 the dialog says the server’s copy is kept.
rommapp/argosy-launcherFixed#496 a working report from a 32-bit Fire TV Cube
closed as completed; the project’s wiki now lists 32-bit support as community-tested, with the Fire TV Cube as a confirmed device
The project’s wiki called 32-bit ARM support experimental and said a recent test on a real device had failed, so I wrote up one that worked: a Fire TV Cube running Android 9, with a Bluetooth controller driving the whole setup and SNES, Nintendo 64 and PlayStation titles at full speed. It lists what needed a workaround, what was not tested, and one download-size oddity left unexplained.
rommapp/argosy-launcherFixed#495 a clock write that throws at every save
closed as completed, fixed in Argosy 2.21.0
Every time Argosy’s built-in emulator writes a game’s save memory, the real-time-clock write beside it fails with a null-pointer exception, logged with a full stack trace. The save itself survives, so a game without a clock loses nothing; for games that keep their clock in that separate file the loss is untested, and I said so. The 2.21.0 release stopped the error.
rommapp/argosy-launcherFixed#494 skipping one prompt silently disables the emulator
closed as completed, fixed in Argosy 2.21.0
Skipping the first-run prompt to download emulator cores turns Argosy’s built-in emulator off without saying so, and the first game then fails with “no emulator installed” on a device where that emulator is the only one. I named the method that does it and suggested either deferring the download, saying what skipping does, or pointing the error at the setting. Since 2.21.0, skipping the download leaves the emulator on.
rommapp/argosy-launcherFixed#493 a storage permission never requested on Android 9
closed as completed, fixed in Argosy 2.21.0
On Android 9 the first-run wizard shows its storage step as already granted, because the permission it checks for only exists from Android 11, and then the folder picker cannot open any directory. The two permissions that apply on Android 9 are never requested. I showed it on two devices, confirmed that Android 11 is unaffected, and gave the two-line workaround. Since 2.21.0, setup asks for the permission on Android 9.
nextcloud/serverOpen#64497 measurements for a stuck folder removal
open (the fix is merged on the main branch; this is its backport to the 34.x series)
On Nextcloud 34, removing a large folder that had already been deleted on disk ran for well over an hour inside one database transaction without finishing, re-sending ever-growing delete statements that removed nothing and blocking other writes. I posted the measurements and the workaround that got us through, in support of shipping the upstream fix to 34.x. It came out of the fsprune work.
rommapp/rommFixed#4798 gamepad focus on the game page
closed as completed, fixed by #4811 and #4855, in RomM 5.4.0
In RomM’s new interface, a gamepad could move focus left and right on a game’s page but not up or down, and a grid page did not scroll back up when focus moved above the visible rows. Both leave parts of the interface out of reach for someone using only a controller.
rommapp/rommFixed#4797 the gamepad that pressed Play is ignored
closed as completed, fixed by #4808, in RomM 5.4.0
If a gamepad was used to press Play, the embedded EmulatorJS player ignored that same pad until it was switched off and on again. The browser announces a pad only once, and that happened before the player existed, so I suggested handing the player the pads already connected once it is ready.
nextcloud/recognizeFixed#1573 an unindexed lookup on every deleted file
closed as completed, fixed by #1574 on the main branch, not yet in a release
The Recognize app looks up a table by a column that no index covers once for every file removed, so a large removal reads the whole table per file. I measured a scan that would have taken hours drop to under six minutes with an index added, and proposed a lookup that uses the index the table already has. It came out of the fsprune work.
WordPress/wordpress-developOpen#13693 canonical redirects on encoding alone
open
WordPress’s canonical redirect rebuilds the query string, so a link with a plus sign, as email tools often write them, gets a permanent redirect to a URL that means the same thing. A page cache that treats both spellings as one can serve that redirect for its own target, and the page loops. After review, the change is one late check: when a redirect would change only how the query is written, not what it says, WordPress skips it. That also covers a stray & at either end of the query. The approach came from a reviewer and replaced my first version, which built on another contributor’s earlier pull request. I added a test for a stray & away from the front page and confirmed that eight tests fail without the fix.
rommapp/rommFixed#4557 a server error after pressing Back at login
closed as completed, fixed by #4746, in RomM 5.4.0
Pressing the browser’s Back button after signing in with single sign-on replayed an already-used login step, and RomM answered with a bare server error instead of starting a fresh login. The fix sends the user back to login when the provider’s answer is rejected.
rommapp/rommClosed#4556 an exit button chord too tight to press
closed; the maintainers are retiring that interface
RomM’s older console mode only let a gamepad leave a game if two buttons were pressed within 200 ms of each other, which I measured as out of reach on a common controller. The maintainers closed it because that interface is being retired.
EmulatorJS/EmulatorJSOpen#1265 DOSBox Pure saves never reach the frontend
open
With the DOSBox Pure core, a program’s own save files never reach a frontend that collects saves through EmulatorJS, because the core keeps no save memory and the file it does write is not where EmulatorJS looks. I traced both halves in the source and noted that part of the fix is already on the main branch but unreleased.
EmulatorJS/EmulatorJSFixed#1260 multi-disk content fails to start
closed as completed; the maintainer points to a fix on the main branch, available in a pre-release
Another user reported that content with more than one disk failed to start. I reproduced it on a second core, showed that the disk count alone triggers it, found the line where a settings object is used before it is created, and confirmed that the main branch already has the fix while the latest release does not.
rommapp/rommFixed#4398 a metadata timeout treated as a real miss
closed as completed, fixed in RomM 5.3.0
When the Hasheous metadata service timed out or returned an error, RomM treated it as a definite “not found”: one kind of scan quietly removed matches it had already made, and every scan recorded the failure as “not identified” with no retry. Both halves were fixed and shipped in 5.3.0, and the maintainer credited the controlled reproduction for pinning down the timeout path.
rommapp/rommFixed#4380 a missing firmware file gives a server error
closed as completed, fixed by #4405, in RomM 5.3.0
When a registered firmware file was no longer on disk, RomM’s download endpoint crashed with a server error instead of answering “not found”, and the player started anyway without telling the user the firmware they picked was not used. The fix makes the endpoint return a proper not-found answer.
rommapp/rommMerged#4378 optional automatic upload of save files
merged, in RomM 5.3.0
RomM’s player only uploaded in-game saves when the user pressed a button, so closing the tab lost the session, while an earlier automatic upload had been removed because it could corrupt saves. My change, behind a setting that is off by default, uploads a save only once it has stopped changing and is not the same as the last upload; it closed the documentation issue #4201, where I had explained the approach, and the maintainers have since built on it.
nflverse/nflverse-playersMerged#20 one player’s wrong ESPN id
merged
A manual correction in the nflverse player data gave one player his college ESPN id instead of his NFL one. I checked both ids against ESPN’s own records and changed the one entry; the maintainer merged it and noted that the automated pipeline now finds the right id by itself. It came out of the NFL prediction platform work.
dynastyprocess/dataOpen#84 player ids shared by two players
open
In DynastyProcess’s player id crosswalk, several ESPN and Pro Football Reference ids were each attached to two different players, which silently joins one player’s data to another. I listed the pairs, showed which side was wrong where the id itself says so, and followed up with more rows resolved against ESPN’s records. It came out of the NFL prediction platform work.
WordPress/gutenbergFixed#76851 nested lists duplicated by an HTML round trip
closed as completed, fixed by #76897, in Gutenberg 22.9.0
In the block editor, switching a list item that holds a nested list to “Edit as HTML” and back, with no changes, duplicated the nested items and left broken markup behind, and each round trip made it worse. The fix took the HTML editing option away for list items, as it already had been for lists.