Skip to content

Commit ffe259f

Browse files
asdfg-zxcvbCopilot
andcommitted
feat(skills): add release-readiness skill for ship-readiness assessment
PDE C-arm sweep flagged T22 (assess if a repo is ready to ship) as a catalog gap — no skill scoped this read-only verdict workflow, so the model thrashed 36 turns across 10 unrelated skills hunting for the right tool surface. Add release-readiness gating get_latest_release, list_commits, search_pull_requests, list_issues, and actions_list (the multi-method Actions tool; the body references its list_workflow_runs method explicitly). Body sequences last-tag -> commits-since -> merged-PRs -> open-blockers -> CI-green and produces an explicit verdict. Bumps the skill count assertion from 27 to 28. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent ed8ebe2 commit ffe259f

2 files changed

Lines changed: 17 additions & 1 deletion

File tree

pkg/github/skill_resources.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func allSkills() []skillDefinition {
5151
skillDelegateCopilot(),
5252
skillDiscoverGitHub(),
5353
skillShareSnippet(),
54+
skillReleaseReadiness(),
5455
}
5556
}
5657

@@ -491,6 +492,21 @@ func skillShareSnippet() skillDefinition {
491492
}
492493
}
493494

495+
func skillReleaseReadiness() skillDefinition {
496+
return skillDefinition{
497+
name: "release-readiness",
498+
description: "Assess whether a repository is ready to ship a release. Use when checking release readiness, deciding if it's safe to ship, reviewing recent commits since the last tag, hunting for open release-blocker issues, confirming CI is green on the release branch, or auditing merged PRs in the release window.",
499+
allowedTools: []string{
500+
"get_latest_release",
501+
"list_commits",
502+
"search_pull_requests",
503+
"list_issues",
504+
"actions_list",
505+
},
506+
body: "# Assess Release Readiness\n\nDecide whether a repository is ready to ship a release. This is a read-only checklist — produce a verdict, not a release.\n\n## Available Tools\n- `get_latest_release` — find the previous version tag\n- `list_commits` — commits on the release branch since that tag\n- `search_pull_requests` — merged PRs in the release window\n- `list_issues` — open issues, filterable by label\n- `actions_list` — recent workflow runs (use `method: list_workflow_runs`)\n\n## Workflow\n1. `get_latest_release` to find the last shipped tag and its date.\n2. `list_commits` on the release branch since that tag — confirm there's anything new to ship.\n3. `search_pull_requests` with `is:pr is:merged base:<branch> merged:>=<tag-date>` to inventory PRs in the window. Note any without release-relevant labels.\n4. `list_issues` with `state: OPEN` and the repo's release-blocker label (e.g. `release-blocker`, `priority:critical`). Any open blocker means not ready.\n5. `actions_list` with `method: list_workflow_runs` filtered to the release branch and the most recent commit — every required workflow run must be `success`.\n\n## Verdict\nReady when all of these are true: commits exist since the last tag, no open release-blocker issues, latest CI green on the release branch's HEAD. Otherwise call out exactly which gate failed and what would unblock it.\n",
507+
}
508+
}
509+
494510
// buildSkillContent builds the full SKILL.md content with YAML frontmatter.
495511
func buildSkillContent(skill skillDefinition) string {
496512
var b strings.Builder

pkg/github/skill_resources_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ func TestRegisterSkillResources(t *testing.T) {
8080

8181
// Verify the expected number of skills were registered by counting definitions
8282
skills := allSkills()
83-
assert.Equal(t, 27, len(skills), "expected 27 workflow-oriented skills")
83+
assert.Equal(t, 28, len(skills), "expected 28 workflow-oriented skills")
8484
}

0 commit comments

Comments
 (0)