potiuk opened a new pull request, #232:
URL: https://github.com/apache/airflow-steward/pull/232
## Summary
Adds a merit-discussion-in-flight exception to the
`strip-ready-on-downgrade` hard rule in
`pr-management-triage`. When the PR has any unresolved review
thread whose first comment is from a maintainer
(`COLLABORATOR` / `MEMBER` / `OWNER`), the `ready for
maintainer review` label is preserved on regression:
- `draft` actions skip the draft conversion (PR stays open);
the violations comment is still posted.
- `close` actions skip the close (PR stays open); the comment
and the quality-violations label still apply.
- `comment` actions just post the violations comment without
stripping the label.
`rerun` / `rebase` / `ping` were already non-stripping and
are unchanged.
## Motivation
The `ready for maintainer review` label exists to attract
senior eyes. An unresolved maintainer-opened review thread
is exactly the moment those eyes are most valuable —
stripping the label or pushing the PR back to draft
mid-discussion makes it disappear from the maintainer queue
at the worst possible time. CI red / lint failures / merge
conflicts and a live design debate are orthogonal axes: a
maintainer can usefully weigh in on design even when CI is
red.
Originating user-scope feedback memory:
`feedback-ready-for-maintainer-review-label`.
## Design choices
- **Precondition is deliberately broad.** Any
maintainer-opened unresolved review thread satisfies
`merit_discussion_thread_present`, regardless of body
length or when it was opened relative to the label-add.
A narrower "substantive content" heuristic risked
mis-classifying short-but-substantive prompts ("is this
really the right layer?") as trivial. Erring toward
keeping the label is the safer asymmetry: a stale-but-kept
label costs a maintainer a glance; a stripped label
mid-discussion costs the discussion its audience.
- **Contributor-author threads do not satisfy the
precondition.** Contributor-to-contributor side chatter
is not the merit signal the label defers to. Mirrors the
`unresolved_threads_only` collaborator qualifier already
used by rows 14c/15.
- **Preview must quote the maintainer-thread URL(s) that
triggered the exception** so the maintainer can
sanity-check before confirming.
## Out of scope
`stale-sweeps.md` Sweep 4 (4a strip / 4b close) also touches
the ready label, but on a different signal — *author
silence ≥ 7 days after a maintainer comment*. That flow is
about a stalled discussion, not an active one; applying the
same exception there would block stripping a label whose
discussion has been stuck for weeks. Flagged for follow-up
if desired.
## Files
- `.claude/skills/pr-management-triage/classify-and-act.md`
— new `merit_discussion_thread_present` precondition;
exception block appended to the `strip-ready-on-downgrade`
hard rule.
- `.claude/skills/pr-management-triage/actions.md` — Case A
(default strip-and-mutate) vs Case B (exception)
branches in the `draft`, `comment`, and `close` recipes.
- `.claude/skills/pr-management-triage/rationale.md` — new
"Merit-discussion exception to `strip-ready-on-downgrade`"
section.
## Test plan
- [x] `uv run --project tools/skill-validator skill-validate`
passes locally.
- [ ] Manual: ready-labelled PR + CI red + maintainer-opened
unresolved thread → proposed action keeps the label and
skips the draft conversion.
- [ ] Manual: ready-labelled PR + CI red + only
contributor-author threads → strip-on-downgrade still
fires (no false-positive exception).
- [ ] Manual: ready-labelled PR + merge conflict +
maintainer thread → keep label + skip close, still post
comment.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]