diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 53ecb865b..37fcefaab 100755 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.33.0" + ".": "1.0.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f049eb59c..fe5b56d57 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,179 @@ # Changelog +## [1.0.0](https://github.com/danielcopper/romm-tender/compare/tender-v0.33.0...tender-v1.0.0) (2026-10-29) + + +### ⚠ BREAKING CHANGES + +* **connection:** Tender requires RomM 5.3.0 or newer; older servers are refused at connect. + +### Features + +* **artwork:** choose each slot's image in an ARTWORK tab on the game page ([#2518](https://github.com/danielcopper/romm-tender/issues/2518)) ([5dcde7d](https://github.com/danielcopper/romm-tender/commit/5dcde7d893ecece2bcd3cd90583620fb71218c52)), closes [#2501](https://github.com/danielcopper/romm-tender/issues/2501) +* **artwork:** fill only a game page's empty artwork slots and record what SteamGridDB had ([#2392](https://github.com/danielcopper/romm-tender/issues/2392)) ([b0d7d1c](https://github.com/danielcopper/romm-tender/commit/b0d7d1c2f1d1934889b822ab8f65f49ff0ee6cef)), closes [#1766](https://github.com/danielcopper/romm-tender/issues/1766) +* **artwork:** give a shortcut its SteamGridDB icon once its ROM gains an id, and record the icon like the wide grid and the logo ([#2417](https://github.com/danielcopper/romm-tender/issues/2417)) ([baacc7e](https://github.com/danielcopper/romm-tender/commit/baacc7ee2d70a3f948f21e0c90eeea9e5413c51a)) +* **artwork:** give every shortcut its SteamGridDB icon from a background job ([#2182](https://github.com/danielcopper/romm-tender/issues/2182)) ([f3ea3a1](https://github.com/danielcopper/romm-tender/commit/f3ea3a1eca0b242e714b06570867adf87beb1daa)) +* **artwork:** give every shortcut its wide grid and logo from the shortcut artwork job ([#2401](https://github.com/danielcopper/romm-tender/issues/2401)) ([5a9101b](https://github.com/danielcopper/romm-tender/commit/5a9101b54dfe0f1abf1c0f130ecf3f484a22b970)), closes [#2295](https://github.com/danielcopper/romm-tender/issues/2295) +* **artwork:** keep an icon somebody set on the game page's first visit, and fetch the page's icon through the per-slot path ([#2424](https://github.com/danielcopper/romm-tender/issues/2424)) ([8c7ebf4](https://github.com/danielcopper/romm-tender/commit/8c7ebf450fa43a7589b5cddd587e4f61e74487f7)) +* **artwork:** keep automatic artwork current and fall back to SteamGridDB for a missing cover ([#2532](https://github.com/danielcopper/romm-tender/issues/2532)) ([377f10c](https://github.com/danielcopper/romm-tender/commit/377f10cd5e66c31a43565e8a0ddd3981b4ef2ad8)), closes [#2522](https://github.com/danielcopper/romm-tender/issues/2522) +* **artwork:** record the hero and the user's choices, and recognise an image set in Steam ([#2499](https://github.com/danielcopper/romm-tender/issues/2499)) ([536065e](https://github.com/danielcopper/romm-tender/commit/536065e1495daf35c8321f20ff1ee648741ea060)), closes [#2497](https://github.com/danielcopper/romm-tender/issues/2497) +* **atlas:** run on emu-atlas 0.22.0 and name a RetroDECK not set up ([#2266](https://github.com/danielcopper/romm-tender/issues/2266)) ([7eb0a19](https://github.com/danielcopper/romm-tender/commit/7eb0a19365f9152983c674b6b8f32c31498d838a)), closes [#2265](https://github.com/danielcopper/romm-tender/issues/2265) [#2234](https://github.com/danielcopper/romm-tender/issues/2234) +* **atlas:** run on emu-atlas 0.29.0 and classify its new codes ([#2648](https://github.com/danielcopper/romm-tender/issues/2648)) ([e04c54e](https://github.com/danielcopper/romm-tender/commit/e04c54ee74400494ca82c7c73709a108da5a483b)), closes [#2644](https://github.com/danielcopper/romm-tender/issues/2644) +* **bios:** judge one-of BIOS groups by region on emu-atlas 0.21.0 ([#2172](https://github.com/danielcopper/romm-tender/issues/2172)) ([2da2b81](https://github.com/danielcopper/romm-tender/commit/2da2b81fee73549ff6083ab041d2472fbbf2ad09)), closes [#1912](https://github.com/danielcopper/romm-tender/issues/1912) [#2144](https://github.com/danielcopper/romm-tender/issues/2144) +* **bios:** keep downloaded BIOS files in Tender's firmware store and link them where each emulator looks ([#2519](https://github.com/danielcopper/romm-tender/issues/2519)) ([137e085](https://github.com/danielcopper/romm-tender/commit/137e085fd569d03af4ad6ae0bb213dea6d80aa97)), closes [#2191](https://github.com/danielcopper/romm-tender/issues/2191) [#1887](https://github.com/danielcopper/romm-tender/issues/1887) [#1835](https://github.com/danielcopper/romm-tender/issues/1835) +* **bios:** read the BIOS state of every platform the library lists ([#2475](https://github.com/danielcopper/romm-tender/issues/2475)) ([e516ca0](https://github.com/danielcopper/romm-tender/commit/e516ca0b287305fe15fa669a426a0b6e23961bd8)), closes [#2456](https://github.com/danielcopper/romm-tender/issues/2456) +* **cleanup:** the cleanup dialog says per game and per version what a cleanup would do ([#2473](https://github.com/danielcopper/romm-tender/issues/2473)) ([ecb0967](https://github.com/danielcopper/romm-tender/commit/ecb09670cce6306208719c7f10314728f301e95b)), closes [#2432](https://github.com/danielcopper/romm-tender/issues/2432) +* **collections:** name standard collections without a suffix under by_label ([#2033](https://github.com/danielcopper/romm-tender/issues/2033)) ([49d2892](https://github.com/danielcopper/romm-tender/commit/49d2892400c18190ad7e498e1ae976c5f3929d97)), closes [#1833](https://github.com/danielcopper/romm-tender/issues/1833) +* **connection:** require RomM 5.3.0 ([#2006](https://github.com/danielcopper/romm-tender/issues/2006)) ([c3b93f0](https://github.com/danielcopper/romm-tender/commit/c3b93f0d086038748f84aa1c42cb3fc86d04925d)) +* **downloads:** unpack a single zip that holds a disc image ([#2480](https://github.com/danielcopper/romm-tender/issues/2480)) ([2f13843](https://github.com/danielcopper/romm-tender/commit/2f13843eeb95479784455052d10ea86de9c3cf8e)), closes [#910](https://github.com/danielcopper/romm-tender/issues/910) +* **emulators:** vendor a zstd codec for the resolver where the system Python has none ([#2310](https://github.com/danielcopper/romm-tender/issues/2310)) ([129409e](https://github.com/danielcopper/romm-tender/commit/129409e0ef9984fb727613d1c579543f2e02a9a4)), closes [#1848](https://github.com/danielcopper/romm-tender/issues/1848) +* **folder:** give Tender its own folder, at a place the user chooses ([#2487](https://github.com/danielcopper/romm-tender/issues/2487)) ([b4057f1](https://github.com/danielcopper/romm-tender/commit/b4057f14971fe71bf9b13f926503fe31307226e0)), closes [#2385](https://github.com/danielcopper/romm-tender/issues/2385) +* **frontend:** the panel runs without Decky Loader ([#1932](https://github.com/danielcopper/romm-tender/issues/1932)) ([6f71fda](https://github.com/danielcopper/romm-tender/commit/6f71fda7a96ab9097fc4e7e9ff8ae36aaa56b9f3)), closes [#1899](https://github.com/danielcopper/romm-tender/issues/1899) +* **game-page:** lay out the BIOS tab in two columns with the platform page's table ([#2540](https://github.com/danielcopper/romm-tender/issues/2540)) ([79571c3](https://github.com/danielcopper/romm-tender/commit/79571c301f0909153f4c933c50e1c5922fb572fc)), closes [#2531](https://github.com/danielcopper/romm-tender/issues/2531) [#2429](https://github.com/danielcopper/romm-tender/issues/2429) +* **game-page:** make the game page's tabs Steam's own, with L1 and R1 ([#2555](https://github.com/danielcopper/romm-tender/issues/2555)) ([cb3d713](https://github.com/danielcopper/romm-tender/commit/cb3d713b6ce72908ba06c152c326d3a8c0fdde90)), closes [#2421](https://github.com/danielcopper/romm-tender/issues/2421) +* **game-page:** show the BIOS tab from the moment the game page opens ([#2537](https://github.com/danielcopper/romm-tender/issues/2537)) ([363813e](https://github.com/danielcopper/romm-tender/commit/363813e77f0fbee73265f1642cbee67efe5f3b7a)), closes [#2529](https://github.com/danielcopper/romm-tender/issues/2529) +* **gamepage:** put Tender's section on Steam's game page through a seam of its own ([#1968](https://github.com/danielcopper/romm-tender/issues/1968)) ([449a943](https://github.com/danielcopper/romm-tender/commit/449a9430e6badd4ffe748354435ab6053b32b453)), closes [#1944](https://github.com/danielcopper/romm-tender/issues/1944) +* **host:** serve the backend over a loopback HTTP and WebSocket server ([#1920](https://github.com/danielcopper/romm-tender/issues/1920)) ([6e47c53](https://github.com/danielcopper/romm-tender/commit/6e47c53aa571371f7b8a89ca59033f3cacd6f402)), closes [#1898](https://github.com/danielcopper/romm-tender/issues/1898) +* **inject:** reload steam's js context when an earlier backend's panel is still loaded ([#2038](https://github.com/danielcopper/romm-tender/issues/2038)) ([8f53704](https://github.com/danielcopper/romm-tender/commit/8f53704872061eb5b5a2dbb6dd7c4d59da4830e8)), closes [#2009](https://github.com/danielcopper/romm-tender/issues/2009) +* **inject:** the backend loads the panel into Steam itself ([#1937](https://github.com/danielcopper/romm-tender/issues/1937)) ([7558291](https://github.com/danielcopper/romm-tender/commit/75582916dcb87831388b7acf49cd382948a37d9b)), closes [#1900](https://github.com/danielcopper/romm-tender/issues/1900) +* **install:** one-line installer, user unit, XDG layout ([#1969](https://github.com/danielcopper/romm-tender/issues/1969)) ([73d7771](https://github.com/danielcopper/romm-tender/commit/73d7771770c69ea87845d9062be6800c2b8dcf17)), closes [#1902](https://github.com/danielcopper/romm-tender/issues/1902) +* **install:** run on Python 3.12, for Ubuntu 24.04 LTS and Linux Mint 22 ([#2471](https://github.com/danielcopper/romm-tender/issues/2471)) ([7589175](https://github.com/danielcopper/romm-tender/commit/7589175a7c58b3a76721b738978c16595b924a11)), closes [#2467](https://github.com/danielcopper/romm-tender/issues/2467) +* **install:** try the new version before anything is stopped ([#2138](https://github.com/danielcopper/romm-tender/issues/2138)) ([c4856b2](https://github.com/danielcopper/romm-tender/commit/c4856b2bdd773f4c1b7fd228f8d2219d89a528a3)), closes [#2126](https://github.com/danielcopper/romm-tender/issues/2126) +* **install:** update an existing install and roll back when the new version does not answer ([#2075](https://github.com/danielcopper/romm-tender/issues/2075)) ([3b5bd4b](https://github.com/danielcopper/romm-tender/commit/3b5bd4b59ec32f298f81106a1f232073e68c6ad7)), closes [#2011](https://github.com/danielcopper/romm-tender/issues/2011) +* **launch:** never start a game through a switched-off emulator source ([#2317](https://github.com/danielcopper/romm-tender/issues/2317)) ([2b13f84](https://github.com/danielcopper/romm-tender/commit/2b13f84a14438e30ea425af0626d8af852a6316a)), closes [#2269](https://github.com/danielcopper/romm-tender/issues/2269) +* **library:** a shortcut whose version is gone from RomM stays bound to it, and its game page says so ([#2428](https://github.com/danielcopper/romm-tender/issues/2428)) ([dde144f](https://github.com/danielcopper/romm-tender/commit/dde144f8da1fb06c91358e159cf2ff675a7bd23f)), closes [#2407](https://github.com/danielcopper/romm-tender/issues/2407) +* **library:** forward each collection's in-Steam count and owner name ([#1994](https://github.com/danielcopper/romm-tender/issues/1994)) ([25001f4](https://github.com/danielcopper/romm-tender/commit/25001f489550d92d06c0c23caef241204f9653dc)), closes [#1833](https://github.com/danielcopper/romm-tender/issues/1833) +* **prune:** load the cleanup list by itself and send its text whole ([#2261](https://github.com/danielcopper/romm-tender/issues/2261)) ([b43c75f](https://github.com/danielcopper/romm-tender/commit/b43c75f15479dc39e097cc3c4c68aeacd36ed0f0)) +* **qam:** a setting for whether Tender's Quick Access entry sits above or below Decky's ([#2324](https://github.com/danielcopper/romm-tender/issues/2324)) ([9726857](https://github.com/danielcopper/romm-tender/commit/9726857a8116b458a9c6eb1849dd80364f5958e0)), closes [#2194](https://github.com/danielcopper/romm-tender/issues/2194) +* **qam:** list the collection kinds with their collections beside them ([#2002](https://github.com/danielcopper/romm-tender/issues/2002)) ([d47ef68](https://github.com/danielcopper/romm-tender/commit/d47ef683ab3193daa7aee44641feaca9218dbe4f)), closes [#1833](https://github.com/danielcopper/romm-tender/issues/1833) [#1020](https://github.com/danielcopper/romm-tender/issues/1020) +* **qam:** make Data Management an inventory of what this device holds ([#1977](https://github.com/danielcopper/romm-tender/issues/1977)) ([1098819](https://github.com/danielcopper/romm-tender/commit/1098819d4793d146fdd762c48f80635f63244269)), closes [#1817](https://github.com/danielcopper/romm-tender/issues/1817) +* **qam:** mount Tender's panel behind its own Quick Access entry ([#1946](https://github.com/danielcopper/romm-tender/issues/1946)) ([6af1586](https://github.com/danielcopper/romm-tender/commit/6af1586124ebc3a38733cceb6b7913dbf50ebef2)), closes [#1942](https://github.com/danielcopper/romm-tender/issues/1942) +* **qam:** redraw the removed-games review so its controls are within reach ([#1986](https://github.com/danielcopper/romm-tender/issues/1986)) ([ec9fef7](https://github.com/danielcopper/romm-tender/commit/ec9fef784decb2243021f7f8d39568b9318c7f0e)), closes [#1817](https://github.com/danielcopper/romm-tender/issues/1817) +* **release:** the tarball and its checksum ship with every release ([#1975](https://github.com/danielcopper/romm-tender/issues/1975)) ([9ff3c06](https://github.com/danielcopper/romm-tender/commit/9ff3c064688f19100222e6c73ffd8133f87b9d17)), closes [#1904](https://github.com/danielcopper/romm-tender/issues/1904) +* **saves:** run on emu-atlas 0.26.0 and pass each save file's size_fixed to gavel ([#2554](https://github.com/danielcopper/romm-tender/issues/2554)) ([00056b8](https://github.com/danielcopper/romm-tender/commit/00056b8ca7000c5129718286a90aa5c8772e2f20)), closes [#2538](https://github.com/danielcopper/romm-tender/issues/2538) +* **saves:** run on emu-atlas 0.28.0 and drop Tender's own merge of save claims ([#2571](https://github.com/danielcopper/romm-tender/issues/2571)) ([12d543d](https://github.com/danielcopper/romm-tender/commit/12d543d2c5ae43caa3fc880fa3959ea0a6681dbd)), closes [#2565](https://github.com/danielcopper/romm-tender/issues/2565) +* **saves:** take the save directory from the resolver and follow it when it moves ([#2005](https://github.com/danielcopper/romm-tender/issues/2005)) ([89ea4ed](https://github.com/danielcopper/romm-tender/commit/89ea4ed0150be5b6d1aec18004b73d50ca80d9d1)), closes [#1660](https://github.com/danielcopper/romm-tender/issues/1660) [#1811](https://github.com/danielcopper/romm-tender/issues/1811) +* **saves:** update to romm-gavel 2.0.0 — adopt identical saves without a transfer, guard truncated saves by content size ([#2535](https://github.com/danielcopper/romm-tender/issues/2535)) ([20e97d0](https://github.com/danielcopper/romm-tender/commit/20e97d0dc9b9a171bef5a25c305b4803d9e5c8cb)), closes [#2525](https://github.com/danielcopper/romm-tender/issues/2525) +* **settings:** show an update as one block in Settings › Updates, and let Check now ask whatever the switch says ([#2142](https://github.com/danielcopper/romm-tender/issues/2142)) ([5c504e3](https://github.com/danielcopper/romm-tender/commit/5c504e384bd0718d6ac1ee59ffd7f2e0fb26195b)), closes [#2123](https://github.com/danielcopper/romm-tender/issues/2123) +* **toasts:** raise toasts through Steam's own notification store ([#1953](https://github.com/danielcopper/romm-tender/issues/1953)) ([259aa99](https://github.com/danielcopper/romm-tender/commit/259aa99d8807f68bd5d7f95c91bc7bd98571300d)), closes [#1943](https://github.com/danielcopper/romm-tender/issues/1943) +* **ui:** the fallback page can install the update that repairs it ([#2451](https://github.com/danielcopper/romm-tender/issues/2451)) ([a2331c1](https://github.com/danielcopper/romm-tender/commit/a2331c1423b906dd80edb17d6af6f198028c073a)), closes [#2437](https://github.com/danielcopper/romm-tender/issues/2437) +* **update:** announce a newer release with a toast and three dots ([#2180](https://github.com/danielcopper/romm-tender/issues/2180)) ([46ef739](https://github.com/danielcopper/romm-tender/commit/46ef739f79272bf2577c8e52d2ee9e5800293356)), closes [#2125](https://github.com/danielcopper/romm-tender/issues/2125) +* **update:** check for a newer release and show it in the panel ([#2028](https://github.com/danielcopper/romm-tender/issues/2028)) ([c53ad5a](https://github.com/danielcopper/romm-tender/commit/c53ad5ab13176d901899e9d010098a668a4c40bc)), closes [#2010](https://github.com/danielcopper/romm-tender/issues/2010) +* **update:** install the offered release from Settings › Updates, and check for one while running ([#2127](https://github.com/danielcopper/romm-tender/issues/2127)) ([a917ecb](https://github.com/danielcopper/romm-tender/commit/a917ecb2a0091a9be30f00c2ecb13807db9c6f38)), closes [#2012](https://github.com/danielcopper/romm-tender/issues/2012) +* **update:** notify a failed update and show what its installer said ([#2161](https://github.com/danielcopper/romm-tender/issues/2161)) ([5dacf4e](https://github.com/danielcopper/romm-tender/commit/5dacf4e6ba01f218e4e5af4d4bdaeea3b9c8579b)), closes [#2128](https://github.com/danielcopper/romm-tender/issues/2128) +* **update:** tell the user what the last update did, and count a release only with its checksum file ([#2110](https://github.com/danielcopper/romm-tender/issues/2110)) ([fb3b8b9](https://github.com/danielcopper/romm-tender/commit/fb3b8b95d429e52a74bc5d3d75a7e6ce3dfc7dad)) + + +### Bug Fixes + +* **adoption:** use these files keeps the file another version is recorded at ([#2410](https://github.com/danielcopper/romm-tender/issues/2410)) ([fb6a65f](https://github.com/danielcopper/romm-tender/commit/fb6a65f7f14fd60e60bb26355d088ecceffcfd84)), closes [#2408](https://github.com/danielcopper/romm-tender/issues/2408) +* **artwork:** a SteamGridDB key can be removed, Refresh Artwork downloads anew, and a refusal says what it is ([#2412](https://github.com/danielcopper/romm-tender/issues/2412)) ([1d889e2](https://github.com/danielcopper/romm-tender/commit/1d889e2e2e8a57dd7369e1f85be0bd7b0f6b8dfa)), closes [#1044](https://github.com/danielcopper/romm-tender/issues/1044) +* **artwork:** the IGDB lookup for a SteamGridDB id never resolves, and the guide does not say how RomM provides the id ([#2402](https://github.com/danielcopper/romm-tender/issues/2402)) ([7312191](https://github.com/danielcopper/romm-tender/commit/7312191e64bd21389efb7d98124b3101fc14611b)), closes [#2336](https://github.com/danielcopper/romm-tender/issues/2336) +* **atlas:** close the gaps the review of the RetroDECK folder work found ([#2289](https://github.com/danielcopper/romm-tender/issues/2289)) ([df305e5](https://github.com/danielcopper/romm-tender/commit/df305e59ab83b09abfdba50074eab21e823d2a01)), closes [#2285](https://github.com/danielcopper/romm-tender/issues/2285) +* **atlas:** use no root folder the resolver only assumed ([#2359](https://github.com/danielcopper/romm-tender/issues/2359)) ([5af4649](https://github.com/danielcopper/romm-tender/commit/5af46494d66d1bcc0e81296fd1db77193651bd32)), closes [#2294](https://github.com/danielcopper/romm-tender/issues/2294) +* **backend:** close the gaps the epic [#2023](https://github.com/danielcopper/romm-tender/issues/2023) fit audit found ([#2345](https://github.com/danielcopper/romm-tender/issues/2345)) ([a030be2](https://github.com/danielcopper/romm-tender/commit/a030be25ab9526819d43bda821e25d52a98974b6)), closes [#2337](https://github.com/danielcopper/romm-tender/issues/2337) +* **bios:** put the legend under the left column on a game's BIOS tab ([#2598](https://github.com/danielcopper/romm-tender/issues/2598)) ([0063271](https://github.com/danielcopper/romm-tender/commit/0063271eba30afc188b8b9684ae1fc142a65a284)) +* **bios:** take a library firmware file's platform from RomM's platform_id ([#2503](https://github.com/danielcopper/romm-tender/issues/2503)) ([cfb7418](https://github.com/danielcopper/romm-tender/commit/cfb7418eef7e1bd8e80b2226f93f6a342ebe76ce)), closes [#2187](https://github.com/danielcopper/romm-tender/issues/2187) [#1872](https://github.com/danielcopper/romm-tender/issues/1872) +* **bios:** take the BIOS verdict from the resolver, per launching emulator and per file ([#2457](https://github.com/danielcopper/romm-tender/issues/2457)) ([710448f](https://github.com/danielcopper/romm-tender/commit/710448f77eea2774e9216a4f7c1e817e204da801)), closes [#2190](https://github.com/danielcopper/romm-tender/issues/2190) [#1883](https://github.com/danielcopper/romm-tender/issues/1883) [#1803](https://github.com/danielcopper/romm-tender/issues/1803) +* call Tender by its name, not a plugin, in everything a user reads ([#2245](https://github.com/danielcopper/romm-tender/issues/2245)) ([c705f15](https://github.com/danielcopper/romm-tender/commit/c705f157c5a840dc0d40a6b61b8f18aef7fdb32c)) +* **ci:** let release-please's version bump past the docs check ([#1927](https://github.com/danielcopper/romm-tender/issues/1927)) ([f541941](https://github.com/danielcopper/romm-tender/commit/f541941a698aa71dcb94aceb95320b3128771176)) +* **ci:** make the aggregate field-assignment check see every aggregate, by field name ([#2597](https://github.com/danielcopper/romm-tender/issues/2597)) ([a0c163c](https://github.com/danielcopper/romm-tender/commit/a0c163c5e5134bfa7fc6da74fb2775146b4a2a3c)), closes [#2593](https://github.com/danielcopper/romm-tender/issues/2593) +* **cleanup:** the cleanup's list shows a game gone from RomM that the library reached through a collection, or whose platform RomM no longer lists ([#2445](https://github.com/danielcopper/romm-tender/issues/2445)) ([4976507](https://github.com/danielcopper/romm-tender/commit/497650717544855fece8098d3a488b81d3164950)), closes [#2431](https://github.com/danielcopper/romm-tender/issues/2431) +* **deps:** update dependency @decky/ui to v4.13.0 ([#2462](https://github.com/danielcopper/romm-tender/issues/2462)) ([22e4682](https://github.com/danielcopper/romm-tender/commit/22e468265ef996d8ee8cbe89a49999a6746b46bf)) +* **deps:** update dependency @decky/ui to v4.15.1 ([#2483](https://github.com/danielcopper/romm-tender/issues/2483)) ([d8cc64b](https://github.com/danielcopper/romm-tender/commit/d8cc64bedf47fc476e584f0c4b0506c0110d4eba)) +* **deps:** update dependency @decky/ui to v4.16.0 ([#2546](https://github.com/danielcopper/romm-tender/issues/2546)) ([f87b2c0](https://github.com/danielcopper/romm-tender/commit/f87b2c0b6c2c6f9f3f25b269b3c2ea13924a284e)) +* **downloads:** leave an ended download alone when a late callback lands ([#2062](https://github.com/danielcopper/romm-tender/issues/2062)) ([f1787c7](https://github.com/danielcopper/romm-tender/commit/f1787c796d831be172988d3f57b7fb9c3bfcb589)), closes [#2060](https://github.com/danielcopper/romm-tender/issues/2060) +* **downloads:** show the platform's name in the download queue, not its slug ([#2589](https://github.com/danielcopper/romm-tender/issues/2589)) ([ea96eb6](https://github.com/danielcopper/romm-tender/commit/ea96eb6d021a75d33ac2f28e64a2879d3fa36a03)), closes [#2573](https://github.com/danielcopper/romm-tender/issues/2573) +* four small fixes to the game page, the platforms pane and the RomM URL window ([#2651](https://github.com/danielcopper/romm-tender/issues/2651)) ([0698a10](https://github.com/danielcopper/romm-tender/commit/0698a106a9590f761d09cbd53494588e8da9ac17)), closes [#2523](https://github.com/danielcopper/romm-tender/issues/2523) [#2528](https://github.com/danielcopper/romm-tender/issues/2528) [#2470](https://github.com/danielcopper/romm-tender/issues/2470) [#2448](https://github.com/danielcopper/romm-tender/issues/2448) +* **frontend:** keep steam global stubs off the window type ([#2547](https://github.com/danielcopper/romm-tender/issues/2547)) ([c418e4a](https://github.com/danielcopper/romm-tender/commit/c418e4acf7350b76c14b31c658c50a3ebae2567f)) +* **frontend:** word new slot's not-installed refusal and keep replace rows ([#2534](https://github.com/danielcopper/romm-tender/issues/2534)) ([95a0fc1](https://github.com/danielcopper/romm-tender/commit/95a0fc1fe456ce817be759eef8639755eb74ac5a)), closes [#2530](https://github.com/danielcopper/romm-tender/issues/2530) +* gzip on JSON reads, refuse a conflict without a save id, count each BIOS file once ([#2059](https://github.com/danielcopper/romm-tender/issues/2059)) ([7f3e649](https://github.com/danielcopper/romm-tender/commit/7f3e6499e42c12f68cdeee8f7c8dd714f9ec677c)), closes [#403](https://github.com/danielcopper/romm-tender/issues/403) [#1728](https://github.com/danielcopper/romm-tender/issues/1728) [#1762](https://github.com/danielcopper/romm-tender/issues/1762) +* **host:** tell a stranded panel so, instead of failing quietly ([#2291](https://github.com/danielcopper/romm-tender/issues/2291)) ([55c07f7](https://github.com/danielcopper/romm-tender/commit/55c07f7aa9cda1faca9d1680d44c787a8aeb6c51)) +* **host:** unmask a websocket payload in one pass instead of per byte ([#2020](https://github.com/danielcopper/romm-tender/issues/2020)) ([a75eab8](https://github.com/danielcopper/romm-tender/commit/a75eab8261f6a5e40057367ae7804a16627d2495)) +* **inject:** call the globals installer before loading the panel ([#1965](https://github.com/danielcopper/romm-tender/issues/1965)) ([1c85d2c](https://github.com/danielcopper/romm-tender/commit/1c85d2c94602a8518d0e69f2649f198f327b62e8)), closes [#1958](https://github.com/danielcopper/romm-tender/issues/1958) [#1964](https://github.com/danielcopper/romm-tender/issues/1964) +* **installs:** show a missing download instead of forgetting it ([#2252](https://github.com/danielcopper/romm-tender/issues/2252)) ([fcbc26a](https://github.com/danielcopper/romm-tender/commit/fcbc26aa818bb567197400ff25a3873046d787a3)), closes [#2242](https://github.com/danielcopper/romm-tender/issues/2242) +* **install:** the piped run mislays the greeter and the rows, and a backend outside the service goes unnoticed ([#1980](https://github.com/danielcopper/romm-tender/issues/1980)) ([abda748](https://github.com/danielcopper/romm-tender/commit/abda748d9d9c6062e73b168651d99a2e57951734)), closes [#1976](https://github.com/danielcopper/romm-tender/issues/1976) +* **launch:** end a launch check that gets no answer in the fallback dialog ([#2198](https://github.com/danielcopper/romm-tender/issues/2198)) ([8aafd87](https://github.com/danielcopper/romm-tender/commit/8aafd87dae0ef96bdbf90a9102616c2d8ff5d327)), closes [#2173](https://github.com/danielcopper/romm-tender/issues/2173) +* **launch:** gate the starts the launch watcher catches by the game ID Steam reports ([#2157](https://github.com/danielcopper/romm-tender/issues/2157)) ([fe9f4ba](https://github.com/danielcopper/romm-tender/commit/fe9f4ba74d87c97390f7938e0af5813afa794a02)) +* **launch:** let an observed stop overrule Steam's running-app list ([#2171](https://github.com/danielcopper/romm-tender/issues/2171)) ([3cef99a](https://github.com/danielcopper/romm-tender/commit/3cef99a086d6891e949357e2bc690da46a288d79)), closes [#2167](https://github.com/danielcopper/romm-tender/issues/2167) +* **launch:** quote the ROM path for Steam's shell ([#2304](https://github.com/danielcopper/romm-tender/issues/2304)) ([3037e37](https://github.com/danielcopper/romm-tender/commit/3037e37e71b836d90c7842cb592a783253aec547)), closes [#2302](https://github.com/danielcopper/romm-tender/issues/2302) +* **launch:** start RetroDECK without its Wayland socket so Steam Input reaches the game in Desktop Mode ([#2277](https://github.com/danielcopper/romm-tender/issues/2277)) ([c78c3b1](https://github.com/danielcopper/romm-tender/commit/c78c3b19c2654b0902cdc0ccdd9d6594a181f241)), closes [#2270](https://github.com/danielcopper/romm-tender/issues/2270) +* **launch:** tell a running game by its display status, not by Steam's running list alone ([#2312](https://github.com/danielcopper/romm-tender/issues/2312)) ([91894bb](https://github.com/danielcopper/romm-tender/commit/91894bbaf353853014f65170631c82eee2a98dcf)) +* **library:** a failed collection listing stops the run instead of reading as empty ([#2116](https://github.com/danielcopper/romm-tender/issues/2116)) ([57301b5](https://github.com/danielcopper/romm-tender/commit/57301b5d934227aa7f91972a23b0c9d12c09813b)), closes [#2112](https://github.com/danielcopper/romm-tender/issues/2112) +* **library:** a platform listing that is not a list stops the run instead of reading as empty ([#2120](https://github.com/danielcopper/romm-tender/issues/2120)) ([e902865](https://github.com/danielcopper/romm-tender/commit/e90286560d4dde10fbfe2c0664c30d307aa0e23d)), closes [#2118](https://github.com/danielcopper/romm-tender/issues/2118) +* **library:** drop the reachable_count fallback and say which syncs close the right > left window ([#2083](https://github.com/danielcopper/romm-tender/issues/2083)) ([b47cd41](https://github.com/danielcopper/romm-tender/commit/b47cd41f110ba2f91f6eeb408dd4a0d9e0036940)), closes [#2079](https://github.com/danielcopper/romm-tender/issues/2079) +* **library:** full-fetch a platform holding a bound row its stamp's fetch did not return ([#2093](https://github.com/danielcopper/romm-tender/issues/2093)) ([064c1a6](https://github.com/danielcopper/romm-tender/commit/064c1a63ad38381016b648c268d40a8a83057264)), closes [#2084](https://github.com/danielcopper/romm-tender/issues/2084) +* **library:** keep a platform's stamp and revoke its skip when games it holds are unbound outside its apply ([#2108](https://github.com/danielcopper/romm-tender/issues/2108)) ([9232cfc](https://github.com/danielcopper/romm-tender/commit/9232cfc93d6a019261850b5c14b429bcc4841ba9)), closes [#2094](https://github.com/danielcopper/romm-tender/issues/2094) +* **library:** name a batch's failed BIOS files and re-read after a partial delete ([#2375](https://github.com/danielcopper/romm-tender/issues/2375)) ([242365b](https://github.com/danielcopper/romm-tender/commit/242365b9930f0a0741a301c864387ca84b027b55)), closes [#2362](https://github.com/danielcopper/romm-tender/issues/2362) +* **library:** put a refused platform sync write back to what is stored ([#2066](https://github.com/danielcopper/romm-tender/issues/2066)) ([c443d6d](https://github.com/danielcopper/romm-tender/commit/c443d6dd6f9c81790d5403ab22ed46af28b7d5c3)), closes [#2021](https://github.com/danielcopper/romm-tender/issues/2021) +* **library:** skip a collection by the platform skip's rules ([#2486](https://github.com/danielcopper/romm-tender/issues/2486)) ([e4510b3](https://github.com/danielcopper/romm-tender/commit/e4510b3e55b319e0a5d2e4d9e99966d38f553e0a)), closes [#2477](https://github.com/danielcopper/romm-tender/issues/2477) +* **library:** skip a platform only when its visible id set and its latest updated_at say nothing changed ([#2472](https://github.com/danielcopper/romm-tender/issues/2472)) ([1f8f713](https://github.com/danielcopper/romm-tender/commit/1f8f713bc058c695960f72b5f91976aedc85ab97)), closes [#2469](https://github.com/danielcopper/romm-tender/issues/2469) +* **library:** the stale removal deletes the stamp of a collection holding a game it unbinds ([#2114](https://github.com/danielcopper/romm-tender/issues/2114)) ([d636a86](https://github.com/danielcopper/romm-tender/commit/d636a866515b294568247ac012db6e018127e41f)), closes [#2106](https://github.com/danielcopper/romm-tender/issues/2106) +* **library:** with platform groups on, the preview keeps the platform collection of a game RomM did not confirm ([#2650](https://github.com/danielcopper/romm-tender/issues/2650)) ([0be2759](https://github.com/danielcopper/romm-tender/commit/0be27590681c847d6b9e73cfb36ffb48ef55f589)), closes [#2490](https://github.com/danielcopper/romm-tender/issues/2490) +* **logging:** record a frontend log line at the level its caller named ([#1956](https://github.com/danielcopper/romm-tender/issues/1956)) ([b5ab0a5](https://github.com/danielcopper/romm-tender/commit/b5ab0a57ce089afe61f8f58acfcc7db1a3ebfaf0)), closes [#1954](https://github.com/danielcopper/romm-tender/issues/1954) +* **panel:** offer no press a stranded panel cannot carry out ([#2299](https://github.com/danielcopper/romm-tender/issues/2299)) ([69e8256](https://github.com/danielcopper/romm-tender/commit/69e82561a0a56726e372ce148530fa9897013237)) +* **panel:** the notifications-unavailable notice says a few failures are reported only by a notification ([#2132](https://github.com/danielcopper/romm-tender/issues/2132)) ([0f62d86](https://github.com/danielcopper/romm-tender/commit/0f62d863976b245e92f876d870c345d0ce024370)), closes [#2130](https://github.com/danielcopper/romm-tender/issues/2130) +* **qam:** answer the QAM's visibility where no navigation tree exists ([#1970](https://github.com/danielcopper/romm-tender/issues/1970)) ([4553861](https://github.com/danielcopper/romm-tender/commit/45538616eb4a2ef91ff5e7e307ef0dd2bc4127de)), closes [#1948](https://github.com/danielcopper/romm-tender/issues/1948) +* **qam:** judge a focusable row by what Steam's nav node reads ([#1972](https://github.com/danielcopper/romm-tender/issues/1972)) ([72a855b](https://github.com/danielcopper/romm-tender/commit/72a855b1dcf7be156a37fb86dd456ea2474507c8)), closes [#1930](https://github.com/danielcopper/romm-tender/issues/1930) +* **qam:** keep the focus ring's room in every scroll region ([#1982](https://github.com/danielcopper/romm-tender/issues/1982)) ([5e13dc0](https://github.com/danielcopper/romm-tender/commit/5e13dc010801374bf6b1d35098b2ae530f0497e0)), closes [#1981](https://github.com/danielcopper/romm-tender/issues/1981) +* **qam:** keep the grid images count honest after a removal ([#1985](https://github.com/danielcopper/romm-tender/issues/1985)) ([c86339f](https://github.com/danielcopper/romm-tender/commit/c86339ff5ea729b2af4388724250dae3b41ea23f)), closes [#1817](https://github.com/danielcopper/romm-tender/issues/1817) +* **qam:** landing on Tender's Quick Access icon takes focus off the strip ([#2422](https://github.com/danielcopper/romm-tender/issues/2422)) ([cc5b81f](https://github.com/danielcopper/romm-tender/commit/cc5b81fb2b91ab0c293e2238e781dd35b1b4185b)), closes [#2418](https://github.com/danielcopper/romm-tender/issues/2418) +* **qam:** name the set the BIOS held ratio counts over ([#1971](https://github.com/danielcopper/romm-tender/issues/1971)) ([0a81e75](https://github.com/danielcopper/romm-tender/commit/0a81e75c992f55af20315f7dd6aa6f33f25a7564)), closes [#1910](https://github.com/danielcopper/romm-tender/issues/1910) +* **readme:** read the release badge's version from the release manifest ([#1926](https://github.com/danielcopper/romm-tender/issues/1926)) ([79323db](https://github.com/danielcopper/romm-tender/commit/79323dbdca1df4fb405f6d92aa66233c0a24b81c)) +* **romm:** a reply from the server or a local disk fault is never read as the server being unreachable ([#2393](https://github.com/danielcopper/romm-tender/issues/2393)) ([269740f](https://github.com/danielcopper/romm-tender/commit/269740f51b815c93a06dcc83df823512fd18cb90)) +* **romm:** keep credentials out of error texts, tracebacks and logs ([#2495](https://github.com/danielcopper/romm-tender/issues/2495)) ([b15543a](https://github.com/danielcopper/romm-tender/commit/b15543ac33c4fb8ce25833627f91be23ad5bb286)), closes [#1184](https://github.com/danielcopper/romm-tender/issues/1184) +* **saves:** a copy into a slot with newer changes from another device changes nothing ([#2655](https://github.com/danielcopper/romm-tender/issues/2655)) ([db73e7b](https://github.com/danielcopper/romm-tender/commit/db73e7b163ebb850ee3440bd9d549ff258304181)), closes [#2515](https://github.com/danielcopper/romm-tender/issues/2515) +* **saves:** a sync before a start can still run after the launch check stopped waiting for it ([#2621](https://github.com/danielcopper/romm-tender/issues/2621)) ([7b3f543](https://github.com/danielcopper/romm-tender/commit/7b3f5439fc0cc76db41a4f0266145917615136f4)), closes [#2184](https://github.com/danielcopper/romm-tender/issues/2184) +* **saves:** change the slot only once every backup of a slot switch went through ([#2588](https://github.com/danielcopper/romm-tender/issues/2588)) ([0d4c928](https://github.com/danielcopper/romm-tender/commit/0d4c92812bc92e63fef12fc2d38b3ffcbe563606)), closes [#2505](https://github.com/danielcopper/romm-tender/issues/2505) +* **saves:** every save operation reaches RomM through one entry that registers the device ([#2524](https://github.com/danielcopper/romm-tender/issues/2524)) ([d970d76](https://github.com/danielcopper/romm-tender/commit/d970d76ca7e342d42745cff2d811d9ffecb1c3dd)), closes [#2517](https://github.com/danielcopper/romm-tender/issues/2517) [#2055](https://github.com/danielcopper/romm-tender/issues/2055) +* **saves:** keep the active slot when a copy fails, and leave no partial download behind ([#2514](https://github.com/danielcopper/romm-tender/issues/2514)) ([c1e3937](https://github.com/danielcopper/romm-tender/commit/c1e3937e77f4ddaba2ee53076839f0baa219b429)), closes [#2379](https://github.com/danielcopper/romm-tender/issues/2379) +* **saves:** no save sync changes the save of a game that is running ([#2643](https://github.com/danielcopper/romm-tender/issues/2643)) ([67bd204](https://github.com/danielcopper/romm-tender/commit/67bd2044f9827dafa424362ff3e50845085b5ed8)), closes [#2620](https://github.com/danielcopper/romm-tender/issues/2620) +* **saves:** sync no save at a place the resolver did not read from the emulator's own settings ([#2350](https://github.com/danielcopper/romm-tender/issues/2350)) ([187db4f](https://github.com/danielcopper/romm-tender/commit/187db4f7306cb094f30826300a3ac5c22c56b3e8)), closes [#2286](https://github.com/danielcopper/romm-tender/issues/2286) +* **saves:** warn before leaving a version whose saves were never synced ([#2500](https://github.com/danielcopper/romm-tender/issues/2500)) ([52c2f97](https://github.com/danielcopper/romm-tender/commit/52c2f978e05e4b3fa9351510fc7ef7676f702c7b)), closes [#1683](https://github.com/danielcopper/romm-tender/issues/1683) +* **saves:** write the save-slot list's state under the ROM's lock ([#2376](https://github.com/danielcopper/romm-tender/issues/2376)) ([ea26578](https://github.com/danielcopper/romm-tender/commit/ea2657899ea43316f95da2513ce39d3dc0fae214)), closes [#2361](https://github.com/danielcopper/romm-tender/issues/2361) +* **services:** hold every background task until it ends, and fail CI on one created outside BackgroundTasks ([#2433](https://github.com/danielcopper/romm-tender/issues/2433)) ([c0e01cf](https://github.com/danielcopper/romm-tender/commit/c0e01cfd68ae30ba29b13beb5ad64842a6e223e1)), closes [#1161](https://github.com/danielcopper/romm-tender/issues/1161) +* **session:** toast the migration sentence after a game exits, and nothing while save sync is off ([#2489](https://github.com/danielcopper/romm-tender/issues/2489)) ([fa5eb9c](https://github.com/danielcopper/romm-tender/commit/fa5eb9c84644b8c3cc3ed188fac62dc037ba582b)), closes [#1021](https://github.com/danielcopper/romm-tender/issues/1021) +* **shortcuts:** confirm a launch-options write from Steam's shortcut file when its re-read shows the old value ([#2358](https://github.com/danielcopper/romm-tender/issues/2358)) ([a0d4601](https://github.com/danielcopper/romm-tender/commit/a0d4601aebd48042c2a0faf1d80a1902dd124804)) +* **shortcuts:** log what the re-read saw when a launch-options confirm fails ([#2351](https://github.com/danielcopper/romm-tender/issues/2351)) ([0700ac5](https://github.com/danielcopper/romm-tender/commit/0700ac518230afed13c69989cddcbc2ce8f6da53)) +* **shortcuts:** re-read launch options before reporting a failed confirm ([#2287](https://github.com/danielcopper/romm-tender/issues/2287)) ([dc435b8](https://github.com/danielcopper/romm-tender/commit/dc435b89b3b0ea8a1bd2d6cf99ddd63a4e921d37)), closes [#2279](https://github.com/danielcopper/romm-tender/issues/2279) +* six small backend fixes — atomic retroarch.cfg write, 0600 settings backup, and four more ([#2049](https://github.com/danielcopper/romm-tender/issues/2049)) ([77464c0](https://github.com/danielcopper/romm-tender/commit/77464c027994bd3faec40b5934bfe9d0396ab505)), closes [#1871](https://github.com/danielcopper/romm-tender/issues/1871) [#1166](https://github.com/danielcopper/romm-tender/issues/1166) [#941](https://github.com/danielcopper/romm-tender/issues/941) [#1016](https://github.com/danielcopper/romm-tender/issues/1016) [#1132](https://github.com/danielcopper/romm-tender/issues/1132) [#810](https://github.com/danielcopper/romm-tender/issues/810) +* **startup:** the check asks the module registry, never steam's runtime state ([#1947](https://github.com/danielcopper/romm-tender/issues/1947)) ([269671f](https://github.com/danielcopper/romm-tender/commit/269671f7109e3936ff000f897d3a7c7dd97e4140)), closes [#1945](https://github.com/danielcopper/romm-tender/issues/1945) +* **steam:** the backend and the frontend fold collection names by one rule ([#2135](https://github.com/danielcopper/romm-tender/issues/2135)) ([5c45843](https://github.com/danielcopper/romm-tender/commit/5c4584341f5487e83011ac3241745d0ce1ec12d0)), closes [#2131](https://github.com/danielcopper/romm-tender/issues/2131) +* **sync:** a sync that fails is reported by a toast and on the Sync page ([#2122](https://github.com/danielcopper/romm-tender/issues/2122)) ([6a4271a](https://github.com/danielcopper/romm-tender/commit/6a4271a974795f922a99d726da9c265c17dce418)), closes [#2117](https://github.com/danielcopper/romm-tender/issues/2117) +* **sync:** converge a game with more than one bound shortcut to one ([#2652](https://github.com/danielcopper/romm-tender/issues/2652)) ([db49142](https://github.com/danielcopper/romm-tender/commit/db49142da9e44e15faea420fcf70ff38face37c1)), closes [#2645](https://github.com/danielcopper/romm-tender/issues/2645) +* **sync:** count a game only collections reach as its collection units collapse it ([#2545](https://github.com/danielcopper/romm-tender/issues/2545)) ([65be020](https://github.com/danielcopper/romm-tender/commit/65be020656c33b3a7b2486dc40bbec182793a5f5)), closes [#2536](https://github.com/danielcopper/romm-tender/issues/2536) +* **sync:** count the rebind a platform makes for a version a skipped collection still lists ([#2550](https://github.com/danielcopper/romm-tender/issues/2550)) ([8878d1f](https://github.com/danielcopper/romm-tender/commit/8878d1f79b9b2b7c23b11c6e88b8bac42a4a9313)), closes [#2544](https://github.com/danielcopper/romm-tender/issues/2544) +* **sync:** give a game split across collections the version the rules pick over all of them ([#2619](https://github.com/danielcopper/romm-tender/issues/2619)) ([c8aa3dd](https://github.com/danielcopper/romm-tender/commit/c8aa3dd6c78cc91b5b9cb1db13784ded02af1f0a)), closes [#2543](https://github.com/danielcopper/romm-tender/issues/2543) +* **sync:** keep a game's key when the version carrying it is not listed ([#2660](https://github.com/danielcopper/romm-tender/issues/2660)) ([f9de250](https://github.com/danielcopper/romm-tender/commit/f9de2507ff85507825871f851e7af107ab9586d1)), closes [#2646](https://github.com/danielcopper/romm-tender/issues/2646) +* **sync:** keep a version hidden in RomM in its platform's collection whether its collection is skipped or fetched ([#2559](https://github.com/danielcopper/romm-tender/issues/2559)) ([287ad3b](https://github.com/danielcopper/romm-tender/commit/287ad3ba6e02c043266d646fb4bb77ea7ac74db6)), closes [#2549](https://github.com/danielcopper/romm-tender/issues/2549) +* **sync:** keep a version-switched game's shortcut while a collection delivers the game ([#2539](https://github.com/danielcopper/romm-tender/issues/2539)) ([530aa35](https://github.com/danielcopper/romm-tender/commit/530aa351b7536c55373ae7875526f228e1e2b3ef)), closes [#2533](https://github.com/danielcopper/romm-tender/issues/2533) +* **sync:** key a platform unit's roms against the resident keys the preview reads ([#2622](https://github.com/danielcopper/romm-tender/issues/2622)) ([3f4ef7e](https://github.com/danielcopper/romm-tender/commit/3f4ef7e7f5d38d39dd7333332df2062099efa1ce)), closes [#2617](https://github.com/danielcopper/romm-tender/issues/2617) +* **sync:** name a platform collection in the preview the way the apply does ([#2561](https://github.com/danielcopper/romm-tender/issues/2561)) ([b7a0704](https://github.com/danielcopper/romm-tender/commit/b7a0704da39f62ddae0ecb408c259f7590663390)), closes [#2558](https://github.com/danielcopper/romm-tender/issues/2558) +* **sync:** name every platform the sync files by RomM's platform listing ([#2572](https://github.com/danielcopper/romm-tender/issues/2572)) ([34104a2](https://github.com/danielcopper/romm-tender/commit/34104a2d3444c28a789caf54cc2a9744cf077b11)), closes [#2564](https://github.com/danielcopper/romm-tender/issues/2564) +* **sync:** prefer a version with a file and refuse to download one without ([#2377](https://github.com/danielcopper/romm-tender/issues/2377)) ([da5c20f](https://github.com/danielcopper/romm-tender/commit/da5c20fb93fd3755207d47804df1522a5946ffdc)), closes [#2196](https://github.com/danielcopper/romm-tender/issues/2196) +* **sync:** the preview counts collection changes by the names Steam holds ([#2129](https://github.com/danielcopper/romm-tender/issues/2129)) ([f304c55](https://github.com/danielcopper/romm-tender/commit/f304c55e429261e0d68bb8a4293daed6e56c1920)), closes [#2101](https://github.com/danielcopper/romm-tender/issues/2101) +* **sync:** walk RomM's list pages in id order so a concurrent scan cannot shift them ([#2349](https://github.com/danielcopper/romm-tender/issues/2349)) ([a9b6ae3](https://github.com/danielcopper/romm-tender/commit/a9b6ae3216826e0f920477443b90164363c96ce4)), closes [#2346](https://github.com/danielcopper/romm-tender/issues/2346) +* **ui:** a game whose local file is missing says up front when RomM holds no file to download again ([#2400](https://github.com/danielcopper/romm-tender/issues/2400)) ([2779956](https://github.com/danielcopper/romm-tender/commit/2779956381c6d2afff1b3debbfe798a133ac3362)), closes [#2399](https://github.com/danielcopper/romm-tender/issues/2399) +* **ui:** a refused restore or copy says nothing, and the slot panels' expanded state is lost or stale ([#2396](https://github.com/danielcopper/romm-tender/issues/2396)) ([8712b60](https://github.com/danielcopper/romm-tender/commit/8712b60f1f7bd5fb1af3fc14d89730970a724f9f)), closes [#1020](https://github.com/danielcopper/romm-tender/issues/1020) +* **ui:** eight small fixes — the game's own BIOS answer, slow Steam entries keep their binding, Manual archive, and five more ([#2053](https://github.com/danielcopper/romm-tender/issues/2053)) ([c6442ca](https://github.com/danielcopper/romm-tender/commit/c6442ca3b3d11e412a8b47188a9979b47f3ceb76)) +* **ui:** read what Force Full Sync clears, and catch a render failure on the game page ([#2344](https://github.com/danielcopper/romm-tender/issues/2344)) ([a63803f](https://github.com/danielcopper/romm-tender/commit/a63803f034fe3ef785ecfcc353b4f89bd32192ad)), closes [#1859](https://github.com/danielcopper/romm-tender/issues/1859) [#1018](https://github.com/danielcopper/romm-tender/issues/1018) +* **ui:** show no space requirement for a ROM RomM states 0 bytes for, and say why the size's two writes agree ([#2605](https://github.com/danielcopper/romm-tender/issues/2605)) ([593a62a](https://github.com/danielcopper/romm-tender/commit/593a62a2bce3e1c6a0912283d5cb39e17815a6cd)), closes [#2604](https://github.com/danielcopper/romm-tender/issues/2604) +* **ui:** turn Play into Resolve Conflict when Sync Save Files finds a conflict ([#2649](https://github.com/danielcopper/romm-tender/issues/2649)) ([1eb406f](https://github.com/danielcopper/romm-tender/commit/1eb406f411f5333082059b3fbc1273482903e7cd)), closes [#2357](https://github.com/danielcopper/romm-tender/issues/2357) +* **version-switch:** rank the version picker's default by the default version RomM states live ([#2476](https://github.com/danielcopper/romm-tender/issues/2476)) ([867938d](https://github.com/danielcopper/romm-tender/commit/867938da44a3b6655b5a87edea93617ec5ef9ede)), closes [#743](https://github.com/danielcopper/romm-tender/issues/743) + + +### Performance Improvements + +* **build:** transpile typescript per file instead of compiling the program ([#2095](https://github.com/danielcopper/romm-tender/issues/2095)) ([bbf4fec](https://github.com/danielcopper/romm-tender/commit/bbf4fec7f85d64d4edb99a2f60adaf4bb457f0d4)), closes [#2039](https://github.com/danielcopper/romm-tender/issues/2039) +* **firmware:** read the synced platforms with one query ([#2326](https://github.com/danielcopper/romm-tender/issues/2326)) ([7f5824e](https://github.com/danielcopper/romm-tender/commit/7f5824e63d52adc87d90e96de47519ccfeef573f)), closes [#2256](https://github.com/danielcopper/romm-tender/issues/2256) +* **gate:** run the gate's independent steps side by side ([#2086](https://github.com/danielcopper/romm-tender/issues/2086)) ([5114375](https://github.com/danielcopper/romm-tender/commit/511437521d6822f708d71b4f536ea16e07210907)) +* **romm:** read liveness probes and sibling stubs from /api/roms/{id}/simple ([#2355](https://github.com/danielcopper/romm-tender/issues/2355)) ([a376e7d](https://github.com/danielcopper/romm-tender/commit/a376e7df908eac29f74d806b0d893ccb7521c29b)), closes [#2353](https://github.com/danielcopper/romm-tender/issues/2353) +* **saves:** scope negotiate to the ROMs the device asks about ([#2352](https://github.com/danielcopper/romm-tender/issues/2352)) ([f4d6034](https://github.com/danielcopper/romm-tender/commit/f4d6034956f7bc422c33f712d1a5bbcccdfa3b0d)), closes [#1978](https://github.com/danielcopper/romm-tender/issues/1978) +* **sync:** walk a collection only for the members no platform unit ([762d8c1](https://github.com/danielcopper/romm-tender/commit/762d8c13daa7d6800bd40093cd6c8e3c89da5f9b)), closes [#2356](https://github.com/danielcopper/romm-tender/issues/2356) +* **sync:** walk a collection only for the members no platform unit delivered ([#2372](https://github.com/danielcopper/romm-tender/issues/2372)) ([762d8c1](https://github.com/danielcopper/romm-tender/commit/762d8c13daa7d6800bd40093cd6c8e3c89da5f9b)) +* **test:** run the backend suite in parallel with pytest-xdist ([#2063](https://github.com/danielcopper/romm-tender/issues/2063)) ([aacd485](https://github.com/danielcopper/romm-tender/commit/aacd4850156f51378d214cc065fe7a9dad0a51c4)), closes [#2039](https://github.com/danielcopper/romm-tender/issues/2039) +* **test:** run the frontend suite on vmForks and import jest-dom per file ([#2070](https://github.com/danielcopper/romm-tender/issues/2070)) ([a584d9b](https://github.com/danielcopper/romm-tender/commit/a584d9be183bc9b9df8dda28c099ad1810492287)) + ## [0.33.0](https://github.com/danielcopper/romm-tender/compare/tender-v0.32.0...tender-v0.33.0) (2026-09-14) diff --git a/backend/domain/identity.py b/backend/domain/identity.py index 06a87453e..eec0813d7 100644 --- a/backend/domain/identity.py +++ b/backend/domain/identity.py @@ -93,7 +93,7 @@ # written here out of band is one release-please will overwrite without # noticing, and until it does, every consumer listed in the module docstring # claims a release that was never cut. -VERSION = "0.33.0" # x-release-please-version +VERSION = "1.0.0" # x-release-please-version # A plain assignment, never an annotated one: ``scripts/check_romm_min_version.py`` # reads it off this module's syntax tree, and an annotated assignment is a diff --git a/version.txt b/version.txt index be386c9ed..3eefcb9dd 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.33.0 +1.0.0