Repository navigation
Keep signed image links of projects, accounts and avatars off disk - #48
Merged
Merged
Conversation
The API cache still wrote project, workspace and account images and user avatars (signed links) to cache/api. DiskScrub now drops them and keeps a hash of the unsigned path (image_key / avatar_key), which is also the image cache key: a copy read from disk shows the cached picture or the initials, and the next refresh brings a fresh link. The one-time legacy scrub runs again for files written before. Guest authors read from disk are looked up again, since their avatar link is no longer kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TeoVader
added a commit
that referenced
this pull request
Nov 11, 2026
Keep the stateless ProjectMenuContent and take the project's cover from Project.imageRef (#48). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
Before: after #47 the API cache (
cache/api) still held signed links: the Home list (workspaces and projects) kept each project's and workspace'simage, the accounts list each account'simage, and project owners, asset creators,meand remembered guest comment authors theiravatar_url. Frame.io says these links must not be stored.After: no signed image link is written to disk. A Home opened offline shows the project covers, account badges and avatars the image cache already has (by a stable key), else the gradient/latest-file cover and the initials as before; the next refresh brings fresh links. Nothing changes on screen.
How
DiskScrubdrops everyimage/avatar_urlstring and writesimage_key/avatar_keyin its place:linkImageKey(url), a SHA-256 of the link without its query string (so nothing link-shaped is stored, and it stays the same across signatures).Account,Workspace,ProjectgetimageKey+imageRef,UsergetsavatarKey+avatar(anImageRef: link when in memory, key only from disk). Home cards, the project sheet, the account badge andAvataruse them.stableImageKey(the Coil memory/disk cache key) is nowlinkImageKey, so the key on disk matches the image cache. Existing cached images get a new key once (one refetch).api.links-scrubbed.2) so files written by earlier versions are scrubbed again.Other storage checked: DataStore/SharedPreferences (settings, upload destination),
watch.json, transfer and folder-job files hold no image links. Coil's disk cache stores the image bytes under the hashed key, not the URL. Not in scope: the presigned upload part URLs kept to resume an upload (UploadItem.partUrls), which aren't media links.Tests:
DiskScrubTestcovers the Home list, accounts and authors on disk (noSignature/Expires=), cache reads givingimage = nullwith the right key, idempotence and the re-scrub of legacy files;GuestAuthorsTestis updated for the key-only disk copy.Checks
./gradlew :app:verifyRoborazziDebug :app:lintDebugpasses (lint at 0) — unit tests and lint run on the workstation; Roborazzi left to CI (Linux baselines)🤖 Generated with Claude Code