Skip to content

docs: catch #149's device sync page up with recent sync changes - #158

Merged
sdornan merged 21 commits into
claude/new-session-iabs8xfrom
claude/pr-149-alignment-45er1r
Sep 28, 2026
Merged

sdornan merged 21 commits into
claude/new-session-iabs8xfrom
claude/pr-149-alignment-45er1r

Conversation

@sdornan

@sdornan sdornan commented Sep 28, 2026

Copy link
Copy Markdown
Contributor

Summary

This is a follow-up to #149, targeting its branch. Merging it clears #149's conflict with main and brings the page back in line with the backend. Several sync changes landed in rommapp/romm after #149 was opened (#4670, #4674, #4768, #4789, f0c49b6).

Merge with main

0136284 ("humanize prose across all pages") reworded lines that #149 replaces. I kept #149's version in each conflicting hunk. The intro sentence was the only line both sides changed, and I kept main's rewording there.

Content fixes (docs/developers/device-sync-protocol.md)

  • delete action: negotiate returns delete when the device still holds a save for a slot that was emptied on the server. It comes with a total_delete count. download also covers a device that holds a version the server removed.
  • Sessions: every negotiate opens its own session. Negotiating no longer cancels the device's other sessions. A session nobody completes is marked failed after 24 hours by a scheduled cleanup, and it can still be completed afterwards. Completion returns 404 for an unknown session and 400 for one that was cancelled or failed on purpose.
  • content_hash baseline: documented on POST /api/saves, PUT /api/saves/{id} and the /downloaded confirmation body, including when the server keeps or drops it.
  • Registration: the new capabilities field. Matching is on mac_address first, then hostname + platform. The server returns 200 for an existing device and 201 for a new one. allow_existing: false returns 409 device_exists.
  • Scopes: passing device_id to the save endpoints also needs devices.write (upload and update) or devices.read (download), otherwise the call returns 403.
  • Polling: the "no push channel" bullet now says that the /devices socket namespace only carries install requests, so the device still decides when to sync.

Checked against backend/endpoints/sync/__init__.py, backend/endpoints/responses/sync.py, backend/endpoints/device/__init__.py, backend/endpoints/saves.py, backend/handler/sync/comparison.py and backend/tasks/scheduled/cleanup_sync_sessions.py on current master.

The page passes prettier and markdownlint with the repo's Trunk configs, and mkdocs build --strict succeeds.

AI disclosure

This change was written with AI assistance (Claude Code), working from a comparison of the page against the RomM server source. Please review it against the backend before merging.

🤖 Generated with Claude Code

https://claude.ai/code/session_016jZ2WEQAFScfBv7UGUscNZ


Generated by Claude Code

gantoine and others added 21 commits September 25, 2026 21:48
The new UI picks platform icons from a list built into the image (rommapp/romm#4792), so icons bind-mounted over /var/www/html/assets/platforms no longer show there.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The new UI only loads the icons built into the image (rommapp/romm#4792), and the classic UI is being removed, so bind-mounting custom icons is no longer supported.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
docs: remove the custom platform icon guide
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
docs(install): state the minimum MariaDB and MySQL versions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmjiC9WMP32QMybm4teqVJ
Vendors blader/humanizer (MIT) unmodified at 9862685f, the same copy
rommapp/romm uses, and excludes it from Trunk so it stays byte-identical
to upstream.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XXuG7JWgxP6DPLB182yD9v
Applies the vendored humanizer to the prose a change adds under docs/,
skipping snippet partials and the nav file, and keeping headings (anchor
targets), front matter, MkDocs syntax and UI labels as written. Ends with
trunk and a strict mkdocs build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XXuG7JWgxP6DPLB182yD9v
docs: replace httpx references with httpx2
…-g30s9a

chore: vendor humanizer and add a humanize-docs skill
Run the humanizer skill over every page under docs/ (snippets and
Navigation.md excluded). Removes decorative bold, dashes, choppy
fragments, staged openers, sales language and exclamation closers.
Front matter, headings, MkDocs syntax, code, links and UI labels are
unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Checked against rommapp/romm master:
- watcher delay defaults to 5 minutes (backend/config/__init__.py), not 10 seconds
- client API tokens are rmm_ + 64 hex = 68 chars (handler/auth/base_handler.py), not 44
- argosy-launcher and playnite-plugin are GPLv3, not AGPLv3, and GPLv3 is not permissive
- indent the firmware legality admonition body so it renders inside the box
- fix the "Where's can I find you?" FAQ heading typo

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
docs: humanize prose across all pages
rommapp/romm#4852 raised the default from 60 to 180.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	docs/reference/configuration-file.md
docs(streaming): document the RetroArch core override
docs: SEVEN_ZIP_TIMEOUT defaults to 180 seconds
…claude/pr-149-alignment-45er1r

# Conflicts:
#	docs/developers/device-sync-protocol.md
Negotiate can now return a `delete` action (with `total_delete`) when a
slot the device still holds was emptied on the server, and `download`
also covers a device holding a removed version. Sessions belong to one
launch rather than being cancelled by the next negotiate, and a session
the 24-hour cleanup expired can still be completed.

Also documents the `content_hash` baseline on upload, update and
download confirmation, the `capabilities` registration field, the 409
from `allow_existing: false`, how device matching actually works, and
the extra devices scope needed when passing `device_id` to the save
endpoints.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016jZ2WEQAFScfBv7UGUscNZ
@sdornan
sdornan merged commit 30ebde4 into claude/new-session-iabs8x Sep 28, 2026
2 checks passed
@sdornan
sdornan deleted the claude/pr-149-alignment-45er1r branch September 28, 2026 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants