@@ -51,6 +51,7 @@ export function evaluatePullRequestWatch(
5151 let failedChecks = headMoved ? [ ] : watch . failedChecks ;
5252 let passed = headMoved ? false : watch . passed ;
5353 let passedChecks = headMoved ? [ ] : watch . passedChecks ;
54+ let owedChecks = headMoved ? [ ] : ( watch . owedChecks ?? [ ] ) ;
5455 if ( detail . checks . length > 0 ) {
5556 const failed = detail . checks . filter ( isFailedCheck ) ;
5657 const newlyFailed = failed . filter ( ( check ) => ! failedChecks . includes ( check . name ) ) ;
@@ -66,25 +67,30 @@ export function evaluatePullRequestWatch(
6667 // required checks, any check counts, and advisory bots keep adding passed ones: no wake.
6768 const gateGrew = required . length > 0 && gateNames . some ( ( name ) => ! told . includes ( name ) ) ;
6869 // Other checks still pending when required ones passed are owed one wake when all settle.
69- // They are kept with the told names until then , so later advisory churn never wakes.
70+ // Only those are owed , so later advisory churn never wakes. One turned required is gate news .
7071 const owed =
71- required . length > 0
72- ? detail . checks . filter ( ( check ) => check . required !== true && told . includes ( check . name ) )
72+ passedNow && passed
73+ ? detail . checks
74+ . filter ( ( check ) => check . required !== true && owedChecks . includes ( check . name ) )
75+ . map ( ( check ) => check . name )
7376 : [ ] ;
7477 const settled =
7578 failed . length === 0 && detail . checks . every ( ( check ) => check . status !== "pending" ) ;
76- let owedNow = passedNow && passed ? owed : [ ] ;
79+ owedChecks = owed ;
7780 if ( passedNow && ( ! passed || gateGrew ) ) {
7881 changes . push ( { kind : "checks-passed" , count : gate . length , required : required . length > 0 } ) ;
79- owedNow = detail . checks . filter (
80- ( check ) => check . required !== true && check . status === "pending" ,
81- ) ;
82- } else if ( settled && owedNow . length > 0 ) {
82+ owedChecks =
83+ required . length > 0
84+ ? detail . checks
85+ . filter ( ( check ) => check . required !== true && check . status === "pending" )
86+ . map ( ( check ) => check . name )
87+ : [ ] ;
88+ } else if ( settled && owed . length > 0 ) {
8389 changes . push ( { kind : "checks-passed" , count : detail . checks . length , required : false } ) ;
84- owedNow = [ ] ;
90+ owedChecks = [ ] ;
8591 }
8692 passed = passedNow ;
87- passedChecks = passedNow ? [ ... gateNames , ... owedNow . map ( ( check ) => check . name ) ] : [ ] ;
93+ passedChecks = passedNow ? gateNames : [ ] ;
8894 }
8995
9096 // Only a head never read with checks waits for them: an empty read after checks were seen is
@@ -142,6 +148,7 @@ export function evaluatePullRequestWatch(
142148 failedChecks,
143149 passed,
144150 passedChecks,
151+ owedChecks,
145152 remarksThrough,
146153 remarkIds,
147154 conflicting,
0 commit comments