This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow-steward.git
The following commit(s) were added to refs/heads/main by this push:
new d274c29 setup-steward: slim
_template/pr-management-triage-comment-templates (#289)
d274c29 is described below
commit d274c2921fceafd2df992e954922923d9b6cac45
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon May 25 21:07:28 2026 +0200
setup-steward: slim _template/pr-management-triage-comment-templates (#289)
Same cleanup pattern as #280 / #283 — the third file the
Step 6d audit (added in #280) flags on a fresh upgrade — and
mirrors the structure apache/airflow#67488 just adopted for
its real override: the framework's comment-templates.md
ships default bodies for every triage template, and this
file should provide only the project-specific values
(URLs / footer wording / display name) the framework needs
to render them.
The framework's projects/_template/pr-management-triage-
comment-templates.md was seeded from one adopter's full
override — title hardcoded to that project's name, URL
table populated with `apache/airflow/blob/main/contributing-
docs/...` paths as the "template values", AI-attribution
footer body with "Apache Airflow maintainer" baked in, and
13 template-body sections copied from the framework default.
Cleanup:
- Title → `# TODO: <Project Name> — ...`.
- URL table values → `<docs-base-url>/<doc-path>` placeholder
form, adopter substitutes one per row.
- AI-attribution footer body uses `<PROJECT>` and
`<two_stage_triage_rationale_url>` placeholders that resolve
from the URL table.
- Quality-criteria marker string section stays — it's a
framework constant, identical across all adopters.
- The 13 template-body sections are removed. The framework's
comment-templates.md is the source of truth for default
bodies; adopters override only the ones that genuinely
diverge for their project. A new `Template body overrides`
section explains the contract (with a pointer at the
framework's per-template docs) and the workflow-variant
config path (`confirmation_handback_mode` from #286) so
adopters know to configure rather than body-override for
the variants the framework already supports.
This mirrors the slim shape apache/airflow#67488 just
established for that project's real override file (320 lines
→ 196 lines, keeping only the genuinely-divergent body).
Adopters starting fresh from this template now arrive at the
slim shape directly.
Generated-by: Claude (Opus 4.7)
---
.../pr-management-triage-comment-templates.md | 270 +++++++--------------
1 file changed, 81 insertions(+), 189 deletions(-)
diff --git a/projects/_template/pr-management-triage-comment-templates.md
b/projects/_template/pr-management-triage-comment-templates.md
index 7ec8cbc..893a69c 100644
--- a/projects/_template/pr-management-triage-comment-templates.md
+++ b/projects/_template/pr-management-triage-comment-templates.md
@@ -2,64 +2,70 @@
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with
[DocToc](https://github.com/thlorenz/doctoc)*
-- [Apache Airflow — pr-management-triage comment
templates](#apache-airflow--pr-management-triage-comment-templates)
+- [TODO: `<Project Name>` — pr-management-triage comment
templates](#todo-project-name--pr-management-triage-comment-templates)
- [Project-specific URLs](#project-specific-urls)
- [Quality-criteria marker string](#quality-criteria-marker-string)
- [AI-attribution footer](#ai-attribution-footer)
- - [Template bodies](#template-bodies)
- - [`draft`](#draft)
- - [`comment-only`](#comment-only)
- - [`close`](#close)
- - [`review-nudge` (author-primary)](#review-nudge-author-primary)
- - [`review-nudge` (reviewer-re-review)](#review-nudge-reviewer-re-review)
- - [`reviewer-ping` (author-primary)](#reviewer-ping-author-primary)
- - [`reviewer-ping` (reviewer-re-review)](#reviewer-ping-reviewer-re-review)
- - [`request-author-confirmation`](#request-author-confirmation)
- - [`stale-draft-close` (triaged)](#stale-draft-close-triaged)
- - [`stale-draft-close` (untriaged)](#stale-draft-close-untriaged)
- - [`inactive-to-draft`](#inactive-to-draft)
- - [`stale-workflow-approval`](#stale-workflow-approval)
- - [`suspicious-changes` (no AI footer)](#suspicious-changes-no-ai-footer)
+ - [Template body overrides](#template-body-overrides)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<!-- SPDX-License-Identifier: Apache-2.0
https://www.apache.org/licenses/LICENSE-2.0 -->
-# Apache Airflow — pr-management-triage comment templates
+# TODO: `<Project Name>` — pr-management-triage comment templates
This file is the **per-project comment-body library** for the
[`pr-management-triage`](../../.claude/skills/pr-management-triage/SKILL.md)
skill.
-It contains the concrete templates used by the Apache Airflow
-project. New adopters should copy this file into their own
-`<project-config>/pr-management-triage-comment-templates.md` and
-replace every Airflow-specific URL and wording with their
-project's equivalents.
+It supplies the project-specific values the framework needs to
+render its default template bodies — project URLs, the
+AI-attribution footer wording, and the project display name —
+plus any template body the project intentionally overrides.
+
+The framework's
+[`comment-templates.md`](../../.claude/skills/pr-management-triage/comment-templates.md)
+ships the default bodies for every triage template; the skill
+reads this file for the URLs / wording and renders the
+framework defaults with them. **Do not duplicate the framework
+default bodies here** — it just creates a drift surface; if
+your project's wording matches the default, leave the
+[Template body overrides](#template-body-overrides) section
+empty.
+
+Copy this file into your own
+`<project-config>/pr-management-triage-comment-templates.md`
+and replace every `<placeholder>` with your project's value.
## Project-specific URLs
| Placeholder | Project value |
|---|---|
-| `<quality_criteria_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-quality-criteria`
|
-| `<two_stage_triage_rationale_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/25_maintainer_pr_triage.md#why-the-first-pass-is-automated`
|
-| `<project_display_name>` | `Apache Airflow` |
-| `<merge_conflicts_rebase_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/10_working_with_git.rst`
|
-| `<static_checks_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/08_static_code_checks.rst`
|
-| `<testing_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/09_testing.rst` |
-| `<docs_building_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/11_documentation_building.rst`
|
-| `<helm_tests_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/testing/helm_unit_tests.rst`
|
-| `<k8s_tests_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/testing/k8s_tests.rst`
|
-| `<provider_testing_url>` |
`https://github.com/apache/airflow/blob/main/contributing-docs/12_provider_distributions.rst`
|
-| `<project_communication_channel>` | `Airflow Slack` |
-| `<project_communication_url>` | `https://s.apache-airflow-slack.io` |
+| `<quality_criteria_url>` |
`<docs-base-url>/<pr-quality-criteria-doc>#<anchor>` |
+| `<two_stage_triage_rationale_url>` |
`<docs-base-url>/<two-stage-triage-doc>#<anchor>` |
+| `<project_display_name>` | `<Project Name>` |
+| `<merge_conflicts_rebase_url>` | `<docs-base-url>/<rebase-guide-doc>` |
+| `<static_checks_url>` | `<docs-base-url>/<static-checks-doc>` |
+| `<testing_url>` | `<docs-base-url>/<testing-doc>` |
+| `<docs_building_url>` | `<docs-base-url>/<docs-building-doc>` |
+| `<helm_tests_url>` | `<docs-base-url>/<helm-tests-doc>` |
+| `<k8s_tests_url>` | `<docs-base-url>/<k8s-tests-doc>` |
+| `<provider_testing_url>` | `<docs-base-url>/<provider-testing-doc>` |
+| `<project_communication_channel>` | `<your-chat-platform-label>` |
+| `<project_communication_url>` | `<your-chat-platform-url>` |
+
+Drop rows for placeholders the framework templates don't use
+on your project (e.g. `<helm_tests_url>` / `<k8s_tests_url>` /
+`<provider_testing_url>` only apply if your CI-check map maps
+to those categories).
## Quality-criteria marker string
-The framework uses a literal string to detect already-triaged PRs
-(searches the PR body and comments for it). **Do not paraphrase**:
-the same exact string must appear verbatim in every triage comment
-the skill posts, and the `pr-management-stats` skill uses the same
-marker for "is this PR triaged" detection.
+The framework uses a literal string to detect already-triaged
+PRs (searches the PR body and comments for it). **Do not
+paraphrase**: the same exact string must appear verbatim in
+every triage comment the skill posts, and the
+`pr-management-stats` skill uses the same marker for
+"is this PR triaged" detection.
| Concept | Value |
|---|---|
@@ -67,160 +73,46 @@ marker for "is this PR triaged" detection.
## AI-attribution footer
-The verbatim block appended to every contributor-facing comment.
-Customise the **wording** for the project but keep the
-**structure** (italicised meta-block, link to two-stage-triage
-rationale).
+The verbatim block appended to every contributor-facing
+comment. Customise the **wording** for the project but keep
+the **structure** (italicised meta-block, link to two-stage-
+triage rationale).
```markdown
---
-_Note: This comment was drafted by an AI-assisted triage tool and may contain
mistakes. Once you have addressed the points above, an Apache Airflow
maintainer — a real person — will take the next look at your PR. We use this
[two-stage triage
process](https://github.com/apache/airflow/blob/main/contributing-docs/25_maintainer_pr_triage.md#why-the-first-pass-is-automated)
so that our maintainers' limited time is spent where it matters most: the
conversation with you._
+_Note: This comment was drafted by an AI-assisted triage tool and may contain
mistakes. Once you have addressed the points above, a <PROJECT> maintainer — a
real person — will take the next look at your PR. We use this [two-stage triage
process](<two_stage_triage_rationale_url>) so that our maintainers' limited
time is spent where it matters most: the conversation with you._
```
-## Template bodies
-
-The framework's
[`comment-templates.md`](../../.claude/skills/pr-management-triage/comment-templates.md)
-documents the structural contract for each template (must-include
-sections, ordering, footer rules). This section contains the
-actual bodies for the Apache Airflow project.
-
-### `draft`
-
-```markdown
-@<author> Converting to **draft** — this PR doesn't yet meet our [Pull Request
quality
criteria](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-quality-criteria).
-
-<violations>
-
-<rebase_note_if_needed>
-
-See the linked criteria for how to fix each item, then mark the PR "Ready for
review". This is **not** a rejection — just an invitation to bring the PR up to
standard. No rush.
-
-<ai_attribution_footer>
-```
-
-### `comment-only`
-
-```markdown
-@<author> A few things need addressing before review — see our [Pull Request
quality
criteria](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-quality-criteria).
-
-<violations>
-
-<rebase_note_if_needed>
-
-No rush.
-
-<ai_attribution_footer>
-```
-
-### `close`
-
-```markdown
-@<author> Closing — this PR has multiple violations of our [Pull Request
quality
criteria](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-quality-criteria).
-
-<violations>
-- :x: **Multiple flagged PRs**: <flagged_count> of your PRs are currently
flagged for quality issues. Please focus on those before opening new ones.
-
-This is **not** a rejection — you're welcome to open a new PR addressing the
issues above. No rush.
-
-<ai_attribution_footer>
-```
-
-### `review-nudge` (author-primary)
-
-```markdown
-@<author> — This PR has new commits since the last review requesting changes
from <reviewers>. Could you address the outstanding review comments and either
push a fix or reply in each thread explaining why the feedback doesn't apply?
Once the threads are resolved please mark the PR as "Ready for review" and
re-request review. Thanks!
-
-<ai_attribution_footer>
-```
-
-### `review-nudge` (reviewer-re-review)
-
-```markdown
-@<author> <reviewers> — This PR has new commits since the last review
requesting changes, and the diff looks like it addresses the feedback (see
<thread-links>). @<reviewers>, could you take another look when you have a
chance to confirm? Thanks!
-
-<ai_attribution_footer>
-```
-
-### `reviewer-ping` (author-primary)
-
-```markdown
-@<author> — There are <N> unresolved review thread(s) on this PR from
<reviewers>. Could you either push a fix or reply in each thread explaining why
the feedback doesn't apply? Once you believe the feedback is addressed, mark
the thread as resolved so the reviewer isn't re-pinged needlessly. Thanks!
-
-<ai_attribution_footer>
-```
-
-### `reviewer-ping` (reviewer-re-review)
-
-```markdown
-<reviewers> — @<author> appears to have addressed your review feedback (see
the linked threads and the commits pushed since). Could you confirm and resolve
the threads if you agree? Thanks!
-
-@<author>, if any of the threads still need work on your side, please reply
in-line and push a fix.
-
-<ai_attribution_footer>
-```
-
-### `request-author-confirmation`
-
-The body **must** include the literal marker string
-`ready for maintainer review confirmation` verbatim — the
-framework's
-[`viewer_confirmation_request_present`](../../.claude/skills/pr-management-triage/classify-and-act.md#viewer_confirmation_request_present)
-precondition searches for that exact text. Do not paraphrase
-that string when adapting the rest of the body.
-
-```markdown
-@<author> — There are <N> unresolved review thread(s) on this PR, and you have
engaged with each one (post-review commits and/or in-thread replies). Could you
confirm whether you believe the feedback is fully addressed and the PR is ready
for maintainer review confirmation?
-
-If yes, reply here (a short "yes / ready" is fine) and an Apache Airflow
maintainer will pick the PR up from the review queue on the next sweep.
-
-If you are still working on a thread, please reply with what is outstanding so
the threads stay unresolved on purpose.
-
-<ai_attribution_footer>
-```
-
-### `stale-draft-close` (triaged)
-
-```markdown
-@<author> This draft PR has been inactive for <days_since_triage> days since
the last triage comment and no response from the author. Closing to keep the
queue clean.
-
-You are welcome to reopen this PR when you resume work, or to open a new one
addressing the issues previously raised. There is no rush — take your time.
-
-<ai_attribution_footer>
-```
-
-### `stale-draft-close` (untriaged)
-
-```markdown
-@<author> This draft PR has had no activity for <weeks_since_activity> weeks.
Closing to keep the queue clean.
-
-You are welcome to reopen and continue when you're ready. If you'd like to
pick it back up, please rebase onto the current `<base>` branch first.
-
-<ai_attribution_footer>
-```
-
-### `inactive-to-draft`
-
-```markdown
-@<author> This PR has had no activity for <weeks_since_activity> weeks.
Converting to draft to signal that maintainer review is paused until you resume
work.
-
-When you're ready to continue, please rebase onto the current `<base>` branch,
address any newly-appearing CI failures, and mark the PR as "Ready for review"
again. There is no rush.
-
-<ai_attribution_footer>
-```
-
-### `stale-workflow-approval`
-
-```markdown
-@<author> This PR has been awaiting workflow approval with no activity for
<weeks_since_activity> weeks. Converting to draft so it doesn't block the
first-time-contributor review queue.
-
-When you're ready to continue, please push a new commit (which will re-request
workflow approval) and mark the PR as "Ready for review" again. There is no
rush.
-
-<ai_attribution_footer>
-```
-
-### `suspicious-changes` (no AI footer)
-
-```markdown
-This PR has been closed because of suspicious changes detected in it or in
another PR by the same author. If you believe this is in error, please contact
the Airflow maintainers on the [Airflow
Slack](https://s.apache-airflow-slack.io).
-```
+`<PROJECT>` and `<two_stage_triage_rationale_url>` are
+expanded from the [Project-specific URLs](#project-specific-urls)
+table (`<project_display_name>` and
+`<two_stage_triage_rationale_url>` respectively).
+
+## Template body overrides
+
+Leave this section empty unless your project needs a body
+that differs from the framework default for a specific
+template. The framework's
+[`comment-templates.md`](../../.claude/skills/pr-management-triage/comment-templates.md)
+documents every template with its default body and the
+placeholder-resolution contract — the skill picks the
+default automatically.
+
+If your project does need to override a body, add a `###
+<template-name>` subsection here with the body verbatim
+(keeping all framework-required marker strings — e.g. the
+`Pull Request quality criteria` link text in any
+contributor-facing triage comment, or the `ready for
+maintainer review confirmation` marker in the
+`request-author-confirmation` body). Document **why** the
+override exists in a sentence above the body so the next
+adopter — or your future self on a framework upgrade — can
+decide whether the override is still needed.
+
+For workflow-level variants (e.g. the `confirmation_handback_mode:
+maintainer-sweep` variant of `request-author-confirmation`),
+configure them via
+[`<project-config>/pr-management-config.md`](pr-management-config.md)
+instead of body-overriding here — the framework picks the
+matching body automatically.