testeiya 0.3.9 → 0.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +353 -27
  2. package/dist/prompt/index.js +6 -2
  3. package/dist/prompt/index.js.map +1 -1
  4. package/dist/prompt/print.js +8 -0
  5. package/dist/prompt/print.js.map +1 -1
  6. package/dist/prompt/system-prompt.js +14 -4
  7. package/dist/prompt/system-prompt.js.map +1 -1
  8. package/dist/prompt/testomatio.js +3 -3
  9. package/dist/prompt/tools.js +28 -7
  10. package/dist/prompt/tools.js.map +1 -1
  11. package/dist/src/args.js +198 -46
  12. package/dist/src/args.js.map +1 -1
  13. package/dist/src/cli.js +64 -20
  14. package/dist/src/cli.js.map +1 -1
  15. package/dist/src/doctor.js +171 -0
  16. package/dist/src/doctor.js.map +1 -0
  17. package/dist/src/env.js +39 -5
  18. package/dist/src/env.js.map +1 -1
  19. package/dist/src/mcp.js +3 -3
  20. package/dist/src/mcp.js.map +1 -1
  21. package/dist/src/model.js +15 -10
  22. package/dist/src/model.js.map +1 -1
  23. package/dist/src/models.js +38 -0
  24. package/dist/src/models.js.map +1 -0
  25. package/dist/src/output.js +216 -0
  26. package/dist/src/output.js.map +1 -0
  27. package/dist/src/run.js +141 -27
  28. package/dist/src/run.js.map +1 -1
  29. package/dist/src/session.js +46 -25
  30. package/dist/src/session.js.map +1 -1
  31. package/dist/src/sessions.js +72 -0
  32. package/dist/src/sessions.js.map +1 -0
  33. package/dist/src/skills.js +130 -0
  34. package/dist/src/skills.js.map +1 -0
  35. package/package.json +7 -3
  36. package/prompt/index.ts +11 -2
  37. package/prompt/print.ts +9 -0
  38. package/prompt/system-prompt.ts +18 -4
  39. package/prompt/testomatio.ts +3 -3
  40. package/prompt/tools.ts +30 -7
  41. package/skills/codeceptjs/ci-fix-tests/SKILL.md +119 -0
  42. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +141 -0
  43. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +100 -0
  44. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +196 -0
  45. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +83 -0
  46. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +126 -0
  47. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +109 -0
  48. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +295 -0
  49. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +339 -0
  50. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +459 -0
  51. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +338 -0
  52. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +78 -0
  53. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +102 -0
  54. package/skills/playwright/playwright-best-practices/SKILL.md +303 -0
  55. package/skills/playwright/playwright-best-practices/advanced/authentication-flows.md +360 -0
  56. package/skills/playwright/playwright-best-practices/advanced/authentication.md +871 -0
  57. package/skills/playwright/playwright-best-practices/advanced/clock-mocking.md +364 -0
  58. package/skills/playwright/playwright-best-practices/advanced/mobile-testing.md +409 -0
  59. package/skills/playwright/playwright-best-practices/advanced/multi-context.md +288 -0
  60. package/skills/playwright/playwright-best-practices/advanced/multi-user.md +393 -0
  61. package/skills/playwright/playwright-best-practices/advanced/network-advanced.md +452 -0
  62. package/skills/playwright/playwright-best-practices/advanced/third-party.md +464 -0
  63. package/skills/playwright/playwright-best-practices/architecture/pom-vs-fixtures.md +363 -0
  64. package/skills/playwright/playwright-best-practices/architecture/test-architecture.md +369 -0
  65. package/skills/playwright/playwright-best-practices/architecture/when-to-mock.md +383 -0
  66. package/skills/playwright/playwright-best-practices/browser-apis/browser-apis.md +391 -0
  67. package/skills/playwright/playwright-best-practices/browser-apis/iframes.md +403 -0
  68. package/skills/playwright/playwright-best-practices/browser-apis/service-workers.md +504 -0
  69. package/skills/playwright/playwright-best-practices/browser-apis/websockets.md +403 -0
  70. package/skills/playwright/playwright-best-practices/core/annotations.md +424 -0
  71. package/skills/playwright/playwright-best-practices/core/assertions-waiting.md +361 -0
  72. package/skills/playwright/playwright-best-practices/core/configuration.md +452 -0
  73. package/skills/playwright/playwright-best-practices/core/fixtures-hooks.md +417 -0
  74. package/skills/playwright/playwright-best-practices/core/global-setup.md +434 -0
  75. package/skills/playwright/playwright-best-practices/core/locators.md +242 -0
  76. package/skills/playwright/playwright-best-practices/core/page-object-model.md +315 -0
  77. package/skills/playwright/playwright-best-practices/core/projects-dependencies.md +453 -0
  78. package/skills/playwright/playwright-best-practices/core/test-data.md +492 -0
  79. package/skills/playwright/playwright-best-practices/core/test-suite-structure.md +361 -0
  80. package/skills/playwright/playwright-best-practices/core/test-tags.md +298 -0
  81. package/skills/playwright/playwright-best-practices/debugging/console-errors.md +420 -0
  82. package/skills/playwright/playwright-best-practices/debugging/debugging.md +504 -0
  83. package/skills/playwright/playwright-best-practices/debugging/error-testing.md +360 -0
  84. package/skills/playwright/playwright-best-practices/debugging/flaky-tests.md +496 -0
  85. package/skills/playwright/playwright-best-practices/frameworks/angular.md +530 -0
  86. package/skills/playwright/playwright-best-practices/frameworks/nextjs.md +469 -0
  87. package/skills/playwright/playwright-best-practices/frameworks/react.md +531 -0
  88. package/skills/playwright/playwright-best-practices/frameworks/vue.md +574 -0
  89. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/ci-cd.md +468 -0
  90. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/docker.md +283 -0
  91. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/github-actions.md +546 -0
  92. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/gitlab.md +397 -0
  93. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/other-providers.md +521 -0
  94. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/parallel-sharding.md +371 -0
  95. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/performance.md +453 -0
  96. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/reporting.md +424 -0
  97. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/test-coverage.md +497 -0
  98. package/skills/playwright/playwright-best-practices/testing-patterns/accessibility.md +359 -0
  99. package/skills/playwright/playwright-best-practices/testing-patterns/api-testing.md +719 -0
  100. package/skills/playwright/playwright-best-practices/testing-patterns/browser-extensions.md +506 -0
  101. package/skills/playwright/playwright-best-practices/testing-patterns/canvas-webgl.md +493 -0
  102. package/skills/playwright/playwright-best-practices/testing-patterns/component-testing.md +500 -0
  103. package/skills/playwright/playwright-best-practices/testing-patterns/drag-drop.md +576 -0
  104. package/skills/playwright/playwright-best-practices/testing-patterns/electron.md +509 -0
  105. package/skills/playwright/playwright-best-practices/testing-patterns/file-operations.md +377 -0
  106. package/skills/playwright/playwright-best-practices/testing-patterns/file-upload-download.md +562 -0
  107. package/skills/playwright/playwright-best-practices/testing-patterns/forms-validation.md +561 -0
  108. package/skills/playwright/playwright-best-practices/testing-patterns/graphql-testing.md +331 -0
  109. package/skills/playwright/playwright-best-practices/testing-patterns/i18n.md +508 -0
  110. package/skills/playwright/playwright-best-practices/testing-patterns/performance-testing.md +476 -0
  111. package/skills/playwright/playwright-best-practices/testing-patterns/security-testing.md +430 -0
  112. package/skills/playwright/playwright-best-practices/testing-patterns/visual-regression.md +634 -0
  113. package/skills/playwright/playwright-cli/SKILL.md +420 -0
  114. package/skills/playwright/playwright-cli/references/element-attributes.md +23 -0
  115. package/skills/playwright/playwright-cli/references/playwright-tests.md +39 -0
  116. package/skills/playwright/playwright-cli/references/request-mocking.md +87 -0
  117. package/skills/playwright/playwright-cli/references/running-code.md +241 -0
  118. package/skills/playwright/playwright-cli/references/session-management.md +225 -0
  119. package/skills/playwright/playwright-cli/references/storage-state.md +275 -0
  120. package/skills/playwright/playwright-cli/references/test-generation.md +433 -0
  121. package/skills/playwright/playwright-cli/references/tracing.md +139 -0
  122. package/skills/playwright/playwright-cli/references/video-recording.md +143 -0
  123. package/skills/skills.lock.json +41 -37
  124. package/skills/skills.yaml +1 -0
  125. package/skills/testomatio/explorbot/explorbot-fundamentals/SKILL.md +76 -0
  126. package/skills/testomatio/explorbot/explorbot-fundamentals/references/no-install.md +36 -0
  127. package/skills/testomatio/explorbot/explorbot-plan/SKILL.md +108 -0
  128. package/skills/testomatio/explorbot/explorbot-setup/SKILL.md +86 -0
  129. package/skills/testomatio/explorbot/prima/SKILL.md +87 -0
  130. package/skills/testomatio/qa-process/qa-explain-behavior/SKILL.md +111 -0
  131. package/skills/testomatio/qa-process/qa-explain-behavior/references/answer-shapes.md +116 -0
  132. package/skills/testomatio/qa-process/qa-explain-behavior/references/examples.md +157 -0
  133. package/skills/testomatio/qa-process/qa-lead-strategy-advisor/SKILL.md +91 -0
  134. package/skills/testomatio/qa-process/qa-lead-strategy-advisor/references/output-format.md +71 -0
  135. package/skills/testomatio/qa-process/testing-workflow/SKILL.md +227 -0
  136. package/skills/testomatio/test-automation/automate-manual-test-cases/CLAUDE.md +56 -0
  137. package/skills/testomatio/test-automation/automate-manual-test-cases/SKILL.md +242 -0
  138. package/skills/testomatio/test-automation/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +182 -0
  139. package/skills/testomatio/test-automation/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +22 -0
  140. package/skills/testomatio/test-automation/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +90 -0
  141. package/skills/testomatio/test-automation/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +53 -0
  142. package/skills/testomatio/test-automation/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +52 -0
  143. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/SKILL.md +107 -0
  144. package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +113 -0
  145. package/skills/testomatio/test-automation/qa-automation-test-consolidation/SKILL.md +29 -0
  146. package/skills/testomatio/test-automation/qa-data-seeder/SKILL.md +83 -0
  147. package/skills/testomatio/test-automation/run-tests-with-testomatio-reporter/SKILL.md +153 -0
  148. package/skills/testomatio/test-automation/setup-change-aware-pr-testing/SKILL.md +190 -0
  149. package/skills/testomatio/test-automation/setup-ci-automation/SKILL.md +76 -0
  150. package/skills/testomatio/test-automation/testomat-allure-adapter/SKILL.md +289 -0
  151. package/skills/testomatio/test-management/detect-duplicate-test-cases/SKILL.md +86 -0
  152. package/skills/testomatio/test-management/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +54 -0
  153. package/skills/testomatio/test-management/improve-test-cases/SKILL.md +114 -0
  154. package/skills/testomatio/test-management/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +66 -0
  155. package/skills/testomatio/test-management/pull-request-diff-analyzer/SKILL.md +141 -0
  156. package/skills/testomatio/test-management/qa-e2e-tests-reporting/SKILL.md +354 -0
  157. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +82 -0
  158. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +37 -0
  159. package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +118 -0
  160. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/SKILL.md +149 -0
  161. package/skills/testomatio/test-management/qa-pr-requirements-analyzer/references/summary-example.md +54 -0
  162. package/skills/testomatio/test-management/qa-requirement-reviewer/SKILL.md +126 -0
  163. package/skills/testomatio/test-management/qa-requirement-reviewer/references/requirements_reviewer_examples.md +128 -0
  164. package/skills/testomatio/test-management/qa-split-testing-levels-pyramid/SKILL.md +55 -0
  165. package/skills/testomatio/test-management/qa-sprint-report-by-testomatio/SKILL.md +220 -0
  166. package/skills/testomatio/test-management/qa-sprint-report-by-testomatio/references/qa-sprint-report.md +126 -0
  167. package/skills/testomatio/test-management/qa-test-code-coverage/SKILL.md +174 -0
  168. package/skills/testomatio/test-management/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +138 -0
  169. package/skills/testomatio/test-management/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +65 -0
  170. package/skills/testomatio/test-management/qa-test-code-coverage/scripts/check-coverage.mjs +40 -0
  171. package/skills/testomatio/test-management/qa-thinking/SKILL.md +36 -0
  172. package/skills/testomatio/test-management/qa-write-test-cases/SKILL.md +267 -0
  173. package/skills/testomatio/test-management/qa-write-test-cases/references/test-case-format.md +387 -0
  174. package/skills/testomatio/test-management/qa-write-test-cases/references/testomat-tms-guide.md +72 -0
  175. package/skills/testomatio/test-management/qa-write-test-cases/references/writing-rule.md +159 -0
  176. package/skills/testomatio/test-management/scan-automation-project/SKILL.md +152 -0
  177. package/skills/testomatio/test-management/sync-test-cases-with-tms/SKILL.md +107 -0
  178. package/skills/testomatio/test-management/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +140 -0
  179. package/skills/testomatio/test-management/testomatio-mcp/SKILL.md +195 -0
  180. package/skills/testomatio/test-management/testomatio-mcp/references/MCP_SETUP.md +177 -0
@@ -0,0 +1,220 @@
1
+ ---
2
+ name: qa-sprint-report-by-testomatio
3
+ description: 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).
4
+ license: MIT
5
+ metadata:
6
+ author: Testomat.io
7
+ version: 1.0.0
8
+ ---
9
+
10
+ # QA Sprint Report by Testomat.io
11
+
12
+ ## When to Use
13
+
14
+ - End of sprint — produce a shareable QA report for stakeholders.
15
+ - Sprint review — need a structured view of what was tested, passed, failed, blocked.
16
+ - Mid-sprint status — capture current execution progress.
17
+ - The user mentions "sprint report", "QA summary", "sprint progress", or similar.
18
+
19
+ ## How to Identify the Sprint
20
+
21
+ The user may identify the sprint in one of these ways (in priority order):
22
+
23
+ 1. **Milestone name or ID** — e.g. "Sprint 42", "Sprint 2024.3" — use `milestones_list(type="Sprint")` to find it.
24
+ 2. **Run group title** — e.g. "Sprint 42 Run" — use `rungroups_list` / `rungroups_get`.
25
+ 3. **Direct run ID or run title** — use `runs_get` or `runs_list`.
26
+ 4. **Plan title or ID** — use `plans_list` / `plans_get`.
27
+ 5. **No identifier provided** — ask the user to specify the sprint milestone, run group, or run.
28
+
29
+ > 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.
30
+
31
+ ## Rules
32
+
33
+ - **Do not fabricate data.** If MCP does not return a value, use `[None]` or hide the section. Never invent numbers or statuses.
34
+ - **Resolve sprint first.** Never assume a sprint name maps directly to a run ID without verification.
35
+ - **Hide unavailable sections.** If analytics (Section 8) is not available, omit it entirely rather than leaving placeholder text.
36
+ - **One blank line between actions.** In any generated code or CLI snippets.
37
+ - **Use TQL for filtering.** Always prefer `tql` filters over client-side filtering when calling `runs_list`, `tests_list`, `testruns_list`.
38
+ - **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`.
39
+
40
+ ---
41
+
42
+ # MCP Tools Mapping
43
+
44
+ Each report section maps to specific MCP tools. See the full section structure and metrics in the template:
45
+
46
+ - [qa-sprint-report.md](./references/qa-sprint-report.md) — section layout with fill-in placeholders
47
+
48
+ ### Quick Commands
49
+
50
+ | Action | MCP Tool | Key Parameters |
51
+ |--------|----------|----------------|
52
+ | Find sprint milestone | `milestones_list` | `type="Sprint"`, `status="active"` |
53
+ | List runs for sprint | `runs_list` | `tql`: `milestone == '{id}'` |
54
+ | Get run details | `runs_get` | `run_id` |
55
+ | Get test results | `testruns_list` | `run_id`, `filter_status` |
56
+ | Get suite tests | `tests_list` | `suite_id`, `per_page=100` |
57
+ | Check analytics availability | `system_ping` | (Enterprise flag in response) |
58
+ | Get test health analytics | `analytics_tests` | `kind`, `days`, `from`, `to` |
59
+ | Get stats analytics | `analytics_stats` | `kind`, `from`, `to` |
60
+
61
+ ---
62
+
63
+ # Workflow
64
+
65
+ ### Step 1: Resolve Sprint Identity
66
+
67
+ Ask the user if no sprint identifier is provided. Try to resolve:
68
+
69
+ ```
70
+ 1. milestones_list(type="Sprint") — find milestone matching sprint name
71
+ 2. rungroups_list — find rungroup with sprint title
72
+ 3. runs_list(tql="title % 'Sprint N'") — find runs by title
73
+ ```
74
+
75
+ ### Step 2: Gather Sprint Metadata & Time Range
76
+
77
+ Collect for the report header:
78
+
79
+ - `milestones_get(milestone_id)` or `rungroups_get(rungroup_id)` for sprint title/dates.
80
+ - Ask user for QA Lead name if not in TMS.
81
+
82
+ **Critical: Extract Sprint Time Range**
83
+
84
+ Resolve the sprint time range in this priority order:
85
+
86
+ 1. **User-provided** — If the user specified a time range in their original prompt, use it.
87
+ 2. **Milestone/Rungroup dates** — Extract `start_date` / `due_date` from `milestones_get` or `rungroups_get`.
88
+ 3. **Run timestamps** — If milestone/rungroup has no dates, derive from earliest `created_at` and latest `finished_at` across the sprint's runs (`runs_get`).
89
+ 4. **Manual input** — If no time range can be determined from TMS, ask the user to specify the sprint period manually.
90
+
91
+ The time range is required for:
92
+ - `analytics_tests(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")`
93
+ - `analytics_stats(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")`
94
+ - Filtering runs by sprint period
95
+
96
+ ### Step 3: Collect Run Data
97
+
98
+ 1. `runs_list(tql="milestone == '{id}'")` — all runs for the sprint milestone
99
+ 2. For each run, call `runs_get` to get status, counts, environments
100
+ 3. `testruns_list(run_id, filter_status)` — get passed/failed/skipped per run
101
+
102
+ ### Step 4: Build Report Sections
103
+
104
+ Iterate sections 1–9 of the template, populating each with MCP data. Apply rules:
105
+
106
+ - If a metric is not available → use `[None]` in the cell
107
+ - If an entire section has no data → hide the section (do not show placeholder text)
108
+ - Section 8 (Analytics) → check `system_ping` response for Enterprise capability; if not available, hide
109
+
110
+ ### Step 5: Write Output File
111
+
112
+ Write the filled report to:
113
+ ```
114
+ {user-specified-path}/QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.html
115
+ ```
116
+
117
+ If no path specified, save to current working directory.
118
+
119
+ ### Step 6: Offer Markdown Export
120
+
121
+ After writing the `.html` file, ask the user if they also want to export the report as a `.md` file:
122
+
123
+ ```
124
+ ❓ The report has been saved to `{path}`.
125
+ Would you like to also export it as a `.md` file?
126
+
127
+ 1. ✏️ Yes, save as `.md` in the same location
128
+ 2. 👍 No, keep the `.html` only
129
+ ```
130
+
131
+ **If user picks option 1:**
132
+ 1. Convert the HTML content to Markdown format.
133
+ 1. Generate ".md" markdown format report using template from the references - [qa-sprint-report.md](./references/qa-sprint-report.md).
134
+ 2. Save as `QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.md` in the **same directory** as the HTML file.
135
+
136
+ **If user picks option 2:**
137
+ - Confirm the `.html` path and end the workflow.
138
+
139
+ ## HTML Template Styling
140
+
141
+ When exporting to HTML, apply the following styles:
142
+
143
+ ### Color Palette
144
+
145
+ | Token | Hex | Usage |
146
+ |-------|-----|-------|
147
+ | `--primary-color` | `#6366f1` | Headers, badges, links |
148
+ | `--primary-hover` | `#4f46e5` | Hover states |
149
+ | `--success-color` | `#10b981` | Passed/ready badges |
150
+ | `--danger-color` | `#ef4444` | Failed/blocked badges |
151
+ | `--warning-color` | `#f59e0b` | In-progress badges |
152
+ | `--info-color` | `#3b82f6` | Info badges |
153
+ | `--gray-50` to `--gray-900` | `#f9fafb` → `#111827` | Text hierarchy |
154
+
155
+ ### Typography
156
+
157
+ - **Font Family:** Inter (Google Fonts) with fallback: `-apple-system, BlinkMacSystemFont, sans-serif`
158
+ - **Font Weights:** 300 (light), 400 (regular), 500 (medium), 600 (semibold), 700 (bold), 800 (extrabold)
159
+ - **Monospace:** `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas` — for ticket IDs and code
160
+ - **Icons:** Font Awesome 6.4.0 (`fa-solid`)
161
+
162
+ ### Status Badges
163
+
164
+ | Status | Background | Text Color |
165
+ |--------|------------|------------|
166
+ | `passed`, `ready` | `#d1fae5` | `#065f46` |
167
+ | `failed`, `blocked` | `#fee2e2` | `#991b1b` |
168
+ | `progress` | `#fef3c7` | `#92400e` |
169
+ | `info` | `#dbeafe` | `#1e40af` |
170
+
171
+ ### Key Elements
172
+
173
+ | Element | Description |
174
+ |---------|-------------|
175
+ | `.main-container` | White glass card (`rgba(255,255,255,0.98)`) with `backdrop-filter: blur(20px)`, max-width 1300px, border-radius 20px |
176
+ | `.header` | Gradient background (`linear-gradient(135deg, #6366f1, #4f46e5)`), white text, flex layout |
177
+ | `.section-card` | White background, 1px border `--gray-200`, border-radius 12px, box-shadow |
178
+ | `.report-table` | Full-width, collapse borders, hover highlight on rows |
179
+ | `.meta-grid` | CSS Grid (`repeat(auto-fit, minmax(220px, 1fr))`), gap 20px |
180
+ | `.instruction-card` | Info box with left 5px border in `--primary-color`, background `#eef2ff` |
181
+ | `.tms-link` | Primary color link with hover underline |
182
+
183
+ ### HTML Structure
184
+
185
+ ```html
186
+ <div class="main-container">
187
+ <header class="header">
188
+ <div class="header-title">
189
+ <h1>QA Sprint Progress Report</h1>
190
+ <p><i class="fa-solid fa-cubes"></i> [Project Name]</p>
191
+ </div>
192
+ <div class="header-badge">
193
+ <i class="fa-solid fa-calendar-days"></i> Sprint: [Sprint Number]
194
+ </div>
195
+ </header>
196
+
197
+ <section class="instruction-section">
198
+ <div class="instruction-card">
199
+ <h5><i class="fa-solid fa-circle-info"></i> How to Use This Template</h5>
200
+ <ul>...</ul>
201
+ </div>
202
+ </section>
203
+
204
+ <main class="content-section">
205
+ <div class="section-card">
206
+ <div class="section-title"><i class="fa-solid fa-chart-pie"></i> 1. Sprint Summary Scorecard</div>
207
+ <div class="meta-grid">...</div>
208
+ </div>
209
+ <!-- Repeat section-card for each section -->
210
+ </main>
211
+ </div>
212
+ ```
213
+
214
+ ---
215
+
216
+ # Report Template Reference
217
+
218
+ | Section | Description |
219
+ |---------|-------------|
220
+ | [qa-sprint-report.md](./references/qa-sprint-report.md) | Full template with all sections, emoji, and fill-in placeholders |
@@ -0,0 +1,126 @@
1
+ # QA Sprint Progress Summary Report Example
2
+
3
+ The **QA Sprint Progress Summary Report** provides a structured, end-of-cycle view of all testing activities carried out during a sprint. It captures test design coverage, execution results, defect trends, and quality signals to keep stakeholders informed on product readiness.
4
+
5
+ > All sections and metrics in this report are sourced from **Testomat.io TMS** via MCP tools. If a metric or data point is not available in the TMS, the corresponding section is omitted or the value is set to `[None]`. Sections that rely solely on unavailable data are hidden entirely.
6
+
7
+ ## 📋 General Sprint Meta
8
+ * **Project / Stream:** [Project Name / Stream]
9
+ * **QA Manager:** [Your Name]
10
+ * **Sprint Cycle:** [Sprint Number / Name]
11
+ * **Timeline Period:** [DD.MM.YYYY – DD.MM.YYYY]
12
+
13
+ ---
14
+
15
+ ## 📊 1. Sprint Summary Scorecard
16
+
17
+ | Metric | Value | Notes & Data Source |
18
+ | :--- | :---: | :--- |
19
+ | 🖊️ **New Test Cases Added to TMS** | [N] | Net new TCs authored in Testomat.io during this sprint. |
20
+ | 📋 **Total TCs in Project (End of Sprint)** | [N] | `tests_list` count at sprint close. |
21
+ | ⚙️ **Automation Rate** | [XX%] | Automated TCs ÷ Total TCs — from `analytics_stats(kind="automation-rate-by-date")`. |
22
+ | 📈 **Overall Pass Rate** | [XX%] | From `analytics_stats(kind="success-rate-by-date")` for the sprint window. |
23
+ | 🏁 **Tickets Tested** | [N] | Total number of tickets which were finished during the sprint. |
24
+ | ✅ **Tickets Completed (All Tests Passed)** | [N] | Formally approved and ready for delivery/release -> finished with all passed tests. |
25
+ | 🐛 **Defects/Bugs Identified** | [N] | Newly identified defects during execution. |
26
+
27
+ ---
28
+
29
+ ## 🛠️ 2. Test Design & Coverage Expansion
30
+
31
+ | Ticket ID | Suite / Feature Area | Test Case Title(s) | Total TCs | TMS State |
32
+ | :--- | :--- | :--- | :---: | :--- |
33
+ | **[PROJ-123]** | Authentication | [TC Title 1]; [TC Title 2] | [N] | [Manual / Automated] |
34
+ | **[PROJ-456]** | Data Export | [TC Title 1] | [N] | [Automated] |
35
+ | **[PROJ-789]** | Data Export | [TC Title 1]; [TC Title 2] | [N] | [Mix: Automated & Manual] |
36
+ | *— No new test cases added —* | | | | |
37
+
38
+ > **TMS State** column: pull from `tests_list` → `state` field (`Manual` / `Automated` / `Mix: Automated & Manual`).
39
+
40
+ ---
41
+
42
+ ## 🎯 3. Testing Execution Progress by Ticket, Suite
43
+
44
+ > Report group is **Suite** (the primary TMS grouping). Each row corresponds to a Testomat.io Suite. Use `testruns_list(run_id="...")` to populate Passed / Failed / Skipped counts per suite.
45
+
46
+ | Ticket Name / Suite / Feature Area | Run Title | Total TCs | Passed | Failed | Skipped | Blocked | Execution % | Suite Release Status |
47
+ | :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
48
+ | [Suite Name — e.g. Billing] | [Run Title] | [N] | `[N]` | `[N]` | `[N]` | `[N]` | `[XX]%` | 🟡 In Progress |
49
+ | [Suite Name — e.g. Profile] | [Run Title] | [N] | `[N]` | `[N]` | `[N]` | `[N]` | `[XX]%` | ✅ Completed (All Tests Passed) |
50
+ | [Suite Name — e.g. Analytics] | [Run Title] | [N] | `[N]` | `[N]` | `[N]` | `[N]` | `[XX]%` | 🔴 Blocked |
51
+ | **TOTAL** | | **[N]** | **`[N]`** | **`[N]`** | **`[N]`** | **`[N]`** | **`[XX]%`** | **Overall Pass Rate:** `[XX%]` |
52
+
53
+ > **Status Key:**
54
+ > ✅ **Completed (All Tests Passed):** 100% test execution completed with zero critical defects.
55
+ > 🟡 **In Progress:** Validations are actively running or includes in-progress cases; no major technical hurdles encountered (🟡 >51% pass = In Progress).
56
+ > 🔴 **Blocked:** Discovered failure, issues (🔴<50% pass or blocked).
57
+
58
+ ---
59
+
60
+ ## ✅ 4. Tickets Moved to Sign-Off (already passed)
61
+ * `[PROJ-XXX]` — `[User Story Name]` | **Verified:** `[DD.MM.YYYY]` | **TMS Run:** `[Link to Testomat.io Run]`
62
+ * `[PROJ-YYY]` — `[User Story Name]` | **Verified:** `[DD.MM.YYYY]` | **TMS Run:** `[Link to Testomat.io Run]`
63
+ * *— No tickets signed off during this period —*
64
+
65
+ ---
66
+
67
+ ## 🔁 5. Quality Feedback Loop (Returned to Dev)
68
+ * `[PROJ-881]` — *`[Feature Name]`*: `[AC #2 failed: App crashes when session expires / Linked to BUG-99]` (**Return Count:** `[1st time / 2nd time]`)
69
+ * *— No tickets returned to development —*
70
+
71
+ ---
72
+
73
+ ## 🐛 6. Sprint Bug Tracking
74
+
75
+ | Bug ID | Title / Summary Description | Priority | Linked Ticket |
76
+ | :--- | :--- | :---: | :--- | :--- |
77
+ | `[BUG-001]` | `[Short descriptive bug title]` | 🔴 Critical | `[PROJ-XXX]` |
78
+ | `[BUG-002]` | `[Short descriptive bug title]` | 🟠 Major | `[PROJ-XXX]` |
79
+ | *— No bugs registered this week —* | | |
80
+
81
+ ---
82
+
83
+ ## 📊 8. TMS Test Health Analytics
84
+
85
+ > Data sourced via MCP `analytics_tests` and `analytics_stats` for the **current sprint period** only in case if you have access to this analytics.
86
+ (If most of the metrics could not be obtained, this section should be removed from the results.)
87
+
88
+ ### 8.1 Test Health Overview
89
+ | Metric | Value | Notes |
90
+ | :--- | :---: | :--- |
91
+ | 🔀 **Flaky Tests** | [N] | `analytics_tests(kind="flaky", days=N)` |
92
+ | ⏭️ **Never Executed** | [N] | `analytics_tests(kind="never-executed", maturity_days=N)` |
93
+ | 🌿 **Evergreen (Stable)** | [N] | `analytics_tests(kind="evergreen", days=N)` |
94
+ | ⏭️ **Skipped Tests** | [N] | `analytics_tests(kind="skipped", days=N)` |
95
+ | 🐛 **Tests with Defects** | [N] | `analytics_tests(kind="defects", days=N)` |
96
+ | 🐌 **Slow Tests (>N ms)** | [N] | `analytics_tests(kind="slow", threshold_ms=N)` |
97
+
98
+ ### 8.2 Success Rate Trend
99
+ > `analytics_stats(kind="success-rate-by-date", from="DD.MM.YYYY", to="DD.MM.YYYY")`
100
+
101
+ | Date | Success Rate % |
102
+ | :--- | :---: |
103
+ | [DD.MM.YYYY] | [XX%] |
104
+ | [DD.MM.YYYY] | [XX%] |
105
+ | [DD.MM.YYYY] | [XX%] |
106
+
107
+ ### 8.3 Execution Volume Trend
108
+ > `analytics_stats(kind="testruns-by-date", from="DD.MM.YYYY", to="DD.MM.YYYY")`
109
+
110
+ | Date | Test Runs Executed |
111
+ | :--- | :---: |
112
+ | [DD.MM.YYYY] | [N] |
113
+ | [DD.MM.YYYY] | [N] |
114
+
115
+ ---
116
+
117
+ ## 📊 9. Sprint Health & Project Readiness Assessment
118
+
119
+ | Assessment Area | Risk Level | Details & Impact Narrative |
120
+ | :--- | :---: | :--- |
121
+ | 🟢 **Sprint Completion Risk** | `[Green / Yellow / Red]` | Narrative based on execution % and sign-off rate. |
122
+ | 📦 **Spillover / Scope Creep Risk** | `[None / Low / High]` | Highlight any items vulnerable to rolling over into the next cycle. |
123
+ | 🖥️ **Environment & CI/CD Stability** | `[Stable / Degraded]` | Log testing framework bottlenecks, env down times, or pipeline blockers. |
124
+
125
+ **Sprint Summary Overview:**
126
+ [Write a summary 1-5 sentences overview by current sprint based on the provided info from this report.]
@@ -0,0 +1,174 @@
1
+ ---
2
+ name: qa-test-code-coverage
3
+ description: Map test cases — manual (markdown) and automated e2e (Playwright, Cypress, WebdriverIO, CodeceptJS, Puppeteer, Appium) — to source code files and produce a `coverage.tests.yml` mapping consumed by `@testomatio/reporter --filter "coverage:..."`. Use this skill when the user wants to run only the tests affected by a code change, generate a coverage file (manual, e2e, or both), build a traceability matrix between tests and source code, or set up change-aware regression.
4
+ license: MIT
5
+ metadata:
6
+ author: Testomat.io
7
+ version: 1.0.0
8
+ ---
9
+
10
+ # Tests to Code Coverage
11
+
12
+ Analyze the project's tests — manual markdown cases and automated e2e tests — and its source code. Produce `coverage.tests.yml` — a map from source files (or globs) to test identifiers: suite IDs, test IDs, tags. Testomat.io keeps manual and automated tests in one project, so one coverage file serves both. `@testomatio/reporter` consumes it to run only the tests affected by a diff (Step 6).
13
+
14
+ ## Critical Constraints
15
+
16
+ - **Map the tests that exist — manual markdown cases, automated e2e tests, or both.** No unit tests. Do not suggest creating new tests.
17
+ - You may write to exactly three places, nothing else:
18
+ - the coverage file — default `coverage.tests.yml`, or the path the user gave;
19
+ - the `.testeiya/` cache dir — clone automated test repos, pull manual cases from Testomat.io (Step 1);
20
+ - `.gitignore` — add a `.testeiya/` line if it is missing.
21
+ - **Never modify a source or test file.**
22
+ - Never pull or clone tests into a tracked folder — only into the gitignored `.testeiya/`.
23
+ - **Everything in the coverage file must come from this project:** file keys from its source tree, identifiers from the Step 2 inventory. Never copy a path or ID from this skill's docs — they are placeholders.
24
+ - **No ad-hoc scripts, no parsers, never Python.** File reads and `grep` only; the single exception is the bundled checker (Step 5); beyond that a one-line `node -e '…'` is the limit.
25
+ - **Be proactive — never stop at a representative sample.** A few entries per domain is a failed run. Keep mapping without asking permission to continue until the completion criterion in Step 4 is met.
26
+ - Stop if you cannot write the output file, or no tests are found and the user declines every option in Step 1.
27
+
28
+ ## Workflow
29
+
30
+ ### Step 1: Discover the project
31
+
32
+ - Run the `scan-automation-project` skill to inventory the project. Use its output as the source of truth — do not duplicate the scan.
33
+ - Capture from its result:
34
+ - Manual Tests — the `.test.md` files and their suite/test titles.
35
+ - Automated Tests — the e2e test files and framework(s). See [E2E Frameworks](./references/E2E_FRAMEWORKS.md) if the scan is ambiguous.
36
+ - Project Overview — languages, frameworks, complexity (drives the subagent split in Step 4).
37
+ - Map whatever exists: both kinds go into one coverage file; a single kind is fine too.
38
+ - ❓ If the scan finds no tests at all (it checks the `.testeiya/` cache too), ask the user:
39
+ 1. Pull manual cases from Testomat.io — have `sync-test-cases-with-tms` pull into the cache: `npx check-tests pull -d .testeiya/manual-tests`, add `.testeiya/` to `.gitignore` if missing, re-run the scan.
40
+ 2. Clone the automated tests repo: `git clone <url> .testeiya/e2e-tests`, add `.testeiya/` to `.gitignore` if missing, re-run the scan.
41
+ 3. Point to a directory the scan missed, then re-run the scan there.
42
+ 4. Stop.
43
+ - ❓ If two automated frameworks are detected (say Jest and Playwright), ask which one is the e2e framework — coverage filtering runs per runner.
44
+
45
+ ### Step 2: Extract test information
46
+
47
+ Build one inventory of identifiers across both kinds:
48
+
49
+ - Suite IDs — `@S` + 8 chars.
50
+ - Test IDs — `@T` + 8 chars.
51
+ - Tags — other `@word` markers.
52
+ - Context — titles, steps, page objects, routes hit. This drives the mapping in Step 4.
53
+
54
+ Where IDs live:
55
+
56
+ - Manual cases follow the [Classical Tests Markdown Format](../qa-write-test-cases/references/test-case-format.md) — IDs in `<!-- suite ... id: @S... -->` / `<!-- test ... id: @T... -->` blocks, tags in titles and `tags:` lines.
57
+ - Automated tests carry IDs in `describe` / `it` / `test` / `Feature` / `Scenario` titles — see [E2E Frameworks](./references/E2E_FRAMEWORKS.md).
58
+
59
+ Read the files, or `grep` the directories that hold the tests:
60
+
61
+ ```bash
62
+ grep -rnE 'id:[[:space:]]*@[ST]' <dir> # manual suite/test IDs
63
+ grep -rnoE '@[ST][0-9a-f]{8}' <dir> # IDs in automated test titles
64
+ grep -rhoE '@[A-Za-z0-9_-]+' <dir> | sort -u # every @token, tags included
65
+ ```
66
+
67
+ Missing IDs mean the tests were never synced with Testomat.io — the reporter cannot select them:
68
+
69
+ - ❓ Manual files without IDs: ask whether to push them first via `sync-test-cases-with-tms`, or skip those files.
70
+ - Automated tests without IDs in most files: stop and instruct the user to run `npx check-tests@latest <Framework> "<glob>" --update-ids` first (per-framework commands: [E2E Frameworks](./references/E2E_FRAMEWORKS.md)).
71
+
72
+ ### Step 3: Plan the coverage map by domain
73
+
74
+ **Do not crawl the codebase file by file.** Identify the application's domain areas first; Step 4 then maps area by area.
75
+
76
+ - Derive the areas from both sides:
77
+ - the suite tree from Step 2 — the suite hierarchy is the QA team's own map of the product;
78
+ - the source structure — modules, routes, services, entry points.
79
+ - Pair each area with the suites that test it and the source folders that implement it.
80
+ - Order the areas by criticality, most critical first: payments/billing, auth and access control, data integrity, core business flows — then supporting features, then peripheral UI. Suite size is a signal: what QA tests heavily, they consider critical.
81
+ - Show the ordered plan to the user before mapping.
82
+ - Business code only: skip test code, manual test directories, dependency/build/vendor folders, framework configs, lock files.
83
+ - **Templates and views are mappable source** (`.vue`, `.erb`, `.blade.php`, …) — tests check the rendered UI, so map them like code.
84
+ - ❓ If areas or their priority are unclear, ask the user.
85
+
86
+ ### Step 4: Map source files to tests
87
+
88
+ **The Step 2 inventory is the work list. The map is complete only when every suite in it is either present in the coverage file or recorded as unmapped with a reason.** Work through the areas in Step 3's order — most critical first, so even an interrupted run covers what matters most. Run two passes — always both:
89
+
90
+ - Code → tests: for each area, map its source files and subtrees to the identifiers of the tests that check them.
91
+ - Tests → code: walk the inventory; for every suite still absent from the map, find the source it exercises and add it — or record why it cannot be mapped (feature has no code here, external system, needs user input).
92
+
93
+ Scale the passes to the project — codebase size and suite count from Step 1:
94
+
95
+ - Small codebase and few suites — run both passes in this session.
96
+ - Large codebase or dozens of suites — spawn subagents in parallel: one per domain area for the code→tests pass, then one per batch of still-unmapped suites for the tests→code pass. Give each subagent:
97
+ - its slice — one area (its suites and source folders), or a batch of suites;
98
+ - the full test inventory from Step 2 — subagents must not re-extract it;
99
+ - the mapping rules below and the [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md);
100
+ - the instruction to return a YAML fragment for its slice only.
101
+ - Merge the fragments into one map, drop duplicate keys and empty entries. Only the main session writes the file (Step 5).
102
+
103
+ For each candidate source file, pick the identifier that keeps selecting the right tests as the test suite grows:
104
+
105
+ - Suite (`@S`) — the default. Most tests in the suite relate to the file.
106
+ - Tag (`@word`) — the relevant tests live across several suites.
107
+ - Test (`@T`) — the exception. Use only when just one or two tests in a suite match the file.
108
+
109
+ Rules:
110
+
111
+ - **More than a few test IDs from one suite or category → replace them with the suite or tag.** Tests added there later are picked up automatically; a list of test IDs goes stale.
112
+ - Never list a test ID whose suite is already in the same entry.
113
+ - Keys are source file paths or globs, relative to the repo root; use a glob when a whole subtree maps to the same identifiers.
114
+ - Manual and automated identifiers mix freely in one entry.
115
+ - No empty entries.
116
+ - Annotate each identifier with a `#` comment naming its suite/test/tag title.
117
+
118
+ YAML grammar: [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md).
119
+
120
+ ### Step 5: Save and validate the coverage file
121
+
122
+ - Write the YAML to the output path, keeping the `#` comments.
123
+ - Keys are paths to source files in this repo — never `.testeiya/...` paths.
124
+ - Check it with the bundled checker. It ships in this skill's `scripts/` directory (next to this SKILL.md), not in the project — resolve its path from the skill location:
125
+
126
+ ```bash
127
+ npx js-yaml coverage.tests.yml | node <path-to-this-skill>/scripts/check-coverage.mjs
128
+ ```
129
+
130
+ - The checker flags keys missing on disk and empty entries, and prints every identifier referenced — cross-check them against the Step 2 inventory; only you know which are real.
131
+ - Reconcile the other direction too: every suite in the inventory must appear in the file or in the unmapped list. Anything missing from both means the tests→code pass is not finished — go back to Step 4.
132
+
133
+ ### Step 6: Report coverage completeness
134
+
135
+ Show the user:
136
+
137
+ - Suites mapped vs. total suites in the inventory; same for tests and tags where meaningful.
138
+ - Every unmapped suite with its reason.
139
+ - The produced YAML (or its path and entry count when large).
140
+
141
+ ### Step 7: Show next steps
142
+
143
+ Tell the user how to use the file with `@testomatio/reporter`:
144
+
145
+ ```bash
146
+ # Automated tests — the project's runner command must be passed in
147
+ npx @testomatio/reporter run "npx playwright test" \
148
+ --filter "coverage:file=coverage.tests.yml,diff=main"
149
+
150
+ # Manual tests — creates a pending run with only the affected cases
151
+ npx @testomatio/reporter run --kind manual \
152
+ --filter "coverage:file=coverage.tests.yml,diff=main"
153
+ ```
154
+
155
+ - Per-framework runner commands and a GitHub Actions example: [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md).
156
+ - To group manual and automated runs of one regression cycle, set the same `TESTOMATIO_RUNGROUP` env var on both commands.
157
+ - Recommend committing the coverage file so CI and teammates use the same mapping.
158
+ - In CI, diff against the base branch — `diff=origin/main` — and checkout with `fetch-depth: 0`.
159
+ - Pulled or cloned tests stay in the gitignored `.testeiya/` cache for re-runs — don't delete it or move it into a tracked folder.
160
+
161
+ ### Step 8: Suggest follow-ups
162
+
163
+ - Wire the map into CI — runs created per PR and launched on preview/merge: delegate to `setup-change-aware-pr-testing`.
164
+ - Run the affected tests right now from the terminal: delegate to `run-tests-with-testomatio-reporter`.
165
+ - Coverage gaps — source features no test maps to. On approval, propose new cases (delegate to `qa-write-test-cases`).
166
+ - Dead tests — tests whose features no longer exist in source.
167
+ - Answer questions like "do we have tests for X?" from the inventory.
168
+ - Editing pulled manual cases: edit them in `.testeiya/manual-tests/` and push back with `sync-test-cases-with-tms`.
169
+
170
+ ## References
171
+
172
+ - [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md) — coverage YAML grammar, reporter contract, GitHub Actions example.
173
+ - [E2E Frameworks](./references/E2E_FRAMEWORKS.md) — framework detection signals, where IDs live, per-framework `check-tests` commands.
174
+ - [Manual test markdown format](../qa-write-test-cases/references/test-case-format.md) — canonical, owned by `qa-write-test-cases`.
@@ -0,0 +1,138 @@
1
+ # Coverage File Format
2
+
3
+ `coverage.tests.yml` (any path works) maps source files to manual and automated test identifiers — one grammar for both kinds. It is read by `@testomatio/reporter run --filter "coverage:file=<path>,diff=<branch>"`.
4
+
5
+ Every path and identifier in this document is a placeholder showing the shape. Real file keys come from the project's source tree; real IDs come from its test inventory. Never copy a value from here into a coverage file.
6
+
7
+ ## Top-level shape
8
+
9
+ A YAML map. Keys are file paths or globs relative to the repository root. Values are lists of identifiers — Suite IDs, Test IDs, or tags.
10
+
11
+ ```yaml
12
+ <file or glob>:
13
+ - "@S<8 chars>" # Suite ID
14
+ - "@T<8 chars>" # Test ID
15
+ - "@<tag>" # Tag (matches anything tagged with that label)
16
+ ```
17
+
18
+ ## Identifier types
19
+
20
+ | Identifier | Format | Shape | Meaning |
21
+ | ---------- | ------------ | ------------- | ---------------------------------------- |
22
+ | Suite ID | `@S` + 8 hex | `@S1a2b3c4d` | All tests inside the suite are selected. |
23
+ | Test ID | `@T` + 8 hex | `@T5e6f7a8b` | Only this specific test is selected. |
24
+ | Tag | `@<word>` | `@smoke` | All tests tagged with the label. |
25
+
26
+ For automated tests, IDs live in describe / it / test names:
27
+
28
+ ```javascript
29
+ describe('<suite title> @S1a2b3c4d', () => {
30
+ it('<test title> @T5e6f7a8b', () => { ... });
31
+ });
32
+ ```
33
+
34
+ They are populated by `npx check-tests <Framework> "<glob>" --update-ids` after the tests are imported into Testomat.io.
35
+
36
+ ## File keys
37
+
38
+ Either an exact path or a glob:
39
+
40
+ ```yaml
41
+ # Exact file
42
+ <path/to/file>:
43
+ - "@S1a2b3c4d"
44
+
45
+ # Glob — any file under the directory
46
+ <path/to/dir>/**:
47
+ - "@<tag>"
48
+
49
+ # Multiple identifiers per file
50
+ <path/to/file>:
51
+ - "@S1a2b3c4d"
52
+ - "@T5e6f7a8b"
53
+ ```
54
+
55
+ ## Comments
56
+
57
+ Use `#` to annotate each identifier with its human-readable title or purpose:
58
+
59
+ ```yaml
60
+ <path/to/file>:
61
+ - "@S1a2b3c4d" # Suite: <suite title>
62
+ - "@T5e6f7a8b" # Test: <test title>
63
+ ```
64
+
65
+ ## Reporter usage
66
+
67
+ For automated tests the runner command **must** be the first positional argument — `--filter` generates a `--grep` that the runner consumes.
68
+
69
+ ```bash
70
+ # Playwright
71
+ npx @testomatio/reporter run "npx playwright test" \
72
+ --filter "coverage:file=coverage.tests.yml,diff=main"
73
+
74
+ # Cypress
75
+ npx @testomatio/reporter run "npx cypress run" \
76
+ --filter "coverage:file=coverage.tests.yml,diff=main"
77
+
78
+ # WebdriverIO / Mocha / Jest / CodeceptJS — pass the corresponding runner command
79
+ npx @testomatio/reporter run "npx codeceptjs run" \
80
+ --filter "coverage:file=coverage.tests.yml,diff=main"
81
+ ```
82
+
83
+ For manual tests pass `--kind manual` instead of a runner — the reporter creates a pending run in Testomat.io with only the affected cases:
84
+
85
+ ```bash
86
+ npx @testomatio/reporter run --kind manual \
87
+ --filter "coverage:file=coverage.tests.yml,diff=main"
88
+ ```
89
+
90
+ The `diff` value must be a stable branch (`main`, `origin/main`) the reporter can run `git diff` against.
91
+
92
+ ## GitHub Actions example
93
+
94
+ ```yaml
95
+ name: Run Tests Based on Changes
96
+
97
+ on:
98
+ pull_request:
99
+ branches: [main]
100
+
101
+ jobs:
102
+ e2e-tests:
103
+ runs-on: ubuntu-latest
104
+ steps:
105
+ - uses: actions/checkout@v4
106
+ with:
107
+ fetch-depth: 0
108
+
109
+ # install browsers and prepare app for testing here
110
+
111
+ - name: Run affected E2E tests
112
+ env:
113
+ TESTOMATIO: ${{ secrets.TESTOMATIO }}
114
+ run: |
115
+ npx @testomatio/reporter run "npx playwright test" \
116
+ --filter "coverage:file=coverage.tests.yml,diff=origin/main"
117
+ ```
118
+
119
+ ## Checking the coverage file
120
+
121
+ One command — no parser of your own. Run it with the project root as working directory (file keys resolve against it), but the checker itself lives in the skill's `scripts/` directory, not in the project:
122
+
123
+ ```bash
124
+ npx js-yaml coverage.tests.yml | node <path-to-this-skill>/scripts/check-coverage.mjs
125
+ ```
126
+
127
+ `npx js-yaml` parses the YAML (it fails loudly on a malformed file, so a broken one never reaches the script). `check-coverage.mjs` (~25 lines, zero deps) reads that parsed map on stdin, flags any key whose path is missing on disk, flags any key with no identifiers, lists every `@S…` / `@T…` / tag the file references, and exits non-zero on a problem.
128
+
129
+ The script can't tell which identifiers are real — check the listed ones against the set you extracted earlier in the workflow. Don't re-parse the test set, don't write your own YAML parser, and never use `python`.
130
+
131
+ ## Authoring tips
132
+
133
+ - Prefer Suite IDs when most of a suite relates to a file.
134
+ - Use tags for cross-cutting concerns that span suites.
135
+ - Use Test IDs only when one or two tests in a suite are relevant — a long test-ID list goes stale as tests are added, a suite or tag keeps selecting new ones.
136
+ - Never list a test ID whose suite is already in the entry — the suite ID already selects it.
137
+ - Avoid empty entries.
138
+ - Commit the coverage file to the repo so CI and teammates use the same mapping.