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,83 @@
1
+ ---
2
+ name: qa-data-seeder
3
+ description: Prepare and seed test data for a feature into a target environment. Analyzes the feature's implementation, proposes data categories covering regular and edge cases, and populates the environment via existing seed mechanisms code access, REST, MCP. Use when the user asks to seed test data, populate a test or staging environment, prepare data for manual/QA testing of a feature, generate a dataset for a feature, or create fixtures in an environment.
4
+ license: MIT
5
+ metadata:
6
+ author: Testomat.io
7
+ version: 1.0.0
8
+ ---
9
+
10
+ # QA Data Seeder
11
+
12
+ Analyze how a feature is implemented, design a balanced dataset that covers every category QA needs, and populate it into a target environment so the feature can be tested manually or by automation.
13
+
14
+ ## Critical Constraints
15
+
16
+ - **Never seed production.** Confirm the target environment is a test/dev/staging one before writing any data. If in doubt, stop and ask.
17
+ - **Never produce broken data.** Every seeded record must pass the application's own validation. Edge cases are extreme-but-valid values, not corrupt ones. Malformed input belongs in negative tests executed live, never in persisted seed data.
18
+ - **Balance the dataset: at least 70% regular (expected) data, at most 30% edge cases.**
19
+ - **Do not seed until the user approves the categories and the exact item count** (Step 3 gate).
20
+ - Credentials, tokens, and connection strings come from env vars or user input — never hardcode them.
21
+ - Prefer the project's existing seeding mechanisms (factories, seed scripts, fixtures, admin console) or REST API or MCP. Write seed script in language of application.
22
+ - Generated artifacts (dataset plans, one-off seed scripts) go into the gitignored `.testeiya/seed-data/` — add `.testeiya/` to `.gitignore` if missing.
23
+ - Mark every seeded record with one recognizable marker (in a name, note, or tag field the schema allows) so QA can find the data and clean it up later. Use the same marker for the whole run.
24
+
25
+ ## Workflow
26
+
27
+ ### Step 1: Understand the feature
28
+
29
+ Read the implementation before proposing anything. Collect:
30
+
31
+ - Entities and models the feature touches, with every field: type, format, length limits, numeric ranges, enums, required vs optional, uniqueness, defaults.
32
+ - Validation rules — application-level and DB constraints/migrations.
33
+ - Relationships and prerequisites: which records must exist before others can be created.
34
+ - Business variations that change behavior: roles, statuses, types, plans/tiers, locales, feature flags, time-dependent logic.
35
+ - API endpoints (or UI flows) that create these records, and what they require.
36
+
37
+ If there is no code access, fall back to the API schema (OpenAPI/Swagger, GraphQL introspection) or ask the user for docs. If MCP available - use it.
38
+
39
+ ### Step 2: Collect environment details
40
+
41
+ ❓ Ask for what the code cannot tell you:
42
+
43
+ - Platform: web, mobile, or API-only.
44
+ - Base URL if web; API base URL for seeding.
45
+ - Environment kind (local, dev, staging) — confirm it is not production.
46
+ - Access channel available: existing seed mechanism, REST API, DB/console access.
47
+ - How to authenticate: which env vars hold tokens or credentials.
48
+ - Which account/tenant/workspace to seed into, or whether to create a fresh one.
49
+
50
+ Pick the seeding channel in this order: existing seed mechanism → app console/code → new small script -> REST API -> MCP .
51
+ For local environments data can be seeded through the backend.
52
+
53
+
54
+ ### Step 3: Propose categories and ask for the count
55
+
56
+ - Derive categories from Step 1: one per business variation, plus edge-case groups (min/max lengths and amounts, unicode, date boundaries, every enum value and reachable state, empty vs full optional fields, collection and relationship extremes).
57
+ - Present a table: category, what it lets QA test, regular/edge, planned share.
58
+ - Keep regular categories at 70% or more of the total; edge categories at 30% or less.
59
+ - ❓ Ask the user for the exact total number of items, then recompute per-category counts and confirm.
60
+ - Adjust categories per user feedback before generating anything.
61
+
62
+ ### Step 4: Generate the dataset
63
+
64
+ - Use realistic values: names, emails, addresses, and amounts that look like production data; unique where the schema requires it.
65
+ - Use faker/lorem ipsum generators when available
66
+ - Order records so prerequisites come first (parents before children, referenced records before referencing ones).
67
+ - Apply the run marker to every record.
68
+ - Save the dataset (records or generation rules) to `.testeiya/seed-data/` before seeding, so the run is reviewable and repeatable.
69
+
70
+ ### Step 5: Seed the environment
71
+
72
+ - Seed through the chosen channel in dependency order; batch where the channel allows.
73
+ - Verify each batch as it is written: API response codes, returned IDs, record counts.
74
+ - If the application rejects a record, fix the generator to comply — never bypass validation by writing directly to the DB.
75
+ - After 3 failed attempts on a category, report the failure with the error output and ask how to proceed.
76
+
77
+ ### Step 6: Verify and hand off
78
+
79
+ - Re-query the environment per category and compare counts against the approved plan.
80
+ - Report a table: category, requested, created, and how to locate the records (the marker).
81
+ - Include the environment URL and, for web, a page where QA can see the seeded data.
82
+ - Give cleanup instructions: how to find records by the marker and delete them through the same channel.
83
+ - Offer follow-ups: `qa-write-test-cases` to write cases against the seeded data, or `qa-thinking` to probe the feature for scenarios the dataset should grow to cover.
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: run-tests-with-testomatio-reporter
3
+ description: Create and launch Testomat.io test runs with the `@testomatio/reporter` CLI. Covers manual runs for testers, mixed manual+automated runs, local test execution with reported results, and remote launches through a Testomat.io CI profile (`--remote`). Runs can include the whole suite or be filtered by tag, plan, label, Jira ticket, or changed source files. Use when the user asks to start or create a test run from the command line, run a filtered group of tests, launch tests remotely, or report results into an existing run.
4
+ license: MIT
5
+ metadata:
6
+ author: Testomat.io
7
+ version: 1.1.0
8
+ ---
9
+
10
+ # Run Tests with Testomat.io Reporter
11
+
12
+ `npx @testomatio/reporter` creates test runs in Testomat.io and launches groups of tests — locally or remotely through a Testomat.io CI profile. Every command requires the `TESTOMATIO` env var (the project API key, `tstmt_*`) and exits 1 without it. Every value in angle brackets is a placeholder.
13
+
14
+ ## Pick the command by intent
15
+
16
+ | Intent | Command |
17
+ | --------------------------------------------------- | ------------------------------------------- |
18
+ | Create a run, execute nothing — testers start on it | `start` |
19
+ | Execute tests locally and report results | `run "<runner command>"` |
20
+ | Launch tests remotely via a Testomat.io CI profile | `run --remote <profile-name>` |
21
+ | List which tests a filter matches, run nothing | `run --filter-list "<filter>" --format ids` |
22
+ | Close a run created earlier | `finish` (run id via `TESTOMATIO_RUN`) |
23
+
24
+ ## Run kinds
25
+
26
+ `--kind` declares what the run contains:
27
+
28
+ | Kind | Flag | Behavior |
29
+ | --------- | --------------- | ----------------------------------------------------------------------------------------------- |
30
+ | manual | `--kind manual` | manual cases only — pending for testers, complete without any launch |
31
+ | mixed | `--kind mixed` | manual + automated in one run — testers work it while the automated part is launched separately |
32
+ | automated | *(no flag)* | automated tests only |
33
+ | detect | `--kind detect` | Testomat.io picks the kind from the tests the run was scoped to — prefer it on filtered runs |
34
+
35
+ A run created with `start` executes nothing: manual cases are pending immediately; an automated part stays scheduled until launched. `--format id` prints only the run id to stdout (banner and logs go to stderr), so capture is clean:
36
+
37
+ ```bash
38
+ RUN_ID=$(npx @testomatio/reporter start --kind manual --format id)
39
+ ```
40
+
41
+ ## What goes into the run
42
+
43
+ Without a filter, nothing is scoped:
44
+
45
+ - `start` creates a run with no predefined test list — results land in it later, when tests report with `TESTOMATIO_RUN=<run-id>`.
46
+ - `run "<runner command>"` executes the full suite and reports every result.
47
+ - `run --remote <profile-name>` dispatches the Testomat.io CI profile with its default scope.
48
+
49
+ `--filter "<pipe>:<criteria>"` narrows the run to the matching tests instead. Two filter pipes exist — `testomatio:` (match by test metadata stored in the project) and `coverage:` (match by changed source files); any other prefix is rejected. `start` and `run` accept the same filters, so a filtered run can be prepared first and launched later.
50
+
51
+ ### Filter by tag, plan, label, or Jira ticket (`testomatio:`)
52
+
53
+ | Criteria | Filter |
54
+ | -------------------------- | -------------------------------------------- |
55
+ | tag | `"testomatio:tag-name=<tag>"` |
56
+ | plan (Testomat.io plan id) | `"testomatio:plan=<plan-id>"` |
57
+ | label | `"testomatio:label=<label>"` |
58
+ | label with value | `"testomatio:label=<label>:<value>"` |
59
+ | Jira ticket | `"testomatio:jira-ticket=<ticket-id>"` |
60
+
61
+ - The value must match exactly — the tag name, plan id, label, or ticket as stored in the project.
62
+ - Works with every test framework whose runner accepts `--grep` (Playwright, CodeceptJS, Cypress, etc.) — the filter resolves to a grep pattern the runner consumes.
63
+
64
+ ### Filter by changed source files (`coverage:`)
65
+
66
+ ```
67
+ --filter "coverage:file=<path-to-coverage-map>,diff=<git-ref>"
68
+ ```
69
+
70
+ This is how "run only the tests affected by a code change" works — and it needs a **coverage map**: a YAML file mapping source files/globs to test IDs and tags. The reporter cannot know by itself which tests cover which code; the map provides that link, and the diff selects which of its entries are affected. Create the map with the `qa-test-code-coverage` skill (default `coverage.tests.yml`, one file serving both manual and automated tests).
71
+
72
+ - `file=` — path to the coverage map. May be absolute; it is read with `fs`, independent of the working directory.
73
+ - `diff=` — git ref to diff against; defaults to `master`. The reporter runs `git diff <ref> --name-only` **in `process.cwd()`** — launch it from inside the repo whose changes are being detected.
74
+ - Changed files are mapped through the YAML; the matching suite/test IDs and tags become the run's scope.
75
+ - Zero matching tests → no run is created (`No tests found.`). Exit codes: `start` and `--filter-list` exit 1, `run` exits 0; `--warn` makes all of them exit 0.
76
+
77
+ #### Picking the diff base
78
+
79
+ - Changes on a branch → diff against its target branch (e.g. `origin/<default-branch>`). Full git history must be available (`fetch-depth: 0` or the CI's equivalent).
80
+ - After a merge the target branch equals `HEAD`, so diffing against it yields nothing — use the previous mainline tip: `HEAD~1` for squash merges, `HEAD^1` for merge commits.
81
+
82
+ ### List matching tests without running (`--filter-list`)
83
+
84
+ `--filter-list` resolves a filter and prints the matching test IDs — nothing executes, no run is created. `--format` picks the encoding: `ids` (comma-separated, default), `grep` (alternation pattern), `json`, `newline`. Exit code 0 when at least one test matched, 1 when nothing did — scripts can branch on it:
85
+
86
+ ```bash
87
+ GREP=$(npx @testomatio/reporter run --filter-list "coverage:file=<coverage-map>" --format grep)
88
+ [ -n "$GREP" ] && npx playwright test --grep "$GREP"
89
+ ```
90
+
91
+ Cannot be combined with `--remote`.
92
+
93
+ ## Name and group the run
94
+
95
+ - `TESTOMATIO_TITLE` — the run title (e.g. `PR <number>: <title>`).
96
+ - `TESTOMATIO_RUNGROUP_TITLE` — groups related runs (per week / release / milestone).
97
+ - `TESTOMATIO_DESCRIPTION` — free-form run description, shown on the run and in PR/MR comments; put the link to the change here (a generated coverage scope is appended after it).
98
+ - `TESTOMATIO_ENV` — optional environment labels.
99
+
100
+ ## Report into an existing run
101
+
102
+ - `TESTOMATIO_RUN=<run-id>` — the command reports or launches into that run instead of creating a new one. Works across pipelines and even across repos — pass it (with `TESTOMATIO` and the title env) into whatever process executes the tests.
103
+ - No id at hand → shared-run title matching. Set on both sides:
104
+ - `TESTOMATIO_SHARED_RUN=1` — match the run by `TESTOMATIO_TITLE` instead of creating a new one;
105
+ - `TESTOMATIO_TITLE` — the match key, identical on both sides;
106
+ - `TESTOMATIO_SHARED_RUN_TIMEOUT` — minutes the title stays matchable, **default 20**; size it to the expected gap between create and launch.
107
+
108
+ ## Remote launch (`run --remote`)
109
+
110
+ `--remote <profile-name>` asks Testomat.io to dispatch a **Testomat.io CI profile** — a CI workflow configuration saved on the project (Settings → CI) — instead of executing tests locally. Testomat.io triggers that workflow, and its results report back into the run:
111
+
112
+ ```bash
113
+ TESTOMATIO_RUN=$RUN_ID npx @testomatio/reporter run --remote <profile-name> \
114
+ --filter "coverage:file=<coverage-map>,diff=<git-ref>"
115
+ ```
116
+
117
+ - With `TESTOMATIO_RUN`, the Testomat.io CI profile is triggered for that run; without it, a new run is created.
118
+ - Works with every filter form — the resolved test ids are forwarded to the CI workflow as a grep pattern. No filter → no grep; the workflow runs its default scope, or a prepared run's stored scope from creation time. A fresh `--filter` at launch replaces the stored scope.
119
+ - `--remote-param <key>=<value>` forwards a parameter to the Testomat.io CI profile config (repeat for several) — e.g. a preview URL or target branch.
120
+ - Guards: cannot combine with `--filter-list`; any positional command is ignored with a warning; a missing Testomat.io CI profile fails with `CI launch failed: <message>` and exit 1.
121
+
122
+ ### Choosing the Testomat.io CI profile
123
+
124
+ Profiles differ by workflow, job names, and parameters — never guess one. When talking to the user, always say "Testomat.io CI profile" in full and explain what it is; the bare word "profile" means nothing to them.
125
+
126
+ - Testomat.io MCP connected → fetch the Testomat.io CI profiles, present the list, and ask the user to choose (see `testomatio-mcp` to connect).
127
+ - No MCP → ask the user for the Testomat.io CI profile name.
128
+ - None exists yet → the user must create one in Testomat.io (Settings → CI) first.
129
+
130
+ ## Local execution (`run "<runner command>"`)
131
+
132
+ Wrap the runner and results report into the run as they come. Without a filter the whole suite runs; with one, the filter generates the grep the runner consumes:
133
+
134
+ ```bash
135
+ TESTOMATIO_RUN=$RUN_ID npx @testomatio/reporter run "<runner command>" \
136
+ --filter "testomatio:tag-name=<tag>"
137
+ ```
138
+
139
+ ## PR/MR comments
140
+
141
+ The reporter posts and updates the PR/MR summary comment itself — `start` posts a pending comment with the planned tests the moment the run is created, and results replace it as they report. Never script a comment API call. Enable the pipe by setting its token on every reporter command, `start` included:
142
+
143
+ | Platform | Env var | Note |
144
+ | --------- | ------------------------ | -------------------------------------------------- |
145
+ | GitHub | `GH_PAT` | the workflow's built-in token works inside PR runs |
146
+ | GitLab | `GITLAB_PAT` | access token with `api` scope |
147
+ | Bitbucket | `BITBUCKET_ACCESS_TOKEN` | repository access token |
148
+
149
+ No pipe for the platform (e.g. Azure DevOps) → no comment; results remain visible in Testomat.io.
150
+
151
+ ## Related skills
152
+
153
+ `qa-test-code-coverage` (creates the coverage map the `coverage:` filter needs), `setup-change-aware-pr-testing` (wires these commands into a CI pipeline), `qa-e2e-tests-reporting` (install and configure the reporter in an automation project).
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: setup-change-aware-pr-testing
3
+ description: Set up CI so every pull request gets a Testomat.io run scoped to the code it changes. One job runs after the deploy — it creates the run and launches the affected tests into it. Use when the user wants to integrate Testomat.io runs into a CI pipeline, create test runs per pull request, or set up change-aware testing that triggers affected tests from CI events.
4
+ license: MIT
5
+ metadata:
6
+ author: Testomat.io
7
+ version: 5.0.0
8
+ ---
9
+
10
+ # Setup Change-Aware PR Testing
11
+
12
+ I set up a project's CI for change-aware PR testing. The knowledge here is the flow model and the decisions to confirm with the user; what gets wired depends on the project's tests:
13
+
14
+ - manual — testers get a run to work through against the deployed change; nothing to execute.
15
+ - automated — an execution mode must be chosen: inline in the pipeline, a Testomat.io CI profile, or another workflow/repo.
16
+ - mixed — both, sharing one run per PR.
17
+
18
+ Two skills carry the mechanics — read both before wiring:
19
+
20
+ - `run-tests-with-testomatio-reporter` — every reporter command and env var the job executes.
21
+ - `setup-ci-automation` — CI investigation, workflow-authoring rules, diagram conventions, secrets, PR delivery.
22
+
23
+ > **GOAL: a working pipeline committed to the project's own CI system.** That CI configuration is the one and only finished result. I run locally to author it — I am never part of CI. Do not execute reporter commands while authoring; the only exceptions are the Testomat.io CI profile check (Step 2) and the final battle-test (Step 6).
24
+
25
+ The minimal setup is **one job, gated on the deploy**: it creates the run and launches the tests together. Propose that. Splitting creation and launch across two jobs is possible when the user needs it — the run id is then carried between them.
26
+
27
+ ## Possible flows
28
+
29
+ When the environment renders Mermaid, post this diagram as a chat message before the first question — never open with a question; it frames everything that follows. When questions go through a form or tool, the diagram must already be on screen in an earlier message.
30
+
31
+ Never post a diagram bare — follow it immediately with one short paragraph explaining it: this is the general schema of PR testing, for the user to examine before anything is implemented; a run is created once the change is deployed, and the user will now choose which deploys trigger it — a per-PR preview deploy, the post-merge deploy, or both — which types of tests execute (manual, automated, or both), and how the automated ones run — inline in the pipeline, through a Testomat.io CI profile, or by dispatching another repo.
32
+
33
+ ```mermaid
34
+ flowchart LR
35
+ DEP([Preview or post-merge<br/>deploy succeeds]) --> WHICH{PR behind<br/>this commit?}
36
+ WHICH -->|none| SKIP([Nothing to test])
37
+ WHICH -->|found| RUN[Create a run scoped<br/>to the deployed changes]
38
+ RUN -->|manual / mixed| TESTERS[Testers execute manual cases<br/>on Testomat.io]
39
+ RUN -->|automated / mixed| MODE{How to execute?}
40
+ MODE -->|via a Testomat.io CI profile| RES
41
+ MODE -->|inline in this pipeline| RES
42
+ MODE -->|by dispatching another repo| RES
43
+ RES[Run the affected automated tests —<br/>results land in the same run]
44
+ ```
45
+
46
+ - Manual-only project → only the top branch: the run is complete at creation, testers execute it on Testomat.io, nothing launches.
47
+ - Automated-only project → only the bottom branch: the run is created and launched in one job.
48
+ - Mixed project → both branches share one run per PR.
49
+
50
+ ## The coverage map drives everything
51
+
52
+ A coverage map maps source files/globs to test identifiers; the reporter filters it by the diff so only impacted tests are prepared and run. It is produced by the `qa-test-code-coverage` skill — default `coverage.tests.yml`, one file serving both manual and automated tests. Missing map → delegate to `qa-test-code-coverage`; never hand-write one here. Without a map nothing can be filtered and no pipeline can be wired.
53
+
54
+ ## Critical Constraints
55
+
56
+ - **Never execute the reporter while authoring — the deliverable is committed CI config.** Two approved exceptions: the Testomat.io CI profile check (Step 2) and the battle-test (Step 6).
57
+ - **Only touch CI config files** — never source or test files.
58
+ - Diagrams gate the dialogue: flows diagram before the first question, selected-flow diagram approved before wiring (Step 3).
59
+ - Discovery first — delegate to `scan-automation-project` before writing anything.
60
+ - Never guess a Testomat.io CI profile name — pick from a list (Testomat.io MCP) confirmed by the user, or ask. Never wire one that has not been proven to launch.
61
+ - Say "Testomat.io CI profile" in full, never bare "profile"; every question option explains itself in plain words.
62
+ - Avoid presenting the project's full test inventory as the run scope; never print full test lists.
63
+ - No coverage map → no pipeline; delegate map creation to `qa-test-code-coverage`.
64
+ - Propose one job gated on the deploy job succeeding; split creation and launch across jobs only if the user needs it, carrying the run id with the CI's value passing.
65
+ - Preview deploys and post-merge deploys are equally valid triggers — the same job shape serves both; wire it to each deploy the project has.
66
+ - A deployed commit with no PR behind it creates nothing.
67
+ - `--kind detect` lets Testomat.io resolve the kind from what the run was scoped to — never hardcode `mixed`.
68
+ - The job never fails the deploy pipeline.
69
+ - PR comments come from the reporter's own pipes — never script a PR-comment API call.
70
+ - The run title is the PR's own title, carried verbatim from the resolved PR, with the PR number in front. Never append words of your own — no "selective tests", no "affected tests", no framework or scope labels.
71
+ - Every run gets that title and a rungroup.
72
+
73
+ ## Workflow
74
+
75
+ ### Step 1 — Discover
76
+
77
+ - Delegate to `scan-automation-project`: are there manual `.test.md` cases, which e2e framework exists (unit/integration don't count), do automated tests live in this repo or elsewhere.
78
+ - The result fixes the project kind — manual, automated, or mixed — and with it which flows apply.
79
+ - Investigate the CI with `setup-ci-automation`: which CI system runs the project, what workflows exist, and which of them deploy — to which environments.
80
+ - Locate the coverage map (default `coverage.tests.yml`). Missing → propose creating it and delegate to `qa-test-code-coverage`.
81
+
82
+ ### Step 2 — Present the flows and ask the unknowns
83
+
84
+ Post the possible-flows diagram, trimmed to the kinds found in Step 1, as its own message with its one-paragraph explanation (what the schema is, which choices the user is about to make) — then ask only what applies. Read the CI files first so you don't ask what's already answered.
85
+
86
+ Manual tests found — nothing to choose: their part of the run is complete at creation, testers start on Testomat.io immediately.
87
+
88
+ Automated tests found — ❓ choose the execution mode. Each option in the question must explain itself in plain words — what runs where and who triggers it. In particular spell out what a Testomat.io CI profile is: a CI workflow configuration saved on the Testomat.io project (Settings → CI) that Testomat.io dispatches to execute the tests, with results reporting back into the run.
89
+
90
+ | Mode | When it fits |
91
+ | ------------------------------- | ------------------------------------------------------------------------------------------------------------- |
92
+ | Remote — Testomat.io CI profile | a Testomat.io CI profile for the e2e suite exists (Settings → CI); Testomat.io owns runner, env, secrets |
93
+ | Inline — this pipeline | mobile/simulators, services this pipeline spins up, or an e2e job that already works in this repo |
94
+ | Cross-repo dispatch | the e2e suite lives in another repo and no Testomat.io CI profile covers it |
95
+
96
+ - Remote chosen → identify the Testomat.io CI profile, never guess it: Testomat.io MCP connected → fetch the list, present it, ❓ ask the user to choose (profiles differ by workflow and job names); no MCP → ❓ ask for the exact profile name; none exists yet → creating one in Testomat.io (Settings → CI) is a prerequisite.
97
+ - **Then prove that profile launches before wiring anything around it.** ❓ Ask approval — it executes the full suite. Run `npx @testomatio/reporter run --remote <profile-name>` unfiltered, then check on the CI that a job actually started. Exit code 0 only means Testomat.io accepted the dispatch; a profile aimed at the wrong workflow, job, or branch fails silently. Nothing started → fix in Settings → CI and repeat.
98
+ - No e2e suite anywhere → wire only the manual flow; never fabricate an e2e job.
99
+
100
+ And for every kind:
101
+
102
+ 1. ❓ Which deploys trigger the run — the per-PR preview deploy, the post-merge deploy to staging/production, or both. Offer the deploy pipelines found in Step 1. Both exist → wire both; each produces its own run, scoped to what that deploy shipped and tested against that environment.
103
+ 2. ❓ Rungroup strategy — week / day / release / milestone.
104
+
105
+ ### Step 3 — Confirm the selected flow
106
+
107
+ - Draw the flow the answers produced — only the chosen kind, deploys, and execution mode.
108
+ - ❓ Present the diagram and get approval; wire nothing until the user accepts it.
109
+
110
+ Example — mixed project, preview and post-merge deploys, Testomat.io CI profile:
111
+
112
+ ```mermaid
113
+ flowchart LR
114
+ PREV([Preview deploy succeeds]) --> JOB
115
+ STG([Post-merge deploy succeeds]) --> JOB
116
+ JOB[Same job — get the PR, create a run<br/>scoped to what this deploy shipped]
117
+ JOB --> TESTERS[Testers execute manual cases<br/>on Testomat.io]
118
+ JOB --> L1[Launch automated tests via the Testomat.io<br/>CI profile, against this deploy's environment]
119
+ L1 --> RES[Results land in that run]
120
+ ```
121
+
122
+ ### Step 4 — Wire the job into CI
123
+
124
+ One job in the deploy pipeline, gated on the deploy job succeeding through the CI's native job dependency. The same job serves both deploys — only three things differ:
125
+
126
+ | Deploy | The PR | Diff range | Tests run against |
127
+ | ----------------------- | --------------------------------- | --------------------------------- | -------------------- |
128
+ | Preview deploy (per PR) | the PR that triggered the deploy | the PR's target branch | the preview URL |
129
+ | Post-merge deploy | resolved from the deployed commit | the deployed push's commit range | staging / production |
130
+
131
+ Author it following `setup-ci-automation`'s workflow-authoring rules; take every command and env var from `run-tests-with-testomatio-reporter`. No `--filter-list` pre-checks. Manual-only projects get (a) and (b) alone.
132
+
133
+ **(a) Get the PR.** A preview deploy already carries it. After a merge, ask the platform which PR contains the deployed commit — never parse the commit subject, which yields the branch name for a merge commit. No PR → log it and exit 0; direct commits to the mainline deploy as before and create nothing.
134
+
135
+ **(b) Create the run.**
136
+
137
+ - `start --kind detect --format id --warn --filter "coverage:file=<map>,diff=<range>"`, capturing the printed id into `TESTOMATIO_RUN` in the same shell.
138
+ - `<range>` is what this deploy shipped — per the table above.
139
+ - `--kind detect` — a diff touching only manual tests then yields a manual run, not a mixed one with an empty automated half.
140
+ - `TESTOMATIO_TITLE` from the resolved PR's number and title and nothing else; `TESTOMATIO_DESCRIPTION` its URL; `TESTOMATIO_RUNGROUP_TITLE` per Step 2.
141
+ - Provide the platform's comment-pipe token so the reporter posts its PR comment (tokens per platform in `run-tests-with-testomatio-reporter`).
142
+ - A change touching no mapped tests is normal — `--warn` keeps the job green; never parse the output.
143
+ - Check out the deployed revision with full history — the coverage filter diffs.
144
+
145
+ **(c) Launch the automated tests into that run** (automated/mixed only).
146
+
147
+ - Same filter and same range as (b), so the launch scope matches what the run was created for.
148
+ - Remote: `run --remote <profile-name>`. Inline: `run "<runner command>"`. Cross-repo: trigger the other repo's pipeline with the CI's native mechanism, passing the run id and API key into it.
149
+ - The URL of the environment this deploy produced reaches the tests — a remote param for remote mode, the runner's own base-URL env for inline.
150
+ - Manual cases need no launch — testers work through them against the deployed change by hand.
151
+
152
+ ### Step 5 — Deliver: secrets and the PR
153
+
154
+ Provision secrets and open the pipeline PR as `setup-ci-automation` prescribes, plus what is specific here:
155
+
156
+ - Provision the PR-comment pipe token alongside the API key (tokens per platform in `run-tests-with-testomatio-reporter`).
157
+ - The Testomat.io CI profile for remote launches is configured in Testomat.io (Settings → CI), not stored as a repo secret.
158
+ - Put in the PR description: the approved flow diagram, the phases wired, the execution mode chosen, and the secrets/prerequisites to provision before merging.
159
+
160
+ ### Step 6 — Battle-test the setup (on approval)
161
+
162
+ Prove the pipeline's commands work before the CI ever runs them — by running them once, locally, on a real change.
163
+
164
+ - ❓ Ask the user for a PR to validate with, and for approval to create a real run and launch tests — an open PR when a preview deploy is wired, an already-merged one otherwise.
165
+ - Reproduce that deploy's diff locally, per the Step 4 table: open PR → check out its branch and diff against the target branch; merged PR → check out the merge commit and diff against the mainline state just before it.
166
+ - Create the run exactly as (b) does — same kind, same filter, and the title that PR's own title yields — then launch as (c) does into it.
167
+ - Report the run created — id, kind, and the tests it scoped — and ask the user to review it in Testomat.io: does the scope match what that diff should affect?
168
+ - Zero tests matched → report it as a finding, then pick a PR that touches mapped source files together with the user.
169
+
170
+ ### Step 7 — Summarize and hand off
171
+
172
+ Present the approved flow diagram once more, now marked as wired. Report: the CI targeted and files written; the deploys the job hangs off; the chosen execution mode and the Testomat.io CI profile check result; what was skipped (no e2e / no Testomat.io CI profile); title scheme and rungroup; the battle-test outcome and the run awaiting the user's review; secrets and prerequisites still to provision; assumptions to confirm. Recommend committing the coverage map alongside the CI config.
173
+
174
+ ## Examples
175
+
176
+ **Example 1 — mixed project, preview and post-merge deploys, Testomat.io CI profile**
177
+ Discovery finds manual cases, an e2e suite, a per-PR preview deploy and a deploy to staging on the mainline; MCP lists the Testomat.io CI profiles and the user picks the one running the e2e suite. → The profile is proven with an unfiltered `run --remote` and a check that a job started, the diagram is approved, then the same job is added to both deploy pipelines: get the PR, `start --kind detect` with the coverage filter for that deploy's range, launch remotely against that deploy's URL. Two runs per PR — one on the preview, one on staging. Comment pipe enabled.
178
+
179
+ **Example 2 — e2e lives in another repo, no Testomat.io CI profile**
180
+ The user picks cross-repo dispatch from the mode table: the same job creates the run, then triggers the e2e repo's pipeline via the CI's native mechanism, passing the run id so results land in it. Note the Testomat.io CI profile option as the simpler future path.
181
+
182
+ **Example 3 — no coverage map yet**
183
+ No `coverage*.yml` found → explain nothing can be filtered without a map; delegate to `qa-test-code-coverage`; wire CI only after the map exists.
184
+
185
+ **Example 4 — manual-only project**
186
+ `scan-automation-project` finds `.test.md` cases and no e2e framework → the flows diagram shows only the manual branch; no execution-mode question asked. The job resolves the PR and creates the run, complete at creation — testers start on Testomat.io against the deployed change. Explain that launching needs an e2e suite first.
187
+
188
+ ## Related skills
189
+
190
+ `setup-ci-automation` (CI investigation, authoring rules, secrets, PR delivery), `run-tests-with-testomatio-reporter` (the reporter commands every job executes), `qa-test-code-coverage` (creates the coverage map this skill consumes), `scan-automation-project` (mandatory discovery), `qa-e2e-tests-reporting` (install the reporter if the project has no Testomat.io integration yet), `sync-test-cases-with-tms` (manual cases not yet in Testomat.io).
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: setup-ci-automation
3
+ description: Investigate a project's CI and deploy new automated QA workflows into it. Explains what the existing workflows do — with a diagram — and wires QA tasks to run on repository events, like generating test cases when a PR opens, QA-analyzing new issues, or scheduling suite cleanups. Use when the user asks what their CI does, wants a CI workflow explained or reviewed, or wants a QA task to run automatically in CI.
4
+ license: MIT
5
+ metadata:
6
+ author: Testomat.io
7
+ version: 1.0.0
8
+ ---
9
+
10
+ # Setup CI Automation
11
+
12
+ I work with a project's CI: find out what runs there today, explain it, and add new workflows that automate QA tasks on repository events. What a new workflow *does* comes from the skill that owns the task — this skill owns getting it into CI correctly.
13
+
14
+ ## Critical Constraints
15
+
16
+ - **Only touch CI config files** — never source or test files.
17
+ - **Never invent the commands a job runs** — take the payload from the skill that owns the task, or from the user.
18
+ - The finished result is CI configuration delivered through a PR — never pushed straight to the default branch.
19
+ - Secrets live in the CI's secret store, never in config files.
20
+
21
+ ## Workflow
22
+
23
+ ### Step 1 — Investigate the CI
24
+
25
+ - Read the repo's CI config files to identify the CI system; several or none → ask which one to target.
26
+ - Inventory the existing workflows: trigger, jobs, and purpose of each — new automation must fit in, not duplicate or break what's there.
27
+ - Note the primitives this CI offers: secret store, value passing between jobs and pipelines, cross-pipeline triggers, deploy events.
28
+
29
+ ### Step 2 — Explain with a diagram
30
+
31
+ When the environment renders Mermaid, present a workflow — existing or proposed — as a flowchart: trigger → verb-first action blocks → outcome. Decisions are diamond questions; configuration details go in the text below the diagram, never as blocks.
32
+
33
+ - Never post a diagram bare — follow it with one short paragraph: what the workflow does and what the user is deciding.
34
+ - A proposed workflow's diagram is an approval gate — wire nothing until the user accepts it.
35
+
36
+ ### Step 3 — Design the new workflow
37
+
38
+ - Pin down the triggering event, the task to run, and where its result goes.
39
+ - The task's commands come from the skill that owns it (ideas below); this skill contributes only the CI wiring.
40
+ - A task performed by an AI agent needs that agent runnable in CI — ❓ ask how the project runs its agent there; never fabricate an install.
41
+ - Confirm the design with its diagram (Step 2) before writing config.
42
+
43
+ ### Step 4 — Author the workflow
44
+
45
+ - Write the CI's own syntax for the CI in front of you; never copy another CI's file shape.
46
+ - Keep each job to its task command plus the CI's native primitives — no log parsing, no shell-strictness preambles, no wrapper bash around the command.
47
+ - A job that diffs or walks history uses the CI checkout's full-history option — no manual fetch commands.
48
+ - A job reacting to a merged change checks out the exact revision that landed on the mainline — the branch tip moves as later merges land.
49
+ - Automation jobs never block a PR and never fail a merge or release pipeline.
50
+
51
+ ### Step 5 — Provision secrets
52
+
53
+ - Testomat.io project API key: store as `TESTOMATIO_<project-slug>` in the CI's secret store, mapped to the `TESTOMATIO` env var in every job that needs it.
54
+ - Tell the user exactly where to add each secret — the secret-store location this CI uses for this repo and the exact name to type.
55
+ - ❓ Ask the user to confirm secrets are in place before the workflow's PR merges — missing secrets fail the first run.
56
+
57
+ ### Step 6 — Deliver through a PR
58
+
59
+ - Commit the CI config on a branch and open a PR through the project's normal flow.
60
+ - PR description: the workflow diagram, what it automates, and the secrets or prerequisites reviewers must provision before merging.
61
+ - Where the CI runs PR-triggered workflows from the branch itself, point out that this PR will exercise the new workflow.
62
+
63
+ ## Automation ideas
64
+
65
+ Tasks worth wiring to CI events — the named skill owns each task's content:
66
+
67
+ | Event | Automation | Task owner |
68
+ | ------------- | ----------------------------------------------------------- | ---------------------------------------------------- |
69
+ | PR opened | Generate test cases from the PR diff | `pull-request-diff-analyzer` + `qa-write-test-cases` |
70
+ | Issue opened | QA-analyze the feature — edge cases, acceptance criteria | `qa-thinking` |
71
+ | Deploy done | Create a scoped test run, launch affected tests | `setup-change-aware-pr-testing` |
72
+ | Schedule | Detect duplicate or overlapping test cases | `detect-duplicate-test-cases` |
73
+
74
+ ## Related skills
75
+
76
+ `setup-change-aware-pr-testing` (the coverage-driven PR testing workflow built on this skill), `run-tests-with-testomatio-reporter` (reporter commands for run-related jobs), `testing-workflow` (routes QA tasks to the skills that own them).