@@ -161,6 +161,19 @@ async function settleBeforeDeadline<T>(
161161 }
162162}
163163
164+ function finishSuccessfulDigestAttempt (
165+ variant : string ,
166+ lang : string ,
167+ slot : ReturnType < typeof beginDigestAttempt > ,
168+ ) : null {
169+ completeDigestAttempt ( variant , lang , slot ) ;
170+ // Publication remains inside the shared in-flight promise. Clear the build
171+ // identity before that phase starts so an outer response timeout cannot
172+ // relabel a completed build as `build-error` and overwrite its canonical
173+ // publication with a negative sentinel.
174+ return null ;
175+ }
176+
164177type DigestFeedEntry = { attemptId : string ; category : string ; feed : ServerFeed } ;
165178
166179/**
@@ -2042,7 +2055,7 @@ export async function listFeedDigest(
20422055 const result = await buildDigest ( variant , lang , ( await revokedPromise ) . urls ) ;
20432056 const totalItems = Object . values ( result . categories ) . reduce ( ( sum , b ) => sum + b . items . length , 0 ) ;
20442057 if ( totalItems > 0 ) {
2045- completeDigestAttempt ( variant , lang , leaderSlot ) ;
2058+ leaderSlot = finishSuccessfulDigestAttempt ( variant , lang , leaderSlot ) ;
20462059 return result ;
20472060 }
20482061 leaderFailure = publishFailedAttempt (
@@ -2056,15 +2069,17 @@ export async function listFeedDigest(
20562069 completeDigestAttempt ( variant , lang , leaderSlot ) ;
20572070 return null ;
20582071 } catch ( err ) {
2059- leaderFailure = publishFailedAttempt (
2060- variant ,
2061- lang ,
2062- digestCacheKey ,
2063- leaderSlot ,
2064- 'build-error' ,
2065- 30 ,
2066- ) ;
2067- completeDigestAttempt ( variant , lang , leaderSlot ) ;
2072+ if ( leaderSlot ) {
2073+ leaderFailure = publishFailedAttempt (
2074+ variant ,
2075+ lang ,
2076+ digestCacheKey ,
2077+ leaderSlot ,
2078+ 'build-error' ,
2079+ 30 ,
2080+ ) ;
2081+ completeDigestAttempt ( variant , lang , leaderSlot ) ;
2082+ }
20682083 throw err ;
20692084 }
20702085 } ,
@@ -3170,6 +3185,7 @@ export const __testing__ = {
31703185 fallbackDigestCache,
31713186 markFallbackCoverageStale,
31723187 settleBeforeDeadline,
3188+ finishSuccessfulDigestAttempt,
31733189 lastGoodStoreTesting,
31743190 beginDigestAttempt,
31753191 completeDigestAttempt,
0 commit comments