docs: resolve ADR-014 migration-008 false alarm (cols shipped in 007)
Reconciliation finding: the v0.6.0 report's "migration 008 videos.rate_limited_at" was a mislabel. Both transcript_status and rate_limited_at shipped in migration 007; the sequence legitimately skips 008, nothing was lost, and the runner's column reads are sound. Updated the ADR-014 implementation note to state this (was flagged as an unresolved discrepancy). The item-2 (shared per-egress-IP rate gate vs per-video backoff) flag stays open — still unconfirmed.
This commit is contained in:
+11
-10
@@ -402,16 +402,17 @@ the rate gate (the batch path moves into k3s per the deferred CronJob item).
|
||||
|
||||
**Implementation note (2026-06-03, v0.6.0 — added during reconciliation).** A v0.6.0 release
|
||||
shipped 429 handling: `domain.SourceRateLimited` (429 no longer collapsed to `SourceNone`),
|
||||
youtube adapter maps 429 → `SourceRateLimited`, migration 007 `transcript_status` + (per the
|
||||
v0.6.0 report) a `videos.rate_limited_at` column, `TAPIR_FETCH_BACKOFF` config, runner records
|
||||
rate-limited + skips within the backoff window, and a "⏳ Retrying later" badge. This realises
|
||||
decision items 1, 3, and 4 well. **Item 2 (a single shared per-egress-IP rate gate) appears to
|
||||
be realised as per-*video* backoff state, NOT a process-wide IP gate** — multiple videos can
|
||||
still each hit the endpoint and collectively trip the per-IP 429. Treat item 2 as **not yet
|
||||
confirmed done**; verify in `internal/runner`/youtube adapter and, if absent, it remains open.
|
||||
ALSO: the v0.6.0 report referenced "migration 008 videos.rate_limited_at" but **no migration 008
|
||||
exists on `main`** (tree jumps 007→009). Resolve whether `rate_limited_at` actually shipped (in
|
||||
007? lost? renumbered?) — a documentation/build discrepancy flagged during reconciliation.
|
||||
youtube adapter maps 429 → `SourceRateLimited`, **migration 007 added `videos.transcript_status`
|
||||
+ `videos.rate_limited_at`** (durable per-video retry state), `TAPIR_FETCH_BACKOFF` config,
|
||||
runner records rate-limited + skips within the backoff window, and a "⏳ Retrying later" badge.
|
||||
This realises decision items 1, 3, and 4 well. **Item 2 (a single shared per-egress-IP rate
|
||||
gate) appears to be realised as per-*video* backoff state, NOT a process-wide IP gate** —
|
||||
multiple videos can still each hit the endpoint and collectively trip the per-IP 429. Treat item
|
||||
2 as **not yet confirmed done**; verify in `internal/runner`/youtube adapter and, if absent, it
|
||||
remains open. (Resolved during reconciliation: the v0.6.0 report's reference to "migration 008
|
||||
videos.rate_limited_at" was a **mislabel** — both columns shipped in migration **007**, not a
|
||||
missing 008. No migration was lost; the sequence legitimately skips 008. `rate_limited_at`
|
||||
exists and the runner's column reads are sound.)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user