@@ -117,8 +117,15 @@ function signalPills(item) {
117117 pills . push ( h ( "span" , { class : `pill pill-${ level . toLowerCase ( ) } ` , title : "AGT contributor risk" } , `AGT ${ level } ` ) ) ;
118118 } else if ( label === "external-plugin-canvas" ) {
119119 pills . push ( h ( "span" , { class : "pill" } , "canvas" ) ) ;
120+ } else if ( label === "first party" ) {
121+ pills . push ( h ( "span" , { class : "pill pill-first-party" , title : "Repository owned by a Microsoft/GitHub organization" } , "First party" ) ) ;
122+ } else if ( label === "third party" ) {
123+ pills . push ( h ( "span" , { class : "pill pill-third-party" , title : "Repository owned by a third-party organization" } , "Third party" ) ) ;
120124 }
121125 }
126+ if ( item . review ?. fastTracked && ! item . decision ) {
127+ pills . push ( h ( "span" , { class : "pill pill-approve" , title : "First-party submission fast-tracked to approval" } , "Fast-tracked" ) ) ;
128+ }
122129 if ( item . decision ) {
123130 pills . push ( h ( "span" , { class : `pill pill-${ item . decision . kind } ` } , item . decision . kind === "approve" ? "Approved" : "Rejected" ) ) ;
124131 } else if ( item . pendingDecision ) {
@@ -146,7 +153,14 @@ function findItem(number) {
146153
147154function pendingReviewCount ( ) {
148155 return board
149- ? board . items . filter ( ( item ) => ! item . decision && ! item . pendingDecision && item . reviewStatus !== "reviewed" && item . reviewStatus !== "queued" ) . length
156+ ? board . items . filter (
157+ ( item ) =>
158+ item . reviewEligible &&
159+ ! item . decision &&
160+ ! item . pendingDecision &&
161+ item . reviewStatus !== "reviewed" &&
162+ item . reviewStatus !== "queued" ,
163+ ) . length
150164 : 0 ;
151165}
152166
@@ -188,9 +202,10 @@ function renderBoard() {
188202 }
189203}
190204
191- function columnItems ( columnId ) {
205+ function columnItems ( columnId , kind ) {
192206 return board . items . filter ( ( item ) => item . column === columnId && ! item . decision &&
193- ! item . pendingDecision && item . reviewStatus !== "queued" ) ;
207+ ! item . pendingDecision && item . reviewStatus !== "queued" &&
208+ ( kind === "reject" || item . reviewEligible ) ) ;
194209}
195210
196211function stagedComment ( item ) {
@@ -199,18 +214,20 @@ function stagedComment(item) {
199214}
200215
201216function renderColumnActions ( column ) {
202- const count = columnItems ( column . id ) . length ;
203217 return h ( "div" , { class : "column-actions" , role : "group" , "aria-label" : `${ column . title } bulk actions` } ,
204- [ "approve" , "reject" , "rereview" ] . map ( ( kind ) => h ( "button" , {
205- type : "button" , class : "btn btn-small" , disabled : bulkBusy || ! count ,
206- title : `Apply to all ${ count } eligible items in this column, including hidden search results` ,
207- onclick : ( ) => bulkAction ( column . id , kind ) ,
208- } , `${ kind === "rereview" ? "Re-review" : kind === "approve" ? "Approve" : "Reject" } all` ) ) ) ;
218+ [ "approve" , "reject" , "rereview" ] . map ( ( kind ) => {
219+ const count = columnItems ( column . id , kind ) . length ;
220+ return h ( "button" , {
221+ type : "button" , class : "btn btn-small" , disabled : bulkBusy || ! count ,
222+ title : `Apply to all ${ count } eligible items in this column, including hidden search results` ,
223+ onclick : ( ) => bulkAction ( column . id , kind ) ,
224+ } , `${ kind === "rereview" ? "Re-review" : kind === "approve" ? "Approve" : "Reject" } all` ) ;
225+ } ) ) ;
209226}
210227
211228async function bulkAction ( columnId , kind ) {
212229 if ( bulkBusy ) return ;
213- const items = columnItems ( columnId ) . map ( ( item ) => ( {
230+ const items = columnItems ( columnId , kind ) . map ( ( item ) => ( {
214231 number : item . number , comment : stagedComment ( item ) ,
215232 } ) ) ;
216233 if ( ! items . length ) return ;
@@ -239,7 +256,7 @@ async function bulkAction(columnId, kind) {
239256 }
240257 for ( const item of items ) {
241258 try {
242- if ( ! columnItems ( columnId ) . some ( ( current ) => current . number === item . number ) ) {
259+ if ( ! columnItems ( columnId , kind ) . some ( ( current ) => current . number === item . number ) ) {
243260 throw new Error ( "Item moved, was queued, or was already actioned; review it again." ) ;
244261 }
245262 await api ( "POST" , "/api/decision" , { ...item , kind } ) ;
@@ -381,7 +398,8 @@ function renderDrawer() {
381398 . map ( ( column ) => h ( "option" , { value : column . id , selected : column . id === item . column } , column . title ) ) ;
382399 ui . drawerMove . replaceChildren ( ...options ) ;
383400 ui . drawerMove . disabled = Boolean ( item . decision ) ;
384- ui . drawerRereview . disabled = Boolean ( item . decision ) || item . reviewStatus === "queued" ;
401+ ui . drawerRereview . disabled = ! item . reviewEligible || Boolean ( item . decision ) ||
402+ Boolean ( item . pendingDecision ) || item . reviewStatus === "queued" ;
385403 if ( ui . drawerRereview . disabled ) hideRereview ( ) ;
386404
387405 for ( const tab of ui . tabs ) {
@@ -394,7 +412,7 @@ function renderDrawer() {
394412
395413 ui . drawerFooter . hidden = Boolean ( item . decision ) ;
396414 updatePreview ( ) ;
397- ui . approve . disabled = bulkBusy || Boolean ( item . pendingDecision ) ;
415+ ui . approve . disabled = bulkBusy || ! item . reviewEligible || Boolean ( item . pendingDecision ) ;
398416 ui . reject . disabled ||= bulkBusy || Boolean ( item . pendingDecision ) ;
399417 renderTab ( item ) ;
400418}
@@ -467,7 +485,7 @@ function renderReview(item) {
467485 return wrapper ;
468486 }
469487 const rows = [
470- [ "Recommendation" , RECOMMENDATION_LABELS [ review . recommendation ] + ( item . manualColumn ? ` (you moved it to ${ RECOMMENDATION_LABELS [ item . manualColumn ] } )` : "" ) ] ,
488+ [ "Recommendation" , RECOMMENDATION_LABELS [ review . recommendation ] + ( review . fastTracked ? " (first-party fast-track, no AI review)" : "" ) + ( item . manualColumn ? ` (you moved it to ${ RECOMMENDATION_LABELS [ item . manualColumn ] } )` : "" ) ] ,
471489 [ "Plugin" , review . pluginName ] ,
472490 [ "Repository" , review . repository ? h ( "a" , { href : `https://github.com/${ review . repository } ` , target : "_blank" , rel : "noopener noreferrer" } , review . repository ) : null ] ,
473491 [ "Repo facts" , review . repoFacts ] ,
@@ -566,6 +584,7 @@ function resetConfirm() {
566584 ui . approve . disabled = true ;
567585 ui . reject . disabled = true ;
568586 }
587+ if ( ! item ?. reviewEligible ) ui . approve . disabled = true ;
569588}
570589
571590async function decide ( kind ) {
@@ -627,6 +646,7 @@ ui.refresh.addEventListener("click", () =>
627646 const parts = [ `${ result . total } open` ] ;
628647 if ( result . added . length ) parts . push ( `${ result . added . length } new` ) ;
629648 if ( result . removed . length ) parts . push ( `${ result . removed . length } removed` ) ;
649+ if ( result . fastTracked ?. length ) parts . push ( `${ result . fastTracked . length } first-party fast-tracked` ) ;
630650 toast ( `Refreshed: ${ parts . join ( ", " ) } ` ) ;
631651 if ( selected != null && activeTab !== "review" ) loadDetail ( selected , { force : true } ) ;
632652 } catch ( error ) {
0 commit comments