QA Handoff

VerifiedCaution

Posts a testing checklist to a GitHub issue for QA testers to manually verify. Invoke with '/qa-handoff #42 path/to/spec.md' or phrases like 'ready for testing' after implementation is complete. It reads the spec document to extract acceptance criteria, formats them as checkboxes, and posts them along with PR info and environment details.

Sby Skills Guide Bot
TestingIntermediate
6/2/2026
Claude Code
#qa#handoff#github#testing-checklist

Recommended for

Automated summary

Posts a testing checklist to a GitHub issue to initiate QA handoff after implementation.

Strengths

  • Automates creation of a structured testing checklist from acceptance criteria
  • Links PR, spec, and issue together
  • Updates project board status to QA

Limitations

  • Requires spec document to be in a parseable format
  • Does not handle automated test execution
  • Relies on GitHub CLI and API availability
When to use it

When implementation is complete and you need to hand off to QA testers with clear manual verification steps.

When not to use it

If QA is fully automated or the team does not use GitHub Issues for tracking.

Security analysis

Caution
Quality score85/100

The skill automates GitHub issue updates and project board management using the gh CLI. While this is a legitimate use, it involves external service interaction and could be leveraged to post unintended content if the user provides malicious inputs. However, the skill does not perform any destructive actions or exfiltration.

Findings
  • •Uses gh CLI to interact with GitHub, which could be abused if the skill were misused with malicious inputs, but no inherent destructive or exfiltrating behavior.
How this analysis is made

Examples

Full handoff command
/qa-handoff #42 Documents/specs/42-dark-mode-spec.md
Trigger via natural language
ready for testing

name: qa-handoff description: "Update GitHub issue with testing checklist for QA testers. Use after implementation is complete, before merge. Invoke with '/qa-handoff #42 path/to/spec.md' or 'qa handoff', 'ready for testing', 'update issue for QA'." contract: tags: [closure, qa, github] state_source: spec inputs: params: - name: issue_number required: true - name: spec_path required: true gates: [] outputs: mutates: [] side_effects: ["Posts QA checklist", "Sets status to QA", "Links PR"] next: [] human_gate: false

QA Handoff

Posts a testing checklist to a GitHub issue so QA testers have everything they need for manual verification. This is the final step before merge.

When to Use

Use this skill when:

  • Implementation is complete and verified
  • PR is ready for review/merge
  • QA testers need to know what to test manually
  • User says "ready for testing", "qa handoff", or "update issue for QA"

Prerequisites

Before using this skill:

  1. Implementation must be complete
  2. Automated tests must be passing
  3. /verification-before-completion should have been run
  4. PR should exist (or be ready to create)

Instructions

Step 1: Gather Inputs

Require two inputs from the user:

  1. Issue number (e.g., #42 or 42)
  2. Spec document path (e.g., Documents/specs/42-dark-mode-spec.md)

If not provided, ask:

  • "What's the issue number?"
  • "Where's the spec document?"

Step 2: Read the Spec

Read the spec document to extract:

  • Feature summary (from Problem Statement)
  • Acceptance criteria (the testing checklist)
  • Any specific test scenarios mentioned

See shared/spec-io.md for spec sections and how to extract acceptance criteria.

Step 3: Get PR Information

Check for an open PR linked to this work:

gh pr list --state open --head $(git branch --show-current)

If a PR exists, note its number. If not, note that PR creation is pending.

Step 4: Format Testing Checklist

Convert acceptance criteria to a QA-friendly format:

  1. Use checkbox syntax for trackable items
  2. Add context where needed (not just the criterion)
  3. Include browser/device requirements if applicable
  4. Note any test data needed

Example transformation:

Spec criterion:

  • [ ] Toggle appears in Settings > Appearance

QA checklist item:

  • [ ] Navigate to Settings > Appearance. Verify dark mode toggle is visible.

Step 5: Post to GitHub Issue

Create a comment on the issue with this structure:

## Ready for QA Testing

**Status:** Implementation complete, ready for manual verification.

**Spec:** `{spec-path}` (see repo for full details)

**PR:** #{pr-number} (or "PR pending")

---

### Manual Testing Checklist

{Converted acceptance criteria as checkboxes}

---

### Test Environment
- Branch: `{current-branch}`
- Prerequisites: {any setup needed}

### Notes for Testers
{Any additional context, known limitations, or specific things to watch for}

See shared/github-ops.md for posting the QA checklist comment.

Step 6: Link PR to Issue (if applicable)

If a PR exists and isn't already linked, update the PR to reference the issue.

See shared/github-ops.md for linking PR to issue.

Step 7: Update Project Board Status

MANDATORY: Set the issue status to QA on the project board.

See shared/github-ops.md for updating project board status.

End-of-skill check: See shared/primitive-updates.md. Signals: decisions made during QA review.

Step 8: Confirm Handoff

Tell the user:

"QA handoff complete:

  • Testing checklist posted to issue #{number}
  • Project board status set to QA
  • PR #{pr-number} is ready for review
  • QA testers can now verify the acceptance criteria

Next: Wait for QA sign-off, then merge."

Example Output

For issue #42 with a dark mode spec:

## Ready for QA Testing

**Status:** Implementation complete, ready for manual verification.

**Spec:** `Documents/specs/42-dark-mode-spec.md`

**PR:** #123

---

### Manual Testing Checklist

- [ ] Navigate to Settings > Appearance. Verify dark mode toggle is visible.
- [ ] Click the toggle. Verify the theme switches immediately without page reload.
- [ ] Refresh the page. Verify the dark mode preference persists.
- [ ] Test in Chrome and Firefox. Verify consistent behavior.
- [ ] Test with system set to light mode. Verify app respects user preference over system.

---

### Test Environment
- Branch: `feature/dark-mode`
- Prerequisites: None, works on any account

### Notes for Testers
- Toggle state is stored in localStorage, so clearing browser data will reset it.
- This does not include per-page theme customization (explicitly out of scope).

Best Practices

  1. Make checklists actionable - "Verify X appears" not just "X appears"
  2. Include navigation steps - "Go to Settings > Appearance" not just "In settings"
  3. Note browser requirements - If testing should happen in specific browsers
  4. Mention test data - If QA needs specific accounts or data to test
  5. Keep it concise - Link to spec for full details, don't duplicate everything

Common Issues

No PR exists yet:

  • Note "PR pending" in the comment
  • Remind user to create PR and link it

Issue already has testing info:

  • Add a new comment rather than editing old ones
  • Reference the latest implementation state

Spec has many criteria:

  • Group related criteria under subheadings
  • Prioritize critical paths first

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/qa-handoff-mm78nnt4/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/qa-handoff-mm78nnt4' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/qa-handoff-mm78nnt4/download' --output '.skill-downloads/qa-handoff-mm78nnt4/SKILL.md.part' && mv '.skill-downloads/qa-handoff-mm78nnt4/SKILL.md.part' '.skill-downloads/qa-handoff-mm78nnt4/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Original excerpt: Prerequisites

Before using this skill:

  1. Implementation must be complete
  2. Automated tests must be passing
  3. /verification-before-completion should have been run
  4. PR should exist (or be ready to create)

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/qa-handoff-mm78nnt4/SKILL.md' && test -s '.skill-downloads/qa-handoff-mm78nnt4/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/qa-handoff' && cp -R '.skill-downloads/qa-handoff-mm78nnt4' '.claude/skills/qa-handoff'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/qa-handoff-mm78nnt4'

openskills read 'qa-handoff-mm78nnt4'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/qa-handoff-mm78nnt4/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills