Skip to content

File sync broken: filemeta IDs don't match S3 storage keys #3

@petergaultney

Description

@petergaultney

Problem

Binary file sync doesn't work. Two issues found:

1. Filemeta hash field contains incorrect values

Almost all file entries in the filemeta CRDT have the same hash value (da7b674ea47abd6abcd69e834b03223cea1bf032e839bd37d747d68ad2133f65), regardless of actual file content. This is clearly not the real file content hash. The git-sync passes this hash to /f/{id}/download-url?hash={hash}, and the relay server returns 404 because no file exists at that hash in the S3 store.

The actual files in Tigris have correct, unique hashes - the mismatch is in the filemeta CRDT data.

2. Filemeta IDs don't match S3 storage keys

The filemeta id fields (e.g., 54bdc2c7-...) have zero overlap with the UUIDs used in Tigris S3 keys (e.g., 019771a6-...). The git-sync constructs download URLs using relay_id-filemeta_id as the compound doc ID, but the files are stored under different UUIDs.

Evidence

Filemeta entries (from CRDT via Y-Sweet API):

54bdc2c7-...  hash=da7b674ea47abd6a...  /z-attachments/simpson strong-drive screws.png
26119b9a-...  hash=da7b674ea47abd6a...  /z-attachments/Screenshot 2025-07-30 at 17.00.25.png
41f9bc2e-...  hash=da7b674ea47abd6a...  /pitches/cycle-11/purple/z-attachments/IMG_0751.jpg

Tigris S3 keys (different UUIDs, different hashes):

files/26120033-...-019771a6-.../1bb18b5d4bc9f019...  217582 bytes
files/26120033-...-047bba0b-.../3b0b06698cfe9836...  111065 bytes

Zero filemeta IDs or hashes match any Tigris entries (0/35 files, 0/86 S3 objects).

Context

  • This was working as recently as Feb 23, 2026 (relay-server v0.8.5)
  • Broke around March 3, 2026 when relay-server was upgraded to v0.9.6
  • With Tigris properly configured, download-url returns valid Tigris presigned URLs, but the wrong hash/ID means the file can't be found

Environment

  • relay-server v0.9.6 with Tigris store
  • relay-git-sync v0.0.4
  • Obsidian Relay plugin v0.7.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions