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 60712b9  setup-steward: generic _template/pr-management-config + 
upgrade hygiene check (#280)
60712b9 is described below

commit 60712b94028bbf42018e9bf36fef4781495632d5
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon May 25 18:16:02 2026 +0200

    setup-steward: generic _template/pr-management-config + upgrade hygiene 
check (#280)
    
    The framework's projects/_template/pr-management-config.md was
    seeded from one adopter's config — title hardcoded to that
    project's name, `committers_team` set to a concrete org/team
    slug, grace-window prose calibrated to that one project's
    traffic. Replace the project-identity bits with placeholders
    (`<Project Name>`, `<github-org>/<committers-team-slug>`) plus
    an "Example: …" annotation. Suggested-default label strings
    stay; grace-window numbers stay as defaults but get a "scale
    up for lower traffic" note instead of an adopter-specific
    calibration line.
    
    Add Step 6d to setup-steward/upgrade.md: a defensive hygiene
    pass that scans every file under projects/_template/ for
    adopter-specific signals (project names in H1s, hardcoded
    URLs, real committer-team slugs, calibration prose) and
    surfaces ⚠ rows in the upgrade summary. Purely advisory —
    never modifies the snapshot, never auto-fixes; the operator
    decides whether to file a tracking issue.
    
    First of a series — projects/_template/pr-management-triage-
    ci-check-map.md has the same problem and will follow in a
    separate PR.
    
    Generated-by: Claude (Opus 4.7)
---
 .claude/skills/setup-steward/upgrade.md    | 63 ++++++++++++++++++++++++++++++
 projects/_template/pr-management-config.md | 35 +++++++++++------
 2 files changed, 86 insertions(+), 12 deletions(-)

diff --git a/.claude/skills/setup-steward/upgrade.md 
b/.claude/skills/setup-steward/upgrade.md
index 2544645..93d630b 100644
--- a/.claude/skills/setup-steward/upgrade.md
+++ b/.claude/skills/setup-steward/upgrade.md
@@ -470,6 +470,63 @@ upgrade — secure-agent setup is independent of framework
 upgrade). The recap row in Step 8's output goes under a new
 `Sandbox allowlist:` section.
 
+## Step 6d — Audit framework template genericity
+
+A defensive hygiene pass over the framework's
+`<snapshot-dir>/projects/_template/` directory. Templates
+are meant to be **project-agnostic scaffolds** that adopters
+copy and customise — they should contain placeholders
+(`<Project Name>`, `<github-org>/<team-slug>`, etc.),
+generic examples, and no hardcoded project identity.
+
+In practice the framework's `_template/` files have at
+times been seeded from one specific adopter's data
+(originally the project the framework grew out of) and
+not always generalised back. This step surfaces the
+residue so it can be filed as an issue against
+`apache/airflow-steward` and fixed upstream.
+
+For each file under `<snapshot-dir>/projects/_template/`,
+scan for adopter-specific signals:
+
+- **Hardcoded project names in titles or prose** — H1
+  headings, doc body text, calibration sentences. A
+  genuine template starts with `# TODO: <Project Name> —
+  ...` or uses a `<PROJECT>` placeholder; if a concrete
+  name appears there instead, that is the residue.
+- **Hardcoded URLs** pointing at a specific adopter —
+  `github.com/<org>/<repo>/...` paths in body text,
+  mailing-list addresses tied to a specific TLD,
+  project-specific chat URLs. Template URLs should be
+  `<placeholder>` or annotated "Example: …".
+- **Hardcoded org / team identifiers** — committer-team
+  slugs (e.g. `<org>/<team>-committers`), real maintainer
+  handles, project-specific issue-tracker keys. Same
+  rule: placeholder, or marked as an example.
+- **Project-specific calibration prose** — references
+  to contributor counts, specific issue numbers,
+  incident postmortems, or other particulars an
+  arbitrary adopter wouldn't share.
+
+Surface the findings as a `Framework templates:` block in
+the upgrade summary (see [Step 8 output](#output-to-the-user))
+— one ⚠ row per file with a short summary of what looks
+adopter-specific. **Do not modify the snapshot** (it is
+read-only per
+[`SKILL.md` Golden rule 1](SKILL.md#golden-rules)). The
+recap is purely advisory; the operator decides whether to
+open a tracking issue / PR against
+`apache/airflow-steward`.
+
+The check is intentionally heuristic — false positives are
+acceptable because the cost is one line in the summary, not
+a blocked upgrade. False negatives are also acceptable; the
+operator's read of the upgrade summary is the real signal.
+**Never attempt to auto-fix.**
+
+If every template scans clean, surface the section as
+`✓ all framework templates look generic`.
+
 ## Step 7 — Update `<local-lock>`
 
 Write the new local lock with the values captured in Step
@@ -538,6 +595,12 @@ Overrides:
   ⚠ <list of overrides flagged for re-anchoring> (open the
      file and update against the new framework structure)
 
+Framework templates (projects/_template/):
+  ✓ all templates look generic   OR
+  ⚠ <_template/foo.md>           (e.g. H1 title hardcoded to a specific 
project name)
+  ⚠ <_template/bar.md>           (e.g. `committers_team` set to a concrete 
org/team without placeholder)
+  → file an issue against apache/airflow-steward to upstream a fix
+
 Recommended follow-ups:
   - Run /setup-isolated-setup-update if the secure-setup blast
     radius (settings.json, agent-isolation/, pinned-versions.toml)
diff --git a/projects/_template/pr-management-config.md 
b/projects/_template/pr-management-config.md
index 9f6a6fb..d317be9 100644
--- a/projects/_template/pr-management-config.md
+++ b/projects/_template/pr-management-config.md
@@ -2,7 +2,7 @@
 <!-- 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 
configuration](#apache-airflow--pr-management-triage-configuration)
+- [TODO: `<Project Name>` — pr-management-triage 
configuration](#todo-project-name--pr-management-triage-configuration)
   - [Identifiers](#identifiers)
   - [Project-specific labels](#project-specific-labels)
   - [Grace windows](#grace-windows)
@@ -12,21 +12,25 @@
 <!-- SPDX-License-Identifier: Apache-2.0
      https://www.apache.org/licenses/LICENSE-2.0 -->
 
-# Apache Airflow — pr-management-triage configuration
+# TODO: `<Project Name>` — pr-management-triage configuration
 
 This file is the **per-project configuration** for the
 [`pr-management-triage`](../../.claude/skills/pr-management-triage/SKILL.md) 
skill.
-It contains the concrete values for the Apache Airflow project.
-New adopters should copy this file into their own
+It holds the concrete values for your adopter project.
+
+Copy this file into your own
 `<project-config>/pr-management-config.md` and replace every
-Airflow-specific value with their project's equivalents.
+`<placeholder>` with your project's value. The suggested label
+strings and grace-window defaults below are reasonable starting
+points — keep them as-is or override with your project's
+existing conventions.
 
 ## Identifiers
 
 | Key | Value | Used by |
 |---|---|---|
-| `committers_team` | `apache/airflow-committers` | `classify-and-act.md` row 
F5b — team-mention detection. Used to recognise PR comments that `@`-mention 
the project's committers as a maintainer-to-maintainer ping. |
-| `area_label_prefix` | `area:` | `classify-and-act.md`, `pr-management-stats` 
— area-label grouping. |
+| `committers_team` | `<github-org>/<committers-team-slug>` | 
`classify-and-act.md` row F5b — team-mention detection. Used to recognise PR 
comments that `@`-mention the project's committers as a 
maintainer-to-maintainer ping. Example: `apache/airflow-committers`. |
+| `area_label_prefix` | `area:` | `classify-and-act.md`, `pr-management-stats` 
— area-label grouping. Adjust to the prefix your project uses for area labels 
(e.g. `comp:`, `module:`), or leave blank if your project doesn't group PRs by 
area. |
 
 ## Project-specific labels
 
@@ -35,18 +39,25 @@ Labels the skill applies or watches for. Each row maps a 
generic
 If the project doesn't have a given concept, leave the value blank
 and the skill will skip that row of decision-table actions.
 
-| Concept | Label | Notes |
+The labels below are **suggested defaults** — readable English
+strings that work for most projects. Override with your project's
+existing label names if any are already in use.
+
+| Concept | Suggested label | Notes |
 |---|---|---|
 | `ready_for_maintainer_review` | `ready for maintainer review` | Applied by 
the `mark-ready` action; used by `pr-management-code-review` as a default 
selector. |
 | `quality_violations_close` | `closed because of multiple quality violations` 
| Applied when a PR is closed for failing the project's PR quality criteria 
after multiple opportunities to fix. |
 | `suspicious_changes` | `suspicious changes detected` | Applied to 
first-time-contributor workflow approvals where the diff looks suspicious 
(binary blobs, unrelated CI changes, etc.). |
-| `work_in_progress` | | Airflow does not use a dedicated WIP label; the skill 
relies on draft status instead. |
+| `work_in_progress` |  | Leave blank if your project doesn't use a dedicated 
WIP label (the skill relies on draft status instead); fill in the label name if 
your project does. |
 
 ## Grace windows
 
-Tunable thresholds. These values were calibrated for Airflow's
-contributor traffic (~50–100 open PRs, triage sweep every 1–2
-days).
+Tunable thresholds. The defaults below are sized for a project
+with **~50–100 open PRs and a triage sweep every 1–2 days**.
+Scale them up for projects with lower contributor traffic — less
+frequent sweeps imply longer grace windows so the skill doesn't
+fire stale-action proposals on PRs the maintainer hasn't had a
+chance to look at yet.
 
 | Concept | Default | Project value |
 |---|---|---|

Reply via email to