(number: number)
| 3087 | } |
| 3088 | |
| 3089 | function lowSignalUnmergeablePrApplyBlockReason(number: number): string | null { |
| 3090 | const issue = ghJson<{ assignees?: unknown[] }>([ |
| 3091 | "api", |
| 3092 | `repos/${targetRepo()}/issues/${number}`, |
| 3093 | "--jq", |
| 3094 | "{assignees:[.assignees[]? | {login:.login}]}", |
| 3095 | ]); |
| 3096 | if ((issue.assignees ?? []).length > 0) return "assigned PR has maintainer/human signal"; |
| 3097 | |
| 3098 | const pull = ghJson<{ requested_reviewers?: unknown[]; requested_teams?: unknown[] }>([ |
| 3099 | "api", |
| 3100 | `repos/${targetRepo()}/pulls/${number}`, |
| 3101 | "--jq", |
| 3102 | "{requested_reviewers:[.requested_reviewers[]? | {login:.login}],requested_teams:[.requested_teams[]? | {slug:.slug}]}", |
| 3103 | ]); |
| 3104 | if ((pull.requested_reviewers ?? []).length > 0 || (pull.requested_teams ?? []).length > 0) { |
| 3105 | return "requested reviewers or teams indicate active review signal"; |
| 3106 | } |
| 3107 | |
| 3108 | const maintainerComments = maintainerAssociatedEntries( |
| 3109 | ghPaged<unknown>(`repos/${targetRepo()}/issues/${number}/comments`), |
| 3110 | ); |
| 3111 | if (maintainerComments.length > 0) return "maintainer issue comment blocks low-signal auto-close"; |
| 3112 | |
| 3113 | const maintainerReviews = maintainerAssociatedEntries( |
| 3114 | ghPaged<unknown>(`repos/${targetRepo()}/pulls/${number}/reviews`), |
| 3115 | ); |
| 3116 | if (maintainerReviews.length > 0) return "maintainer PR review blocks low-signal auto-close"; |
| 3117 | |
| 3118 | return null; |
| 3119 | } |
| 3120 | |
| 3121 | function unconfirmedProductDirectionApplyBlockReason( |
| 3122 | number: number, |
no test coverage detected