Skip to content

ci: hand off approved review feedback to authors - #13162

Merged
DariuszPorowski merged 2 commits into
mainfrom
dariuszporowski-approved-review-handoffs
Sep 30, 2026
Merged

DariuszPorowski merged 2 commits into
mainfrom
dariuszporowski-approved-review-handoffs

Conversation

@DariuszPorowski

Copy link
Copy Markdown
Member

Summary

  • Reuse pr:waiting-for-author when a non-author human's latest current-head approval has a nonempty summary and existing unresolved submitted inline feedback, including bot feedback that predates that approval.
  • Distinguish submitted reviewer participation from pending review requests. Active human review evidence keeps outstanding or unverifiable review needs in pr:waiting-for-review instead of incorrectly requesting a new reviewer.
  • Preserve human-only inline feedback without endorsement, approval and queue eligibility safeguards, manual holds, draft/closed handling, pagination, fork signals, and repository-global concurrency. Update the existing guide and label descriptions without adding labels, dependencies, workflow files, or a checked-in test suite.

Reason for change

A submitted review clears its pending request, so zero pending requests does not establish that a PR has never had a reviewer. An approving human can also ask the author to address existing inline feedback through the submitted review summary. Ignoring both forms of evidence leaves approved-with-feedback PRs incorrectly labeled pr:needs-reviewer.

The deterministic rule checks summary emptiness, not wording. It endorses only submitted feedback whose comment creation and associated review submission were at or before the approval; pending, dismissed, stale, author, and bot approvals do not qualify. General issue discussion is not classified automatically. Required approval, CODEOWNER, last-push approval, and required-check safeguards remain separate and use the actual target branch, including stacked targets.

#12770 and #12783 are lifecycle examples, not feature changes implemented by this PR.

N/A: no issue is closed by this maintenance follow-up.

How to test

The following targeted checks were run locally and passed. JavaScript execution used Node.js 24.9.0; missing runtime/spellcheck tooling was restored outside the repository and removed afterward.

Command Result
node --check .\.github\scripts\pr-status-labels.mjs Passed
pnpm exec prettier --config .\.github\linters\.prettierrc.yml --check .\.github\scripts\pr-status-labels.mjs .\.github\labels.yml Passed
pnpm exec markdownlint-cli2 .\docs\contributing\contributing-pull-requests\README.md --config .\.github\linters\.markdownlint-cli2.yaml Passed
pnpm exec markdown-table-formatter .\docs\contributing\contributing-pull-requests\README.md --check Passed
pnpm exec cspell lint --config .\.github\linters\.cspell.yml --no-progress .\docs\contributing\contributing-pull-requests\README.md .\.github\labels.yml Passed
git diff --cached --check (before committing) Passed

A one-off harness outside the repository imported the actual reconciler and passed 84 cases. Coverage included baseline reproduction for both real PR shapes, unendorsed bots, positive approvals without threads, submitted/pending/dismissed/stale/author/bot reviewer filtering, later bot comments and submissions, superseding reviews, nested review/thread/comment pagination, resolved and outdated threads, null decisions with existing human reviews, genuinely missing reviewers, last-push/CODEOWNER/approval-count/check gates, stacked target rules, manual holds, draft/closed behavior, unrelated/release/stale labels, fork/scheduled signals, and API/cursor errors. The temporary harness was removed; no test suite or test workflow was added to the repository.

Read-only live runs at 2026-09-30 16:31 UTC used the actual reconciler with real REST/GraphQL reads and mocked label/queue mutation routes. Both PRs were open and non-draft, had current-head human approvals, null aggregate review decisions, zero pending requests, and unresolved inline feedback. Their live labels remained pr:standard and pr:needs-reviewer; zero remote mutations occurred.

PR Actual target Exact proposed labels
#12770 main pr:standard, pr:waiting-for-author
#12783 dp/idempotent-tag-reconciliation pr:standard, pr:waiting-for-author

The main target still required one CODEOWNER approval and last-push approval; the stacked target had no active pull-request or required-status-check rules. Neither run proposed approval, queue readiness, or dequeueing.

Full Go builds/tests were not run because no Go code changed. No workflow YAML changed, so actionlint was not needed.

File change summary

File Summary of change
.github/scripts/pr-status-labels.mjs Read and reuse paginated submitted-human review evidence; endorse pre-approval inline feedback from qualifying approval summaries; retain reviewer handoffs when merge approval cannot be inferred.
.github/labels.yml Align existing reviewer/author handoff descriptions with the evidence rules; preserve names, colors, and unrelated labels.
docs/contributing/contributing-pull-requests/README.md Document the deterministic approval-summary rule and the separation between reviewer participation, author feedback, and validated merge eligibility.

Use current-head human approval summaries to endorse pre-existing submitted inline feedback without interpreting their wording. Keep submitted reviewer participation separate from approval eligibility and preserve conservative last-push, CODEOWNER and queue gates.

Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@DariuszPorowski
DariuszPorowski requested review from a team as code owners September 30, 2026 16:48
Copilot AI balanced review requested due to automatic review settings September 30, 2026 16:48
@github-actions github-actions Bot added the pr:waiting-for-review A reviewer owns the next action; required approval is pending or unverifiable label Sep 30, 2026
@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@DariuszPorowski DariuszPorowski added the pr:standard Ongoing maintenance, minor improvements, documentation updates, and routine development work label Sep 30, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Unprotected targets can misclassify a formal changes-requested review as waiting for the reviewer.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
What changed in this PR

Updates PR handoff labeling to recognize submitted human reviews and approval-endorsed inline feedback.

Changes:

  • Adds submitted-review evidence and bot-feedback endorsement logic.
  • Refines reviewer/author handoff labels.
  • Documents the new lifecycle rules.
File Description
.github/​scripts/​pr-status-labels.mjs Implements review-evidence reconciliation.
.github/​labels.yml Updates lifecycle label descriptions.
docs/​contributing/​contributing-pull-requests/​README.md Documents handoff behavior.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .github/scripts/pr-status-labels.mjs
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Unit Tests

    2 files  ±0    459 suites  ±0   9m 25s ⏱️ +18s
6 635 tests ±0  6 633 ✅ ±0  2 💤 ±0  0 ❌ ±0 
7 943 runs  ±0  7 941 ✅ ±0  2 💤 ±0  0 ❌ ±0 

Results for commit ef81d48. ± Comparison against base commit b140370.

♻️ This comment has been updated with latest results.

@codecov

codecov Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 59.63%. Comparing base (b140370) to head (ef81d48).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #13162   +/-   ##
=======================================
  Coverage   59.63%   59.63%           
=======================================
  Files         768      768           
  Lines       44975    44975           
=======================================
  Hits        26823    26823           
  Misses      18152    18152           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment thread .github/scripts/pr-status-labels.mjs
@github-actions github-actions Bot added pr:waiting-for-author The author needs to address human review feedback or human-endorsed inline feedback and removed pr:waiting-for-review A reviewer owns the next action; required approval is pending or unverifiable labels Sep 30, 2026
Track latest human change requests independently of required approval on the target branch. Keep the author next until an explicit later pending review request, without treating a push or comment-only review as clearing changes.

Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@radius-functional-tests

radius-functional-tests Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Radius functional test overview

🔍 Go to test action run

Click here to see the test run details
Name Value
Repository radius-project/radius
Commit ref ef81d48
Unique ID func1e9ca3d8c4
Image tag pr-func1e9ca3d8c4
  • Dapr: 1.14.4
  • Azure KeyVault CSI driver: 1.4.2
  • Azure Workload identity webhook: 1.3.0
  • Bicep recipe location ghcr.io/radius-project/dev/test/testrecipes/test-bicep-recipes/<name>:pr-func1e9ca3d8c4
  • Terraform recipe location http://tf-module-server.radius-test-tf-module-server.svc.cluster.local/<name>.zip (in cluster)
  • applications-rp test image location: ghcr.io/radius-project/dev/applications-rp:pr-func1e9ca3d8c4
  • dynamic-rp test image location: ghcr.io/radius-project/dev/dynamic-rp:pr-func1e9ca3d8c4
  • controller test image location: ghcr.io/radius-project/dev/controller:pr-func1e9ca3d8c4
  • ucp test image location: ghcr.io/radius-project/dev/ucpd:pr-func1e9ca3d8c4
  • deployment-engine test image location: ghcr.io/radius-project/deployment-engine:latest

Test Status

⌛ Building Radius and pushing container images for functional tests...
✅ Container images build succeeded
⌛ Publishing Bicep Recipes for functional tests...
✅ Recipe publishing succeeded
⌛ Starting ucp-cloud functional tests...
⌛ Starting corerp-cloud functional tests...
✅ ucp-cloud functional tests succeeded
✅ corerp-cloud functional tests succeeded

@DariuszPorowski DariuszPorowski self-assigned this Sep 30, 2026
@github-actions github-actions Bot added pr:waiting-for-review A reviewer owns the next action; required approval is pending or unverifiable and removed pr:waiting-for-author The author needs to address human review feedback or human-endorsed inline feedback labels Sep 30, 2026
@github-actions github-actions Bot added pr:ready-for-queue Review, checks and mergeability permit adding this PR to the queue pr:review-approved Required reviews are approved; checks may still be pending and removed pr:waiting-for-review A reviewer owns the next action; required approval is pending or unverifiable labels Sep 30, 2026
@DariuszPorowski
DariuszPorowski added this pull request to the merge queue Sep 30, 2026
@github-actions github-actions Bot removed the pr:ready-for-queue Review, checks and mergeability permit adding this PR to the queue label Sep 30, 2026
Merged via the queue into main with commit a0c985d Sep 30, 2026
89 checks passed
@github-actions github-actions Bot added the pr:ready-for-queue Review, checks and mergeability permit adding this PR to the queue label Sep 30, 2026
@DariuszPorowski
DariuszPorowski deleted the dariuszporowski-approved-review-handoffs branch September 30, 2026 19:56
@github-actions github-actions Bot removed pr:review-approved Required reviews are approved; checks may still be pending pr:ready-for-queue Review, checks and mergeability permit adding this PR to the queue labels Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr:standard Ongoing maintenance, minor improvements, documentation updates, and routine development work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants