Commit Graph

  • abc83142b6 feat(blob_consistancy): audit staled GC Edouard Vanbelle 2026-09-02 23:16:29 +02:00
  • 4cd4f5a8f6 Merge pull request #703 from EdouardVanbelle/fix/db-migration-timeout Dionisio Pozo 2026-09-02 23:55:43 +02:00
  • 47c802bc14 security(RUSTSEC-2026-0275): ignore azure_core exposing header in debug Edouard Vanbelle 2026-09-02 22:48:20 +02:00
  • 63495151a8 doc(derived-and-attached-blobs): add missing link to doc Edouard Vanbelle 2026-09-02 22:26:44 +02:00
  • 49001e9beb test(blob,manifest_consistency): sanity test on repair Edouard Vanbelle 2026-09-02 22:18:43 +02:00
  • 2a629c4e8b fix(blob_consistency): apply same repair logic as manifest_consistency Edouard Vanbelle 2026-09-02 22:13:55 +02:00
  • 8a63663209 fix(manifest_consistency): add missing derived_blob to repair Edouard Vanbelle 2026-09-02 21:58:38 +02:00
  • 569d3ec526 chore: add 2 tools to backup and restore DB Edouard Vanbelle 2026-09-02 20:03:41 +02:00
  • e42c9c7e8b fix(migrations): linear-time refcount-repair with lifted statement_timeout Edouard Vanbelle 2026-09-02 19:59:59 +02:00
  • 04e0df0c89 test(consistency): exercise the Azure backend against Azurite Edouard Vanbelle 2026-09-02 19:24:46 +02:00
  • 2b52d233f0 feat(azure): enumerate blobs, and fail instead of degrading when that breaks Edouard Vanbelle 2026-09-02 19:24:32 +02:00
  • 1800fa9a47 Merge pull request #698 from EdouardVanbelle/doc/derrived-blob Dionisio Pozo 2026-09-01 06:30:21 +02:00
  • 30fdaa552b Merge pull request #679 from EdouardVanbelle/worktree-plan+derived-blobs-revision Dionisio Pozo 2026-09-01 06:29:56 +02:00
  • 715f601581 Merge pull request #696 from EdouardVanbelle/feat/thumbnails-on-backend-storage Dionisio Pozo 2026-09-01 06:29:32 +02:00
  • 430aa8c71c security(RUSTSEC-2026-0269): ignore RUSTSEC-2026-0269 as not reachable Edouard Vanbelle 2026-08-31 19:27:43 +02:00
  • eb2ae2a96d docs(architecture): derived and attached blobs Edouard Vanbelle 2026-08-31 19:08:17 +02:00
  • a7d266debb docs(plan): sketch the satellite-table diagram in step 12 Edouard Vanbelle 2026-08-30 22:43:41 +02:00
  • 620800ba32 docs(plan): add step 12 — document the two satellite tables Edouard Vanbelle 2026-08-30 22:42:34 +02:00
  • ba6fe49c71 docs(plan): mark step 7 done, with what landed beyond the original scope Edouard Vanbelle 2026-08-30 22:24:11 +02:00
  • 4baee0a1fb feat(transcode): key the memory cache by content, not by file Edouard Vanbelle 2026-08-30 22:20:47 +02:00
  • 63820c3c26 feat(jobs): the engine binds a run to the flags it started with Edouard Vanbelle 2026-08-30 20:11:23 +02:00
  • 67032d9afa fix(transcode): transcode_import is on-demand, like its thumbnail twins Edouard Vanbelle 2026-08-30 21:58:33 +02:00
  • 10c362a94a fix(jobs): flush the checkpoint tail, so progress reflects reality Edouard Vanbelle 2026-08-30 19:41:41 +02:00
  • bf2f0dc2b2 fix(transcode): store the derived blob before returning, not after Edouard Vanbelle 2026-08-30 19:25:06 +02:00
  • af753a0397 test(transcode): pin transcode_import's contract and empty-tree run Edouard Vanbelle 2026-08-30 19:14:28 +02:00
  • 71f227b737 feat(transcode): the local cache disables itself, and drains at boot Edouard Vanbelle 2026-08-30 18:22:18 +02:00
  • 0e09cb81ff feat(transcode): transcode_import drains .transcoded/, re-keying as it goes Edouard Vanbelle 2026-08-30 15:06:29 +02:00
  • 7705fca3af feat(transcode): count the decodes that pay nothing Edouard Vanbelle 2026-08-30 13:40:16 +02:00
  • f4e47bad6d test(transcode): prove the transcode is computed once per content Edouard Vanbelle 2026-08-29 23:50:58 +02:00
  • 8fabbfad9e test(transcode): a fixture the WebP encoder cannot shrink Edouard Vanbelle 2026-08-29 14:55:55 +02:00
  • 9c63f9969a feat(transcode): write transcodes to the derived tier, with negative rows Edouard Vanbelle 2026-08-29 11:37:33 +02:00
  • a7812475f4 fix(jobs): a startup job should not report completion twice Edouard Vanbelle 2026-08-30 16:42:39 +02:00
  • fb0925d10a fix(thumbnails): a drained tier is not a teardown failure Edouard Vanbelle 2026-08-30 16:27:57 +02:00
  • ce4354f497 fix(thumbnails): neither import job may tear down the shared directory Edouard Vanbelle 2026-08-30 16:18:49 +02:00
  • 577ecb7cef feat(jobs): run the thumbnail migration at startup, by default Edouard Vanbelle 2026-08-29 10:23:02 +02:00
  • 03246305f6 feat(thumbnails): the sidecar fallback disables itself Edouard Vanbelle 2026-08-29 02:21:16 +02:00
  • f1f327a6c4 refactor(consistency): blobs_consistency reads only the database Edouard Vanbelle 2026-08-29 01:44:08 +02:00
  • 1ea3826660 feat(jobs): jobs describe themselves — description, mutates, repair_description Edouard Vanbelle 2026-08-29 00:04:12 +02:00
  • b485db46fa feat(storage): audit every sidecar deletion, and reclaim orphaned uploads Edouard Vanbelle 2026-08-28 23:03:43 +02:00
  • 1a3d7d201a fix(storage): skip sidecars whose source is gone, before writing anything Edouard Vanbelle 2026-08-28 22:52:21 +02:00
  • b3221e265d feat(consistency): satellites_consistency covers both tables, and the sweep covers every job Edouard Vanbelle 2026-08-28 20:05:22 +02:00
  • 4fef34b230 feat(consistency): derived_consistency — the last coverage-matrix gap Edouard Vanbelle 2026-08-28 19:33:02 +02:00
  • de0f625d4c fix(dedup): refuse a derived mapping whose source is already gone Edouard Vanbelle 2026-08-28 12:43:05 +02:00
  • f6bb677d91 test(api): exercise the deletion path, which nothing did Edouard Vanbelle 2026-08-28 09:04:05 +02:00
  • ea5d3003e0 fix(dedup): bulk manifest reap orphaned every derived row Edouard Vanbelle 2026-08-28 08:58:11 +02:00
  • 0119110345 test(api): diagnose all leftovers, and name the pinning source Edouard Vanbelle 2026-08-28 08:12:25 +02:00
  • 2b9505f344 fix(api): define COMPOSE_FILE so the leftover diagnosis actually runs Edouard Vanbelle 2026-08-28 07:43:41 +02:00
  • fced39c798 test(api): drain GC on two zero passes, and diagnose leftovers Edouard Vanbelle 2026-08-28 00:16:51 +02:00
  • e5746a4f48 test(api): the probe must NOT leave a thumbnail sidecar Edouard Vanbelle 2026-08-28 00:11:01 +02:00
  • 1b68ee093e feat(storage): both import jobs tick daily instead of manual-only Edouard Vanbelle 2026-08-28 00:03:54 +02:00
  • c778b67006 feat(thumbnails): stop writing sidecars (step 10d2) Edouard Vanbelle 2026-08-27 23:53:50 +02:00
  • 791e2da4f4 docs(plan): the sequence was missing "stop writing sidecars" Edouard Vanbelle 2026-08-27 23:42:43 +02:00
  • df619a7ed9 feat(storage): thumb_attached_import drains its sidecars too Edouard Vanbelle 2026-08-27 23:31:31 +02:00
  • ae9ff0d8b3 feat(storage): thumb_derived_import drains the sidecars it imports Edouard Vanbelle 2026-08-27 22:58:05 +02:00
  • 80d5372131 test(api): cover WebP/JPEG negotiation, which nothing exercised Edouard Vanbelle 2026-08-27 22:22:07 +02:00
  • 12158ccf59 fix(storage): thumb_derived_import claims JPEG sidecars too Edouard Vanbelle 2026-08-27 19:06:09 +02:00
  • f4e4b518a9 feat(thumbnails): classify render failures as permanent or transient Edouard Vanbelle 2026-08-27 18:32:49 +02:00
  • 647929ed11 docs(plan): negative verdicts get a nullable blob_hash Edouard Vanbelle 2026-08-27 13:46:32 +02:00
  • c04f0c6824 docs(plan): scope step 7, the transcode dual-write Edouard Vanbelle 2026-08-27 13:30:58 +02:00
  • d202b4b5ca fix(storage): the derived import conflated variant with directory Edouard Vanbelle 2026-08-27 13:18:51 +02:00
  • 86d0d65583 feat(storage): derived variant encodes the output format Edouard Vanbelle 2026-08-27 07:21:35 +02:00
  • c656e684d4 feat(consistency): merge-join backend_consistency, both directions Edouard Vanbelle 2026-08-26 23:24:27 +02:00
  • d7de1c41e7 fix(files): missing folder_id is 400, not 500 Edouard Vanbelle 2026-08-26 23:07:58 +02:00
  • 4997eb4fb0 docs(plan): sequence transcode_import behind its two prerequisites Edouard Vanbelle 2026-08-26 22:54:44 +02:00
  • 260e6bb74f feat(thumbnails): read the derived tier ahead of the sidecar Edouard Vanbelle 2026-08-26 22:51:30 +02:00
  • 48d9e164d4 test(thumbnails): pin get_cached_thumbnail's tier precedence Edouard Vanbelle 2026-08-26 22:27:54 +02:00
  • 2775e6d567 docs: the two sidecar-only paths are production-unreachable Edouard Vanbelle 2026-08-26 21:58:21 +02:00
  • 18649eb7b9 fix(thumbnails): drop derived-hash ETag until the read-order flip Edouard Vanbelle 2026-08-26 21:42:39 +02:00
  • 7ec387003d refactor(thumbnails): one persist_rendered for every render path Edouard Vanbelle 2026-08-26 21:29:25 +02:00
  • 395296a7e7 fix(storage): file_exists misreported every file as missing Edouard Vanbelle 2026-08-26 10:03:10 +02:00
  • 4ae1531286 docs(plan): job-driven sidecar deletion, and the persist-consolidation blocker Edouard Vanbelle 2026-08-26 09:07:45 +02:00
  • 671e6ac0e7 test(api): end-to-end check of both sidecar import jobs Edouard Vanbelle 2026-08-26 00:49:49 +02:00
  • 49e7bb15a6 test(storage): cover the sidecar walk for both import jobs Edouard Vanbelle 2026-08-26 00:39:17 +02:00
  • 7a2ebe0fdc feat(storage): thumb_attached_import — backfill uploaded previews Edouard Vanbelle 2026-08-26 00:20:14 +02:00
  • f80a28763e feat(storage): thumb_derived_import — backfill the derived tier from sidecars Edouard Vanbelle 2026-08-25 23:57:16 +02:00
  • 95648f2fa3 fix(thumbnails): private, no-cache — the URL is gated and mutable Edouard Vanbelle 2026-08-25 23:17:49 +02:00
  • 7d9418f63c fix(thumbnails): ETag names the blob actually served Edouard Vanbelle 2026-08-25 21:28:34 +02:00
  • d71dd973e7 fix(thumbnails): two defects the copy test exposed Edouard Vanbelle 2026-08-25 08:13:51 +02:00
  • 6c5e53fee4 test(api): assert the blob registry is empty, not just the disk Edouard Vanbelle 2026-08-25 07:46:26 +02:00
  • 8881979761 test(api): assert the consistency jobs are clean after the whole suite Edouard Vanbelle 2026-08-25 07:45:02 +02:00
  • 64ff982571 feat(thumbnails): uploaded previews survive a copy Edouard Vanbelle 2026-08-25 07:39:57 +02:00
  • fac82fea23 feat(storage): add storage.file_attached_blobs, the file-keyed half Edouard Vanbelle 2026-08-25 07:21:32 +02:00
  • cf21ee2f8f fix(thumbnails): key the moka tier on content, closing the ETag race Edouard Vanbelle 2026-08-25 05:56:21 +02:00
  • 2c0ba37290 test(api): read the DTO from the folder listing, not the download route Edouard Vanbelle 2026-08-25 00:07:09 +02:00
  • 19a8186c66 test(api): upload into an explicit folder in the ETag test Edouard Vanbelle 2026-08-25 00:01:19 +02:00
  • ec61ce77f8 docs(plan): ETag moves to the derived hash at the read-order flip Edouard Vanbelle 2026-08-24 23:52:36 +02:00
  • a3a93b90ec fix(thumbnails): key the ETag on content hash, not file id Edouard Vanbelle 2026-08-24 23:47:57 +02:00
  • 46dc25a9a8 test(api): scope derived_blob_copy claims to what it can observe Edouard Vanbelle 2026-08-24 23:07:37 +02:00
  • 9f8ec141f3 feat(storage): single-source the copy fan-out via copy_file_satellites Edouard Vanbelle 2026-08-24 23:04:53 +02:00
  • 7261b5b175 fix(s3): never return a mangled enumeration cursor Edouard Vanbelle 2026-08-24 22:08:30 +02:00
  • 7f5ee7401f refactor(storage): make blob enumeration ordered and hash-cursored Edouard Vanbelle 2026-08-24 21:25:08 +02:00
  • a8223cab65 test(storage-check): drain the GC cascade instead of one pass Edouard Vanbelle 2026-08-24 01:05:48 +02:00
  • c276d3861e fix(thumbnails): release derived blobs when their source is reaped Edouard Vanbelle 2026-08-24 00:53:46 +02:00
  • 60b94e1183 feat(thumbnails): serve derived blobs when the sidecar cannot Edouard Vanbelle 2026-08-23 23:10:00 +02:00
  • 1c488b7df5 feat(thumbnails): also store derived thumbnails as blobs Edouard Vanbelle 2026-08-23 21:22:26 +02:00
  • a7938344dd feat(storage): add content_derived_blobs table + reference source Edouard Vanbelle 2026-08-23 19:13:19 +02:00
  • a7b7045ed2 docs(plan): record the blobs_consistency -> chunks_consistency rename Edouard Vanbelle 2026-08-23 18:35:54 +02:00
  • 76e5a8b458 Merge pull request #695 from EdouardVanbelle/ci/bundled-binaries Dionisio Pozo 2026-08-29 19:24:24 +02:00
  • 724e6bec36 fix(release-binaries): drop x86_64-apple-darwin target Edouard Vanbelle 2026-08-29 14:28:08 +02:00
  • c5dfb389f2 fix(release-binaries): drop alpine container, use musl-tools natively Edouard Vanbelle 2026-08-29 13:09:21 +02:00