.cursor/skills/comparison-report-workflow/SKILL.md
Create comparison reports analyzing multiple test runs side-by-side with comparison charts and optional Confluence publishing. Use when the user mentions comparison report, multi-run comparison, side-by-side analysis, or comparing test runs.
npx skillsauth add canyonlabz/mcp-perf-suite comparison-report-workflowInstall 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.
This section provides context for humans and capable models. For the step-by-step execution instructions, skip to the Execution section below.
Creates comparison reports that analyze multiple test runs side-by-side, generates
comparison bar charts, and publishes the results to Confluence. This workflow is designed
to run AFTER the end-to-end performance testing workflow
(.cursor/skills/performance-testing-workflow/SKILL.md) has been completed for each
individual test run.
The workflow steps:
This is a critical distinction:
comparison_id is a timestamp-based unique identifier generated when
create_comparison_report runs (e.g., "2026-01-21-14-27-42")comparison_id is NOT the same as any individual run_idcomparison_id as the test_run_id parameterreport_type: "comparison" tells all tools to look in artifacts/comparisons/{comparison_id}/artifacts/comparisons/{comparison_id}/
├── comparison_report_{run_ids}.md # Generated comparison report
├── comparison_report_{run_ids}_original.md # Backup (after AI revision)
├── comparison_report_{run_ids}_revised.md # AI-revised report
├── comparison_metadata_{run_ids}.json # Metadata
├── comparison_metadata_{run_ids}_original.json # Backup metadata
├── charts/ # Comparison bar charts
│ ├── CPU_PEAK_CORE_COMPARISON_BAR-{resource}.png
│ ├── CPU_AVG_CORE_COMPARISON_BAR-{resource}.png
│ ├── MEMORY_PEAK_USAGE_COMPARISON_BAR-{resource}.png
│ └── MEMORY_AVG_USAGE_COMPARISON_BAR-{resource}.png
└── revisions/ # AI revision files
├── AI_EXECUTIVE_SUMMARY_v1.md
├── AI_KEY_FINDINGS_BULLETS_v1.md
└── AI_ISSUES_SUMMARY_v1.md
| Tool | Purpose | Key Parameters |
|------|---------|---------------|
| create_comparison_report | Generate comparison report from multiple runs | run_id_list, template (optional), format |
| list_chart_types | List available chart options | — |
| create_comparison_chart | Create comparison bar chart | comparison_id, run_id_list, chart_id, env_name (optional) |
| list_templates | List available report templates | — |
| Tool | Purpose | Key Parameters |
|------|---------|---------------|
| list_spaces | List Confluence spaces | mode |
| get_page_by_id | Look up page by ID | page_id, mode |
| list_pages | List pages in a space (search by name) | space_ref, mode |
| get_available_reports | List available reports for comparison_id | test_run_id (use comparison_id) |
| create_page | Create Confluence page | space_ref, test_run_id, filename, mode, parent_id, report_type |
| attach_images | Attach chart PNGs to page | page_ref, test_run_id, mode, report_type |
| update_page | Replace chart placeholders with embedded images | page_ref, test_run_id, mode, report_type |
| Chart ID | Description |
|----------|-------------|
| CPU_PEAK_CORE_COMPARISON_BAR | Peak CPU core usage across runs |
| CPU_AVG_CORE_COMPARISON_BAR | Average CPU core usage across runs |
| MEMORY_PEAK_USAGE_COMPARISON_BAR | Peak memory usage across runs |
| MEMORY_AVG_USAGE_COMPARISON_BAR | Average memory usage across runs |
Chart configuration:
chart_schema.yaml)chart_schema.yaml)chart_colors.yamlprerequisites.mdc — test_run_id and artifact structure validationskill-execution-rules.mdc — Follow steps in order, collect inputs first, do not skipmcp-error-handling.mdc — MCP tool error handling (retry policy, reporting format)After completing this workflow, the user can proceed to:
.cursor/skills/report-revision-workflow/SKILL.md
with report_type: "comparison" and comparison_id as the run_id.list_templates. Custom templates should include
comparison-specific placeholders (see docs/report_template_guidelines.md).report_config.yaml and chart_schema.yaml).Follow these steps exactly, in order. Each step has one or more actions.
Ask the user for the following values. Do not proceed until all required values are collected.
REQUIRED:
run_id_list = [list of 2-5 test run IDs — e.g., ["80593110", "80603131", "80612241"]]
OPTIONAL:
env_name = [environment name for chart filtering]
template = [custom comparison template name — default: "default_comparison_report_template.md"]
CONDITIONAL (only if publishing to Confluence):
confluence_mode = ["cloud" or "onprem"]
confluence_space = [space name — e.g., "Quality Engineering"]
parent_page_name = [e.g., "AI Generated Test Reports"]
parent_page_id = [optional — e.g., "123456789"]
If the user provides Confluence information, assume they want to publish results.
Input: run_id_list
Action: For each run_id in the list, verify these files exist:
artifacts/{run_id}/reports/report_metadata_{run_id}.jsonartifacts/{run_id}/analysis/infrastructure_analysis.jsonIf any files are missing:
run_id(s) are missing prerequisites.cursor/skills/performance-testing-workflow/SKILL.md)Input: run_id_list, template (optional)
Action: Call MCP tool create_comparison_report
create_comparison_report(
run_id_list = {run_id_list},
template = {template},
format = "md"
)
Expected response:
{
"comparison_id": "2026-01-21-14-27-42",
"report_path": "artifacts/comparisons/{comparison_id}/comparison_report_{run_ids}.md",
"metadata_path": "artifacts/comparisons/{comparison_id}/comparison_metadata_{run_ids}.json"
}
Save:
comparison_id = the generated comparison identifier (used as test_run_id in all subsequent steps)report_path = path to the generated reportOn error: These are Python code executions. Do NOT retry. Report error to user.
Input: comparison_id (from Step 2), run_id_list, env_name (optional)
Action: First, list available chart types:
list_chart_types()
Look for chart IDs containing "COMPARISON".
Then create all 4 comparison charts:
create_comparison_chart(
comparison_id = {comparison_id},
run_id_list = {run_id_list},
chart_id = "CPU_PEAK_CORE_COMPARISON_BAR",
env_name = {env_name}
)
create_comparison_chart(
comparison_id = {comparison_id},
run_id_list = {run_id_list},
chart_id = "CPU_AVG_CORE_COMPARISON_BAR",
env_name = {env_name}
)
create_comparison_chart(
comparison_id = {comparison_id},
run_id_list = {run_id_list},
chart_id = "MEMORY_PEAK_USAGE_COMPARISON_BAR",
env_name = {env_name}
)
create_comparison_chart(
comparison_id = {comparison_id},
run_id_list = {run_id_list},
chart_id = "MEMORY_AVG_USAGE_COMPARISON_BAR",
env_name = {env_name}
)
Charts are saved to: artifacts/comparisons/{comparison_id}/charts/
On error: These are Python code executions. Do NOT retry. Report error to user.
Verify these files exist:
artifacts/comparisons/{comparison_id}/comparison_report_{run_ids}.mdartifacts/comparisons/{comparison_id}/comparison_metadata_{run_ids}.jsonartifacts/comparisons/{comparison_id}/charts/CPU_PEAK_CORE_COMPARISON_BAR-*.pngartifacts/comparisons/{comparison_id}/charts/CPU_AVG_CORE_COMPARISON_BAR-*.pngartifacts/comparisons/{comparison_id}/charts/MEMORY_PEAK_USAGE_COMPARISON_BAR-*.pngartifacts/comparisons/{comparison_id}/charts/MEMORY_AVG_USAGE_COMPARISON_BAR-*.pngWhen: Only execute if Confluence details were provided in Collect Inputs.
Prerequisites:
comparison_id from Step 2run_id_listconfluence_mode, confluence_space, parent_page_name or parent_page_idlist_spaces(
mode = {confluence_mode}
)
Search for the space matching confluence_space. Extract space_ref.
Locate parent page:
If parent_page_id is provided:
get_page_by_id(
page_id = {parent_page_id},
mode = {confluence_mode}
)
If parent_page_name is provided:
list_pages(
space_ref = {space_ref},
mode = {confluence_mode}
)
Search for the page matching parent_page_name.
Save: parent_id = the parent page ID.
get_available_reports(
test_run_id = {comparison_id}
)
Select the report filename (e.g., comparison_report_{run_ids}.md).
Save: report_filename.
create_page(
space_ref = {space_ref},
test_run_id = {comparison_id},
filename = {report_filename},
mode = {confluence_mode},
parent_id = {parent_id},
report_type = "comparison",
title = {optional custom title}
)
Important: Use comparison_id as test_run_id and report_type: "comparison".
Save: page_ref = returned page ID.
attach_images(
page_ref = {page_ref},
test_run_id = {comparison_id},
mode = {confluence_mode},
report_type = "comparison"
)
Uploads ALL PNG chart images from artifacts/comparisons/{comparison_id}/charts/.
Check response for attached/failed counts. Continue even if some fail.
update_page(
page_ref = {page_ref},
test_run_id = {comparison_id},
mode = {confluence_mode},
report_type = "comparison"
)
Replaces {{CHART_PLACEHOLDER: ID}} markers with embedded <ac:image> markup.
Check response for placeholders_replaced and placeholders_remaining.
Expected placeholders: CPU_PEAK_CORE_COMPARISON_BAR, CPU_AVG_CORE_COMPARISON_BAR,
MEMORY_PEAK_USAGE_COMPARISON_BAR, MEMORY_AVG_USAGE_COMPARISON_BAR.
Verify:
page_ref and URL)"success" or "partial")placeholders_replaced list)On error: If API calls fail, retry up to 3 times. Wait 5-10 seconds between retries.
Action: Present a summary to the user.
{comparison_id}{run_id_list}{template_name}artifacts/comparisons/{comparison_id}/comparison_report_{run_ids}.md| Chart ID | Description | Output Path |
|----------|-------------|-------------|
| CPU_PEAK_CORE_COMPARISON_BAR | Peak CPU core usage across runs | charts/CPU_PEAK_CORE_COMPARISON_BAR-{resource}.png |
| CPU_AVG_CORE_COMPARISON_BAR | Average CPU core usage across runs | charts/CPU_AVG_CORE_COMPARISON_BAR-{resource}.png |
| MEMORY_PEAK_USAGE_COMPARISON_BAR | Peak memory usage across runs | charts/MEMORY_PEAK_USAGE_COMPARISON_BAR-{resource}.png |
| MEMORY_AVG_USAGE_COMPARISON_BAR | Average memory usage across runs | charts/MEMORY_AVG_USAGE_COMPARISON_BAR-{resource}.png |
{page_title}{confluence_url}{count}{list}Ask the user:
.cursor/skills/report-revision-workflow/SKILL.md with
report_type: "comparison" and comparison_id as the run_id.These rules apply to every step:
PerfReport MCP tools (create_comparison_report, create_comparison_chart): These are Python code executions. Do NOT retry on failure. Report the error with: error message, missing file paths, expected vs. actual structure. Do NOT attempt to fix code or modify files.
Confluence MCP tools (list_spaces, create_page, attach_images, update_page): These are API calls. Retry up to 3 times. Wait 5-10 seconds between retries.
Do not proceed to the next step if the current step failed.
Do NOT write code to fix MCP tool issues.
Ask the user for next steps on any error.
testing
Orchestrates BlazeMeter and Datadog data extraction using dedicated subagents. Use when the user mentions subagent workflow, subagent orchestrator, or wants to run the BlazeMeter and Datadog extraction phases via subagents. This skill handles the extraction and handoff phases only — it does NOT run PerfAnalysis, PerfReport, or Confluence. After this skill completes, the user can continue with the performance-testing-workflow skill starting from Step 4 (PerfAnalysis).
testing
AI-assisted HITL revision of performance test reports with iterative refinement, version tracking, and optional Confluence publishing. Use when the user mentions report revision, AI-enhanced report, revise executive summary, revise key observations, revise issues table, or improve a performance report.
tools
Run Playwright browser automation to capture network traffic and generate a JMeter JMX script. Use when the user mentions browser automation, Playwright recording, test spec execution, browser-based network capture, or generating a JMeter script from a live browser session.
tools
End-to-end performance testing pipeline orchestrating BlazeMeter, Datadog, PerfAnalysis, PerfReport, and Confluence MCP workflows sequentially. Use when the user mentions performance testing workflow, E2E pipeline, BlazeMeter results, test run analysis, performance report generation, or end-to-end test processing.