fix(labels): restore trusted contributor tier and keep colors unified
This commit is contained in:
parent
d8043f440c
commit
dbb713369c
5 changed files with 7 additions and 4 deletions
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
|
|
@ -13,7 +13,7 @@ Describe this PR in 2-5 bullets:
|
||||||
- Size label (`size: XS|S|M|L|XL`, auto-managed/read-only):
|
- Size label (`size: XS|S|M|L|XL`, auto-managed/read-only):
|
||||||
- Scope labels (`core|agent|channel|config|cron|daemon|doctor|gateway|health|heartbeat|integration|memory|observability|onboard|provider|runtime|security|service|skillforge|skills|tool|tunnel|docs|dependencies|ci|tests|scripts|dev`, comma-separated):
|
- Scope labels (`core|agent|channel|config|cron|daemon|doctor|gateway|health|heartbeat|integration|memory|observability|onboard|provider|runtime|security|service|skillforge|skills|tool|tunnel|docs|dependencies|ci|tests|scripts|dev`, comma-separated):
|
||||||
- Module labels (`<module>:<component>`, for example `channel:telegram`, `provider:kimi`, `tool:shell`):
|
- Module labels (`<module>:<component>`, for example `channel:telegram`, `provider:kimi`, `tool:shell`):
|
||||||
- Contributor tier label (`experienced contributor|principal contributor|distinguished contributor`, auto-managed/read-only; author merged PRs >=10/20/50):
|
- Contributor tier label (`trusted contributor|experienced contributor|principal contributor|distinguished contributor`, auto-managed/read-only; author merged PRs >=5/10/20/50):
|
||||||
- If any auto-label is incorrect, note requested correction:
|
- If any auto-label is incorrect, note requested correction:
|
||||||
|
|
||||||
## Change Metadata
|
## Change Metadata
|
||||||
|
|
|
||||||
1
.github/workflows/auto-response.yml
vendored
1
.github/workflows/auto-response.yml
vendored
|
|
@ -33,6 +33,7 @@ jobs:
|
||||||
{ label: "distinguished contributor", minMergedPRs: 50 },
|
{ label: "distinguished contributor", minMergedPRs: 50 },
|
||||||
{ label: "principal contributor", minMergedPRs: 20 },
|
{ label: "principal contributor", minMergedPRs: 20 },
|
||||||
{ label: "experienced contributor", minMergedPRs: 10 },
|
{ label: "experienced contributor", minMergedPRs: 10 },
|
||||||
|
{ label: "trusted contributor", minMergedPRs: 5 },
|
||||||
];
|
];
|
||||||
const contributorTierLabels = contributorTierRules.map((rule) => rule.label);
|
const contributorTierLabels = contributorTierRules.map((rule) => rule.label);
|
||||||
const contributorTierColor = "2ED9FF"; // Keep in sync with .github/workflows/labeler.yml
|
const contributorTierColor = "2ED9FF"; // Keep in sync with .github/workflows/labeler.yml
|
||||||
|
|
|
||||||
2
.github/workflows/labeler.yml
vendored
2
.github/workflows/labeler.yml
vendored
|
|
@ -55,6 +55,7 @@ jobs:
|
||||||
{ label: "distinguished contributor", minMergedPRs: 50 },
|
{ label: "distinguished contributor", minMergedPRs: 50 },
|
||||||
{ label: "principal contributor", minMergedPRs: 20 },
|
{ label: "principal contributor", minMergedPRs: 20 },
|
||||||
{ label: "experienced contributor", minMergedPRs: 10 },
|
{ label: "experienced contributor", minMergedPRs: 10 },
|
||||||
|
{ label: "trusted contributor", minMergedPRs: 5 },
|
||||||
];
|
];
|
||||||
const contributorTierLabels = contributorTierRules.map((rule) => rule.label);
|
const contributorTierLabels = contributorTierRules.map((rule) => rule.label);
|
||||||
const contributorTierColor = "2ED9FF"; // Keep in sync with .github/workflows/auto-response.yml
|
const contributorTierColor = "2ED9FF"; // Keep in sync with .github/workflows/auto-response.yml
|
||||||
|
|
@ -155,6 +156,7 @@ jobs:
|
||||||
"distinguished contributor",
|
"distinguished contributor",
|
||||||
"principal contributor",
|
"principal contributor",
|
||||||
"experienced contributor",
|
"experienced contributor",
|
||||||
|
"trusted contributor",
|
||||||
];
|
];
|
||||||
const modulePrefixPriorityIndex = new Map(
|
const modulePrefixPriorityIndex = new Map(
|
||||||
modulePrefixPriority.map((prefix, index) => [prefix, index])
|
modulePrefixPriority.map((prefix, index) => [prefix, index])
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ Merge-blocking checks should stay small and deterministic. Optional checks are u
|
||||||
- Additional behavior: provider-related keywords in provider/config/onboard/integration changes are promoted to `provider:*` labels (for example `provider:kimi`, `provider:deepseek`)
|
- Additional behavior: provider-related keywords in provider/config/onboard/integration changes are promoted to `provider:*` labels (for example `provider:kimi`, `provider:deepseek`)
|
||||||
- Additional behavior: hierarchical de-duplication keeps only the most specific scope labels (for example `tool:composio` suppresses `tool:core` and `tool`)
|
- Additional behavior: hierarchical de-duplication keeps only the most specific scope labels (for example `tool:composio` suppresses `tool:core` and `tool`)
|
||||||
- Additional behavior: module namespaces are compacted — one specific module keeps `prefix:component`; multiple specifics collapse to just `prefix`
|
- Additional behavior: module namespaces are compacted — one specific module keeps `prefix:component`; multiple specifics collapse to just `prefix`
|
||||||
- Additional behavior: applies contributor tiers on PRs by merged PR count (`experienced` >=10, `principal` >=20, `distinguished` >=50)
|
- Additional behavior: applies contributor tiers on PRs by merged PR count (`trusted` >=5, `experienced` >=10, `principal` >=20, `distinguished` >=50)
|
||||||
- Additional behavior: final label set is priority-sorted (`risk:*` first, then `size:*`, then contributor tier, then module/path labels)
|
- Additional behavior: final label set is priority-sorted (`risk:*` first, then `size:*`, then contributor tier, then module/path labels)
|
||||||
- Additional behavior: managed label colors follow display order to produce a smooth left-to-right gradient when many labels are present
|
- Additional behavior: managed label colors follow display order to produce a smooth left-to-right gradient when many labels are present
|
||||||
- Additional behavior: risk + size labels are auto-corrected on manual PR label edits (`labeled`/`unlabeled` events); apply `risk: manual` when maintainers intentionally override automated risk selection
|
- Additional behavior: risk + size labels are auto-corrected on manual PR label edits (`labeled`/`unlabeled` events); apply `risk: manual` when maintainers intentionally override automated risk selection
|
||||||
|
|
@ -40,7 +40,7 @@ Merge-blocking checks should stay small and deterministic. Optional checks are u
|
||||||
- Guardrail: maintainers can apply `risk: manual` to freeze automated risk recalculation
|
- Guardrail: maintainers can apply `risk: manual` to freeze automated risk recalculation
|
||||||
- `.github/workflows/auto-response.yml` (`Auto Response`)
|
- `.github/workflows/auto-response.yml` (`Auto Response`)
|
||||||
- Purpose: first-time contributor onboarding + label-driven response routing (`r:support`, `r:needs-repro`, etc.)
|
- Purpose: first-time contributor onboarding + label-driven response routing (`r:support`, `r:needs-repro`, etc.)
|
||||||
- Additional behavior: applies contributor tiers on issues by merged PR count (`experienced` >=10, `principal` >=20, `distinguished` >=50)
|
- Additional behavior: applies contributor tiers on issues by merged PR count (`trusted` >=5, `experienced` >=10, `principal` >=20, `distinguished` >=50)
|
||||||
- Additional behavior: contributor-tier labels are treated as automation-managed (manual add/remove on PR/issue is auto-corrected)
|
- Additional behavior: contributor-tier labels are treated as automation-managed (manual add/remove on PR/issue is auto-corrected)
|
||||||
- Guardrail: label-based close routes are issue-only; PRs are never auto-closed by route labels
|
- Guardrail: label-based close routes are issue-only; PRs are never auto-closed by route labels
|
||||||
- `.github/workflows/stale.yml` (`Stale`)
|
- `.github/workflows/stale.yml` (`Stale`)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ Maintain these branch protection rules on `main`:
|
||||||
### Step A: Intake
|
### Step A: Intake
|
||||||
|
|
||||||
- Contributor opens PR with full `.github/pull_request_template.md`.
|
- Contributor opens PR with full `.github/pull_request_template.md`.
|
||||||
- `PR Labeler` applies scope/path labels + size labels + risk labels + module labels (for example `channel:telegram`, `provider:kimi`, `tool:shell`) and contributor tiers by merged PR count (`experienced` >=10, `principal` >=20, `distinguished` >=50), while de-duplicating less-specific scope labels when a more specific module label is present.
|
- `PR Labeler` applies scope/path labels + size labels + risk labels + module labels (for example `channel:telegram`, `provider:kimi`, `tool:shell`) and contributor tiers by merged PR count (`trusted` >=5, `experienced` >=10, `principal` >=20, `distinguished` >=50), while de-duplicating less-specific scope labels when a more specific module label is present.
|
||||||
- For all module prefixes, module labels are compacted to reduce noise: one specific module keeps `prefix:component`, but multiple specifics collapse to the base scope label `prefix`.
|
- For all module prefixes, module labels are compacted to reduce noise: one specific module keeps `prefix:component`, but multiple specifics collapse to the base scope label `prefix`.
|
||||||
- Label ordering is priority-first: `risk:*` -> `size:*` -> contributor tier -> module/path labels.
|
- Label ordering is priority-first: `risk:*` -> `size:*` -> contributor tier -> module/path labels.
|
||||||
- Hovering a label in GitHub shows its auto-managed description (rule/threshold summary).
|
- Hovering a label in GitHub shows its auto-managed description (rule/threshold summary).
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue