feat(scheduler): a channel's "get full history" backfill is a recorded run, and a row knows its last three runs

The one-channel deep backfill ran as a FastAPI BackgroundTask: what it fetched, what it spent and
how it failed reached only the log. It is now a one-shot run on the scheduler (`channel_backfill`,
trigger ad_hoc, actor = the user, target = the channel) with its quota tagged to the run. Its
per-channel exclusion with the scheduled backfill and the two-run cap are unchanged, and a run
they turn away says why in its result instead of returning nothing. A failure is no longer
swallowed: the run records it.

The scheduler snapshot carries each job's last three runs (one windowed query), so the page can
show an interrupted or skipped run instead of the latest outcome alone.
This commit is contained in:
2026-10-18 01:05:24 +02:00
parent 911527a548
commit 27c2fcbd2e
8 changed files with 256 additions and 55 deletions
+4 -1
View File
@@ -185,7 +185,10 @@
"syncpaused": "a szinkron szünetel",
"lowquota": "kevés a kvóta",
"noreadscope": "nincs YouTube-olvasási jogosultság",
"busy": "egy másik szinkron fut"
"busy": "egy másik szinkron fut",
"channelbusy": "ennek a csatornának a betöltése már fut",
"atcapacity": "már két teljes előzmény-betöltés fut — ezt az ütemező fejezi be",
"nothingtodo": "nincs több letöltendő"
},
"failure": {
"rss_all_failed_one": "Az RSS-hírcsatorna az egyetlen csatornánál sem válaszolt ({{channel}}): {{cause}}. Az API-n át beolvasva helyette: {{read}}.",