check / check (push) Successful in 24s
Foundation unit for the cache/API design. Three fields arrived on the wire but decryptFile dropped them: - Live files now set `file.size` from `info.fileSize` and `thumbnail.size` from `info.thumbSize`, left `undefined` when the server omits `info`. - A deleted file is returned as a new `EnteFileTombstone` (`id`, `collectionID`, `updationTime`, `isDeleted: true`) with no decryption, since the server no longer holds ciphertext for it. decryptFile now returns `EnteFile | EnteFileTombstone`. Rather than making EnteFile's structural fields optional — which would force `?.`/guards across every consumer under strict tsc and break the build — a tombstone is a distinct minimal type, and `EnteFile.isDeleted?: false` is the discriminant (a live file is never deleted). This keeps all existing consumers untouched; they still receive fully-populated `EnteFile` values. client.ts is the only direct caller: it now routes every row through decryptFile and drops results whose `isDeleted` is set. listFiles still returns live files only, so its observable behaviour is unchanged. Model: opus-4-8