diff --git a/backend/internal/latest/poller.go b/backend/internal/latest/poller.go index 3bb3f35..10a7d70 100644 --- a/backend/internal/latest/poller.go +++ b/backend/internal/latest/poller.go @@ -143,7 +143,6 @@ func (p *Poller) prefetchCover(ctx context.Context, sr store.Series) { // fill-only write for an ordinary pass, a write-through for a forced one // (issue #135). Every failure is logged against the Series and swallowed so // the chapter poll cannot see it. - func (p *Poller) storeCover(ctx context.Context, sr store.Series, sourceURL string) { bytes, contentType, err := fetchCoverBytes(ctx, sourceURL, p.CoverFetch, p.CoverBytesFetch) if err != nil { @@ -157,9 +156,10 @@ func (p *Poller) storeCover(ctx context.Context, sr store.Series, sourceURL stri return } // The forced write replaces whether or not a Cover exists, and the row - // then tells three outcomes apart: a blank filled, identical artwork - // re-served — an honest no-op — or a replacement that strands previous, - // which the next wave reclaims at this exact call site. + // then tells the three outcomes apart: a blank filled, identical artwork + // re-served — an honest no-op — or a replacement whose previous address + // is stranded: its bytes stay served under the covers table (ADR-0014), + // the row just no longer points at them. previous, current, err := p.Store.ReplaceSeriesCover(sr.Site, sr.SeriesID, sourceURL, bytes, contentType) if err != nil { log.Printf("latest poll %q: persist cover: %v", sr.Key(), err)