Peer QA Review Skill
A Claude Code skill that turns Round-1 IT QA into a repeatable runbook: structured lifecycle, severity vocabulary, comment template, edge cases, and anti-patterns. Generic for any IT/Ops team.
What this skill is for
Round-1 QA is the internal team review of completed work before it goes to customer acceptance (Round-2 / QA2) or is resolved internally. It is performed by a peer (not the implementer, not the customer, not an automated bot) and verifies:
- Formal correctness — the ticket is clearly described, the work is documented, links to MR/PR/pipeline/inventory are present, console output exists for key actions.
- Functional resolution — the reported problem is actually fixed; reviewer re-runs verification, not just trusts the implementer's output.
- Inventory & related artefacts — IOS/CMDB/inventory updated, sibling tickets consistent, parent epic in a sane state.
- Documentation & runbook — README/role-meta matches reality, runbook reviewed for staleness, CHANGELOG entry where applicable.
- Rollback / backout — snapshot or backup before risky change, backout path documented.
- Communication — for customer-affecting / org-wide / security-relevant changes: announcement posted (Matrix / email / blog).
The skill produces a single structured QA comment on the ticket with (/) (x) (!) (i) (?) severity icons and a clear verdict (Pass-resolve / Pass-QA2 / Bounce-to-In-Progress / Won't-do).
Compatibility
Agent Skill following the open standard. Works with Claude Code, and any other agent runtime that implements the spec.
Installation
Composer (PHP Projects)
composer require netresearch/peer-qa-review-skill
Requires netresearch/composer-agent-skill-plugin.
npm (Node Projects)
npm install --save-dev \
@netresearch/agent-skill-coordinator \
github:netresearch/peer-qa-review-skill
Requires @netresearch/agent-skill-coordinator, which discovers the skill in node_modules and registers it in AGENTS.md via a postinstall hook. For pnpm, also allowlist the coordinator's postinstall:
{
"pnpm": {
"onlyBuiltDependencies": ["@netresearch/agent-skill-coordinator"]
}
}
Companion skills (optional)
jira-communication(public) — required for ticket I/O. In Stage 0,qa-gather.shruns itsjira-qa-gather.pyscript (qa-gather.pybefore jira-integration 3.13), or falls back to itsjira-issue.py,jira-comment.pyandjira-worklog.py.- Internal team-specific skills (private to your org) — for project-list overrides, inventory CRUD (CMDB, IOS), announcement channels (Matrix / Slack / Email), and workflow-specific lifecycle rules. The skill defers to them with "if your team has an internal IT/maintenance/ITSM skill, consult it for project-specific overrides."
Tests
The behavioural tests for skills/peer-qa-review/scripts/qa-gather.sh live in tests/qa-gather.sh. They run offline and need bash, find and coreutils; neither uv nor the jira-communication skill has to be installed, because the test puts a stub uv first on PATH that records each call, and builds fake jira-communication trees under a temporary HOME and CLAUDE_PLUGIN_ROOT:
bash tests/qa-gather.sh
They cover the usage exit (64), the preference of jira-qa-gather.py over qa-gather.py and over the fallback, each search root including a plugin cache root, passing arguments through, returning the exit status, the three fallback calls with their failure handling, and the exit 1 with install hint when nothing is found. The test runs the script with the bash that runs the test, so docker run --rm -v "$PWD":/src:ro -w /src bash:3.2 bash tests/qa-gather.sh checks it against the bash 3.2 that macOS ships.
Each check prints ok or FAIL; a FAIL line names the expectation that was not met and is followed by the script's exit status, stdout, stderr and the recorded uv calls. The file exits 1 when any check failed. In CI, the Skill Tests workflow (.github/workflows/tests.yml) runs every tests/**/*.sh on each pull request and on pushes to main, and fails when the repository ships scripts under skills/*/scripts/ but no test ran.
The skill's Markdown is not executed; Skill Validation (.github/workflows/lint.yml) checks its structure and lints it, and pre-commit run --all-files runs the same linters locally. skills/peer-qa-review/evals/qa-discipline.md holds scenarios for grading a review transcript and is not run. A pull request that adds or changes behaviour in a script adds or updates a check in tests/ that fails without the change.
Dependencies
- Runtime of
qa-gather.sh: bash (3.2 or later),find,dirnameand uv, plus thejira-communicationskill of thejira-integrationplugin from netresearch/jira-skill, installed through an agent plugin marketplace. The script locates that skill at run time below$CLAUDE_PLUGIN_ROOTor$HOME/.claude/plugins/cache; it is not declared incomposer.jsonorpackage.json, because a Composer or npm install would not place it there.uvresolves the Python dependencies of thejira-communicationscripts. - Packaging:
composer.jsonrequiresnetresearch/composer-agent-skill-plugin;package.jsondeclares@netresearch/agent-skill-coordinatoras a peer dependency. Both register the skill in the consuming project. No lock file is committed; the skill-repo validator requires that there is nocomposer.lock. - Development and CI: the pre-commit hooks are pinned by
rev:in.pre-commit-config.yaml. The workflows call reusable workflows fromnetresearch/skill-repo-skillandnetresearch/.githubat@main; the third-party actions inside those are pinned to commit SHAs there. - Tracking: Renovate (
renovate.json, extendinggithub>netresearch/renovate-config) opens update pull requests, for example for the pre-commit hook revisions, and.github/workflows/auto-merge-deps.ymlhands Renovate and Dependabot pull requests without adeps-majorordeps-no-automergelabel to the organisation's auto-merge workflow, which merges them after the pull request's other checks have passed. The licence and vulnerability rules for dependencies are those of the organisation's security policy linked below.
Governance and policies
This repository follows the Netresearch organisation policies:
- Governance: ownership, roles, how decisions are made and disputes resolved, and continuity.
- Roadmap: planned and explicitly excluded work for the coming year.
- Handling of dependency and code analysis findings: thresholds, deadlines and the exception process for dependency (SCA) and static analysis (SAST) findings.
- Secret management: how CI and release credentials are stored, accessed and rotated.
- Access roster: who holds administrative access to this repository and the organisation.
The architecture of this skill (actors, components, data flows) is described in docs/ARCHITECTURE.md, and its security assurance case (threat model, trust boundaries, countermeasures and limits) in docs/SECURITY-ASSURANCE.md.
The checks that run on every pull request, as the organisation's rules for code analysis findings ask, are listed in CONTRIBUTING.md.
License
Dual-licensed: MIT for code, CC-BY-SA-4.0 for content. See LICENSE-MIT and LICENSE-CC-BY-SA-4.0.