Releases: danielcopper/romm-tender
Releases · danielcopper/romm-tender
Release list
decky-romm-sync: v0.30.1
0.30.1 (2026-08-10)
Bug Fixes
- downloads: do not bake a launch command for a download the system cannot launch (#1659) (19e8f1a)
- platforms: map RomM's "new-nintendo-3ds" slug to the n3ds system (#1689) (d331a61), closes #1678
- platforms: map the atari8bit, mac and sega32 slugs to their systems (#1691) (dd0a21c)
- platforms: point both CD-i keys at the cdimono1 system (#1702) (3762073)
- ui: bind the game-detail store's async folds to the rom they were read for (#1675) (f024631)
- ui: follow the BIOS requirement across a version switch (#1692) (79ca59b)
- ui: keep the play row mounted when the content-dir banner appears (#1684) (db26ec8)
- ui: order the game detail store's loads so a slower one cannot reinstall a stale identity (#1679) (6679b26)
- ui: stop reporting a slow connection check as "RomM offline" (#1672) (3534f4b), closes #1670
- uninstall: a removal without a recovery bundle claims by identity, not by content (#1667) (f8436cc), closes #1664
decky-romm-sync: v0.30.0
0.30.0 (2026-08-03)
Features
- assets: new mark, restructured README, docs palette (#1566) (6d17f8c)
- brand: new mark — sync arrows around a button diamond (#1586) (756df33)
- collections: add a collection naming mode to keep same-named types separate (#1569) (4e54167)
- collections: align kind naming with RomM (Standard/Mine) (c78936b)
- launch: stop a running game from the game detail page (#1612) (eeb8fdb), closes #1587
- library: generalize the franchise collection kind to virtual and sync IGDB collections (46287bd)
- prune: add recovery-backed removed game cleanup (#1577) (37fa65b)
- saves: copy a save into another slot (#1556) (8ea893e), closes #1523
- saves: default new save slots to "autosave" to match Argosy and Grout (f536663), closes #1529
- saves: resolve upload 409s through the gavel native core (#1518) (8774d81)
- ui: add Own/All collection owner-scope filter with lazy identity (#1537) (236514e), closes #1532
- ui: confirm text-entry modals with the on-screen keyboard's Enter key (#1563) (a8e0677), closes #1562
- ui: make the collections QAM navigable and declutter its panel (4a0d87c)
- ui: show Space Required size on uninstalled games before download (#1395) (#1526) (a303ba7)
Bug Fixes
- errors: report a definitive 404 as not_found, not server_unreachable (#1571) (50234a5)
- errors: require a RomM entity answer before a 404 becomes not-found (#1622) (95ad514)
- firmware: surface an "unmanaged" BIOS status for platforms without registry coverage (#1531) (c626f6d), closes #1520
- launch: read running apps only from SteamUIStore (#1617) (9aef5e1), closes #1588
- launch: stop only the RetroDECK instance running the pressed game (#1620) (b9d6f0c), closes #1619
- playtime: re-address the pending outbox when a device heals (#1636) (72496e8)
- saves: re-register the device when RomM no longer has its id (#1573) (d5b8b56)
- saves: report a busy save-sync gate as busy, not as an offline server (#1628) (be98159), closes #1625
- session: scope the lifecycle stop to the session's own app (#1623) (7d8761e), closes #1621
- session: track one play session per running app (#1626) (889eca5), closes #1624 #1589
- settings: harden RomM sign-in and consolidate the connection/SteamGridDB UX (#1565) (283134d), closes #1564
- sync: price a Force Full Sync's sibling duplicates as updates, not phantom creates (#1519) (ea54e47), closes #1517
- sync: price the time estimate by composition and separate cover downloads (#1515) (701edd0), closes #1511
- sync: union same-named collections instead of overwriting in finalize (#1533) (fb67d8a), closes #1503
- tests: stop conftest leaking temp dirs and being imported twice (#1559) (e3ecbca)
- ui: draw System-page BIOS dividers only between platforms (#1535) (6662280)
- ui: latch the coarse progress bar at its run high-water mark so a weight correction can't retract it (#1525) (f67faae), closes #1509
- ui: render collections controls before the slow list fetch resolves (51a333c)
- version-picker: disable versions missing from RomM (#1575) (a10e2ab)
- version-switch: refuse vanished targets (#1576) (ee40268)
decky-romm-sync: v0.29.0
0.29.0 (2026-07-20)
Features
Bug Fixes
- library: count skip rows by fetch generation so superseded rows stop blocking (#1513) (ce567c8)
- saves: make wizard legacy migration content-based with a local-save collision decision (#1498) (#1507) (0575930)
- ui: floor the coarse progress bar at the leading zero-weight units' index share (#1508) (33fb3a7)
decky-romm-sync: v0.28.1
0.28.1 (2026-07-19)
Bug Fixes
- saves: honor RomM's per-device sync-disabled switch as a policy stop (#1489) (#1492) (ea38b0b)
- saves: make the legacy bucket fully read-only in the saves tab (#1478) (#1496) (8bd01c7)
- saves: refuse save upload when no device is registered (#1494) (5dacb2a)
- saves: reject the legacy bucket as a slot switch target (#1478) (#1491) (1d84df7)
decky-romm-sync: v0.28.0
0.28.0 (2026-07-19)
Features
- saves: per-direction counts on the save-sync completion toast (#1477) (b074b26)
- saves: store the server content_hash as the sync baseline; scheme parity becomes the no-history fallback (#1469) (e285014)
- ui: busy-disable danger-zone removals with a spinner and progress counter (#1451) (bb86c86)
Bug Fixes
- artwork: fall back to url_cover when the RomM cover asset returns 404 (#1453) (ea26da8)
- downloads: keep cleared downloads cleared, and fix cancel-while-paused + lingering cancelled rows (#1446) (6a07017)
- saves: adopt instead of conflicting when both sides moved to identical content (#1483) (d97958d)
- saves: fall back to plain MD5 when a save sniffs as zip but is unreadable (#1470) (#1474) (d786e33)
- saves: feed the kernel RomM's zip-aware content hash, not whole-file MD5 (#1460) (465eff6), closes #1457
- saves: harden null-slot isolation via the shared save_in_slot funnel (#877) (#1476) (3bcf258)
- saves: keep the device identity across same-server re-sign-ins (#1438) (d1f7301)
- saves: route dedup-to-non-head upload responses to conflict (#1482) (#1485) (e707566)
- saves: surface the classified reason for failed post-exit syncs and stop the panel's false synced state (#1440) (2159223)
- sync/ui: keep run history on Force Full Sync so the last-sync display stays truthful (#1430) (b324dd5)
- sync: re-apply overview metadata on sync_complete (#1464) (7b60fc9)
- ui: acknowledge an already-synced manual save-sync click with an up-to-date toast (#1486) (#1487) (deb78a1)
- ui: correct enable-save-sync modal claim that only .srm files sync (#1471) (5cab3cc), closes #1189
- ui: label the legacy/no-slot save bucket "Legacy" instead of "(no slot)" (#1472) (0da0605), closes #876
- ui: pace mass shortcut removals through a shared paced-loop helper (#1448) (a98f4ee)
- ui: pin the fine-detail row height and name the next unit at sync boundaries (#1435) (646a352)
- ui: render qam active downloads with the bare progress-bar pattern so titles stop clipping (#1445) (232a02e)
- ui: render the rehydrated download button with the same colors as the live one (#1447) (8064911)
- ui: reset default save slot instead of a stale legacy-mode promise (#1475) (97bfa60), closes #1473
- ui: show cover-refresh progress instead of a frozen 0/0 (#1456) (#1459) (878f19d)
Performance Improvements
decky-romm-sync: v0.27.0
0.27.0 (2026-07-16)
Features
- artwork: apply sync covers via SetCustomArtworkForApp under the budget gate (#1394) (39361fb)
- artwork: user-triggered cleanup of orphaned grid images (#1403) (5e84f60)
- scale: chunked durable sync apply and large-library hardening (#1380) (470506f)
- sync: delta-restricted apply — resumes skip applied items for real (#1396) (c0527e4)
- sync: make time estimates skip-aware and finish the estimate surfaces (#1402) (e354226)
- sync: session memory budget — measure, warn, pause and resume before Steam's renderer cliff (#1392) (1ba03ee)
- ui: advance the sync bar through fetch and cover sub-phases without backwards jumps (#1410) (acf7917)
Bug Fixes
- artwork: invalidate the per-rom cover cache on server-side cover changes (#1401) (be6ed13)
- danger-zone: remove live-scanned orphan shortcuts in remove-all and re-count after settle (#1408) (d336fc8)
- sync: adopt orphan shortcuts by exe ownership and name instead of creating duplicates (#1411) (c399334)
- sync: count delta-skipped roms in the processed-games numerator (#1405) (6106a5c)
- sync: count rebinding platforms correctly in the preview platform diff (#1418) (024c904)
- sync: make late-ack recovery reachable via an abandoned-chunk stash (#1409) (88abb37)
- sync: price grandfathered sibling groups per bound duplicate in estimates (#1404) (c2acb3b)
- sync: refuse danger-zone removals while a sync run is in flight (#1398) (0520634)
- sync: run the apply pipeline for unstamped platforms so recovery re-stamps and the run status heals (#1421) (092fcf1)
- sync: surface cover-only changes in the preview and apply them (#1406) (0b01726)
- ui: constrain qam loading spinners to a shared small inline pattern (#1419) (3f737fe)
- ui: gate collapsed platform counts on the completion stamp (#1413) (0372fe8)
- ui: keep sync fine-detail rows mounted across unit boundaries (#1420) (eea8196)
- ui: make the qam sync panel gamepad-navigable and compact its layout (#1393) (47f052b)
- ui: say interrupted in the sync summary and use the planned total (#1399) (0b38ed9)
- ui: show the qam sync status smaller and green on success and keep it visible longer (#1422) (0dee17c)
decky-romm-sync: v0.26.1
decky-romm-sync: v0.26.0
0.26.0 (2026-07-09)
Features
- auth: add api-token sign-in for OIDC users (#1333) (407db78)
- auth: request roms.user.read scope for native play-session reads (#1280) (3043cb5)
- auth: sign in with a RomM pairing code (#1335) (061bf36)
- auth: sign out and signed-in connection actions (#1336) (c544ef1)
- launch: resolve emulator defaults live from es_systems (#1305) (8a2724f)
- launch: state-aware Resume button for an already-running game (#1315) (70e7c4a)
- library: capture rom version metadata and sibling group key (#1304) (350cc7e)
- library: guarded version switching for downloaded games (#1344) (5cb1d67)
- library: one steam shortcut per sibling group with deterministic binding (#1337) (1e61bec)
- playtime: adopt RomM native play-session ingest (ADR-0018) (#1281) (b5936bc)
- playtime: restore session_count and last_played from native play sessions (#1288) (f8f39b3)
- ui: show last played from restored playtime data (#1300) (39edeac)
- ui: version picker as a standalone game-detail control (#1343) (c9b68d0)
Bug Fixes
- artwork: cache covers per rom so version picker thumbnails persist per version (#1357) (4261a7d)
- connection: harden version gate against non-string SYSTEM.VERSION (#1284) (f29f2f9)
- cores: resolve active core outside the open UoW (#1283) (ac1757e), closes #1047 #1134
- downloads: name multi-file extract dir from the ROM identity, not files[0] (#1307) (b5e82e0)
- launch: bake the game folder as the PS3 launch target (#1302) (ed00f88)
- library: reset kept shortcut launch_options after bulk uninstall (#1146) (#1285) (397e122)
- library: stop classifying the derived platform_name (permanent preview delta) (#1306) (7d8a2b8), closes #1292
- migration: chain pending homes so repeated moves never strand files (#1282) (80d584b)
- playtime: adopt orphaned session after plugin reload (#1289) (968aab1)
- playtime: drain server-rejected play sessions instead of retrying forever (#1310) (5d6e925)
- playtime: exclude suspend time via the monotonic clock (#1316) (a34dfb9)
- playtime: register renamed suspend hooks + robust session adoption (#1308) (4b2db57)
- playtime: sub-second sessions poison the whole ingest batch → 422 retry loop (#1314) (5a7b3c9)
- settings: purge retired romm_user/romm_pass keys from settings.json (#1278) (bbc3eec)
- ui: disable cross-group versions in picker and make switch failure toasts readable (#1361) (b8ea414)
- ui: hide Apply when the sync preview has no real collection delta (#1287) (4085def)
- ui: live RomM connection state with offline fast paths, recovery, and switch-flow polish (#1347) (f8f60ac)
- ui: prevent stale sgdb artwork apply from overwriting a newer one (#1358) (6f832ee)
- ui: refresh game-detail ROM File section on download_complete (#1342) (10182a0), closes #1340
- ui: register new shortcuts as romm-owned at unit-ack time (#1338) (3a68a2e)
- ui: require would-be group key match for server-only siblings in picker and switch (#1363) (7cf4205)
- ui: surface backend bootstrap failure instead of eternal "Checking…" (#1286) (7dc03c0)
decky-romm-sync: v0.25.0
0.25.0 (2026-07-02)
⚠ BREAKING CHANGES
- saves: legacy slot:null confirmation is retired. Migration 005 un-confirms any ROM previously confirmed in legacy mode — no save data is deleted — and the first-sync wizard reappears to pick a named slot.
- connection: The plugin now requires a RomM server running 4.9.0 or newer. Servers on 4.8.x are rejected at connection time and the plugin stays inert until the server is upgraded. Update your RomM server to 4.9.0 or newer before updating the plugin.
Features
- add support for alpha and beta romm server versions (#1272) (f6323ad)
- connection: require RomM 4.9.0 (drop 4.8.x support) (#1259) (cbe44fb)
- saves: device-level save-sync serialization gate (#1234 phase 2a) (#1265) (ec06332)
- saves: drive sync from RomM negotiate ops for non-legacy slots (#1234 phase 2b/2c) (#1266) (0b745af)
- saves: negotiate inventory builder from confirmed-slot saves (#1234 phase 1c) (#1264) (345655b)
- saves: negotiate-sync adapter surface + wire schemas (#1234 phase 1a) (#1261) (08acb9a)
- saves: zip-aware content_hash matching RomM's per-entry scheme (#1234 phase 1b) (#1260) (9d38e8d)
Bug Fixes
- ci: enforce deliberate version ceilings in Renovate + document where versions live (#1253) (1d6639b)
- ci: pin denoland/setup-deno comment to v2.0.4 to clear Renovate digest warning (#1233) (734c257)
- ci: use uv --output-file= so Renovate can recompile the locks (#1231) (38d14e1)
- deps: prune 5 obsolete pnpm overrides (#1255) (e5a2d4d)
- saves: client-authoritative conflict detection over negotiate (#1234) (#1277) (52cfc54)
- saves: drop foreign-rom negotiate ops in dispatch_negotiate_ops (#1234) (#1268) (9bfeb59)
- saves: forget device id on server-origin change (#1234 phase 0a) (#1258) (78eb8f3)
- saves: log dispatch-action sync errors (#1234) (#1269) (c932937)
- saves: resolve canonical local target in dispatch_negotiate_ops (#1234) (#1271) (e50d3bd)