-
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