Repository navigation
Image Relay 1.2.1
Image Relay 1.2.1
A small polish patch on top of 1.2.0 stable. The headline change is a third Finder right-click action that takes you from the selection to the matching page in your Image Relay web app. The rest of the release is a code-path audit confirming the 1.2 sync surface still has no data-loss regressions.
Open Folder in Image Relay Web
- A new right-click action in Finder's Quick Actions submenu, alongside Refresh from Image Relay and Copy Public Link introduced in 1.2.0.
- Right-click any tracked folder and choose Open Folder in Image Relay Web to jump straight to that folder's page in your account's web app (
https://<your-subdomain>.imagerelay.com/folders/<id>). - Right-click any tracked file and the action opens the file's containing folder, so you can find the asset in its native Image Relay context.
- Your account's web base URL is discovered automatically from
GET /users/me.jsonon first invocation and cached locally so later invocations skip the round-trip. - If macOS declines to open the URL from the File Provider extension's sandbox, the action falls back to copying the URL to your clipboard so you always get something useful from the click.
Data-loss audit (no changes shipped)
An 8-checkpoint audit of every safety-critical sync code path that touches 1.2 territory ran clean:
- The Enumerator deletion-protection set still wraps both the standard listing path and the working-set path; transient 404s or parent-id mismatches still avoid reporting deletions until the failures are explained.
didDeleteItemsis still only called from the incrementalenumerateChangespath, never from a fresh enumeration.CollectionsService.removeItemstill throwsremoveNotSupportedimmediately rather than calling the API;CollectionsBrowserViewkeeps the inline note where the minus-circle button used to be.addItemsPUT still uses the v2 API's delta-add semantics, with no TOCTOU read-then-write window.- The defensive
{"key": [...]}fallback ingetAllPagesstill emits alogger.warningcanary so the branch is observable in diagnostics if a real endpoint ever takes it. - The upload version-confirmation cross-check still requires folder membership on top of the size match, so a soft-deleted or relocated file with the right ID and size can't pass.
- Folder rename still sends a resolved
parent_id: Int(the request field is non-optional), preserving the 1.1.2 fix for the historical ambiguousparent_id: nullbug.
Under the hood
- New
UserInfomodel inImageRelayKitdecodes the subdomain block of/users/me.json; intentionally ignores the wider payload (login,email,permissions, etc.) because the desktop client has no use for it. AppConfiguration.webBaseURLis a new optional field persisted asweb_base_urlinconfig.json; legacy configs without it decode cleanly.User-Agentdefaults advance fromImageRelayClient/1.2.0toImageRelayClient/1.2.1; 1.2.0 is added to the legacy migration list so existing installs roll forward without a reset.- Test suite grows from 163 to 168 (5 new: 3
UserInfodecoding pinned against the live/users/me.jsonshape, 2AppConfigurationround-trip / backward-compat). Suites go 22 → 23 with a newUserInfo decodingsuite.
System requirements
- macOS 26 (Tahoe). Same as 1.2.0; the File Provider features 1.2 depends on are 26-only.