plugins/qa-analysis/skills/qa-analysis/SKILL.md
Analyze a GitHub pull request for risk level and generate concrete QA recommendations. Accepts a PR URL or "owner/repo#number" reference. Uses `gh` CLI to fetch the diff and metadata, computes blast radius, scores six risk dimensions, and returns a structured JSON risk assessment. Use when the user invokes /qa-analysis:qa-analysis with a GitHub PR URL or reference, or asks for a PR risk assessment, QA recommendations, or "what should I test?" for a given pull request.
npx skillsauth add mattermost/mattermost-ai-marketplace qa-analysisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a code risk analysis agent. Given a GitHub pull request, you fetch its diff and metadata, compute a blast radius, score six risk dimensions, and return a structured risk assessment with concrete QA recommendations.
Think like a senior QA engineer: what would keep you up at night?
The user provides a PR reference, for example:
/qa-analysis:qa-analysis https://github.com/mattermost/mattermost/pull/35997
/qa-analysis:qa-analysis mattermost/mattermost#35997
Parse the owner, repo, and PR number. Then fetch data:
# PR metadata (title, author, state, head SHA, additions, deletions)
gh pr view <number> --repo <owner>/<repo> --json number,title,author,state,url,headRefOid,additions,deletions,changedFiles
# File-level diff with patch
gh pr diff <number> --repo <owner>/<repo>
Use gh pr view --json files if you need per-file stats. Compute blast radius from the file list before scoring.
Derive these fields from the file list:
files_changed — total count of changed filesdirs_changed — unique parent directoriesareas_affected — logical areas: server, webapp, e2e-tests, mobile, db, infra, docstotal_lines — additions + deletionscross_area — true when areas_affected has more than one entryAssign ONE categorical level and a numeric score.
Score each dimension 0–10, then compute a weighted overall score. Data integrity and security carry more weight than other dimensions. A single 10 in data_integrity with everything else at 2 should still produce a HIGH overall score.
| Dimension | What to evaluate | |-----------|-----------------| | blast_radius | Files, dirs, cross-area scope. More = higher. | | complexity | Nested logic, concurrency, state mutations. | | regression_surface | Shared utilities, core libraries, frequently-changed paths. | | data_integrity | See detailed criteria below — highest-weight dimension. | | security_surface | Auth, input validation, API exposure, secret handling. | | infra_config | CI/CD, env config, dependency upgrades, deployment manifests. |
Derived from risk_score plus hard overrides:
risk_score < 4.0 → LOW4.0 ≤ risk_score < 7.0 → MEDIUMrisk_score ≥ 7.0 → HIGHHard overrides — force HIGH regardless of numeric score:
data_integrity ≥ 8 or security_surface ≥ 8Calibration safeguard: if regression_surface ≥ 5 AND complexity ≥ 4 AND data_integrity ≤ 2, the overall score must land in MEDIUM range (4.0–6.9). Don't let low data integrity suppress real regression risk.
Score 8–10 (critical):
Score 5–7 (elevated):
Score 1–4 (low): reads data without modifying it, new read-only endpoints, display-only changes. Score 0: no data path involvement.
Read the PR title. Extract intent: fix, feature, refactor, chore, perf, ci, docs, test.
Compute blast_radius from the fetched file list.
Examine file paths. Classify by area:
server/ → backend/API (higher inherent risk)webapp/ → frontend (medium risk)e2e-tests/ or *_test.* → test-only (lower risk)*.sql or *migration* → database (high risk)docker*, Makefile, .github/ → infrastructure (high risk)plugin/ or *hook* → plugin system (high risk)mobile/ / ios/ / android/ → mobile (medium-high risk)Read the aggregate diff. Look for:
Forward-looking failure analysis.
5a. Enumerate every new code path: branches, functions, platform variants, error cases.
5b. Identify untested paths. Scan test changes — does any new/modified test exercise each path? If untested path count ≥ 2, regression_surface must be ≥ 5.
5c. Identify public output changes: struct fields, API shapes, YAML/JSON keys, log formats, exported types, exit codes. Additions warrant regression_surface ≥ 4.
5d. Imagine production failure modes for each path at scale.
Score each dimension and compute weighted risk_score. Apply overrides.
Write up to 3 QA recommendations. Name exact user flows, screens, API endpoints, or error scenarios. Prioritize untested paths from step 5b.
Return ONLY a JSON object — no markdown fences, no preamble, no trailing text.
{
"risk_level": "HIGH",
"risk_score": 7.8,
"dimensions": {
"blast_radius": 6,
"complexity": 8,
"regression_surface": 7,
"data_integrity": 9,
"security_surface": 3,
"infra_config": 2
},
"risk_reason": "Specific explanation referencing actual changes in the diff.",
"areas_affected": ["remote cluster management", "shared channel lifecycle"],
"qa_recommendations": [
"Most important thing to check — concrete user flow",
"Second priority check",
"Third priority check (optional)"
],
"test_approach": ""
}
tools
Add an MCP (Model Context Protocol) server to a Mattermost plugin so the Agents plugin can call its tools. Use when implementing cross-plugin MCP, exposing AI tools from a Mattermost plugin to the Agents plugin, or wiring up the `pluginmcp` helper from mattermost-plugin-agents.
tools
Create a new Mattermost plugin from the starter template in the current directory. Use when creating a new plugin from scratch, scaffolding a Mattermost plugin, or bootstrapping a plugin project.
development
Orchestrates test-driven fixes for Mattermost security tickets (Jira/Atlassian) with a Staff Security Engineer mindset: failing secure-behavior tests first, then implementation, then security review and edge-case loops, then opening a non-draft PR that follows `.github/PULL_REQUEST_TEMPLATE.md` when present, with a vague public description (no exploit detail). Use when the user invokes /security-fix:security-fix with a mattermost.atlassian.net browse URL, MM-* security work, backend permission or authorization bugs, or asks for this security TDD workflow.
tools
Brief description of what this skill does