Skip to content

Add release train issue evaluation skill#4540

Merged
justin808 merged 1 commit into
mainfrom
jg-codex/chore/release-train-issue-skill
Jul 9, 2026
Merged

Add release train issue evaluation skill#4540
justin808 merged 1 commit into
mainfrom
jg-codex/chore/release-train-issue-skill

Conversation

@justin808

@justin808 justin808 commented Jul 8, 2026

Copy link
Copy Markdown
Member

Why

Recent React on Rails issue triage needs a reusable way to decide whether new or follow-up issues belong on the active 17.0.0 release train or should wait for main. The existing evaluate-issue skill covers issue value, but not release-branch targeting.

What changed

  • Added a repo-local react-on-rails-release-train-issue-evaluation skill.
  • Documented the skill in AGENTS.md alongside the existing issue evaluation workflow.
  • Included UI metadata for the Codex skill picker.

Validation

  • git diff --check HEAD~1..HEAD
  • python3 .../quick_validate.py .agents/skills/react-on-rails-release-train-issue-evaluation -> Skill is valid!
  • .agents/bin/validate --changed -> documentation-only, docs sidebar check passed, no further CI needed
  • Pre-commit hook: trailing-newlines, markdown-links, prettier passed
  • Pre-push hook: branch-lint and online markdown-links passed

Labels: none; docs/process-only change.

Summary by CodeRabbit

  • Documentation
    • Added guidance for evaluating issues against the active release train versus the main branch.
    • Introduced a new repo-specific skill for classifying recent issues and selecting the appropriate target branch.
    • Updated repo instructions to include the new release-train evaluation workflow and shorthand command.

@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4d6f5428-ef0a-47b8-a355-32ee5ce87a94

📥 Commits

Reviewing files that changed from the base of the PR and between eff11e7 and 1a4566c.

📒 Files selected for processing (3)
  • .agents/skills/react-on-rails-release-train-issue-evaluation/SKILL.md
  • .agents/skills/react-on-rails-release-train-issue-evaluation/agents/openai.yaml
  • AGENTS.md

Walkthrough

This PR adds a new documentation-only agent skill, "react-on-rails-release-train-issue-evaluation," including its SKILL.md specification, an openai.yaml agent interface definition, and registration updates in AGENTS.md pointing to the new skill and shorthand invocation.

Changes

Release-Train Issue Evaluation Skill

Layer / File(s) Summary
Skill specification
.agents/skills/react-on-rails-release-train-issue-evaluation/SKILL.md
Documents the skill's purpose, decision criteria, workflow for resolving/excluding candidates, release-context reading, target selection (release/X.Y.Z, contingent, main, park/close), output format, and common mistakes.
Agent interface and repo wiring
.agents/skills/react-on-rails-release-train-issue-evaluation/agents/openai.yaml, AGENTS.md
Adds agent display name/description/default prompt for the skill, and updates AGENTS.md's skill list and instructions to reference $react-on-rails-release-train-issue-evaluation.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related issues

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jg-codex/chore/release-train-issue-skill

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@claude

claude Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Review: Add release train issue evaluation skill

Overview: Adds a new repo-local skill (react-on-rails-release-train-issue-evaluation) that helps decide whether an issue belongs on the active release/X.Y.Z branch or on main, complementing the existing $evaluate-issue skill. Also wires it into AGENTS.md and adds optional Codex UI metadata (agents/openai.yaml). Docs/process-only change, no code paths affected.

Verification performed

  • Confirmed .claude/skills symlink correctly exposes the new skill (.claude/skills -> ../.agents/skills).
  • Confirmed the agents/openai.yaml file follows the documented, optional Codex-picker-metadata schema (.agents/docs/pr-batch-skills.md:23, .agents/docs/installation-and-upgrades.md:182-183) — first skill in this repo to actually use it, but the schema/fields match what's documented elsewhere.
  • Confirmed all terminology referenced in the new SKILL.md (Release gate: tracker, TRACKING/release labels, Agent Release Mode block, agent-coord doctor/status) already exists and is defined in AGENTS.md (lines 625-628) and other skills (pr-batch, workflows under .agents/workflows/), so the new skill isn't inventing undocumented concepts.
  • AGENTS.md edit correctly appends to the existing repo-specific skills list and mirrors the phrasing/format used for the sibling $react-on-rails-update-changelog entry.
  • Trailing newlines present on both new files; no markdown-link or formatting issues spotted.

Code quality / style

  • Good separation of concerns: this skill explicitly defers "is this worth doing?" to $evaluate-issue and only owns "which branch?" — avoids duplicating logic, per the project's own stated policy against redundant skill content (AGENTS.md ~line 22-25).
  • The disposition table (release/X.Y.Z / release/X.Y.Z contingent / main / park/close) is clear and the "Common Mistakes" section adds real value by preempting likely misapplications (e.g., over-trusting a title mentioning "before 17.0.0 final").
  • Minor nit: step 3 hardcodes --repo shakacode/react_on_rails in the example agent-coord status invocation. That's correct for this repo, but slightly redundant since it's a repo-local skill by definition — not worth changing, just noting it's the only place a repo string is spelled out literally rather than implied by context.

Potential issues / risks

  • None found. No executable code changed, no CI-relevant surface touched (validated per the PR description's own .agents/bin/validate --changed run). The skill correctly instructs agents not to mutate GitHub without explicit authorization ("Recommend labels/milestones/comments, but do not mutate GitHub unless the user explicitly authorizes writes"), which matches this repo's safety posture elsewhere.

Test coverage

  • N/A — documentation/skill-definition change with no executable code. Validation steps described in the PR body (skill schema validation, pre-commit/pre-push hooks) are appropriate for this type of change.

Security considerations

  • None. No secrets, no new automation permissions, and the skill explicitly gates any GitHub-mutating actions behind user authorization.

Verdict: Solid, low-risk, well-grounded addition. No blocking issues.

@gabriella-gira

Copy link
Copy Markdown

@claude, review this PR

@justin808 justin808 marked this pull request as ready for review July 9, 2026 08:44
@justin808 justin808 merged commit 19d35fc into main Jul 9, 2026
56 of 57 checks passed
@justin808 justin808 deleted the jg-codex/chore/release-train-issue-skill branch July 9, 2026 08:44

1. Refresh repo context: `git fetch --prune origin main`, then `.agents/bin/agent-workflow-seam-doctor`. Fetch the release branch if ancestry matters.
2. Resolve candidates from live GitHub. For strict 48-hour windows, search by date then timestamp-filter locally because GitHub search is date-granular.
3. Exclude started lanes. An issue is started when it has an assignee, linked/open implementation PR, private claim/heartbeat/branch, or implementation comment. Run `agent-coord doctor --json`, then targeted `agent-coord status --repo shakacode/react_on_rails --target <issue> --json`. Dead or expired claims count as started-but-stalled, not non-started.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: this step invokes raw agent-coord doctor --json / agent-coord status ... --json, but every other repo-local workflow that touches agent-coord (.agents/workflows/pr-processing.md, .agents/workflows/post-merge-audit.md) routes these calls through the bounded wrapper (agent-coord-bounded, default 20s timeout via .agents/skills/pr-batch/bin/agent-coord-bounded) specifically to avoid an unbounded hang on a flaky/unavailable coordination backend. Worth aligning this skill with that convention, e.g.:

Run bounded `agent-coord doctor --json`, then bounded `agent-coord status --repo shakacode/react_on_rails --target <issue> --json`.

so an agent following this skill can't stall indefinitely if the private backend is unreachable.

@claude

claude Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Review summary

This is a docs/process-only PR (already merged) that adds a new repo-local Codex/Claude skill for release-train issue triage and documents it in AGENTS.md. Overall it's a clean, low-risk addition — no application code paths are touched, and it follows this repo's established conventions for repo-local skill docs (matches the phrasing pattern used for $stress-test, $optimize-rsc-performance, and $react-on-rails-update-changelog in AGENTS.md).

Findings:

  • Left one inline nit on SKILL.md line 18: the new skill's workflow step 3 calls raw agent-coord doctor / agent-coord status, whereas every other repo-local workflow that talks to the private coordination backend (pr-processing.md, post-merge-audit.md) routes those calls through the bounded wrapper (agent-coord-bounded, 20s default timeout) specifically to avoid unbounded hangs if the backend is unreachable. Worth aligning wording for consistency and hang-safety.

Other observations (no action needed):

  • .agents/skills/react-on-rails-release-train-issue-evaluation/agents/openai.yaml is the first agents/openai.yaml file in .agents/skills/* — no other skill currently ships one. Intentional per the PR description ("Included UI metadata for the Codex skill picker"), just noting it's a new pattern rather than an established one.
  • AGENTS.md update is minimal and correctly placed alongside the existing skill list and the $evaluate-issue reference.
  • No tests are applicable (markdown/skill-definition only); the PR description's validation steps (quick_validate.py, .agents/bin/validate --changed, pre-commit/pre-push hooks) are appropriate for this change's scope.
  • No security or performance implications — this only affects agent-guidance documentation, not runtime code.

@greptile-apps

greptile-apps Bot commented Jul 9, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds a new repo-local skill ($react-on-rails-release-train-issue-evaluation) that guides AI agents in deciding whether a GitHub issue should target an active release/X.Y.Z branch or main, complementing the existing shared $evaluate-issue skill. AGENTS.md is updated in two places to register the skill in the list and add the invocation trigger, following the same pattern used by the changelog skill.

  • New skill (.agents/skills/react-on-rails-release-train-issue-evaluation/SKILL.md): defines a 6-step workflow covering repo context refresh, candidate resolution, started-lane exclusion, release-context reading, per-issue evaluation, and target selection with a compact output table.
  • OpenAI UI metadata (agents/openai.yaml): provides skill-picker display name, short description, and a default prompt; both the frontmatter description and the default prompt hardcode release/17.0.0 while the skill body consistently uses the parameterized release/X.Y.Z.
  • AGENTS.md update: adds the new skill to the repo-local skill list and inserts a workflow trigger bullet that matches the style of the existing changelog and evaluate-issue entries.

Confidence Score: 4/5

Safe to merge — documentation and process files only, no runtime code touched.

The change adds a new agent skill (Markdown + YAML) and updates AGENTS.md. The skill body is internally consistent and matches the conventions of existing repo-local skills. The only rough edges are the hardcoded release/17.0.0 in the SKILL.md frontmatter and openai.yaml default prompt (the body uses the parameterized form throughout), and a minor ambiguity around how agents should record started-but-stalled lanes in the output table.

.agents/skills/react-on-rails-release-train-issue-evaluation/SKILL.md and agents/openai.yaml carry version-specific language that will drift as release lines change.

Important Files Changed

Filename Overview
.agents/skills/react-on-rails-release-train-issue-evaluation/SKILL.md New skill file defining a 6-step workflow for deciding whether issues target release/X.Y.Z or main; frontmatter description hardcodes release/17.0.0 while the body consistently uses the parameterized form release/X.Y.Z
.agents/skills/react-on-rails-release-train-issue-evaluation/agents/openai.yaml UI metadata for the Codex skill picker; default_prompt hardcodes release/17.0.0 which will become stale when the release train advances
AGENTS.md Adds the new skill to the skill list and workflow guidance section; follows the existing pattern for repo-local skills; mentions release/17.0.0 inline but in a soft "especially" context consistent with similar entries

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Issue candidate] --> B{Fetch repo context\ngit fetch + seam-doctor}
    B --> C[Resolve candidates\nfrom live GitHub]
    C --> D{Issue started?\nassignee / PR / claim / comment}
    D -->|Yes - active| E[Exclude from evaluation]
    D -->|Yes - stalled| F[started-but-stalled\nnot clearly excluded]
    D -->|No| G[Evaluate with $evaluate-issue\nimpact · complexity · priority]
    G --> H{Read release context\ntracker mode · labels · branch ancestry}
    H --> I{Choose target}
    I -->|RC regression / hard-gate\nblocker / security bug| J[release/X.Y.Z]
    I -->|Depends on cherry-pick\nnot yet on release branch| K[release/X.Y.Z contingent]
    I -->|Docs / tests / features\nnon-blocking hardening| L[main]
    I -->|Speculative / duplicate\nnot worth doing| M[park / close]
    J --> N[Output table\nwith UNKNOWN facts called out]
    K --> N
    L --> N
    M --> N
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[Issue candidate] --> B{Fetch repo context\ngit fetch + seam-doctor}
    B --> C[Resolve candidates\nfrom live GitHub]
    C --> D{Issue started?\nassignee / PR / claim / comment}
    D -->|Yes - active| E[Exclude from evaluation]
    D -->|Yes - stalled| F[started-but-stalled\nnot clearly excluded]
    D -->|No| G[Evaluate with $evaluate-issue\nimpact · complexity · priority]
    G --> H{Read release context\ntracker mode · labels · branch ancestry}
    H --> I{Choose target}
    I -->|RC regression / hard-gate\nblocker / security bug| J[release/X.Y.Z]
    I -->|Depends on cherry-pick\nnot yet on release branch| K[release/X.Y.Z contingent]
    I -->|Docs / tests / features\nnon-blocking hardening| L[main]
    I -->|Speculative / duplicate\nnot worth doing| M[park / close]
    J --> N[Output table\nwith UNKNOWN facts called out]
    K --> N
    L --> N
    M --> N
Loading

Reviews (1): Last reviewed commit: "Add release train issue evaluation skill" | Re-trigger Greptile

Comment on lines +2 to +4
name: react-on-rails-release-train-issue-evaluation
description: Use when evaluating React on Rails GitHub issues for release-train targeting, especially deciding whether new, follow-up, or non-started issues belong on release/17.0.0, another release/X.Y.Z branch, or main.
---

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Version hardcoded in frontmatter description — the description field names release/17.0.0 explicitly while the skill body consistently uses the parameterized form release/X.Y.Z throughout. When the team moves to 18.0.0 or another release line, the frontmatter will point agents at the wrong branch and could mislead skill-picker UI summaries that surface this description as context. A description referencing only release/X.Y.Z (dropping the specific version callout) would stay accurate across release trains without any follow-up edit.

interface:
display_name: "React on Rails Release Train Issue Evaluation"
short_description: "Classify issues for release train or main"
default_prompt: "Use $react-on-rails-release-train-issue-evaluation to decide whether recent React on Rails issues belong on release/17.0.0 or main."

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Version hardcoded in default_prompt — same release/17.0.0 specificity appears here and will need a manual update every time the active release train advances. Using the form release/X.Y.Z (or deferring to the skill's own language) would make this durable. The other two fields (display_name, short_description) are already version-neutral.


1. Refresh repo context: `git fetch --prune origin main`, then `.agents/bin/agent-workflow-seam-doctor`. Fetch the release branch if ancestry matters.
2. Resolve candidates from live GitHub. For strict 48-hour windows, search by date then timestamp-filter locally because GitHub search is date-granular.
3. Exclude started lanes. An issue is started when it has an assignee, linked/open implementation PR, private claim/heartbeat/branch, or implementation comment. Run `agent-coord doctor --json`, then targeted `agent-coord status --repo shakacode/react_on_rails --target <issue> --json`. Dead or expired claims count as started-but-stalled, not non-started.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 "started-but-stalled" classification gap — step 3 introduces a distinct state ("Dead or expired claims count as started-but-stalled, not non-started") but neither step 6's disposition list nor the output table's Started? column explain what an agent should record or recommend for stalled lanes. A stalled issue is not simply park/close (work was intended) but also isn't a clean candidate for a new target. Clarifying how to represent this state in the table — e.g., Yes (stalled) in the Started? column plus a Next action of "unblock or reassign" — would eliminate the ambiguity.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants