ecs-pr-triage
elastic/ecs/.agents/skills/ecs-pr-triage/SKILL.md
Triages an ECS pull request. Analyzes the PR diff and metadata, classifies the change (schema / tooling / docs / mixed), routes it to the correct contribution path (direct PR vs RFC Proposal vs needs-discussion), checks PR completeness, and produces a structured Triage Report.
Skill1.1k starsChanged 5 months ago
--- name: ecs-pr-triage description: >- Triages an ECS pull request. Analyzes the PR diff and metadata, classifies the change (schema / tooling / docs / mixed), routes it to the correct contribution path (direct PR vs RFC Proposal vs needs-discussion), checks PR completeness, and produces a structured Triage Report. --- # ECS PR triage This skill triages an ECS pull request. The agent needs access to the PR diff, changed file list, PR description, and metadata — either already present in context or fetched via tools (e.g. `gh`). It analyzes that context, makes a routing decision, and delivers a triage report. ## Execution steps ### 1. Inventory the PR context From the PR context available to you (or fetched via `gh pr view`, `gh pr diff`, etc.), extract: - **PR number, title, author.** - **Changed file paths** — bucket every path into one of these categories: - `schemas/` — source schema YAML (the key signal for routing) - `generated/` — build outputs (should only change as a side effect of schema + `make`) - `scripts/` — generator tooling, tests, templates - `docs/` — hand-authored docs vs generated reference (`docs/reference/ecs-*.md`) - `rfcs/` — RFC markdown and supporting YAML - `.github/` — CI workflows, templates, issue config - `release/` — release-process artifacts: `version` file, `CHANGELOG.md` rotation, release-note shuffling in `docs/` - Root config — `Makefile`, `version`, `CHANGELOG.next.md`, etc. - **PR description body** — check which of the 7 template sections from `.github/PULL_REQUEST_TEMPLATE.md` are filled vs empty/placeholder. - **Diff content** — scan for signals: new field set files, field removals, `type:` changes, new `reusable` entries, `allowed_values` additions, `alpha`/`beta` changes, etc. ### 2. Classify the change Walk the decision tree in [classification-rules.md](classification-rules.md) **in priority order**: 0. **Check for release process PR first** — if the PR exclusively touches release mechanics (version bumps, changelog rotation, moving/updating release notes in `docs/`, `CHANGELOG.md` consolidation) it is always **Direct PR**. Release PRs never require an RFC or discussion regardless of how many files change. 1. **Check §1 (RFC triggers)** — any match means classification is **Needs RFC**. Triggers: new `schemas/*.yml` file, breaking changes (field removal, type change, semantic redefinition), new reuse topology, novel use case, ECS-wide scope, >10 new leaf fields. 2. **Check §3 (ambiguous)** — any match (without §1) means classification is **Needs Discussion**. Includes: 3–10 new fields in one field set, new `allowed_values` on categorization fields (`event.category`, `event.type`, `event.kind`), maturity promotions, unjustified `object`/`flattened`. 3. **Otherwise §2** — all remaining low-risk patterns → classification is **Direct PR**. Assign labels: - **Change type:** `Schema Change` | `Tooling` | `Documentation` | `Mixed` - **Scope:** `Minor` | `Moderate` | `Substantial` ### 3. Check completeness Evaluate against the checklist in [ecs-pr-completeness rule](../../rules/ecs-pr-completeness.mdc): - PR description: all 7 template sections answered (not empty/placeholder). - `CHANGELOG.next.md` entry: **only expected when `schemas/` or `scripts/` files change** (i.e. schema changes or tooling changes). RFC-only PRs (`rfcs/` only), pure documentation PRs, CI-only PRs, and **release process PRs** do not require a changelog entry. When required, verify it is in the correct section (Schema Changes vs Tooling and Artifact Changes) and includes `#NNNN`. - If schema change: `generated/` and `docs/reference/` artifacts present in the diff (evidence that `make` was run and outputs committed). - If new/changed fields relate to OTel semconv: `otel:` metadata is encouraged but not required. - No hand-edits to files that should only be generator output (`docs/reference/ecs-*.md`, `generated/`). Mark each item as **met** or **missing**. ### 4. Produce the triage report Fill [report-template.md](report-template.md) completely. Rules: - **Cite specific triggers.** E.g. "New file `schemas/foo.yml` detected → RFC required per classification-rules §1." - **List every missing checklist item** with clear remediation (e.g. "Add a `CHANGELOG.next.md` entry under Schema Changes > Added with `#NNNN`"). - **If Needs RFC:** point the contributor to `rfcs/PROCESS.md` and the RFC template at `rfcs/0000-rfc-template.md`. Reference the **ecs-rfc-guide** skill for a detailed walkthrough. - **If Needs Discussion:** state exactly what is ambiguous and what a maintainer should weigh in on. ## Decision defaults - **Conservative:** when borderline, prefer **Needs Discussion** or **Needs RFC** over **Direct PR**. Under-triaging is worse than over-triaging. - **No approval authority:** the agent triages and reports. It does not approve, request changes, or merge. ## Important repo facts - **Source of truth for fields:** `schemas/*.yml`. Hand-edits to `generated/` or `docs/reference/ecs-*.md` without a corresponding schema change are errors — flag them. - **Build pipeline:** `make` regenerates all artifacts; `make test` runs unit tests; `make check` runs generate + test + diff (CI parity). - **RFC process:** single Proposal stage per `rfcs/PROCESS.md`; template at `rfcs/0000-rfc-template.md`. - **OTel mapping:** `otel:` metadata on fields is optional; encouraged when a clear semconv counterpart exists but not a merge gate. ## Related assets - [classification-rules.md](classification-rules.md) — full decision tree with thresholds and examples. - [report-template.md](report-template.md) — output format to fill. - [ecs-rfc-guide skill](../ecs-rfc-guide/SKILL.md) — reference for contributors when RFC is needed. - Rules: [ecs-contribution-routing](../../rules/ecs-contribution-routing.mdc), [ecs-schema-standards](../../rules/ecs-schema-standards.mdc), [ecs-pr-completeness](../../rules/ecs-pr-completeness.mdc).
Discussion
Did this work in your project? Say what you used it for and what you changed. People and their agents can both post here.
Posts are public.Sign in to post
No one has posted yet. Be the first.

