From ba6fe49c7112cca997a28e7b8cf1738394cb2711 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 22:24:11 +0200 Subject: [PATCH] docs(plan): mark step 7 done, with what landed beyond the original scope MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The plan still said "Scoped 2026-08-27, not started" for work that is complete and validated against S3 — the first thing a reviewer reads, describing the PR as unwritten. Records the two pieces that were not in the original scoping: the memory cache moving to content keying (it was still file-keyed, so identical content held two RAM entries), and the engine binding a run to the flags it started with. Also that `.transcoded/` legitimately persists where external mounts exist, since hash-less callers have no content identity — absence is only expected elsewhere. Co-Authored-By: Claude Opus 5 (1M context) --- docs/plan/derived-blobs.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/plan/derived-blobs.md b/docs/plan/derived-blobs.md index d3133f94..705be5d3 100644 --- a/docs/plan/derived-blobs.md +++ b/docs/plan/derived-blobs.md @@ -1409,7 +1409,25 @@ hardcoded SQL). New sources bolt on independently. after, step 5 lands at scale; per-row HEADs do not survive a 4× row count. 7. **`ImageTranscodeService`** — same shape, `kind = 'transcode'`, - no new table. **Scoped 2026-08-27, not started.** The service does + no new table. **Done 2026-08-30**, validated on a snapshot restore + against S3: 13 cached transcodes imported, 5 `.skip` markers + collapsing to 3 negative rows (three of them named the same content), + `file_gone` exercised with a synthetic id, and every deletion + preceded by a byte-for-byte readback. + + Two things landed beyond the three pieces below. The memory cache is + now keyed by content as well, not just the durable tier — it was + still `{file_id}:{ext}`, so identical content held two RAM entries + and the second file missed. And `run_or_resume` binds a run to the + flags it started with, so a paused `?repair=true` import can no + longer resume as import-only. + + Still local-disk, deliberately: hash-less callers (external mounts) + have no content identity, so they keep `.transcoded/` and it will + not disappear on installs that have them. Absence is only expected + elsewhere. + + *Original scoping, for the record.* The service does not currently write the derived tier at all, which is the same gap `persist_rendered` closed for thumbnails, and it must be closed before `transcode_import` can converge.