QA Sprint Report by Testomat.io
When to Use
- End of sprint — produce a shareable QA report for stakeholders.
- Sprint review — need a structured view of what was tested, passed, failed, blocked.
- Mid-sprint status — capture current execution progress.
- The user mentions "sprint report", "QA summary", "sprint progress", or similar.
How to Identify the Sprint
The user may identify the sprint in one of these ways (in priority order):
- Milestone name or ID — e.g. "Sprint 42", "Sprint 2024.3" — use
milestones_list(type="Sprint") to find it.
- Run group title — e.g. "Sprint 42 Run" — use
rungroups_list / rungroups_get.
- Direct run ID or run title — use
runs_get or runs_list.
- Plan title or ID — use
plans_list / plans_get.
- No identifier provided — ask the user to specify the sprint milestone, run group, or run.
If the user provides only a sprint name like "Sprint 42", always resolve it to a concrete milestone/rungroup/run first. Do not assume the title directly maps to an ID.
Rules
- Do not fabricate data. If MCP does not return a value, use
[None] or hide the section. Never invent numbers or statuses.
- Resolve sprint first. Never assume a sprint name maps directly to a run ID without verification.
- Hide unavailable sections. If analytics (Section 8) is not available, omit it entirely rather than leaving placeholder text.
- One blank line between actions. In any generated code or CLI snippets.
- Use TQL for filtering. Always prefer
tql filters over client-side filtering when calling runs_list, tests_list, testruns_list.
- HTML is the default output. Generate
.html first; only offer .md if the user explicitly asks for it or their initial prompt includes a request to save as .md.
MCP Tools Mapping
Each report section maps to specific MCP tools. See the full section structure and metrics in the template:
Quick Commands
| Action |
MCP Tool |
Key Parameters |
| Find sprint milestone |
milestones_list |
type="Sprint", status="active" |
| List runs for sprint |
runs_list |
tql: milestone == '{id}' |
| Get run details |
runs_get |
run_id |
| Get test results |
testruns_list |
run_id, filter_status |
| Get suite tests |
tests_list |
suite_id, per_page=100 |
| Check analytics availability |
system_ping |
(Enterprise flag in response) |
| Get test health analytics |
analytics_tests |
kind, days, from, to |
| Get stats analytics |
analytics_stats |
kind, from, to |
Workflow
Step 1: Resolve Sprint Identity
Ask the user if no sprint identifier is provided. Try to resolve:
1. milestones_list(type="Sprint") — find milestone matching sprint name
2. rungroups_list — find rungroup with sprint title
3. runs_list(tql="title % 'Sprint N'") — find runs by title
Step 2: Gather Sprint Metadata & Time Range
Collect for the report header:
milestones_get(milestone_id) or rungroups_get(rungroup_id) for sprint title/dates.
- Ask user for QA Lead name if not in TMS.
Critical: Extract Sprint Time Range
Resolve the sprint time range in this priority order:
- User-provided — If the user specified a time range in their original prompt, use it.
- Milestone/Rungroup dates — Extract
start_date / due_date from milestones_get or rungroups_get.
- Run timestamps — If milestone/rungroup has no dates, derive from earliest
created_at and latest finished_at across the sprint's runs (runs_get).
- Manual input — If no time range can be determined from TMS, ask the user to specify the sprint period manually.
The time range is required for:
analytics_tests(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")
analytics_stats(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")
- Filtering runs by sprint period
Step 3: Collect Run Data
runs_list(tql="milestone == '{id}'") — all runs for the sprint milestone
- For each run, call
runs_get to get status, counts, environments
testruns_list(run_id, filter_status) — get passed/failed/skipped per run
Step 4: Build Report Sections
Iterate sections 1–9 of the template, populating each with MCP data. Apply rules:
- If a metric is not available → use
[None] in the cell
- If an entire section has no data → hide the section (do not show placeholder text)
- Section 8 (Analytics) → check
system_ping response for Enterprise capability; if not available, hide
Step 5: Write Output File
Write the filled report to:
{user-specified-path}/QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.html
If no path specified, save to current working directory.
Step 6: Offer Markdown Export
After writing the .html file, ask the user if they also want to export the report as a .md file:
❓ The report has been saved to `{path}`.
Would you like to also export it as a `.md` file?
1. ✏️ Yes, save as `.md` in the same location
2. 👍 No, keep the `.html` only
If user picks option 1:
- Convert the HTML content to Markdown format.
- Generate ".md" markdown format report using template from the references - qa-sprint-report.md.
- Save as
QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.md in the same directory as the HTML file.
If user picks option 2:
- Confirm the
.html path and end the workflow.
HTML Template Styling
When exporting to HTML, apply the following styles:
Color Palette
| Token |
Hex |
Usage |
--primary-color |
#6366f1 |
Headers, badges, links |
--primary-hover |
#4f46e5 |
Hover states |
--success-color |
#10b981 |
Passed/ready badges |
--danger-color |
#ef4444 |
Failed/blocked badges |
--warning-color |
#f59e0b |
In-progress badges |
--info-color |
#3b82f6 |
Info badges |
--gray-50 to --gray-900 |
#f9fafb → #111827 |
Text hierarchy |
Typography
- Font Family: Inter (Google Fonts) with fallback:
-apple-system, BlinkMacSystemFont, sans-serif
- Font Weights: 300 (light), 400 (regular), 500 (medium), 600 (semibold), 700 (bold), 800 (extrabold)
- Monospace:
ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas — for ticket IDs and code
- Icons: Font Awesome 6.4.0 (
fa-solid)
Status Badges
| Status |
Background |
Text Color |
passed, ready |
#d1fae5 |
#065f46 |
failed, blocked |
#fee2e2 |
#991b1b |
progress |
#fef3c7 |
#92400e |
info |
#dbeafe |
#1e40af |
Key Elements
| Element |
Description |
.main-container |
White glass card (rgba(255,255,255,0.98)) with backdrop-filter: blur(20px), max-width 1300px, border-radius 20px |
.header |
Gradient background (linear-gradient(135deg, #6366f1, #4f46e5)), white text, flex layout |
.section-card |
White background, 1px border --gray-200, border-radius 12px, box-shadow |
.report-table |
Full-width, collapse borders, hover highlight on rows |
.meta-grid |
CSS Grid (repeat(auto-fit, minmax(220px, 1fr))), gap 20px |
.instruction-card |
Info box with left 5px border in --primary-color, background #eef2ff |
.tms-link |
Primary color link with hover underline |
HTML Structure
<div class="main-container">
<header class="header">
<div class="header-title">
<h1>QA Sprint Progress Report</h1>
<p><i class="fa-solid fa-cubes"></i> [Project Name]</p>
</div>
<div class="header-badge">
<i class="fa-solid fa-calendar-days"></i> Sprint: [Sprint Number]
</div>
</header>
<section class="instruction-section">
<div class="instruction-card">
<h5><i class="fa-solid fa-circle-info"></i> How to Use This Template</h5>
<ul>...</ul>
</div>
</section>
<main class="content-section">
<div class="section-card">
<div class="section-title"><i class="fa-solid fa-chart-pie"></i> 1. Sprint Summary Scorecard</div>
<div class="meta-grid">...</div>
</div>
<!-- Repeat section-card for each section -->
</main>
</div>
Report Template Reference
| Section |
Description |
| qa-sprint-report.md |
Full template with all sections, emoji, and fill-in placeholders |
1---2name: qa-sprint-report-by-testomatio3description: Generate a QA Sprint Progress Summary Report from Testomat.io TMS data. Use when the user wants to produce a structured end-of-sprint report covering test design coverage, execution results, defect trends, and quality signals. The skill reads data via Testomat.io MCP tools, maps it to the report sections, and outputs an `.html` file by default (or `.md` if explicitly requested).4license: MIT5---67# QA Sprint Report by Testomat.io89## When to Use1011- End of sprint — produce a shareable QA report for stakeholders.12- Sprint review — need a structured view of what was tested, passed, failed, blocked.13- Mid-sprint status — capture current execution progress.14- The user mentions "sprint report", "QA summary", "sprint progress", or similar.1516## How to Identify the Sprint1718The user may identify the sprint in one of these ways (in priority order):19201. **Milestone name or ID** — e.g. "Sprint 42", "Sprint 2024.3" — use `milestones_list(type="Sprint")` to find it.212. **Run group title** — e.g. "Sprint 42 Run" — use `rungroups_list` / `rungroups_get`.223. **Direct run ID or run title** — use `runs_get` or `runs_list`.234. **Plan title or ID** — use `plans_list` / `plans_get`.245. **No identifier provided** — ask the user to specify the sprint milestone, run group, or run.2526> If the user provides only a sprint name like "Sprint 42", always resolve it to a concrete milestone/rungroup/run first. Do not assume the title directly maps to an ID.2728## Rules2930- **Do not fabricate data.** If MCP does not return a value, use `[None]` or hide the section. Never invent numbers or statuses.31- **Resolve sprint first.** Never assume a sprint name maps directly to a run ID without verification.32- **Hide unavailable sections.** If analytics (Section 8) is not available, omit it entirely rather than leaving placeholder text.33- **One blank line between actions.** In any generated code or CLI snippets.34- **Use TQL for filtering.** Always prefer `tql` filters over client-side filtering when calling `runs_list`, `tests_list`, `testruns_list`.35- **HTML is the default output.** Generate `.html` first; only offer `.md` if the user explicitly asks for it or their initial prompt includes a request to save as `.md`.3637---3839# MCP Tools Mapping4041Each report section maps to specific MCP tools. See the full section structure and metrics in the template:4243- [qa-sprint-report.md](./references/qa-sprint-report.md) — section layout with fill-in placeholders4445### Quick Commands4647| Action | MCP Tool | Key Parameters |48|--------|----------|----------------|49| Find sprint milestone | `milestones_list` | `type="Sprint"`, `status="active"` |50| List runs for sprint | `runs_list` | `tql`: `milestone == '{id}'` |51| Get run details | `runs_get` | `run_id` |52| Get test results | `testruns_list` | `run_id`, `filter_status` |53| Get suite tests | `tests_list` | `suite_id`, `per_page=100` |54| Check analytics availability | `system_ping` | (Enterprise flag in response) |55| Get test health analytics | `analytics_tests` | `kind`, `days`, `from`, `to` |56| Get stats analytics | `analytics_stats` | `kind`, `from`, `to` |5758---5960# Workflow6162### Step 1: Resolve Sprint Identity6364Ask the user if no sprint identifier is provided. Try to resolve:6566```671. milestones_list(type="Sprint") — find milestone matching sprint name682. rungroups_list — find rungroup with sprint title693. runs_list(tql="title % 'Sprint N'") — find runs by title70```7172### Step 2: Gather Sprint Metadata & Time Range7374Collect for the report header:7576- `milestones_get(milestone_id)` or `rungroups_get(rungroup_id)` for sprint title/dates.77- Ask user for QA Lead name if not in TMS.7879**Critical: Extract Sprint Time Range**8081Resolve the sprint time range in this priority order:82831. **User-provided** — If the user specified a time range in their original prompt, use it.842. **Milestone/Rungroup dates** — Extract `start_date` / `due_date` from `milestones_get` or `rungroups_get`.853. **Run timestamps** — If milestone/rungroup has no dates, derive from earliest `created_at` and latest `finished_at` across the sprint's runs (`runs_get`).864. **Manual input** — If no time range can be determined from TMS, ask the user to specify the sprint period manually.8788The time range is required for:89- `analytics_tests(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")`90- `analytics_stats(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")`91- Filtering runs by sprint period9293### Step 3: Collect Run Data94951. `runs_list(tql="milestone == '{id}'")` — all runs for the sprint milestone962. For each run, call `runs_get` to get status, counts, environments973. `testruns_list(run_id, filter_status)` — get passed/failed/skipped per run9899### Step 4: Build Report Sections100101Iterate sections 1–9 of the template, populating each with MCP data. Apply rules:102103- If a metric is not available → use `[None]` in the cell104- If an entire section has no data → hide the section (do not show placeholder text)105- Section 8 (Analytics) → check `system_ping` response for Enterprise capability; if not available, hide106107### Step 5: Write Output File108109Write the filled report to:110```111{user-specified-path}/QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.html112```113114If no path specified, save to current working directory.115116### Step 6: Offer Markdown Export117118After writing the `.html` file, ask the user if they also want to export the report as a `.md` file:119120```121❓ The report has been saved to `{path}`.122Would you like to also export it as a `.md` file?1231241. ✏️ Yes, save as `.md` in the same location1252. 👍 No, keep the `.html` only126```127128**If user picks option 1:**1291. Convert the HTML content to Markdown format.1301. Generate ".md" markdown format report using template from the references - [qa-sprint-report.md](./references/qa-sprint-report.md).1312. Save as `QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.md` in the **same directory** as the HTML file.132133**If user picks option 2:**134- Confirm the `.html` path and end the workflow.135136## HTML Template Styling137138When exporting to HTML, apply the following styles:139140### Color Palette141142| Token | Hex | Usage |143|-------|-----|-------|144| `--primary-color` | `#6366f1` | Headers, badges, links |145| `--primary-hover` | `#4f46e5` | Hover states |146| `--success-color` | `#10b981` | Passed/ready badges |147| `--danger-color` | `#ef4444` | Failed/blocked badges |148| `--warning-color` | `#f59e0b` | In-progress badges |149| `--info-color` | `#3b82f6` | Info badges |150| `--gray-50` to `--gray-900` | `#f9fafb` → `#111827` | Text hierarchy |151152### Typography153154- **Font Family:** Inter (Google Fonts) with fallback: `-apple-system, BlinkMacSystemFont, sans-serif`155- **Font Weights:** 300 (light), 400 (regular), 500 (medium), 600 (semibold), 700 (bold), 800 (extrabold)156- **Monospace:** `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas` — for ticket IDs and code157- **Icons:** Font Awesome 6.4.0 (`fa-solid`)158159### Status Badges160161| Status | Background | Text Color |162|--------|------------|------------|163| `passed`, `ready` | `#d1fae5` | `#065f46` |164| `failed`, `blocked` | `#fee2e2` | `#991b1b` |165| `progress` | `#fef3c7` | `#92400e` |166| `info` | `#dbeafe` | `#1e40af` |167168### Key Elements169170| Element | Description |171|---------|-------------|172| `.main-container` | White glass card (`rgba(255,255,255,0.98)`) with `backdrop-filter: blur(20px)`, max-width 1300px, border-radius 20px |173| `.header` | Gradient background (`linear-gradient(135deg, #6366f1, #4f46e5)`), white text, flex layout |174| `.section-card` | White background, 1px border `--gray-200`, border-radius 12px, box-shadow |175| `.report-table` | Full-width, collapse borders, hover highlight on rows |176| `.meta-grid` | CSS Grid (`repeat(auto-fit, minmax(220px, 1fr))`), gap 20px |177| `.instruction-card` | Info box with left 5px border in `--primary-color`, background `#eef2ff` |178| `.tms-link` | Primary color link with hover underline |179180### HTML Structure181182```html183<div class="main-container">184 <header class="header">185 <div class="header-title">186 <h1>QA Sprint Progress Report</h1>187 <p><i class="fa-solid fa-cubes"></i> [Project Name]</p>188 </div>189 <div class="header-badge">190 <i class="fa-solid fa-calendar-days"></i> Sprint: [Sprint Number]191 </div>192 </header>193194 <section class="instruction-section">195 <div class="instruction-card">196 <h5><i class="fa-solid fa-circle-info"></i> How to Use This Template</h5>197 <ul>...</ul>198 </div>199 </section>200201 <main class="content-section">202 <div class="section-card">203 <div class="section-title"><i class="fa-solid fa-chart-pie"></i> 1. Sprint Summary Scorecard</div>204 <div class="meta-grid">...</div>205 </div>206 <!-- Repeat section-card for each section -->207 </main>208</div>209```210211---212213# Report Template Reference214215| Section | Description |216|---------|-------------|217| [qa-sprint-report.md](./references/qa-sprint-report.md) | Full template with all sections, emoji, and fill-in placeholders |