potiuk opened a new pull request, #549:
URL: https://github.com/apache/airflow-steward/pull/549

   ## Problem
   
   The triage skill had rich handling for two conversation directions but
   not the third:
   
   - **F5a** — maintainer→author cooldown (don't rush the contributor)
   - **F5b** — maintainer→maintainer ping (don't talk over a maintainer 
call-out)
   - **(missing)** — author→maintainer question
   
   With no rule for the third case, an author comment followed by silence
   read identically to an abandoned PR: the classifier routed it to an
   author-facing action (ping the author, request readiness confirmation,
   convert to draft) or the stale sweeps eventually closed it.
   
   This is the exact failure that closed a real PR — apache/airflow#64643
   was closed by the triage process while an open question to the team sat
   unanswered, then reopened by hand with an apology. When the author has
   pinged us and we haven't replied, the ball is in **our** court.
   
   ## Fix
   
   A new pre-filter **F5c** ("author question to a maintainer unanswered"),
   the deliberate inverse of F5b, backed by a shared glossary precondition
   `author_question_to_maintainer_unanswered`. It fires when the most
   recent human comment is by the PR author and `@`-mentions a maintainer
   (or the committers team) with no maintainer reply since — and like
   F5a/F5b it overrides deterministic flags (red CI / merge conflict),
   because auto-pinging "please fix CI" while the author's question to us
   sits unanswered is exactly the talk-over those filters prevent.
   
   - **classify-and-act.md** — F5c pre-filter row + shared glossary
     precondition (reuses the batched comment data; no new GraphQL);
     override note and required-fields table updated.
   - **stale-sweeps.md** — a maintainer-court guard: Sweeps 1–3 skip these
     PRs (no close / no draft-for-inactivity), Sweep 4 keeps the
     `ready for maintainer review` label; checked first in Sweep 4 Step A
     plus a new Step B court row.
   - **SKILL.md** — Golden rule 9 extended to three cases; `F1–F5c` refs.
   - **rationale.md / fetch-and-batch.md** — F5c rationale and cross-refs.
   
   Maintainer status is resolved live (committers team / repo permission)
   the same load-bearing way as F5b and Sweep 4, so a ping at a read-only
   collaborator does not falsely park a PR in our court.
   
   ## Design note
   
   F5c **skips** the PR (removes it from the author-facing flow) rather
   than auto-applying `ready for maintainer review`. Forcing the label on
   when CI is red would violate the label's "no maintainer time wasted on
   quality issues" contract, so this change prevents the *wrong* actions
   without auto-promoting. Happy to add an auto-promote-to-review variant
   if reviewers prefer that.
   
   ## Test plan
   
   - `prek run --files <changed>` — all hooks green (markdownlint, lychee,
     typos, placeholders, skill-and-tool-validate).
   - Walked the originating incident (apache/airflow#64643: author's last
     comment pings a maintainer, unanswered) through the rules: F5c fires →
     skipped from author-facing flow; stale sweeps keep it maintainer-court
     instead of closing it.
   
   Generated-by: Claude Code (Opus 4.8)
   


-- 
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]

Reply via email to