From 38f85477d5e60ec9fb358997ac85ac68018f9576 Mon Sep 17 00:00:00 2001 From: gololdf1sh Date: Tue, 21 Apr 2026 17:33:36 +0300 Subject: [PATCH 1/5] Add create-test-cases skill with worked example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deep, feature-first manual test-case authoring skill. Complements the existing generate-test-cases skill by offering a heavier workflow: - Two-phase flow: one feature phase produces shared baselines (_shared-ui.md, _ac-baseline.md, _existing-steps.md, destructuring map), each sub-feature then runs in its own conversation as a thin slice (ac-delta, ui-delta, scope) + generation + report. - Resume Detector pre-step — scans disk, derives $RESUME_FROM from 7 states, never re-does finished work. - Subagent fan-out — Playwright exploration, mechanical self-review (>=15 tests), and UI reality check all run in isolated contexts and return 1-line summaries so the parent conversation stays clean. - Artifact-driven contracts — every step declares precondition, input, output, postcondition, idempotency, and retry policy. Includes a full worked example under examples/: - examples/flow-diagram.md — ASCII diagram of the full flow. - examples/generatedTests/ — real run output for Testomat.io's Manual Tests Execution feature (10 sub-features, feature- and sub-feature- level artifacts, nested test-case MDs). - examples/generatedDocs/ — downstream BA-style product documentation derived from the test cases (use cases, business rules, state diagrams, traceability matrix) — illustrates what's possible once a solid test-case baseline exists. Publishing is intentionally not part of this skill — approved MDs are handed off to sync-cases (or local /publish-test-cases-batch, not yet in this repo). --- README.md | 1 + .../test-management/skills/create-test-cases | 1 + skills/create-test-cases/CLAUDE.md | 38 + skills/create-test-cases/SKILL.md | 174 ++++ skills/create-test-cases/examples/README.md | 33 + .../examples/flow-diagram.md | 66 ++ .../generatedDocs/01-feature-context.md | 76 ++ .../02-actors-and-permissions.md | 104 +++ .../examples/generatedDocs/03-glossary.md | 314 ++++++++ .../examples/generatedDocs/04-data-model.md | 149 ++++ .../generatedDocs/05-state-diagrams.md | 197 +++++ .../generatedDocs/06-use-cases/README.md | 102 +++ .../06-use-cases/UC-01-create-manual-run.md | 205 +++++ .../06-use-cases/UC-02-create-mixed-run.md | 120 +++ .../UC-03-execute-test-in-runner.md | 177 +++++ .../06-use-cases/UC-04-finish-run.md | 128 +++ .../06-use-cases/UC-05-relaunch-run.md | 156 ++++ .../06-use-cases/UC-06-assign-testers.md | 162 ++++ .../UC-07-configure-environments.md | 136 ++++ .../06-use-cases/UC-08-manage-rungroup.md | 189 +++++ .../UC-09-bulk-status-in-runner.md | 130 +++ .../06-use-cases/UC-10-manage-runs-list.md | 217 +++++ .../06-use-cases/UC-11-view-run-report.md | 211 +++++ .../UC-12-archive-unarchive-purge.md | 218 +++++ .../generatedDocs/07-business-rules.md | 180 +++++ .../08-functional-requirements.md | 160 ++++ .../generatedDocs/09-process-flows.md | 221 ++++++ .../examples/generatedDocs/10-ui-catalog.md | 285 +++++++ .../examples/generatedDocs/11-integrations.md | 154 ++++ .../generatedDocs/12-non-functional.md | 234 ++++++ .../generatedDocs/13-open-questions.md | 233 ++++++ .../examples/generatedDocs/CONTRIBUTING.md | 109 +++ .../examples/generatedDocs/README.md | 88 ++ .../_generated/traceability-matrix.md | 317 ++++++++ .../generatedDocs/scripts/gen-traceability.ts | 392 +++++++++ .../generatedDocs/templates/adr-template.md | 16 + .../templates/business-rule-template.md | 15 + .../templates/use-case-template.md | 46 ++ .../examples/generatedTests/_ac-baseline.md | 164 ++++ .../generatedTests/_existing-steps.md | 25 + .../generatedTests/_feature-review.md | 213 +++++ .../examples/generatedTests/_shared-ui.md | 401 ++++++++++ .../examples/generatedTests/_style.md | 110 +++ .../archive-and-purge-ac-delta.md | 72 ++ .../archive-and-purge-review.md | 135 ++++ .../generatedTests/archive-and-purge-scope.md | 73 ++ .../archive-and-purge-ui-delta.md | 344 ++++++++ .../archive-and-purge-validation-log.md | 14 + .../archive-and-purge/archive-pages.md | 259 ++++++ .../archive-and-purge/permissions.md | 104 +++ .../archive-and-purge/restore-and-delete.md | 220 +++++ .../archive-and-purge/retention-settings.md | 148 ++++ .../archive-and-purge/run-actions.md | 274 +++++++ .../archive-and-purge/run-state-behavior.md | 161 ++++ .../archive-and-purge/rungroup-cascade.md | 156 ++++ .../bulk-status-actions-ac-delta.md | 53 ++ .../bulk-status-actions-review.md | 59 ++ .../bulk-status-actions-scope.md | 62 ++ .../bulk-status-actions-ui-delta.md | 236 ++++++ .../bulk-status-actions-validation-log.md | 14 + .../bulk-status-application.md | 218 +++++ .../bulk-status-actions/cross-cutting.md | 115 +++ .../bulk-status-actions/multi-select-mode.md | 84 ++ .../selection-mechanics.md | 85 ++ .../examples/generatedTests/destructuring.md | 164 ++++ .../environment-configuration-ac-delta.md | 72 ++ .../environment-configuration-review.md | 100 +++ .../environment-configuration-scope.md | 108 +++ .../environment-configuration-ui-delta.md | 171 ++++ .../group-management.md | 232 ++++++ .../launch-variants.md | 116 +++ .../modal-lifecycle.md | 150 ++++ .../validation-and-edge.md | 154 ++++ .../examples/generatedTests/intake.md | 17 + .../generatedTests/run-creation-ac-delta.md | 85 ++ .../generatedTests/run-creation-review.md | 157 ++++ .../generatedTests/run-creation-scope.md | 76 ++ .../generatedTests/run-creation-ui-delta.md | 189 +++++ .../run-creation-validation-log.md | 22 + .../run-creation/cross-cutting.md | 196 +++++ .../run-creation/dialog-lifecycle.md | 183 +++++ .../run-creation/entry-points-and-extras.md | 131 +++ .../run-creation/form-fields.md | 295 +++++++ .../run-creation/launch-and-save.md | 220 +++++ .../run-creation/scope-selection.md | 297 +++++++ .../run-detail-and-report-ac-delta.md | 61 ++ .../run-detail-and-report-review.md | 48 ++ .../run-detail-and-report-scope.md | 136 ++++ .../run-detail-and-report-ui-delta.md | 519 ++++++++++++ .../run-detail-and-report/compare-runs.md | 184 +++++ .../exports-and-sharing.md | 326 ++++++++ .../navigation-and-header.md | 193 +++++ .../run-detail-and-report/report-overview.md | 209 +++++ .../statistics-and-defects.md | 154 ++++ .../run-detail-and-report/test-sub-panel.md | 230 ++++++ .../run-detail-and-report/tests-tab.md | 301 +++++++ .../generatedTests/run-groups-ac-delta.md | 91 +++ .../generatedTests/run-groups-review.md | 89 +++ .../generatedTests/run-groups-scope.md | 152 ++++ .../generatedTests/run-groups-ui-delta.md | 341 ++++++++ .../run-groups-validation-log.md | 34 + .../run-groups/archive-and-purge.md | 156 ++++ .../run-groups/contents-and-runs.md | 147 ++++ .../run-groups/detail-and-reports.md | 215 +++++ .../run-groups/group-lifecycle.md | 234 ++++++ .../generatedTests/run-groups/menu-actions.md | 164 ++++ .../generatedTests/run-lifecycle-ac-delta.md | 67 ++ .../generatedTests/run-lifecycle-review.md | 126 +++ .../generatedTests/run-lifecycle-scope.md | 85 ++ .../generatedTests/run-lifecycle-ui-delta.md | 247 ++++++ .../run-lifecycle-validation-log.md | 36 + .../run-lifecycle/advanced-relaunch.md | 205 +++++ .../run-lifecycle/basic-relaunch.md | 112 +++ .../run-lifecycle/cross-cutting.md | 151 ++++ .../run-lifecycle/edit-ongoing-run.md | 194 +++++ .../run-lifecycle/finish-run.md | 88 ++ .../run-lifecycle/launch-and-continue.md | 120 +++ .../runs-list-management-ac-delta.md | 50 ++ .../runs-list-management-review.md | 163 ++++ .../runs-list-management-scope.md | 89 +++ .../runs-list-management-ui-delta.md | 372 +++++++++ .../runs-list-management-validation-log.md | 36 + .../runs-list-management/chart-and-toolbar.md | 217 +++++ .../runs-list-management/cross-cutting.md | 119 +++ .../filter-tabs-and-view.md | 255 ++++++ .../runs-list-management/multi-select.md | 242 ++++++ .../runs-list-management/row-extra-menu.md | 233 ++++++ .../runs-list-management/tql-query-editor.md | 249 ++++++ .../test-execution-runner-ac-delta.md | 67 ++ .../test-execution-runner-review.md | 126 +++ .../test-execution-runner-scope.md | 81 ++ .../test-execution-runner-ui-delta.md | 254 ++++++ .../test-execution-runner-validation-log.md | 47 ++ .../test-execution-runner/attachments.md | 191 +++++ .../test-execution-runner/cross-cutting.md | 120 +++ .../detail-pane-and-tree.md | 216 +++++ .../test-execution-runner/notes.md | 147 ++++ .../test-execution-runner/result-entry.md | 245 ++++++ .../step-by-step-markings.md | 103 +++ .../test-execution-runner/time-tracking.md | 91 +++ .../tester-assignment-ac-delta.md | 58 ++ .../tester-assignment-review.md | 104 +++ .../generatedTests/tester-assignment-scope.md | 75 ++ .../tester-assignment-ui-delta.md | 221 ++++++ .../tester-assignment-validation-log.md | 35 + .../auto-assign-strategies.md | 231 ++++++ .../creation-dialog-assignment.md | 207 +++++ .../tester-assignment/cross-cutting.md | 167 ++++ .../tester-assignment/edit-run-assignment.md | 239 ++++++ .../runner-assignment-paths.md | 308 +++++++ skills/create-test-cases/intake-examples.md | 56 ++ .../create-test-cases/intake-questionnaire.md | 177 +++++ .../create-test-cases/references/artifacts.md | 750 ++++++++++++++++++ .../references/destructuring.md | 127 +++ .../references/product-context.md | 54 ++ .../references/self-review-checks.md | 321 ++++++++ .../references/test-case-format.md | 322 ++++++++ .../references/testing-strategy.md | 452 +++++++++++ .../references/troubleshooting.md | 66 ++ .../references/ui-catalog-format.md | 87 ++ skills/create-test-cases/steps/00-intake.md | 41 + .../steps/01-feature-phase.md | 153 ++++ .../steps/10-sub-feature-slice.md | 129 +++ skills/create-test-cases/steps/20-generate.md | 215 +++++ skills/create-test-cases/steps/40-report.md | 90 +++ 165 files changed, 26501 insertions(+) create mode 120000 plugins/test-management/skills/create-test-cases create mode 100644 skills/create-test-cases/CLAUDE.md create mode 100644 skills/create-test-cases/SKILL.md create mode 100644 skills/create-test-cases/examples/README.md create mode 100644 skills/create-test-cases/examples/flow-diagram.md create mode 100644 skills/create-test-cases/examples/generatedDocs/01-feature-context.md create mode 100644 skills/create-test-cases/examples/generatedDocs/02-actors-and-permissions.md create mode 100644 skills/create-test-cases/examples/generatedDocs/03-glossary.md create mode 100644 skills/create-test-cases/examples/generatedDocs/04-data-model.md create mode 100644 skills/create-test-cases/examples/generatedDocs/05-state-diagrams.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/README.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-01-create-manual-run.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-02-create-mixed-run.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-03-execute-test-in-runner.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-04-finish-run.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-05-relaunch-run.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-06-assign-testers.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-07-configure-environments.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-08-manage-rungroup.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-09-bulk-status-in-runner.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-10-manage-runs-list.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-11-view-run-report.md create mode 100644 skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-12-archive-unarchive-purge.md create mode 100644 skills/create-test-cases/examples/generatedDocs/07-business-rules.md create mode 100644 skills/create-test-cases/examples/generatedDocs/08-functional-requirements.md create mode 100644 skills/create-test-cases/examples/generatedDocs/09-process-flows.md create mode 100644 skills/create-test-cases/examples/generatedDocs/10-ui-catalog.md create mode 100644 skills/create-test-cases/examples/generatedDocs/11-integrations.md create mode 100644 skills/create-test-cases/examples/generatedDocs/12-non-functional.md create mode 100644 skills/create-test-cases/examples/generatedDocs/13-open-questions.md create mode 100644 skills/create-test-cases/examples/generatedDocs/CONTRIBUTING.md create mode 100644 skills/create-test-cases/examples/generatedDocs/README.md create mode 100644 skills/create-test-cases/examples/generatedDocs/_generated/traceability-matrix.md create mode 100644 skills/create-test-cases/examples/generatedDocs/scripts/gen-traceability.ts create mode 100644 skills/create-test-cases/examples/generatedDocs/templates/adr-template.md create mode 100644 skills/create-test-cases/examples/generatedDocs/templates/business-rule-template.md create mode 100644 skills/create-test-cases/examples/generatedDocs/templates/use-case-template.md create mode 100644 skills/create-test-cases/examples/generatedTests/_ac-baseline.md create mode 100644 skills/create-test-cases/examples/generatedTests/_existing-steps.md create mode 100644 skills/create-test-cases/examples/generatedTests/_feature-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/_shared-ui.md create mode 100644 skills/create-test-cases/examples/generatedTests/_style.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge/archive-pages.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge/permissions.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge/restore-and-delete.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge/retention-settings.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge/run-actions.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge/run-state-behavior.md create mode 100644 skills/create-test-cases/examples/generatedTests/archive-and-purge/rungroup-cascade.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions/bulk-status-application.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions/cross-cutting.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions/multi-select-mode.md create mode 100644 skills/create-test-cases/examples/generatedTests/bulk-status-actions/selection-mechanics.md create mode 100644 skills/create-test-cases/examples/generatedTests/destructuring.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration/group-management.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration/launch-variants.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration/modal-lifecycle.md create mode 100644 skills/create-test-cases/examples/generatedTests/environment-configuration/validation-and-edge.md create mode 100644 skills/create-test-cases/examples/generatedTests/intake.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation/cross-cutting.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation/dialog-lifecycle.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation/entry-points-and-extras.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation/form-fields.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation/launch-and-save.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-creation/scope-selection.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report/compare-runs.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report/exports-and-sharing.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report/navigation-and-header.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report/report-overview.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report/statistics-and-defects.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report/test-sub-panel.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-detail-and-report/tests-tab.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups/archive-and-purge.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups/contents-and-runs.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups/detail-and-reports.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups/group-lifecycle.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-groups/menu-actions.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle/advanced-relaunch.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle/basic-relaunch.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle/cross-cutting.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle/edit-ongoing-run.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle/finish-run.md create mode 100644 skills/create-test-cases/examples/generatedTests/run-lifecycle/launch-and-continue.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management/chart-and-toolbar.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management/cross-cutting.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management/filter-tabs-and-view.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management/multi-select.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management/row-extra-menu.md create mode 100644 skills/create-test-cases/examples/generatedTests/runs-list-management/tql-query-editor.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner/attachments.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner/cross-cutting.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner/detail-pane-and-tree.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner/notes.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner/result-entry.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner/step-by-step-markings.md create mode 100644 skills/create-test-cases/examples/generatedTests/test-execution-runner/time-tracking.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment-ac-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment-review.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment-scope.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment-ui-delta.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment-validation-log.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment/auto-assign-strategies.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment/creation-dialog-assignment.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment/cross-cutting.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment/edit-run-assignment.md create mode 100644 skills/create-test-cases/examples/generatedTests/tester-assignment/runner-assignment-paths.md create mode 100644 skills/create-test-cases/intake-examples.md create mode 100644 skills/create-test-cases/intake-questionnaire.md create mode 100644 skills/create-test-cases/references/artifacts.md create mode 100644 skills/create-test-cases/references/destructuring.md create mode 100644 skills/create-test-cases/references/product-context.md create mode 100644 skills/create-test-cases/references/self-review-checks.md create mode 100644 skills/create-test-cases/references/test-case-format.md create mode 100644 skills/create-test-cases/references/testing-strategy.md create mode 100644 skills/create-test-cases/references/troubleshooting.md create mode 100644 skills/create-test-cases/references/ui-catalog-format.md create mode 100644 skills/create-test-cases/steps/00-intake.md create mode 100644 skills/create-test-cases/steps/01-feature-phase.md create mode 100644 skills/create-test-cases/steps/10-sub-feature-slice.md create mode 100644 skills/create-test-cases/steps/20-generate.md create mode 100644 skills/create-test-cases/steps/40-report.md diff --git a/README.md b/README.md index 2ee0933..3ec95a4 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ AI skills for test management workflows with [Testomat.io](https://testomat.io). | Skill | Description | | ---------------------- | -------------------------------------------------------------------------------------------- | | `generate-test-cases` | Generate test cases and checklists from requirements, tickets, or feature descriptions | +| `create-test-cases` | Deep, feature-first manual test-case authoring with UI exploration, AC baselines, self-review gates, and worked examples | | `improve-test-cases` | Analyze and improve existing markdown test cases for clarity | | `find-duplicate-cases` | Find duplicate, near-duplicate, and overlapping test cases | | `sync-cases` | Synchronize Markdown test scenarios between local project and Testomat.io | diff --git a/plugins/test-management/skills/create-test-cases b/plugins/test-management/skills/create-test-cases new file mode 120000 index 0000000..ee54280 --- /dev/null +++ b/plugins/test-management/skills/create-test-cases @@ -0,0 +1 @@ +../../../skills/create-test-cases \ No newline at end of file diff --git a/skills/create-test-cases/CLAUDE.md b/skills/create-test-cases/CLAUDE.md new file mode 100644 index 0000000..351ee39 --- /dev/null +++ b/skills/create-test-cases/CLAUDE.md @@ -0,0 +1,38 @@ +# create-test-cases — Lessons Learned + +Non-obvious gotchas from real usage. Standard config is in SKILL.md. + +**Publishing:** use `/publish-test-cases-batch` (a separate skill — local for now, not yet part of this repo) — this skill never pushes. All publish/branch/label gotchas live in that skill's `references/api-reference.md`. Until it is published, you can use the Testomat.io CLI (`npx check-tests` / `@testomatio/reporter`) or the [`sync-cases`](../sync-cases/SKILL.md) skill to push approved MD to Testomat.io. + +## Intake: Check Feature Artifacts First + +Under the feature-first flow the Resume Detector (see SKILL.md § Pre-step) probes feature artifacts before Step 0 on every invocation. If the argument references a sub-feature by number (e.g., `#5 Time Tracking`) and `test-cases/{F}/destructuring.md` + `_ac-baseline.md` + `_shared-ui.md` already exist and are valid → the intake is effectively done; the detector routes straight into Step 2 (sub-feature slice) for the requested `S`. You do NOT re-run Q1-Q4. Confirm the resolved `{F, S}` with the user and proceed. + +If the feature artifacts are missing or partial → detector routes to Step 0 (intake) or Step 1 (feature phase) as appropriate. Never skip Step 1 just because an intake file exists — the feature phase produces `_shared-ui.md`, `_ac-baseline.md`, `_existing-steps.md`, and the destructuring map, all of which are required before any sub-feature slice can run. + +## Playwright Login — Credentials + +Always use: +- **Email:** `$TESTOMATIO_EMAIL` env var +- **Password:** `$TESTOMATIO_PASSWORD` env var +- Read via shell (`echo $TESTOMATIO_EMAIL`), then fill Playwright form +- **UI exploration:** pick a dedicated exploration project (e.g. `$TESTOMATIO_EXPLORATION_PROJECT`) — never explore against production data + +## Browser Traps (Playwright MCP) + +1. **Icon-only toolbar buttons** — use `aria-describedby` → popper content to identify +2. **Delete button proximity** — adjacent to extra menu button. Always verify button identity before clicking +3. **Detail panel blocks tree clicks** — press Escape to close the detail panel before clicking tree elements. Or use `browser_evaluate` to find and click elements programmatically +4. **Intercepted clicks on link buttons** — some link-styled buttons (e.g., Manual Run) can be intercepted by overlapping elements. If click fails with "intercepted pointer events", navigate directly to the target URL instead + +## Nested Suites + +1. **Multiple `` blocks in one file DO NOT nest** — parser uses single `currentSuite` variable, each block overwrites the previous. Creates duplicates and loses child names +2. **`## Steps` heading parsed as test** — when preceded by another heading, the parser treats `## Steps` as a test title, creating ghost test entries +3. **Directory structure is the only working approach** — `parent-dir/child.md` → `parent-dir` folder + child suite nested inside. Tested 2026-04-15 + +## MD Format Gotchas (affect generation, not publishing) + +- **`tags:` / `labels:` / `id:` in `` header** → server 422 on push → never include in generated MD. See [test-case-format.md](references/test-case-format.md). + +All publish/branch/label gotchas (Import Lock, `--sync` collisions, `TESTOMATIO_PREPEND_DIR`, branch UI verification, labels-on-branch 404, etc.) are owned by `/publish-test-cases-batch` (separate skill — local for now, not yet part of this repo) — see its `references/api-reference.md`. diff --git a/skills/create-test-cases/SKILL.md b/skills/create-test-cases/SKILL.md new file mode 100644 index 0000000..13f57f1 --- /dev/null +++ b/skills/create-test-cases/SKILL.md @@ -0,0 +1,174 @@ +--- +name: create-test-cases +description: Create manual test cases as local MD files (does not publish). MUST USE when asked to "create test cases", "cover feature with tests", "write test cases", generate checklist, or expand test coverage. Two-phase flow: feature phase runs once (gathers shared UI + AC baseline + destructuring map), sub-feature phase runs per suite (generates deep-coverage test cases). After generation, user publishes with a separate skill (e.g. `sync-cases`, or the local `/publish-test-cases-batch`). +license: MIT +metadata: + author: Testomat.io +allowed-tools: Read Grep Glob Write Bash Agent ToolSearch mcp__playwright__* mcp__testomatio__* mcp__github__* +effort: max +--- + +# CREATE-TEST-CASES SKILL + +Creates manual test cases as local MD files. **Does not publish** — publishing is a separate skill (`/publish-test-cases-batch` — local for now, not yet part of this repo; alternatively use [`sync-cases`](../sync-cases/SKILL.md)) invoked after MD is approved. + +**Argument:** $ARGUMENTS — Testomat suite URL or feature name + +**References:** [intake-questionnaire.md](intake-questionnaire.md) | [artifacts.md](references/artifacts.md) | [testing-strategy.md](references/testing-strategy.md) | [test-case-format.md](references/test-case-format.md) | [self-review-checks.md](references/self-review-checks.md) | [product-context.md](references/product-context.md) | [destructuring.md](references/destructuring.md) (feature-phase procedure) | [troubleshooting.md](references/troubleshooting.md) + +**Step contract template** — every step file declares this block so you can see at a glance what must exist before, what is produced, and whether it's safe to re-run: +- **Precondition:** artifacts that must exist and validate (refers to IDs in [artifacts.md](references/artifacts.md)) +- **Input:** values consumed from earlier artifacts / user +- **Output:** artifacts written (with ID) +- **Postcondition:** invariant that must hold after the step completes +- **Idempotent:** yes / no — can this step be re-run safely? +- **Retry policy:** what to do on transient failure; when to escalate + +--- + +## Hierarchy Model — Feature-First + +| Concept | Testomat Entity | Example | Branch | +|---------|----------------|---------|--------| +| **Feature** (main functionality) | Folder | Manual Test Execution | — | +| **Sub-feature** (part of feature) | Suite | Environment Configuration | `tc/{feature}/{suite-slug}` | +| **Sub-feature section** (mandatory when 2+ natural sections of ≥3 tests exist) | Nested suite | CRUD Operations (inside Environment Configuration) | same branch | +| **Test case** | Test | Select custom environment for a run | inside suite branch | + +**Feature-first architecture:** heavy gather-info runs ONCE per feature (Step 1 Feature Phase) and produces shared artifacts (`_ac-baseline.md`, `_shared-ui.md`, `_existing-steps.md`, `destructuring.md`). Each sub-feature then runs in its own conversation as a thin slice (Step 2) + generation (Step 3) + report (Step 4). This eliminates the AC/UI duplication that previously happened across sub-features. + +**Key rules:** +- **Folder = feature.** One folder per feature. The folder is created at publish time by your publisher of choice (e.g. local `/publish-test-cases-batch`, or [`sync-cases`](../sync-cases/SKILL.md)) — this skill only lays out the local `test-cases/{feature}/` directory. +- **Suite = sub-feature.** Each suite is a self-contained area of the feature with **full, deep coverage** at the depth chosen by Q2. See § Suite Depth Expectation. +- **Nested suites** are used when a sub-feature has multiple logical sections. Full rule: [self-review-checks.md § 8](references/self-review-checks.md#8-sub-suite-distribution). +- **Two-phase flow (always):** the feature phase (Step 1) runs once and HARD STOPs. Each sub-feature then runs the sub-feature phase (Steps 2-4) in a separate conversation. There is no "single-suite mode" — even a feature with one sub-feature runs the feature phase first, because the `_shared-ui.md` and `_ac-baseline.md` artifacts carry value even for a single suite. +- **MD only — publishing is a separate skill.** This skill never pushes to Testomat. After Step 4 the user runs the publisher (local `/publish-test-cases-batch` — not yet part of this repo; or [`sync-cases`](../sync-cases/SKILL.md)) with the saved path. +- **Whole-feature publish:** when all sub-feature checkboxes in `destructuring.md` flip to `[x]`, the user runs `/publish-test-cases-batch test-cases/{feature}/` (or equivalent) to push everything (one branch per suite: `tc/{feature}/{suite-slug}`). +- **Style carryover.** After the FIRST sub-feature is approved, Step 4 writes `test-cases/{F}/_style.md`. Subsequent sub-features read it FIRST in Step 3 Phase 2 so the whole feature stays stylistically consistent. See [references/artifacts.md § A-style](references/artifacts.md). + +### Sub-suite Distribution Rule + +Applied at end of Phase 1 Grouping pass — fully automatic, no user prompt. **Full rule, matrix, anti-patterns, and "what counts as a natural section":** [self-review-checks.md § 8](references/self-review-checks.md#8-sub-suite-distribution) (single source of truth). + +Short version: if **≥ 2 natural sections of ≥ 3 tests each** exist (after auto-merging undersized sections) → MUST be nested (directory of MD files). Otherwise flat. Total test count is not part of the decision. + +### Suite Depth Expectation + +Each sub-feature must receive full, deep coverage — not a thin slice. The feature phase (Step 1) provides `_ac-baseline.md` and `_shared-ui.md`. Each sub-feature phase adds its AC delta (Step 2.1), UI delta (Step 2.2), and generates tests (Step 3) that satisfy: + +- **AC coverage:** every AC in the combined pool — baseline ACs applicable to this sub-feature ∪ delta ACs — has ≥ 1 test citing it via `source:` (Gate 1, blocking) +- **Cross-cutting coverage:** every concern in destructuring.md that affects this sub-feature has ≥ 1 dedicated test (Gate 1b, blocking) +- **UI element coverage:** ≥ 80% cataloged elements (across shared + delta) appear in action steps (not only preconditions) +- **Scenario balance:** negative ≥ 20%, boundary ≥ 10%, happy ≤ 50% — thresholds are **shapes**, not quotas +- **Q2 shape:** smoke = happy paths only; balanced = + negatives + key edges; regression = + boundaries + state transitions + role combos + +**Test count is driven by coverage, not by a range.** Do NOT pad to hit a number. Do NOT cap to stay under a number. If a balanced sub-feature naturally produces 8 tests or 40 tests — both are correct as long as the points above are satisfied. Q2 picks the **shape** of coverage, not the size. + +--- + +## Checklist & Dispatch Table + +Every step lives in its own file under `steps/`. SKILL.md is a router: Resume Detector below determines the entry point; then load the step file for the current step only. + +| # | Step | File | Key output | Phase | +|---|---|---|---|---| +| ☐ | **Resume Detector** (below) | this file | `$RESUME_FROM` step pointer | — | +| 0 | Intake Questionnaire | [steps/00-intake.md](steps/00-intake.md) | A1 intake.md | feature | +| 1 | Feature Phase (heavy gather once) | [steps/01-feature-phase.md](steps/01-feature-phase.md) | A-shared-ui + A-base + A-steps + A2 | feature | +| 2 | Sub-feature Slice (thin) | [steps/10-sub-feature-slice.md](steps/10-sub-feature-slice.md) | A3 + A4 + A5 | sub-feature | +| 3 | Generate & Approve Test Cases | [steps/20-generate.md](steps/20-generate.md) | A6 test-cases.md | sub-feature | +| 4 | Final Report & Handoff | [steps/40-report.md](steps/40-report.md) | report printed; A2 progress updated; A-style captured on first approval; publish handoff | sub-feature | + +**HARD STOPs:** Step 1 ends with HARD STOP (feature phase → new conversation for first sub-feature). Step 4 ends with HARD STOP (sub-feature done → new conversation for next sub-feature). + +**Publishing is NOT part of this skill.** After Step 4, run your publisher — local `/publish-test-cases-batch {path}` (separate skill — not yet part of this repo) or [`sync-cases`](../sync-cases/SKILL.md). + +**Loading rule:** Read only the step file for the step you're currently executing, plus any referenced `references/*.md` files needed by its contract. Do NOT eagerly Read all step files at start of run. + +**Section-map loading (mandatory for large refs):** `references/testing-strategy.md`, `references/self-review-checks.md`, and `references/artifacts.md` each begin with a `## Section map` table listing the **START/END anchor patterns** (regex) for every section. When you need ONE section (e.g. "§ 2.3 balance thresholds" or "Gate 11"): + +```bash +awk '/^START_PATTERN/,/^END_PATTERN/' path/to/ref.md +``` + +Copy the two patterns from the section map, paste into the awk one-liner, run via Bash. This is the primary context-window savings in Step 2. **Never Read the whole file** when one section is enough. Anchors are immune to line-number drift — the section map stays valid as long as section headers keep their text. + +--- + +## Pre-step: Resume Detector + +Runs BEFORE Step 0 on every invocation. Single authoritative check replacing scattered "if exists skip" mentions elsewhere. + +### Contract +- **Precondition:** none +- **Input:** `$ARGUMENTS` (feature and optionally sub-feature); current working directory has `test-cases/` root +- **Output:** detector table printed to user; `$RESUME_FROM` step pointer in working memory +- **Postcondition:** user has seen which artifacts exist + chosen resume / restart / change path +- **Idempotent:** yes — pure read-only probe +- **Retry policy:** none — read errors bubble up as "artifact unreadable" + +### Procedure + +1. Derive `F` (feature-slug) and, if known from $ARGUMENTS, `S` (suite-slug from destructuring map) +2. Run the cheap validation commands from [artifacts.md](references/artifacts.md) for each artifact. **Do NOT Read the bodies** — only `head -20` or grep-based checks +3. Compute state via this decision tree (top-down, first match wins): + +| State | Trigger | Route | +|---|---|---| +| `empty` | A1 missing | Step 0 intake | +| `feature-partial` | A1 valid but any of A-shared-ui / A-base / A2 missing or invalid | Step 1 (feature phase) — resume at first missing substep | +| `feature-done, no sub-feature picked` | All feature artifacts valid, no `S` given and no unchecked sub-feature selected | Ask user which sub-feature to start (show map) | +| `feature-done, all sub-features [x]` | A2 has all rows `[x]` | Suggest `/publish-test-cases-batch test-cases/{F}/` | +| `sub-feature-partial` | `S` resolved; some of A3 / A4 / A5 missing or invalid | Step 2 — resume at first missing substep | +| `sub-feature-ready` | A3-A5 valid, A6 missing | Step 3 (generate) | +| `sub-feature-done` | A6 exists and valid | Ask: regenerate / next sub-feature / stop | + +4. Emit a **two-section** table to the user — feature-level + sub-feature-level: + +``` +Resume Detector — test-cases/{F} (sub-feature: {S or "—"}) + +Feature level: +| Artifact | Exists | Valid | +|---------------------------|--------|-------| +| A1 intake.md | Y | Y | +| A-shared-ui _shared-ui.md | Y | Y | +| A-base _ac-baseline.md | Y | Y | +| A-steps _existing-steps.md| Y | Y | +| A2 destructuring.md | Y | Y | +| A-style _style.md | - | - | + +Sub-feature level (S={S}): +| Artifact | Exists | Valid | +|-----------------------|--------|-------| +| A3 {S}-ac-delta.md | Y | Y | +| A4 {S}-ui-delta.md | Y | Y | +| A5 {S}-scope.md | Y | Y | +| A6 {S}-test-cases.md | N | - | +| A7 {S}-review.md | - | - | + +Suggested resume point: Step 3 (generate) + • feature + sub-feature slice complete — A6 missing +``` + +5. Ask user (one line): +``` +[Y] Resume from Step {N} [R] Restart from Step 0 [P] Pick a different sub-feature [B] Abort +``` + +6. Route: + - `Y` → Read the step file for Step {N} and continue + - `R` → DANGEROUS. Ask user what scope of reset: + - `sub-feature` → delete A3-A7 under `test-cases/{F}/` for the current `S` only (keeps feature artifacts) + - `feature` → delete everything under `test-cases/{F}/` (asks explicit confirmation naming the path) + Only run `rm` after explicit confirmation. + - `P` → ask which sub-feature from A2 map, set new `S`, re-run detector + - `B` → exit skill + +**Auto-advance rule:** if feature is complete, `S` is unambiguously determined (argument matches a sub-feature in A2), and sub-feature-ready state applies → skip confirmation prompt and auto-resume at Step 3. Log: `Auto-resumed at Step 3 — baselines + delta + scope present.` + +--- + +## Error Handling + +On any error (Playwright, push, MCP, partial run resume, blocking conditions) → see [troubleshooting.md](references/troubleshooting.md). It consolidates recoverable/blocking error matrix + Playwright browser traps + nested-suite parser gotchas. Load on demand, not eagerly. diff --git a/skills/create-test-cases/examples/README.md b/skills/create-test-cases/examples/README.md new file mode 100644 index 0000000..9b1b4bd --- /dev/null +++ b/skills/create-test-cases/examples/README.md @@ -0,0 +1,33 @@ +# `create-test-cases` — worked example + +This folder contains a real end-to-end run of the `create-test-cases` skill against the **Manual Tests Execution** feature of [Testomat.io](https://testomat.io). + +## What's inside + +| Folder / file | What it is | Produced by | +|---|---|---| +| [`flow-diagram.md`](./flow-diagram.md) | ASCII diagram of the full skill flow (feature phase → sub-feature phase → handoff), including subagent fan-out | — (reference) | +| [`generatedTests/`](./generatedTests/) | **Primary output of this skill** — full feature folder with 10 sub-feature suites, AC baseline, shared UI catalog, destructuring map, style carry-over, per-suite deltas, reviews, and nested test-case MD files | `/create-test-cases` | +| [`generatedDocs/`](./generatedDocs/) | **Downstream output** — BA-style product documentation derived from the test cases (feature context, actors & permissions, state diagrams, use cases, business rules, data model, process flows, integrations, traceability matrix). Demonstrates what else you can build once you have a solid test-case baseline. | downstream docs pipeline (example of what this skill enables) | + +## How to read it + +1. Start with [`flow-diagram.md`](./flow-diagram.md) to see the shape of the skill. +2. Open [`generatedTests/intake.md`](./generatedTests/intake.md) — the 5-answer questionnaire that seeded the whole run. +3. Then [`generatedTests/destructuring.md`](./generatedTests/destructuring.md) — the sub-feature map + cross-cutting concerns that drove decomposition. +4. Pick any sub-feature folder (e.g. [`environment-configuration/`](./generatedTests/environment-configuration/)) and read in order: + - `environment-configuration-ac-delta.md` — ACs specific to this sub-feature + - `environment-configuration-ui-delta.md` — UI elements specific to this sub-feature + - `environment-configuration-scope.md` — scope contract approved by the user before generation + - nested `*.md` test-case files — the actual test cases + - `environment-configuration-review.md` — automated self-review report +5. Finally, browse [`generatedDocs/`](./generatedDocs/) to see how the same feature looks as BA documentation — an illustration of what's possible once the test-case baseline exists. + +## Scale of this example + +- **1 feature** (manual-tests-execution) +- **10 sub-features** (run-creation, test-execution-runner, tester-assignment, environment-configuration, run-groups, run-lifecycle, runs-list-management, run-detail-and-report, archive-and-purge, bulk-status-actions) +- Feature-level artifacts: `intake.md`, `_ac-baseline.md`, `_shared-ui.md`, `_existing-steps.md`, `destructuring.md`, `_style.md`, `_feature-review.md` +- Per sub-feature: ac-delta, ui-delta, scope, review, validation log, plus either a flat test-case MD or a nested directory with multiple MD files + +Feel free to open any individual file — they are fully self-contained and illustrate the artifact contracts described in [`../references/artifacts.md`](../references/artifacts.md). diff --git a/skills/create-test-cases/examples/flow-diagram.md b/skills/create-test-cases/examples/flow-diagram.md new file mode 100644 index 0000000..5906f33 --- /dev/null +++ b/skills/create-test-cases/examples/flow-diagram.md @@ -0,0 +1,66 @@ +### Full flow diagram + +Main flow on the left, subagents block on the right. The `═══▶` arrows show which step spawns which subagent; the subagent runs in **its own isolated context** and returns a **1-line summary** to the parent conversation. + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ PRE-STEP — Resume Detector │ +│ Runs BEFORE every step. Scans disk without reading file bodies. │ +│ Derives $RESUME_FROM from 7 states: empty / feature-partial / │ +│ feature-done / sub-feature-partial / sub-feature-ready / │ +│ sub-feature-done / all-features-done. │ +└──────────────────────────────────────────────────────────────────┘ + │ + ▼ +┌──────────────────────────────────────────────────────────────────┐ ╔══════════════════════════════════╗ +│ FEATURE PHASE (ONE conversation — ends with HARD STOP) │ ║ SUBAGENTS (isolated contexts) ║ +│ Produces shared baselines consumed by every sub-feature. │ ║ ║ +│ │ ║ ┌────────────────────────────┐ ║ +│ Step 0 Intake questionnaire (5 questions, one at a time) │ ║ │ 🧭 ui-explorer │ ║ +│ → intake.md │ ║ │ mode: feature-baseline │ ║ +│ │ ║ │ — Playwright walkthrough │ ║ +│ Step 1 Gather feature data (in parallel) │ ║ │ — browser_snapshot ×N │ ║ +│ 1.1 UI exploration of the whole feature ══════════════════╪══════╪═▶│ — write _shared-ui.md │ ║ +│ → _shared-ui.md + sub-feature candidates │ ║ │ ← "Cataloged 8 surfaces" │ ║ +│ 1.2 Extract ACs from docs (MCP / WebFetch / paste) │ ║ └────────────────────────────┘ ║ +│ → _ac-baseline.md │ ║ ║ +│ 1.3 Existing-steps library (optional) │ ║ ┌────────────────────────────┐ ║ +│ → _existing-steps.md │ ║ │ 🧭 ui-explorer │ ║ +│ 1.4 Destructuring + cross-cutting concerns │ ║ │ mode: sub-feature-delta │ ║ +│ → destructuring.md │ ║ │ — reads _shared-ui.md │ ║ +│ 1.5 Single user-approval gate ⛔ HARD STOP │ ║ │ — catalog ONLY delta │ ║ +└──────────────────────────────────────────────────────────────────┘ ║ │ — write {S}-ui-delta.md │ ║ + │ ║ │ ← "4 delta surfaces" │ ║ + ▼ (new conversation per sub-feature) ║ └────────────────────────────┘ ║ +┌──────────────────────────────────────────────────────────────────┐ ║ ║ +│ SUB-FEATURE PHASE (ONE conversation per sub-feature, ×N) │ ║ ┌────────────────────────────┐ ║ +│ │ ║ │ ✅ test-case-reviewer │ ║ +│ Step 2 Thin slice │ ║ │ ONLY if tests ≥ 15 │ ║ +│ 2.1 AC delta for the sub-feature → {S}-ac-delta.md │ ║ │ — 12 Bash gates │ ║ +│ 2.2 UI delta → {S}-ui-delta.md ═════╪══════╪═▶│ — 11 semantic checks │ ║ +│ 2.3 AC↔UI cross-validation (no file) │ ║ │ — auto-fix safe items │ ║ +│ 2.4 Scope contract + user gate → {S}-scope.md │ ║ │ — violations report │ ║ +│ │ ║ │ ← "Found 4, fixed 3, │ ║ +│ Step 3 Generate │ ║ │ escalated 1" │ ║ +│ Phase 0 Feed cross-cutting concerns from destructuring.md │ ║ └────────────────────────────┘ ║ +│ Phase 1 Checklist + flat-vs-nested decision │ ║ ║ +│ Phase 2 Full test cases │ ║ ┌────────────────────────────┐ ║ +│ (reads _style.md if present) │ ║ │ 🔍 ui-validator │ ║ +│ Phase 3a Mechanical checks ═══════════════════════════════╪══════╪═▶│ — Playwright walkthrough │ ║ +│ < 15 tests: inline │ ║ │ — pick 2-3 repr. tests │ ║ +│ ≥ 15 tests: test-case-reviewer subagent │ ║ │ — verify vs. real UI │ ║ +│ Phase 3b UI reality check ════════════════════════════════╪══════╪═▶│ — edit MD inline on fix │ ║ +│ (mandatory) │ ║ │ — separate audit log │ ║ +│ Phase 4 Single user-approval gate │ ║ │ ← "Walked 3, fixed 2" │ ║ +│ │ ║ └────────────────────────────┘ ║ +│ Step 4 Report + update tracker in destructuring.md │ ║ ║ +│ + write _style.md (ONLY on 1st approval) ⛔ HARD STOP │ ║ Principle: ║ +└──────────────────────────────────────────────────────────────────┘ ║ • parent spawns via Agent() ║ + │ ║ • Playwright / heavy dumps ║ + ▼ (when ALL sub-features in destructuring.md [x])║ live inside the subagent ║ +┌──────────────────────────────────────────────────────────────────┐ ║ • parent sees 1 summary line ║ +│ HANDOFF │ ║ — context stays clean ║ +│ /publish-test-cases-batch test-cases/{F}/ │ ╚══════════════════════════════════╝ +│ (separate skill — one branch per sub-feature: tc/{F}/{S}) │ +└──────────────────────────────────────────────────────────────────┘ +``` diff --git a/skills/create-test-cases/examples/generatedDocs/01-feature-context.md b/skills/create-test-cases/examples/generatedDocs/01-feature-context.md new file mode 100644 index 0000000..2447ec3 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/01-feature-context.md @@ -0,0 +1,76 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 01 — Feature Context + +## Goal + +**Manual Tests Execution** lets a team run manually-maintained test cases against a product build, record per-test outcomes, and produce reports that feed release decisions. It spans the full lifecycle from creating a Run to archiving and purging it, including variants that mix manual and automated tests and multi-environment orchestration. + +The product promise, reduced to one sentence: + +> A tester can take a curated set of tests, execute them against a chosen environment (or several), record structured results, and hand off a trustworthy report — without leaving Testomat.io. + +## In scope + +The POC docs cover ten sub-features (decomposition source: [destructuring.md](../../../test-cases/manual-tests-execution/destructuring.md)): + +| # | Sub-feature | One-line purpose | +|---|---|---| +| 1 | **run-creation** | "New Manual Run" dialog — scope modes, fields, Launch/Save/Cancel, validation. | +| 2 | **test-execution-runner** | Manual Runner UI — PASSED/FAILED/SKIPPED, result message, attachments, custom status, step-by-step. | +| 3 | **tester-assignment** | Assigning testers to run / suite / test + Auto-Assign strategies. | +| 4 | **environment-configuration** | Multi-env modal + run modes (One Run / Launch in Sequence / Launch All). | +| 5 | **run-groups** | Creating / managing RunGroups, Combined Report, Copy Group, archive cascade. | +| 6 | **run-lifecycle** | Start → Continue → Finish Run → Relaunch variants + Advanced Relaunch matrix. | +| 7 | **runs-list-management** | Runs Dashboard — filter tabs, row actions, multi-select, Pin, Custom View, TQL. | +| 8 | **run-detail-and-report** | Run Detail + Basic/Extended Report + downloads + sharing + Compare. | +| 9 | **archive-and-purge** | Archive / Unarchive / Purge / retention / Archive pages. | +| 10 | **bulk-status-actions** | Multi-select bulk Result message / Status in the Manual Runner. | + +For each sub-feature's owned / not-owned boundaries, cross-cutting concerns (A–H), and recommended execution order, see [destructuring.md § Sub-feature map](../../../test-cases/manual-tests-execution/destructuring.md#sub-feature-map). This document does not re-derive that decomposition; it references it. + +## Out of scope (for these docs) + +- **Automated-only execution paths** beyond the Manual Runner's Mixed Run surface. CI orchestration internals, reporter library behaviour, and CI integrations are referenced — not documented — and only where they cross into the manual surface (AC-15..18, `run-creation-ac-delta.md`). +- **Settings → Environments** page configuration (site-wide). Consumed by run-creation (AC-44..47), documented there only as a precondition. +- **Project / Workspace / Billing settings** that gate features (Sharing, Require RunGroup, Purge retention) — referenced as preconditions only, not specified end-to-end. +- **Public-docs audience.** No executive summaries, no Support-style FAQ, no user guides. +- **Custom Statuses configuration.** The Runner's *use* of custom statuses is in scope; their *creation* in Settings is not (only referenced as a precondition). +- **TQL grammar full specification.** Referenced as a query surface in #7; grammar lives in [11-integrations.md](./11-integrations.md) at Phase 2. + +## Non-goals of this POC (from the execution plan) + +- No TL;DR / executive-summary layers — audience is technical. +- No FAQ for Support-style questions. +- No full ADR ceremony — light template only, for non-obvious decisions. +- No attempt to replace public docs at `github.com/testomatio/docs`. +- No screenshots in POC; Mermaid + text only. +- No static-site deploy (MkDocs / Docusaurus / Confluence). + +## Decomposition rationale (short) + +The ten-sub-feature split in `destructuring.md` optimises for *ownership clarity*, not UI navigation: each sub-feature owns a coherent slice of behaviour that a single UC series can describe without constant cross-references. Cross-cutting concerns (A–H) are the points where sub-features must *coordinate*: + +- **A. Multi-environment** — environment-configuration drives, but runs-list-management, run-detail-and-report, and run-lifecycle all have to render grouped results. +- **B. Multi-user assignment** — tester-assignment owns the canonical tests; everyone else consumes pre-assigned state. +- **C. RunGroup membership** — run-groups owns creation, archive cascade cuts into archive-and-purge, list filter cuts into runs-list-management. +- **D. Run-as-checklist** — a one-line creation toggle that cascades into runner UX. +- **E. Custom statuses** — one surface (runner) + two consumers (list filter, report column). +- **F. Filter-applied scope** — a selection-rule constraint shared by runner, Advanced Relaunch, and bulk actions. +- **G. Ongoing vs Finished state** — gates virtually every action; the backbone of the state diagrams. +- **H. Bulk multi-select mode** — a mode, not a feature — two surfaces (Runs list, Runner) with divergent toolbars. + +UCs in Phase 1+ will be organised around the sub-feature map, but each will name the cross-cutting concerns it touches so the coordination points stay visible. + +## Related documents + +- [02-actors-and-permissions.md](./02-actors-and-permissions.md) — who may do what. +- [05-state-diagrams.md](./05-state-diagrams.md) — the state machines this feature operates over. +- [03-glossary.md](./03-glossary.md) — domain vocabulary. +- [destructuring.md](../../../test-cases/manual-tests-execution/destructuring.md) — authoritative decomposition. +- [intake.md](../../../test-cases/manual-tests-execution/intake.md) — depth and source decisions (regression depth; docs + UI sources). diff --git a/skills/create-test-cases/examples/generatedDocs/02-actors-and-permissions.md b/skills/create-test-cases/examples/generatedDocs/02-actors-and-permissions.md new file mode 100644 index 0000000..f082721 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/02-actors-and-permissions.md @@ -0,0 +1,104 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 02 — Actors and Permissions + +This page captures **who can do what** across Manual Tests Execution. Role semantics below are compiled from the AC baseline and sub-feature deltas; rows marked as *unverified* track known ambiguities (AC-100, sub-feature deltas noting `@unclear`). Those will be resolved in Phase 1 via UI verification and migrated out of this doc into [13-open-questions.md](./13-open-questions.md). + +## Roles + +| Role | Description | +|---|---| +| **Owner** | Highest permission tier on a project; full access to every run-related action and to project-level settings that gate behaviour (Require RunGroup, Purge retention, Sharing). | +| **Manager** | Team manager role. Assigns others and administers runs. **Excluded from random auto-assignment** of tests (see [BR candidate](#manager-auto-assign-exclusion)). | +| **QA Creator** | The role primarily responsible for creating and launching runs. In this POC treated as equivalent to "standard QA user with write access." | +| **Tester** | Executes tests inside a run; records results; may be any user assigned to a run (including the creator). | +| **Readonly** | Project observer; cannot create, mutate, archive, purge, or assign. | + +> **Convention.** "Creator" refers to the user who created a specific run (AC-37). Creator is an *assignment* attribute on a run, not a role on the project; any non-readonly user can be a creator. + +## Action catalogue + +The product surface distils to nine write actions + several read/observe surfaces: + +| Action | Definition | +|---|---| +| **Create (Run)** | Fill the New Manual Run dialog and submit Save (not launched yet). | +| **Launch (Run)** | Submit the dialog with Launch — transitions the run to In-Progress. | +| **Finish (Run)** | Transition an in-progress run to Finished via the Finish Run button + confirmation. | +| **Edit (Run)** | Modify an unfinished run's Assign to / Title / Environment / Description / tests. | +| **Relaunch (Run)** | Invoke any Relaunch variant (Basic, Failed-on-CI, All-on-CI, Manually, Advanced, Launch a Copy). | +| **Assign (user → run / suite / test)** | Add or remove testers on the run, on a suite inside the runner, or on tests via Multi-Select. | +| **Bulk Status** | In-runner bulk Result message / status application across selected tests. | +| **Archive / Unarchive** | Move a run or RunGroup to/from the Archive. | +| **Purge** | Compressed irreversible archival; moves the run to Archive with a *Purged* badge. | +| **Permanent delete** | From the Archive — irreversible removal; tracked in Pulse. | + +## Role × Action matrix + +✓ = permitted · ✗ = not permitted · ? = *unverified — to resolve in Phase 1* (tracked against AC-100 and the sub-feature deltas noting `@unclear`). + +| Action | Owner | Manager | QA Creator | Tester | Readonly | Source | +|---|:-:|:-:|:-:|:-:|:-:|---| +| Create a Run | ✓ | ✓ | ✓ | ? | ✗ | AC-1..8, AC-11..12 | +| Launch a Run | ✓ | ✓ | ✓ | ? | ✗ | AC-8, AC-23 | +| Edit an unfinished Run | ✓ | ✓ | ✓ | ? | ✗ | AC-27 | +| Finish a Run | ✓ | ✓ | ✓ | ? | ✗ | AC-25, AC-28 | +| Execute (record result on a test) | ✓ | ✓ | ✓ | ✓ (must be assigned — AC-41) | ✗ | AC-29..36 | +| Relaunch (any variant) | ✓ | ✓ | ✓ | ? | ✗ | AC-58..67 | +| Add/remove testers on a Run | ✓ | ✓ | ✓ | ? | ✗ | AC-38, ac-delta-6, ac-delta-7 | +| Auto-Assign strategy (None / Prefer / Random) | ✓ | ✓ | ✓ | ✗ | ✗ | AC-39, ac-delta-2..5 | +| Assign user to a suite inside Runner | ✓ | ✓ | ✓ | ? | ✗ | AC-42, ac-delta-8 | +| Assign user to a test (Multi-Select) | ✓ | ✓ | ✓ | ? | ✗ | AC-43, ac-delta-9, ac-delta-10 | +| Bulk status action (in Runner) | ✓ | ✓ | ✓ | ✓ (for tests assigned to them) | ✗ | AC-93..95 | +| Archive Run / RunGroup | ✓ | ✓ | ✓ | ✗ | ✗ | AC-75, ac-delta-1, ac-delta-20 | +| Unarchive Run / RunGroup | ✓ | ✓ | ✓ | ✗ | ✗ | AC-56, ac-delta-13..15, ac-delta-20 | +| Purge Run / RunGroup | ✓ | ✓ | ✓ | ✗ | ✗ | AC-57, AC-78, ac-delta-3, ac-delta-20 | +| Configure Purge retention | ✓ | ✓ | ? | ✗ | ✗ | AC-79, ac-delta-8, ac-delta-9 | +| Permanent delete from Archive | ✓ | ✓ | ? | ✗ | ✗ | AC-81, ac-delta-17, ac-delta-18 | +| Share Report (Email / Public) | ✓ | ✓ | ✓ | ? | ? | AC-89..91 (gated also by project Sharing flag) | +| Read Run / Report (basic or extended) | ✓ | ✓ | ✓ | ✓ | ✓ | AC-82..86 | +| Download / Export run | ✓ | ✓ | ✓ | ✓ | ✓ (inferred) | AC-87, AC-88 | + +### Notes + +- **Create/Launch/Finish/Edit/Assign/Archive/Purge/Relaunch/Bulk status** for Owner/Manager/QA Creator are affirmed by the AC baseline and sub-feature deltas. +- **Tester column** for creation-side actions is marked `?` because the ACs use role-agnostic language ("User can…"); the concrete role-gating for non-creator testers is being verified in Phase 1 per [AC-100](../../../test-cases/manual-tests-execution/_ac-baseline.md) and `ac-delta-20` of `archive-and-purge-ac-delta.md` (which resolves readonly/manager/owner for destructive actions but leaves QA/tester distinctions under `@unclear`). +- **Readonly** cannot perform destructive actions (affirmed by `archive-and-purge-ac-delta.md` ac-delta-20). The read columns assume Readonly can at minimum view reports (to be affirmed in Phase 1). + +## Run-level assignment constraint + +Independent of project role, a run has its own **assignment** surface: + +- **AC-37.** By default only the run creator is assigned to a run. +- **AC-41.** Users must be assigned to the run **before** they can be assigned to individual tests or suites. +- **AC-42 / ac-delta-8.** Suite "Assign to" inside the Runner lists *only* users already assigned to the run. +- **AC-43 / ac-delta-9.** Multi-Select bulk "Assign to" dropdown is also scoped to run-assigned users, and requires OK confirmation ("Are you sure you want to assign …"). +- **ac-delta-13.** Individual test reassignment via detail-panel chip applies immediately *without* confirmation (single-user reassign is not destructive). + +This is the canonical pattern: **a user is first added to the run; only then does any per-suite or per-test assignment become available to them.** + +## Manager auto-assign exclusion + + + +- **AC-40.** The "Randomly distribute tests between team members" strategy **never** assigns the manager role to any test. +- **ac-delta-11.** If the only assigned user on the run is a manager, random distribution results in an empty ("—") assignee state per test — no tests are auto-assigned and no error is shown. + +This will surface as a Business Rule in Phase 1 (candidate: **BR — manager-exclusion-from-random-distribution**). + +## Creator-specific semantics + +- **ac-delta-1.** The creator's chip in the New Manual Run sidebar shows an `as manager` label and cannot be removed from the creation dialog. (This is a UI affordance referring to the creator's "ownership" of the run — not to project-level Manager role; Phase 1 must verify whether the `as manager` badge is role-derived or creator-derived.) Flagged in [13-open-questions.md](./13-open-questions.md) when that doc opens in Phase 1. + +## Unresolved items (to migrate to `13-open-questions.md` in Phase 1) + +1. Full Tester-role permission gating for Create / Launch / Finish / Edit / Relaunch / Archive (AC-100). +2. QA Creator vs Manager distinction for Purge-retention configuration, permanent deletion from Archive, and public Sharing (AC-100 + `archive-and-purge-ac-delta.md` ac-delta-20). +3. Readonly read-surface scope — specifically whether Download as Spreadsheet / Export as PDF / Compare Runs are accessible (AC-87, AC-88, AC-92). +4. `ac-delta-1` "as manager" label semantics — creator badge vs project-role derivation. +5. `ac-delta-4` fallback when "Prefer test assignee" strategy encounters a test with no pre-set assignee (unassigned vs creator/manager fallback). diff --git a/skills/create-test-cases/examples/generatedDocs/03-glossary.md b/skills/create-test-cases/examples/generatedDocs/03-glossary.md new file mode 100644 index 0000000..bbe572e --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/03-glossary.md @@ -0,0 +1,314 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 03 — Glossary + +Domain vocabulary for Manual Tests Execution. Each term links to the AC section in `_ac-baseline.md` that first introduces it (or to the sub-feature AC-delta that owns the detail). Sub-feature names follow [destructuring.md](../../../test-cases/manual-tests-execution/destructuring.md). + +Anchor convention: slug of the H2/H3 — use `[Term](./03-glossary.md#term)` in other docs. + +--- + +## Run + + +A single execution pass of a set of tests against a product build. Has a creator (AC-37), an optional RunGroup membership (AC-51..53), zero-or-more environments (AC-45..47), and a lifecycle Pending → In-Progress → Finished / Terminated → Archived → Purged (AC-23..28, AC-75..81). See [05-state-diagrams.md](./05-state-diagrams.md). + +**Introduced by:** [AC-1, AC-23](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--new-manual-run-dialog) + +--- + +## RunGroup + + +A container that collects one or more Runs and reports on them jointly. Created from Runs page → arrow next to Manual Run → "New group" (AC-13). Required Name + Merge Strategy; Group Type and Description optional (AC-14). Opens a view with chart, per-run summary, and a Combined Report option (AC-54). Archive/Purge cascades to all nested runs (AC-56..57). + +**Introduced by:** [AC-13](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--additional-variants-header-extras-menu) + +--- + +## Test (in a Run) + + +A row inside a Run representing a single test case to be executed. Has a status (PASSED / FAILED / SKIPPED / Pending + optional Custom Status), optional Result message, attachments, assignee, and step-by-step markings. See [05-state-diagrams.md § Test-in-Run](./05-state-diagrams.md#test-in-run). + +**Introduced by:** [AC-29..36](../../../test-cases/manual-tests-execution/_ac-baseline.md#test-result-entry-passed--failed--skipped) + +--- + +## Tester + + +A user assigned to a Run (and/or to specific suites/tests within it) for the purpose of recording results. A tester is always a project user first; being a "Tester on Run X" is a per-run assignment, not a project role. See [02-actors-and-permissions.md](./02-actors-and-permissions.md). + +**Introduced by:** [AC-37..43](../../../test-cases/manual-tests-execution/_ac-baseline.md#tester-assignment) + +--- + +## Environment + + +A context attribute applied to a Run — typically a `{category}:{value}` pair like `Browser:Chrome` or `OS:Windows` (AC-44). Configured at Settings → Environments (out of scope for these docs) and *selected* at Run creation via "+" in the environment section (AC-45). A Run may carry one or more environment **groups**; see [Environment group](#environment-group). + +**Introduced by:** [AC-44](../../../test-cases/manual-tests-execution/_ac-baseline.md#environments) + +--- + +## Environment group + + +A multi-select bundle of environments applied to a Run as one unit. A single Run can have multiple environment groups (AC-47); behaviour across groups is controlled by the run-mode selector — [One Run](#one-run-mode) / [Launch in Sequence](#launch-in-sequence) / [Launch All](#launch-all) (AC-48..50). + +**Introduced by:** [AC-45..47](../../../test-cases/manual-tests-execution/_ac-baseline.md#environments) + +--- + +## One Run (mode) + + +Multi-environment mode where all selected environment groups apply to a **single** Run; results are grouped by environment in reports (AC-48). + +**Introduced by:** [AC-48](../../../test-cases/manual-tests-execution/_ac-baseline.md#environments) + +--- + +## Launch in Sequence + + +Multi-environment mode where each environment group runs **sequentially as a separate Run**; all child Runs are collected under one parent (AC-49). + +**Introduced by:** [AC-49](../../../test-cases/manual-tests-execution/_ac-baseline.md#environments) + +--- + +## Launch All + + +Multi-environment mode where each environment group starts **simultaneously as a separate Run** (parallel) (AC-50). + +**Introduced by:** [AC-50](../../../test-cases/manual-tests-execution/_ac-baseline.md#environments) + +--- + +## Merge Strategy + + +A RunGroup-level setting chosen when creating a new Group (AC-14). Determines how results from constituent Runs are merged in the Group's Combined Report. Required field in the New Group dialog. + +**Introduced by:** [AC-14](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--additional-variants-header-extras-menu) + +--- + +## Mixed Run + + +A Run that contains both manual and automated tests. Launched from the Runs page via arrow next to Manual Run → "Mixed Run". Execution runs on CI (using a CI Profile) or without CI via local CLI (`@testomatio/reporter`). + +**Introduced by:** [AC-15, AC-16](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--additional-variants-header-extras-menu) + +--- + +## CI Profile + + +A configured integration with an external CI system that Testomat.io uses to trigger automated test execution from Mixed Runs or "Relaunch on CI" actions. Internals live outside this feature; it is referenced as a precondition for Mixed Run / Report Automated / Relaunch-on-CI flows. + +**Introduced by:** [AC-16, AC-59..60](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--additional-variants-header-extras-menu) + +--- + +## Run as Checklist (mode) + + +A toggle on the New Manual Run dialog (AC-7) that hides test descriptions inside the launched Run; any test's description can still be revealed individually via extra menu → "Toggle Description" (AC-96). Cross-cutting concern **D** — the toggle lives in run-creation but cascades into test-execution-runner behaviour. + +**Introduced by:** [AC-7, AC-96](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-as-checklist--notes--auto-track--time-tracking) + +--- + +## Auto-Track + + +An in-Runner time-tracking mode that records duration on tests without manual stopwatch action. Coexists with a manual **Set Time** affordance. Precise semantics vs a separate "Fast Forward" control are unverified — tracked in [13-open-questions.md § AC-97](./13-open-questions.md) (Phase 1). + +**Introduced by:** test-execution-runner scope — see [destructuring.md § #2](../../../test-cases/manual-tests-execution/destructuring.md#2-test-execution-runner) + +--- + +## Custom Status + + +A sub-status configurable per project that can be applied to a test **in addition to** a standard status (PASSED / FAILED / SKIPPED). The Custom Status dropdown in the Runner becomes available only after a standard status is chosen — it does not replace it (AC-31). Consumed by TQL `has_custom_status` (AC-72) and by report filters (AC-85). Cross-cutting concern **E**. + +**Introduced by:** [AC-31](../../../test-cases/manual-tests-execution/_ac-baseline.md#test-result-entry-passed--failed--skipped) + +--- + +## Multi-Select (mode) + + +A UI mode present on two surfaces with similar affordances but divergent toolbars: + +- **In the Runs list** — bulk Archive, Labels, Compare, Link, Download, Merge, Move, Purge (AC-71). +- **In the Manual Runner** — bulk Assign to (AC-43, `tester-assignment-ac-delta.md` ac-delta-9..10), bulk Result message / status (AC-93..95). + +Cross-cutting concern **H**. + +**Introduced by:** [AC-43, AC-71, AC-93](../../../test-cases/manual-tests-execution/_ac-baseline.md#runs-list--filter-tabs--row-actions--multi-select) + +--- + +## Advanced Relaunch + + +A Relaunch sidebar exposing: custom run title, "Create new run" toggle, "Keep values" toggle (enabled only when Create new run is ON), per-test selection, and a Relaunch action. Four behaviour quadrants result from the Create-new-run × Keep-values matrix (AC-62..65). When a filter is active, selection methods include only matching tests (cross-cutting concern **F**, AC-66). + +**Introduced by:** [AC-62..66](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-lifecycle--relaunch-variants) + +--- + +## Launch a Copy + + +A Relaunch variant that creates a **separate duplicate Run** — both original and copy appear in the Runs list after finishing (AC-67). Contrast with Advanced Relaunch "Create new run: ON", which is a finer-grained control over what gets copied. + +**Introduced by:** [AC-67](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-lifecycle--relaunch-variants) + +--- + +## Basic Run Report + + +The default Report view opened by clicking a Run. Shows the tests list, standard + custom statuses, and overall summary (AC-82). Contains tabs/sections: Tests, Statistics, Defects (AC-83). + +**Introduced by:** [AC-82..83](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-detail--run-report) + +--- + +## Extended Run Report + + +A richer Report view adding grouped overviews (suites / tags / labels / assignees / priorities), Run Report Summary, Flaky Tests Analytics (when applicable), and keyboard navigation (↑/↓) between tests (AC-86). Source of [Share Report by Email](#share-report) and [Share Report Publicly](#share-report-publicly) (AC-89..91). + +**Introduced by:** [AC-86](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-detail--run-report) + +--- + +## Share Report (by Email) + + +From the Extended view, sends the Report to a comma-separated email list (AC-89). + +**Introduced by:** [AC-89](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-detail--run-report) + +--- + +## Share Report Publicly + + +From the Extended view, generates a public URL (requires Company + Project **Sharing** enabled). Dialog exposes Expiration (default 7 days) and a "Protect by passcode" toggle (ON by default). A passcode is shown once; Stop Sharing ends the public URL (AC-90..91). + +**Introduced by:** [AC-90..91](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-detail--run-report) + +--- + +## Compare Runs + + +A multi-select Runs-list action that opens a comparison view across selected Runs (AC-92). + +**Introduced by:** [AC-92](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-detail--run-report) + +--- + +## TQL (Testomat Query Language) + + +Filter expression language used in the Runs list Query Language Editor (AC-72). Variables include `rungroup`, `env`, `passed_count`, `finished_at`, `has_test_label`, `has_custom_status`, and others. Filter parameters can be shared via URL (AC-73). Grammar specification lives in [11-integrations.md](./11-integrations.md) at Phase 2. + +**Introduced by:** [AC-72..73](../../../test-cases/manual-tests-execution/_ac-baseline.md#runs-list--filter-tabs--row-actions--multi-select) + +--- + +## Pulse + + +A project activity log where permanent deletions of Runs from Archive are tracked under a "Deleted Run" entry with actor, timestamp, and entity identifier (AC-81; `archive-and-purge-ac-delta.md` ac-delta-18). + +**Introduced by:** [AC-81](../../../test-cases/manual-tests-execution/_ac-baseline.md#archive--purge) + +--- + +## Flaky Tests Analytics + + +A section surfaced in the Extended Run Report when a Run contains tests flagged as flaky (AC-86). + +**Introduced by:** [AC-86](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-detail--run-report) + +--- + +## Purge + + +A destructive archival: compresses a Run and moves it to Archive with a "Purged" badge; preserves test results, attachments, and custom statuses; removes stack traces (AC-78). Distinct from plain [Archive](#archive). Automatic Purge is driven by the `Purge Old Runs` retention setting (default 90 days, AC-79). Purging a RunGroup cascades to all nested Runs (AC-57); limit 20 000 Runs per Purge (AC-57, `archive-and-purge-ac-delta.md` ac-delta-19). + +**Introduced by:** [AC-78](../../../test-cases/manual-tests-execution/_ac-baseline.md#archive--purge) + +--- + +## Archive + + +A non-destructive transition to the Runs/Groups Archive page (AC-75). The item keeps an "archived" badge and can be Unarchived (restored to active list) (AC-77; `archive-and-purge-ac-delta.md` ac-delta-13..15). Archiving a Run with Pending tests marks the Run **Terminated** and its Pending tests **Skipped** (AC-76). + +**Introduced by:** [AC-75..77](../../../test-cases/manual-tests-execution/_ac-baseline.md#archive--purge) + +--- + +## Unarchive + + +The inverse of [Archive](#archive). Restores a single Run or RunGroup from the Archive back to the active list; for a RunGroup, all nested Runs are restored together (AC-56; `archive-and-purge-ac-delta.md` ac-delta-13..15). + +**Introduced by:** [AC-56](../../../test-cases/manual-tests-execution/_ac-baseline.md#rungroups-as-a-container-for-runs) + +--- + +## Retention (Purge Old Runs) + + +Project-level numeric setting controlling automatic Purge of old Runs; default is 90 days when unset (AC-79; `archive-and-purge-ac-delta.md` ac-delta-8..9). Non-numeric and negative values are rejected. + +**Introduced by:** [AC-79](../../../test-cases/manual-tests-execution/_ac-baseline.md#archive--purge) + +--- + +## Terminated (Run state) + + +A terminal state distinct from *Finished*. Assigned when a Run is Archived or Purged **while in-progress**; recorded statuses are kept, Pending tests become Skipped, and the Run cannot be resumed after restore (AC-76, AC-80). + +**Introduced by:** [AC-76, AC-80](../../../test-cases/manual-tests-execution/_ac-baseline.md#archive--purge) + +--- + +## Auto-Assign Users (strategies) + + +Assignment-strategy selector in the New Manual Run dialog Assignee panel. Three options: **None** (default), **Prefer test assignee**, **Randomly distribute tests between team members** (AC-39; `tester-assignment-ac-delta.md` ac-delta-2..5). Randomly distribute excludes managers (AC-40, ac-delta-11). + +**Introduced by:** [AC-39..40](../../../test-cases/manual-tests-execution/_ac-baseline.md#tester-assignment) + +--- + +## Require RunGroup (project setting) + + +A project-level toggle that, when enabled, blocks Launch from the New Manual Run dialog unless a RunGroup is selected; the RunGroup field is highlighted and a warning appears (AC-9). Precondition for the **BR-1** candidate noted in the execution plan. + +**Introduced by:** [AC-9](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--new-manual-run-dialog) diff --git a/skills/create-test-cases/examples/generatedDocs/04-data-model.md b/skills/create-test-cases/examples/generatedDocs/04-data-model.md new file mode 100644 index 0000000..58ca03d --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/04-data-model.md @@ -0,0 +1,149 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 04 — Data Model + +Entities and cardinalities observed in the Manual Tests Execution feature. This is a **logical** model — it reflects the concepts users interact with, not a physical schema. Physical field names, nullability, and exact relation tables live in the backend code (out of POC scope — see [11-integrations.md](./11-integrations.md) for what surfaces via the public API). + +> **Sources.** Derived from [_ac-baseline.md](../../../test-cases/manual-tests-execution/_ac-baseline.md) + every `*-ac-delta.md`, the [03-glossary.md](./03-glossary.md), and the state diagrams in [05-state-diagrams.md](./05-state-diagrams.md). Every card identifies the UCs and ACs that read or write the entity. + +## Entity-relationship diagram + +```mermaid +erDiagram + PROJECT ||--o{ RUN : "owns" + PROJECT ||--o{ RUNGROUP : "owns" + PROJECT ||--o{ TEST : "owns" + PROJECT ||--o{ PLAN : "owns" + PROJECT ||--o{ LABEL : "defines" + PROJECT ||--o{ CUSTOMSTATUS : "defines" + PROJECT ||--o{ ENVIRONMENT : "seeds" + PROJECT ||--o{ TESTER : "has members" + + RUNGROUP ||--o{ RUN : "contains" + RUN ||--o{ TESTINRUN : "includes" + TEST ||--o{ TESTINRUN : "spawns" + + RUN }o--o{ TESTER : "assigned to" + SUITE }o--o{ TESTER : "suite-assign (within run)" + TESTINRUN }o--o{ TESTER : "test-assign (within run)" + + RUN }o--o{ ENVIRONMENTGROUP : "scoped by" + ENVIRONMENTGROUP ||--o{ ENVIRONMENT: "contains" + + RUN }o--o{ LABEL : "tagged with" + TEST ||--o{ LABEL : "tagged with" + TESTINRUN ||--o| CUSTOMSTATUS : "optional overlay" + + PLAN ||--o{ TEST : "includes (static set)" + RUN ||--o| PLAN : "scoped by (optional)" + + TESTINRUN ||--o{ STEPRESULT : "records" + TESTINRUN ||--o{ ATTACHMENT : "records" + TESTINRUN ||--o{ NOTE : "records" + + RUN ||--o| CIPROFILE : "triggered by (Mixed)" + RUN ||--o{ SHARELINK : "exposes (public/email)" + RUN ||--o{ DEFECTLINK : "linked to" + PULSE ||--o{ RUN : "records events for" +``` + +## Entity catalogue + +### Run +**What:** An instance of executing a set of tests at a point in time. See [Run in glossary](./03-glossary.md#run). +**States:** Pending → In-Progress → Finished; In-Progress → Terminated (via Archive of an ongoing Run, AC-76). See [05-state-diagrams.md § Run](./05-state-diagrams.md#run). +**Key attributes:** title, created-by, created-at, finished-at, status, type (Manual / Automated / Mixed — AC-68), pinned flag (AC-70), archived flag, scope (All tests / Test plan / Select tests / Without tests — [BR-4](./07-business-rules.md#br-4)), as-checklist flag (AC-96). +**Owner UCs:** [UC-01](./06-use-cases/UC-01-create-manual-run.md), [UC-02](./06-use-cases/UC-02-create-mixed-run.md), [UC-04](./06-use-cases/UC-04-finish-run.md), [UC-05](./06-use-cases/UC-05-relaunch-run.md), [UC-12](./06-use-cases/UC-12-archive-unarchive-purge.md). +**Reader UCs:** [UC-10](./06-use-cases/UC-10-manage-runs-list.md), [UC-11](./06-use-cases/UC-11-view-run-report.md). + +### RunGroup +**What:** A named container for Runs with a required merge strategy. See [RunGroup](./03-glossary.md#rungroup). +**States:** active ↔ archived ([BR-9](./07-business-rules.md#br-9)). +**Key attributes:** name (required), merge strategy (required — AC-14), group type (optional), description (optional), pinned flag (AC-70). +**Cardinality:** Run →0..1 RunGroup (a Run belongs to at most one group); RunGroup → 0..∞ Runs (purge ceiling 20 000 — [BR-10](./07-business-rules.md#br-10)). +**Owner UCs:** [UC-08](./06-use-cases/UC-08-manage-rungroup.md), [UC-12](./06-use-cases/UC-12-archive-unarchive-purge.md). + +### Test (catalog) +**What:** The re-usable test definition in the project's Tests tree. A Test has code or manual steps and a description; it is re-executed across Runs. +**Key attributes:** title, description, priority (ac-delta-17 of runner), labels, tags, automation code template (ac-delta-6 of report), test-level default assignee. +**Owner UCs:** Out of scope — authored in the Tests feature. Read by [UC-01](./06-use-cases/UC-01-create-manual-run.md) (scope selection), [UC-03](./06-use-cases/UC-03-execute-test-in-runner.md), [UC-11](./06-use-cases/UC-11-view-run-report.md). + +### TestInRun +**What:** The per-Run instance of a Test — holds the recorded result. Conceptually a join between Run and Test with its own lifecycle (Pending → Passed / Failed / Skipped + optional CustomStatus). +**Key attributes:** standard status (PASSED / FAILED / SKIPPED / PENDING), result message, duration (auto-tracked or set-time — ac-delta-19/20 of runner), per-test assignee (within the Run's assignee set — [BR-6](./07-business-rules.md#br-6)), step results, attachments, notes, custom status overlay ([BR-5](./07-business-rules.md#br-5)). +**Owner UCs:** [UC-03](./06-use-cases/UC-03-execute-test-in-runner.md), [UC-09](./06-use-cases/UC-09-bulk-status-in-runner.md). +**Reader UCs:** [UC-11](./06-use-cases/UC-11-view-run-report.md). + +### Tester (User) +**What:** A project member who can be assigned to Runs, suites, or tests. +**Roles:** Owner, Manager, QA Creator, Tester, Readonly ([02-actors-and-permissions.md](./02-actors-and-permissions.md)). Manager-role users are excluded from random-distribute auto-assign ([BR-6a](./07-business-rules.md#br-6a)). +**Cardinality:** Run ↔ Tester many-to-many (Run has ≥ 1 assignee — the creator manager by default, AC-37). TestInRun → 0..1 assignee (within the Run's assignees — [BR-6](./07-business-rules.md#br-6)). +**Owner UCs:** [UC-06](./06-use-cases/UC-06-assign-testers.md). + +### EnvironmentGroup / Environment +**What:** A group of environment values (`Browser:Chrome`, `OS:Windows`) that scopes a Run. A Run may have 1..N groups; 2+ groups spawn parent-RunGroup + child Runs on Launch in Sequence / Launch All ([UC-07](./06-use-cases/UC-07-configure-environments.md), AC-49/AC-50). +**Key attributes:** group display name (derived), selected environments (multi-select — AC-46). +**Seed source:** Project Settings → Environments (AC-44, out of POC scope). +**Owner UCs:** [UC-07](./06-use-cases/UC-07-configure-environments.md). +**Reader UCs:** [UC-10](./06-use-cases/UC-10-manage-runs-list.md) (env badges / Tags & Envs column), [UC-11](./06-use-cases/UC-11-view-run-report.md) (per-env breakdown, concern A). + +### Plan +**What:** A static curated set of Tests. Runs scoped as *Test plan* include the union of selected plans' tests (AC-4, AC-21). +**Owner UCs:** Out of scope (authored in the Plans feature). Read by [UC-01 A1](./06-use-cases/UC-01-create-manual-run.md#a1-test-plan-scope), [UC-04 A2](./06-use-cases/UC-04-finish-run.md#a2-edit-an-unfinished-run--tests--plans-remove-test-amend-metadata) (`+ Plans`). + +### Label +**What:** A project-defined tag applied to Tests and to Runs. Bulk-applicable from Runs list Multi-Select ([UC-10 A3](./06-use-cases/UC-10-manage-runs-list.md#a3-multi-select--bulk-action), AC-71). +**Cardinality:** many-to-many with both Test and Run. + +### CustomStatus +**What:** A project-defined status overlay layered on top of a standard status (PASSED / FAILED / SKIPPED). Never replaces the standard status — [BR-5](./07-business-rules.md#br-5). +**Cardinality:** TestInRun → 0..1 CustomStatus. + +### StepResult / Attachment / Note +**What:** Child records of a TestInRun. +- **StepResult** — per-step PASSED / FAILED / SKIPPED marker via click cadence (AC-35, ac-delta-8 of runner). +- **Attachment** — file uploaded via browse / drag-and-drop (AC-32..AC-34, ac-delta-4..7 of runner). Deletion requires confirmation. +- **Note** — free-text comment attached to a test, a suite, or via bulk (ac-delta-10..13 of runner); convertible to a new Test (ac-delta-12). + +### CIProfile +**What:** Project-level configuration that tells Testomat.io where to trigger automated execution. Consumed by Mixed Run ([UC-02](./06-use-cases/UC-02-create-mixed-run.md)) and CI-variant Relaunch ([UC-05 A4 / A5](./06-use-cases/UC-05-relaunch-run.md#a4-relaunch-failed-on-ci)). +**Cardinality:** Project → 0..N CIProfiles; Run → 0..1 triggered profile (Mixed Runs may reference; Manual Runs do not). +**Scope:** Internals are out of scope — see [11-integrations.md](./11-integrations.md) for payload / CLI surface. + +### ShareLink +**What:** A Run-scoped sharing artefact — either a Share-by-Email send record, or a public-URL + passcode pair ([UC-11 A7 / A8](./06-use-cases/UC-11-view-run-report.md#a7-share-by-email), [BR-13](./07-business-rules.md#br-13)). +**Key attributes:** expiration, passcode-on flag, URL (public only), revoked flag (AC-91, ac-delta-20 of report). + +### DefectLink +**What:** A link from a TestInRun to an external defect tracker (Jira / GitHub). Surfaces on the Defects tab of the Report (AC-98 — **UNCLEAR**, [13-open-questions.md § OQ-04](./13-open-questions.md#oq-04)). + +### Pulse +**What:** Project activity log. Records **Deleted Run** events for permanent-delete audit (AC-81, ac-delta-18 of archive). +**Readers:** Owner / Manager audit workflow — out of POC UC scope. + +## Cardinality cheatsheet + +| Relation | Cardinality | Enforced by | +|---|---|---| +| Project → Run | 1..N | — | +| RunGroup → Run | 0..N (≤ 20 000 for Purge) | [BR-10](./07-business-rules.md#br-10) | +| Run → RunGroup | 0..1 | — | +| Run → TestInRun | 0..N (0 allowed via *Without tests*) | [BR-2](./07-business-rules.md#br-2) | +| Test → TestInRun | 0..N | — | +| Run → Tester (assignees) | 1..N (creator manager included) | AC-37, [BR-6](./07-business-rules.md#br-6) | +| TestInRun → Tester | 0..1 (within Run assignees) | [BR-6](./07-business-rules.md#br-6) | +| Run → EnvironmentGroup | 0..N | AC-47, [UC-07](./06-use-cases/UC-07-configure-environments.md) | +| TestInRun → CustomStatus | 0..1 (requires standard status) | [BR-5](./07-business-rules.md#br-5) | +| Run → ShareLink | 0..N | [BR-13](./07-business-rules.md#br-13) | +| Run → CIProfile | 0..1 (Mixed only) | [BR-3](./07-business-rules.md#br-3) | + +## Notes on impedance + +- **Pending is a TestInRun state, not a Run state** — a Run may be In-Progress while containing 0..N Pending tests. Finish coerces all of them to Skipped ([BR-7](./07-business-rules.md#br-7)). +- **Run scope is not a stored enum** — it determines *which* Tests spawn TestInRun rows at creation time ([UC-01](./06-use-cases/UC-01-create-manual-run.md) main + A1..A3). After creation, scope is not a persistent field visible on the Run; *Without tests* Runs produce zero TestInRun rows but are otherwise normal ([BR-2](./07-business-rules.md#br-2)). +- **Merge strategy lives on RunGroup, not on Run.** It governs how the Combined Report aggregates per-Test statuses across sibling Runs ([UC-08 A4](./06-use-cases/UC-08-manage-rungroup.md#a4-combined-report), AC-14). diff --git a/skills/create-test-cases/examples/generatedDocs/05-state-diagrams.md b/skills/create-test-cases/examples/generatedDocs/05-state-diagrams.md new file mode 100644 index 0000000..2c2bc68 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/05-state-diagrams.md @@ -0,0 +1,197 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 05 — State Diagrams + +State machines Manual Tests Execution operates over. Each diagram is Mermaid `stateDiagram-v2`; transition labels name the **triggering action**, not the resulting state. + +Sources: [AC-23..28](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-lifecycle), [AC-58..67](../../../test-cases/manual-tests-execution/_ac-baseline.md#run-lifecycle--relaunch-variants), [AC-75..81](../../../test-cases/manual-tests-execution/_ac-baseline.md#archive--purge), `archive-and-purge-ac-delta.md`, `run-creation-ac-delta.md`. + +--- + +## Run + +```mermaid +stateDiagram-v2 + [*] --> Pending: Save (no Launch) + [*] --> InProgress: Launch + + Pending --> InProgress: Launch + Pending --> Archived: Archive + Pending --> Purged: Purge + + InProgress --> Finished: Finish Run + InProgress --> Terminated: Archive (in-progress) + InProgress --> Terminated: Purge (in-progress) + + Finished --> InProgress: Relaunch (Basic / Manually) + Finished --> Archived: Archive + Finished --> Purged: Purge (manual or auto-retention) + + Terminated --> Archived: (already in Archive) + Terminated --> Purged: Purge + + Archived --> Finished: Unarchive (was Finished) + Archived --> Pending: Unarchive (was Pending) + Archived --> Purged: Purge from Archive + Archived --> [*]: Permanent delete + + Purged --> [*]: Permanent delete +``` + +### Transition notes + +| Transition | AC | Notes | +|---|---|---| +| `Save` (Pending) | AC-8 | Save stores without launching. | +| `Launch` → InProgress | AC-8, AC-23 | Immediate transition. | +| `Launch` blocked | AC-9 | If Require RunGroup is enabled and no Group is selected, Launch is blocked (no transition). | +| `Finish Run` | AC-25, AC-28 | Gated by confirmation dialog. Pending tests at Finish → Skipped (AC-26) — see [Test-in-Run](#test-in-run). | +| `Relaunch (Basic / Manually)` | AC-58, AC-61 | Re-opens the same Run in Manual Runner; Run status updates after Finish. | +| `Relaunch Failed on CI / All on CI` | AC-59, AC-60 | Orchestrates CI; failed manual tests re-open in Manual Runner. Not modelled as a distinct Run state — the Run remains In-Progress until Finish. | +| `Relaunch (Advanced, Create new run: ON)` | AC-62, AC-63 | Creates a **new** Run ID — that run enters this state machine from `Pending → InProgress`. | +| `Relaunch (Advanced, Create new run: OFF)` | AC-64 | Reuses the original Run ID; selected tests reset to Pending but the Run's lifecycle stays on the Finished → InProgress edge. | +| `Launch a Copy` | AC-67 | Creates a **separate** duplicate Run (new instance of the state machine). | +| `Archive (in-progress)` | AC-76 | Run becomes Terminated, Pending tests become Skipped. | +| `Purge (in-progress)` | AC-80 | Same Terminated transition; restored Terminated Runs cannot be resumed (the `Terminated → InProgress` edge does **not** exist). | +| `Unarchive` | AC-56, ac-delta-13..15 | Restores to the pre-archive state (Pending or Finished); RunGroup unarchive cascades to all nested runs. | +| `Purge from Archive` | AC-78 | Manual purge of an already-archived Run. | +| `Permanent delete` | AC-81, ac-delta-17..18 | Irreversible; tracked in Pulse under "Deleted Run". | + +### Why there is no `Terminated → InProgress` + +AC-80 explicitly forbids resuming a Terminated Run. Terminated is a sink state for the *active-execution* phase; the only outbound transitions are archival-side (`Archived`, `Purged`, `Permanent delete`). + +### RunGroup cascade + +Archive / Unarchive / Purge on a RunGroup applies to every nested Run (AC-56..57). Each nested Run still walks its own state machine; the Group-level action is syntactic sugar that fans out to each. See [RunGroup](#rungroup). + +--- + +## RunGroup + +```mermaid +stateDiagram-v2 + [*] --> Active: Create (New Group) + + Active --> Archived: Archive (cascade to nested runs) + Archived --> Active: Unarchive (cascade) + Archived --> Purged: Purge (cascade; limit 20 000 runs) + Active --> Purged: Purge (cascade; limit 20 000 runs) + + Archived --> [*]: Permanent delete + Purged --> [*]: Permanent delete +``` + +### Transition notes + +| Transition | AC | Notes | +|---|---|---| +| `Create` | AC-13..14 | Name + Merge Strategy required; Group Type + Description optional. | +| `Archive (cascade)` | AC-56 | Archives all nested Runs as a single atomic user action. | +| `Unarchive (cascade)` | AC-56, `archive-and-purge-ac-delta.md` ac-delta-15 | Restores all nested Runs together. | +| `Purge (cascade)` | AC-57, ac-delta-19 | Limit 20 000 Runs per Purge; oversized Groups block with an error or guidance. | +| `Permanent delete` | ac-delta-17..18 | Same irreversibility + Pulse tracking as Runs. | + +Runs-list management, Pin, and Copy Group (run-groups sub-feature AC set) are **metadata** mutations that do not transition the Group's lifecycle state — they are omitted here. + +--- + +## Test-in-Run + + +```mermaid +stateDiagram-v2 + [*] --> Pending: Test added to Run (Launch / +Tests / +Plans) + + Pending --> Passed: Mark PASSED + Pending --> Failed: Mark FAILED + Pending --> Skipped: Mark SKIPPED + + Passed --> Failed: Mark FAILED (re-entry) + Passed --> Skipped: Mark SKIPPED (re-entry) + Failed --> Passed: Mark PASSED (re-entry) + Failed --> Skipped: Mark SKIPPED (re-entry) + Skipped --> Passed: Mark PASSED (re-entry) + Skipped --> Failed: Mark FAILED (re-entry) + + Pending --> Skipped: Finish Run (AC-26) + Pending --> Skipped: Archive / Purge while in-progress (AC-76, AC-80) + + Passed --> Pending: Relaunch (Advanced, Create new run ON, Keep values OFF, test selected) + Failed --> Pending: Relaunch (Advanced, Create new run ON, Keep values OFF, test selected) + Skipped --> Pending: Relaunch (Advanced, Create new run ON, Keep values OFF, test selected) + Passed --> Pending: Relaunch (Advanced, Create new run OFF, test selected) + Failed --> Pending: Relaunch (Advanced, Create new run OFF, test selected) + Skipped --> Pending: Relaunch (Advanced, Create new run OFF, test selected) + + state "Passed + Custom" as PassedCustom + state "Failed + Custom" as FailedCustom + state "Skipped + Custom" as SkippedCustom + Passed --> PassedCustom: Apply Custom Status + Failed --> FailedCustom: Apply Custom Status + Skipped --> SkippedCustom: Apply Custom Status + PassedCustom --> Passed: Clear Custom Status + FailedCustom --> Failed: Clear Custom Status + SkippedCustom --> Skipped: Clear Custom Status +``` + +### Transition notes + +| Transition | AC | Notes | +|---|---|---| +| `Test added to Run` | AC-2..5, AC-22, AC-27 | Source depends on scope: All tests / Test plan / Select tests / Without tests (later `+Tests` / `+Plans`). | +| `Mark PASSED / FAILED / SKIPPED` | AC-29..30 | Result message becomes editable after a standard status is chosen (AC-30). | +| Re-entry (status ↔ status) | AC-29 | The Runner permits changing a result until the Run is Finished. | +| `Finish Run` → Pending→Skipped | AC-26 | Configuration may leave Pending instead (AC-26 note); treat as a per-project policy. | +| `Archive / Purge while in-progress` | AC-76, AC-80 | Run becomes Terminated; Pending tests become Skipped. | +| `Relaunch (Advanced) → Pending` | AC-63..65 | Matrix: `Create new run` × `Keep values` × test selection determines whether each test resets: see [Advanced Relaunch matrix](#advanced-relaunch-matrix). | +| `Apply Custom Status` | AC-31 | Custom Status is an *overlay* on a standard status — it never replaces PASSED/FAILED/SKIPPED. | + +### Step-by-step markings + +Orthogonal to the overall test status: + +- Single click = step Passed +- Double click = step Failed +- Triple click = step Skipped +- (AC-35). Step results persist with the test result (AC-36). + +Step-by-step state does not alter the test's overall status transitions and is therefore not modelled in the diagram. + +### Advanced Relaunch matrix + + +The Advanced Relaunch sidebar produces four observable outcomes (AC-62..65). The table shows what happens to tests **selected in the sidebar** vs **not selected**: + +| Create new run | Keep values | Selected tests | Unselected tests | Run ID | +|:---:|:---:|---|---|---| +| ON | ON | preserved status | preserved status | new | +| ON | OFF | reset to Pending | preserved status | new | +| OFF | n/a (toggle disabled) | reset to Pending | preserved status | **same** | + +Note: when a filter is active in the sidebar, "Select All" and Checkbox selection include **only** tests matching the filter (AC-66, cross-cutting concern **F**). + +### Standard × Custom state space + +A test is in exactly one state of: + +``` +{ Pending } ∪ ({ Passed, Failed, Skipped } × (CustomStatus? | ∅)) +``` + +The Mermaid above flattens `+ Custom` into sibling states for the three statuses where it applies; Pending has no custom-status overlay (AC-31 requires a standard status first). + +--- + +## What these diagrams omit (by design) + +- **Notes / attachments / assignment / result message** — these are data mutations on a test that do not alter its state. +- **Bulk actions (runner + list)** — bulk actions produce the same transitions as single-test actions, just fan-out; documenting them as a separate state machine would add no information. +- **Relaunch-on-CI flows (AC-59..60)** — the Run stays In-Progress while CI executes; the CI orchestration internals live outside this feature. +- **Pin / Copy / Labels / Move** — metadata mutations on Runs and Groups, not lifecycle transitions. +- **Share Report (Email / Public)** — Report-surface actions; the Run's state is unchanged. diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/README.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/README.md new file mode 100644 index 0000000..a46fc87 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/README.md @@ -0,0 +1,102 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# Use Cases — Index + +Use Cases (UCs) describe **actor-driven, goal-oriented flows** over Manual Tests Execution. Each UC cites the ACs it covers and the [Business Rules](../07-business-rules.md) it relies on. A traceability matrix ([_generated/traceability-matrix.md](../_generated/traceability-matrix.md)) links each UC's cited ACs to the manual tests that exercise them. + +## Phase status + +| Phase | UCs drafted | +|---|---| +| **Phase 1 (pilot)** | UC-01, UC-02 | +| **Phase 2 (scale — drafted)** | UC-03 through UC-12 | + +## UC catalogue + +| UC | Title | Primary actor | Sub-feature owner | Status | +|---|---|---|---|---| +| [UC-01](./UC-01-create-manual-run.md) | Create a Manual Run | QA Creator | run-creation | draft | +| [UC-02](./UC-02-create-mixed-run.md) | Create a Mixed Run | QA Creator | run-creation | draft | +| [UC-03](./UC-03-execute-test-in-runner.md) | Execute a test in the Manual Runner | Tester | test-execution-runner | draft | +| [UC-04](./UC-04-finish-run.md) | Finish a Run | QA Creator / Tester | run-lifecycle | draft | +| [UC-05](./UC-05-relaunch-run.md) | Relaunch a Run (Basic / Failed-on-CI / All-on-CI / Manually / Launch a Copy / Advanced) | QA Creator | run-lifecycle | draft | +| [UC-06](./UC-06-assign-testers.md) | Assign testers (single + Auto-Assign + bulk) | QA Creator | tester-assignment | draft | +| [UC-07](./UC-07-configure-environments.md) | Configure environments (One Run / Launch-in-Sequence / Launch-All) | QA Creator | environment-configuration | draft | +| [UC-08](./UC-08-manage-rungroup.md) | Create and manage a RunGroup (CRUD + Pin + Copy + Combined Report) | QA Creator | run-groups | draft | +| [UC-09](./UC-09-bulk-status-in-runner.md) | Apply bulk status in the Manual Runner | Tester | bulk-status-actions | draft | +| [UC-10](./UC-10-manage-runs-list.md) | Manage the Runs list (filter / multi-select / TQL / Custom view / URL share) | QA Creator | runs-list-management | draft | +| [UC-11](./UC-11-view-run-report.md) | View a Run detail & Report (Basic + Extended + Share + Compare + Export) | QA Creator | run-detail-and-report | draft | +| [UC-12](./UC-12-archive-unarchive-purge.md) | Archive, unarchive, purge (run + group + retention) | QA Creator | archive-and-purge | draft | + +## Dependency graph + +Arrows read as **"produces state consumed by"**. A dashed arrow is a *shared-surface* link (different UCs reach the same dropdown / dialog / mode), not a state dependency. + +```mermaid +flowchart LR + UC01[UC-01
Create Manual Run] + UC02[UC-02
Create Mixed Run] + UC03[UC-03
Execute test in Runner] + UC04[UC-04
Finish Run] + UC05[UC-05
Relaunch Run] + UC06[UC-06
Assign testers] + UC07[UC-07
Configure environments] + UC08[UC-08
Manage RunGroup] + UC09[UC-09
Bulk status] + UC10[UC-10
Manage Runs list] + UC11[UC-11
Run detail + Report] + UC12[UC-12
Archive / Purge] + + UC01 --> UC03 + UC02 --> UC03 + UC01 --> UC04 + UC02 --> UC04 + UC04 --> UC05 + UC04 --> UC11 + UC01 --> UC10 + UC02 --> UC10 + UC08 -.-> UC01 + UC08 -.-> UC02 + UC07 -.-> UC01 + UC07 -.-> UC02 + UC06 -.-> UC01 + UC06 -.-> UC04 + UC03 --> UC09 + UC10 --> UC12 + UC11 --> UC12 + UC01 -. shared entry .- UC02 + UC05 -. Advanced Relaunch spawns new Run .-> UC04 +``` + +### How to read it + +- **Solid arrows** encode the happy-path run lifecycle: *Create* → *Execute* → *Finish* → *Report / Relaunch / Archive*. +- **Dashed arrows** call out cross-surface reuse — e.g., UC-08 can be reached *from within* UC-01's arrow dropdown (it's not a prerequisite, just a shared entry point). +- **UC-09** (bulk status) is a variant of UC-03 in Multi-Select mode — shown as a child of UC-03. +- **UC-12** (archive/purge) is reachable from both UC-10 (Runs list extra menu) and UC-11 (Report extra menu) and from the RunGroup page (UC-08). + +## Cross-cutting concerns → UCs + +Map from the eight cross-cutting concerns in [destructuring.md § Cross-cutting concerns](../../../test-cases/manual-tests-execution/destructuring.md#cross-cutting-concerns) to the UCs that must cover them: + +| Concern | Owning UC | Must also appear in | +|---|---|---| +| **A. Multi-environment** | UC-07 | UC-01 / UC-02 (creation), UC-04 (Finish across groups), UC-10 (list rendering), UC-11 (report breakdown) | +| **B. Multi-user assignment** | UC-06 | UC-03 (per-test assignee in Runner), UC-11 (assignee filter/grouping) | +| **C. RunGroup membership** | UC-08 | UC-01 / UC-02 (creation), UC-10 (Groups tab + Move), UC-12 (archive cascade) | +| **D. Run as checklist** | UC-01 | UC-03 (description-hidden runner UX) | +| **E. Custom statuses** | UC-03 | UC-10 (TQL `has_custom_status`), UC-11 (custom-status filter) | +| **F. Filter-applied scope** | UC-09 (bulk in runner) | UC-05 (Advanced Relaunch), UC-03 (single-test scope) | +| **G. Ongoing vs Finished state** | UC-04 | UC-05 (Continue vs Finish gated), UC-12 (archive behaviour differs) | +| **H. Bulk multi-select mode** | UC-09 (runner) + UC-10 (list) | UC-06 (bulk assign to tests) | + +## Conventions + +- File naming: `UC-NN-short-verb-object.md`. +- Each UC uses [`templates/use-case-template.md`](../templates/use-case-template.md). +- The trailing `## Verifying tests` block is generated by `scripts/gen-traceability.ts` — see [_generated/traceability-matrix.md](../_generated/traceability-matrix.md). diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-01-create-manual-run.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-01-create-manual-run.md new file mode 100644 index 0000000..ead6075 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-01-create-manual-run.md @@ -0,0 +1,205 @@ +# UC-01: Create a Manual Run — QA Creator + + + +**Primary actor:** QA Creator +**Stakeholders:** Tester (executes the launched run); Owner / Manager (may observe and launch); Project (consumes Require-RunGroup project setting). +**Goal:** Produce a new Manual [Run](../03-glossary.md#run) containing a deliberately-chosen slice of tests, ready to be executed against one or more [environments](../03-glossary.md#environment-group). +**Trigger:** QA Creator opens the [New Manual Run](../03-glossary.md#run) sidebar from the Runs page (or a shortcut from the Tests page). +**Scope:** `run-creation` (owner). Touches `tester-assignment` (assignee field — owner of strategy logic is UC-06), `environment-configuration` (env field — owner of mode logic is UC-07), `run-groups` (RunGroup field + Require-RunGroup gating), `run-lifecycle` (Launch → In-Progress transition). + +## Preconditions + +- Actor is signed into Testomat.io with Create-Run permission (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +- Target project is selected. +- **Optional project setting** — *Require RunGroup for new runs* — may be enabled (affects alternate flow A4). +- For [Test plan](../03-glossary.md#run) scope: at least one Test Plan exists in the project (or the actor creates one inline via the dialog's "create new plan" action). +- For [Select tests](../03-glossary.md#test-in-run) scope: the project contains at least one manual test. + +## Main success scenario (happy path — "All tests" scope) + +1. QA Creator navigates to the Runs page. +2. System renders the Runs list with a primary **Manual Run** split-button in the toolbar (AC-1, ac-delta-1). +3. QA Creator clicks the left part of the **Manual Run** button. +4. System opens a right-side sidebar titled *New Manual Run*, pushes the URL to `/projects/{project}/runs/new`, and renders the creation form with defaults: + - **Assignee** populated with the creator chip and an `as manager` label ([ac-delta-5](../../../test-cases/manual-tests-execution/run-creation-ac-delta.md)). + - **Title** (optional) empty. + - **RunGroup** selector showing *Select RunGroup* (placeholder). + - **Environment** selector showing *Set environment for execution*. + - **Description** empty. + - **Run as checklist** toggle OFF (ac-delta-14). + - **Scope** tabs: *All tests* (default, AC-3) · *Test plan* · *Select tests* · *Without tests* (AC-2, mutually exclusive). + - **Run Automated as Manual** toggle OFF (ac-delta-15). + - **Actions**: Launch · Save · Cancel (AC-8). +5. QA Creator accepts the *All tests* default (or performs an alternate scope flow — see A1/A2/A3). +6. QA Creator clicks **Launch**. +7. System validates the form (see A4 / E1). +8. System creates a Run with all project manual tests attached, transitions it to In-Progress (AC-23), navigates to the Manual Runner at `/projects/{project}/runs/launch/{id}/?entry={firstTestId}`, and surfaces a success toast equivalent to "Run has been started" (ac-delta-10, ac-delta-11). + +## Alternate flows + +### A1: "Test plan" scope +**Branches at step 5.** +1. QA Creator clicks the **Test plan** tab. +2. System hides the test tree and shows a plan picker. +3. QA Creator selects one or more plans (AC-4). Optionally invokes *create new plan* to produce one inline (AC-4). +4. System displays the planned set's test count. +5. QA Creator proceeds with step 6 of the main flow. On Launch, the Run is created with the union of selected plans' tests (AC-21). + +### A2: "Select tests" scope (includes "Run Automated as Manual") +**Branches at step 5.** +1. QA Creator clicks the **Select tests** tab. +2. System reveals the test tree (AC-5, AC-19) and the selected-tests counter (AC-20). +3. QA Creator expands/collapses suites, toggles individual tests, uses search/filter to narrow the tree, and may flip the **Run Automated as Manual** toggle ON to include automated tests for manual re-execution (AC-10, ac-delta-15). +4. System updates the selected-tests counter in real time (AC-20). +5. QA Creator proceeds with step 6. On Launch, the Run is created containing exactly the checked tests. + +### A3: "Without tests" scope +**Branches at step 5.** +1. QA Creator clicks the **Without tests** tab. +2. System hides the tree and disables checkboxes (ac-delta-9). +3. QA Creator proceeds with step 6. On Launch, the Run is created with **zero** tests (AC-6, AC-22); the runner shell is opened with no test pre-selected (ac-delta-11). The empty Run can be populated later via Edit (AC-27) — see [UC-04](./UC-04-finish-run.md) / run-lifecycle. + +### A4: Save (store without launching) +**Branches at step 6.** +1. QA Creator clicks **Save** instead of **Launch**. +2. System creates the Run in a Pending state without opening the Runner (ac-delta-12), surfaces a success toast "Run has been created" (ac-delta-10), and closes the sidebar. +3. The new Run appears in the Runs list with a **Continue** action (AC-24) — see [UC-04](./UC-04-finish-run.md). + +### A5: RunGroup pre-populated from context +**Applies if the sidebar is opened from inside a RunGroup page.** +1. The RunGroup selector is pre-populated with that group's name but remains editable (AC-51, ac-delta-6). +2. QA Creator may keep it or switch to *Without rungroup* / another group before Launch/Save. + +### A6: Entry from Tests page — single test +**Replaces steps 1–4.** +1. QA Creator navigates to the Tests page and opens a test's extra menu → **Add to Run** (AC-11). +2. System lists only **unfinished** runs as destinations; if none exist, it offers to create a new Run (ac-delta-16). +3. On choosing an unfinished run, the test is added to it — no New Manual Run dialog is opened. Flow ends. + +### A7: Entry from Tests page — suite / Multi-select +**Replaces steps 1–4.** +1. QA Creator selects a suite (extra menu) or multiple tests (Multi-select) on the Tests page and chooses **Run Tests** → **Launch** (AC-12). +2. System opens the New Manual Run dialog **pre-populated** with the *Select tests* tab active and the suite's tests (or the Multi-select union) pre-checked (ac-delta-17). +3. QA Creator resumes at step 6 of the main flow. + +### A8: Cancel / dismiss the dialog +**Branches at any step before Launch/Save.** +1. QA Creator clicks **Cancel**, the **×** close button, or the **Back** arrow. +2. System closes the sidebar, restores the URL to `/projects/{project}/runs/`, discards the draft, and does not create a Run (ac-delta-2). + +## Exception flows + +### E1: Require-RunGroup validation blocks Launch +**Preconditions:** Project setting *Require RunGroup for new runs* is ON and the RunGroup field is empty. + +1. QA Creator clicks **Launch** at step 6. +2. System highlights the RunGroup field, displays a warning, and **does not** create the Run (AC-9, ac-delta-18). The sidebar remains open. +3. QA Creator selects a RunGroup (or creates a new one via the arrow dropdown → *New group* — see [UC-08](./UC-08-manage-rungroup.md)) and re-clicks **Launch**. Flow continues from step 7. + +This exception maps to business rule [**BR-1**](../07-business-rules.md#br-1). + +### E2: Server error / other validation failure on Launch or Save +1. System fails to create the Run (network, 4xx, 5xx, or other validation). +2. Sidebar remains open; failure is communicated inline — field highlight or error banner — without navigating away (ac-delta-18). +3. QA Creator retries or cancels. + +## Postconditions + +- **Success (Launch):** A new Run exists in the project, status **In-Progress**, tests attached per chosen scope, creator listed as the sole default assignee (AC-37). Runner opens with the first test pre-selected (AC-23, ac-delta-11). Business rule [**BR-2**](../07-business-rules.md#br-2) ensures that *Without tests* runs are legal and can be populated later. +- **Success (Save):** A new Run exists in **Pending** state, visible in the Runs list with a **Continue** affordance (ac-delta-12). +- **Failure:** No Run is created. Sidebar stays open for correction, or the actor dismisses it (ac-delta-2, ac-delta-18). + +## Business rules referenced + +- [**BR-1**](../07-business-rules.md#br-1) — Require-RunGroup gating on Launch. +- [**BR-2**](../07-business-rules.md#br-2) — A Run may be created and launched with zero tests. +- [**BR-4**](../07-business-rules.md#br-4) — Scope tabs are mutually exclusive — switching tabs discards prior-tab selection. + +## Functional requirements covered + +- AC-1, AC-2, AC-3, AC-4, AC-5, AC-6, AC-7, AC-8, AC-9, AC-10, AC-11, AC-12, AC-19, AC-20, AC-21, AC-22, AC-23, AC-37 (default assignee), AC-45 (env field presence), AC-51 (RunGroup pre-populated), AC-96 (checklist toggle presence). +- `run-creation-ac-delta.md` ac-delta-1 through ac-delta-18 (except ac-delta-14 toggle default is covered as A2 / main flow state; full delta set is cited by the suite's tests — see Verifying tests). + +## Related use cases + +- **[UC-02](./UC-02-create-mixed-run.md)** — sibling flow reached from the same entry point (arrow dropdown), but launches a manual-plus-automated Run. +- **[UC-04](./UC-04-finish-run.md)** *(Phase 2)* — consumes *Save* output (Pending Run) via **Continue**; consumes *Launch* output (In-Progress) via **Finish Run**. +- **[UC-06](./UC-06-assign-testers.md)** *(Phase 2)* — owns the *Auto-Assign Users* strategy selector surfaced via "Assign more users" link in the creation sidebar. +- **[UC-07](./UC-07-configure-environments.md)** *(Phase 2)* — owns the multi-environment configurator opened from the *Environment* field "+" (AC-45, ac-delta-7). +- **[UC-08](./UC-08-manage-rungroup.md)** *(Phase 2)* — reachable via arrow dropdown → *New group* during creation. + +## Verifying tests + + + + + + +_57 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | normal | archive-and-purge | [Archiving a Without-tests run succeeds with zero-test counts @boundary](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | AC-22 | +| 2 | normal | environment-configuration | [Select multiple environments in a single group and commit them](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | AC-45 | +| 3 | high | environment-configuration | [Open Multi-Environment Configuration modal from the sidebar @smoke](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | AC-45 | +| 4 | high | environment-configuration | [Save one-group env selection commits it to the sidebar @smoke](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | AC-45 | +| 5 | normal | run-creation | ["Run as checklist" ON at creation time persists on the created run](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-96, run-creation/ac-delta-14 | +| 6 | normal | run-creation | [Adding and removing an environment slot leaves only the initial slot @boundary](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-45, run-creation/ac-delta-7 | +| 7 | normal | run-creation | [Cancelling the Assign more users panel reverts the assignee section to creator-only @negative](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | run-creation/ac-delta-5 | +| 8 | normal | run-creation | [Create a run with multiple testers assigned via "Assign more users"](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | run-creation/ac-delta-5 | +| 9 | high | run-creation | [Create a run with two environment groups configured at creation time](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-45, run-creation/ac-delta-7 | +| 10 | high | run-creation | [Opening creation from a RunGroup page pre-populates the RunGroup field](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-51, run-creation/ac-delta-6 | +| 11 | normal | run-creation | [Arrow-dropdown closes on outside click without selecting any item @negative](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation/ac-delta-1 | +| 12 | normal | run-creation | [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation/ac-delta-1 | +| 13 | high | run-creation | [Clicking the Manual Run split-button left part navigates to the creation URL](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | AC-1, run-creation/ac-delta-1 | +| 14 | normal | run-creation | [Dismiss the New Manual Run sidebar via ${dismiss_method} restores runs list](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation/ac-delta-2 | +| 15 | critical | run-creation | [Open New Manual Run sidebar and verify form chrome renders @smoke](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | AC-1, AC-7, run-creation/ac-delta-1 | +| 16 | normal | run-creation | [Pressing ESC key closes the sidebar without creating a run @negative](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation/ac-delta-2 | +| 17 | high | run-creation | [From Tests page Multi-select, 'Run Tests' pre-populates creation with the union of selected items](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | AC-12, run-creation/ac-delta-17 | +| 18 | normal | run-creation | [From Tests page, single-test "Add to Run" lists only unfinished runs as destinations @unclear](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | AC-11, run-creation/ac-delta-16 | +| 19 | high | run-creation | [From Tests page, suite extra menu → 'Run Tests' pre-populates creation in Select tests tab](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | AC-12, run-creation/ac-delta-17 | +| 20 | normal | run-creation | [Multi-select bar 'Run Tests' is disabled when zero items are selected @negative](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | AC-12, run-creation/ac-delta-17 | +| 21 | normal | run-creation | ["Run as checklist" toggle is OFF by default and can be enabled](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, AC-96, run-creation/ac-delta-14 | +| 22 | normal | run-creation | ["Run Automated as Manual" toggle is actionable only in Select tests tab @negative](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-10, run-creation/ac-delta-15 | +| 23 | normal | run-creation | [Assignee section shows the creator with "as manager" label by default](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-37, run-creation/ac-delta-5 | +| 24 | high | run-creation | [Blank title auto-generates a default title on Launch](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-4 | +| 25 | low | run-creation | [Description accepts very large content without enforced limit @boundary](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-13 | +| 26 | normal | run-creation | [RunGroup dropdown lists "Without rungroup" plus existing named groups](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-6 | +| 27 | normal | run-creation | [RunGroup dropdown shows only "Without rungroup" when no groups exist in the project @negative](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-6 | +| 28 | low | run-creation | [Title input accepts a single character as the minimum valid input @boundary](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-3 | +| 29 | low | run-creation | [Title input enforces the 255-character maximum @boundary](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-3 | +| 30 | normal | run-creation | [Title with only whitespace characters is treated as blank @negative](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-4 | +| 31 | normal | run-creation | [Whitespace-only description is stored as blank @negative](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-7, run-creation/ac-delta-13 | +| 32 | normal | run-creation | [Cancelling the Environment modal preserves the sidebar state without assigning env @negative](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-45, run-creation/ac-delta-7 | +| 33 | high | run-creation | [Creation ${action} shows success toast "${toast_text}"](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | run-creation/ac-delta-10 | +| 34 | normal | run-creation | [Double-clicking Launch creates only a single run @negative](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-8, AC-23 | +| 35 | critical | run-creation | [Launch creates a run and navigates to the Manual Runner with the first test pre-opened @smoke](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-8, AC-23, run-creation/ac-delta-11 | +| 36 | normal | run-creation | [Required-RunGroup setting blocks Launch when the field is empty @negative @needs-project-setting @unclear](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-9, run-creation/ac-delta-18 | +| 37 | critical | run-creation | [Save creates a pending run that can be resumed via Continue](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-8, run-creation/ac-delta-12 | +| 38 | normal | run-creation | [Server-side validation error keeps the sidebar open and surfaces inline feedback @negative](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | run-creation/ac-delta-18 | +| 39 | critical | run-creation | ["All tests" is the default scope and Launch creates a run with every manual test @smoke](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-2, AC-3, AC-23 | +| 40 | low | run-creation | [Launching Select tests scope with zero tests selected @boundary @negative](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-5, run-creation/ac-delta-11 | +| 41 | normal | run-creation | [Scope tabs are mutually exclusive — switching clears previously selected tests @boundary](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-2, run-creation/ac-delta-8 | +| 42 | high | run-creation | [Select tests — browse tree, search, toggle tests, and Launch creates run with the picked subset](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-5, AC-19, AC-20, run-creation/ac-delta-9 | +| 43 | normal | run-creation | [Select tests search with a zero-match query shows empty state @negative @boundary](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-5, AC-19, run-creation/ac-delta-9 | +| 44 | normal | run-creation | [Selected-tests counter decrements back to 0 when a selected test is unticked @boundary](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-5, AC-20, run-creation/ac-delta-9 | +| 45 | high | run-creation | [Test plan — selecting multiple plans unions their tests into the run](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-4, AC-21 | +| 46 | normal | run-creation | [Test plan tab empty state shows "No test plans found" when none exist @negative](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-4, AC-21 | +| 47 | normal | run-creation | [Test tree checkboxes are disabled outside the Select tests tab @negative](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation/ac-delta-9 | +| 48 | high | run-creation | [Without tests — Launch creates an empty run and navigates to the runner shell](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-6, AC-22, run-creation/ac-delta-11 | +| 49 | critical | run-groups | [Add Manual Run from inside a RunGroup pre-populates the RunGroup field @smoke](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | AC-51 | +| 50 | high | run-lifecycle | [Launching a new run transitions it to the in-progress state and opens the runner @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | AC-23 | +| 51 | high | run-lifecycle | [Launching a previously saved Pending run transitions it to in-progress on first entry @boundary](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | AC-23 | +| 52 | high | test-execution-runner | [Checklist-mode run hides test descriptions by default (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | AC-96 | +| 53 | normal | test-execution-runner | [Per-test 'Toggle Description' in a checklist run reveals and re-hides the description (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | AC-96 | +| 54 | low | tester-assignment | [Creator manager chip has no remove control and cannot be cleared from the sidebar @negative](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | AC-37 | +| 55 | critical | tester-assignment | [Opening the New Manual Run sidebar shows the creator as manager with the Assign more users entry point @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | AC-37 | +| 56 | normal | tester-assignment | [Manager chip on Edit Run cannot be removed by any control @negative](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | AC-37 | +| 57 | normal | tester-assignment | [Save on Edit Run with all non-managers removed keeps the run with the manager only @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | AC-37 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-02-create-mixed-run.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-02-create-mixed-run.md new file mode 100644 index 0000000..1a8011b --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-02-create-mixed-run.md @@ -0,0 +1,120 @@ +# UC-02: Create a Mixed Run — QA Creator + + + +**Primary actor:** QA Creator +**Stakeholders:** Tester (executes the manual portion); CI orchestrator (executes the automated portion via a [CI Profile](../03-glossary.md#ci-profile) or via the local CLI); Project (consumes CI Profile configuration). +**Goal:** Launch a [Mixed Run](../03-glossary.md#mixed-run) that contains both manual and automated tests, routing automated execution to CI (or to a local `@testomatio/reporter` CLI invocation) while manual tests are available for human execution in the Manual Runner. +**Trigger:** QA Creator opens the arrow-dropdown next to the **Manual Run** split-button on the Runs page and chooses **Mixed Run** (AC-15, `run-creation-ac-delta.md` ac-delta-1). +**Scope:** `run-creation` (owner of entry-points and dropdown presence). Touches `run-lifecycle` (Mixed Run is a lifecycle variant; Relaunch-on-CI variants in UC-05 assume a Mixed-Run execution source). CI Profile internals are out of scope. + +## Preconditions + +- Actor has Create-Run permission (see [02-actors-and-permissions.md](../02-actors-and-permissions.md)). +- Target project contains at least one automated test registered with a code identifier. +- **Either** a CI Profile is configured in the project (for the on-CI path), **or** the actor has the `@testomatio/reporter` CLI installed locally with credentials (for the off-CI path). + +## Main success scenario — Mixed Run on CI + +1. QA Creator navigates to the Runs page. +2. QA Creator clicks the chevron (right part) of the **Manual Run** split-button. +3. System opens the arrow dropdown containing the items: *New group*, *Mixed Run*, *Report Automated Tests*, *Launch from CLI* (AC-13, AC-15, AC-17, AC-18, ac-delta-1). The creation sidebar does **not** open (ac-delta-1). +4. QA Creator clicks **Mixed Run**. +5. System opens the Mixed Run configuration surface (reuses the New Manual Run sidebar with a *Mixed* context indicator) and exposes a CI-source choice: + - **Run on CI** — select a configured [CI Profile](../03-glossary.md#ci-profile). + - **Run without CI (local CLI)** — display the CLI invocation to run locally with `@testomatio/reporter`. + (AC-16) +6. QA Creator picks **Run on CI** and selects a CI Profile. +7. QA Creator confirms the Run's Title / RunGroup / Environment / Description / scope using the same fields documented in [UC-01](./UC-01-create-manual-run.md) (AC-7). +8. QA Creator clicks **Launch**. +9. System creates the Mixed Run, triggers the selected CI Profile for the automated portion, and opens the Manual Runner for the manual portion. The Run appears in the Runs list under the *Mixed* filter tab (AC-68). + +## Alternate flows + +### A1: Mixed Run without CI (local CLI) +**Branches at step 6.** +1. QA Creator picks **Run without CI (local CLI)** (AC-16). +2. System surfaces a copyable CLI command referencing the `@testomatio/reporter` package. +3. QA Creator runs the command locally; the reporter pushes automated results to the newly created Run. +4. Manual tests remain executable in the Manual Runner as in the main flow. + +### A2: Report Automated Tests (push-only, no orchestration) +**Replaces step 4.** +1. QA Creator clicks **Report Automated Tests** in the arrow dropdown instead of **Mixed Run** (AC-17). +2. System surfaces the CLI flow for pushing automated results to an existing or newly created Run — no manual portion is launched. +3. Flow ends at push. Strictly, this is not a *Mixed* Run — retained here because it shares the same entry point and CLI surface. + +### A3: Launch from CLI +**Replaces step 4.** +1. QA Creator clicks **Launch from CLI** in the arrow dropdown (AC-18). +2. System surfaces the CLI helper to launch a Run entirely from the command line. +3. Flow ends at helper display — creation happens off-UI. + +### A4: RunGroup pre-populated / Require-RunGroup validation +Identical to [UC-01 A5](./UC-01-create-manual-run.md#a5-rungroup-pre-populated-from-context) and [UC-01 E1](./UC-01-create-manual-run.md#e1-require-rungroup-validation-blocks-launch). Mixed Run is subject to the same [Require RunGroup](../03-glossary.md#require-rungroup) gating ([**BR-1**](../07-business-rules.md#br-1)). + +## Exception flows + +### E1: No CI Profile configured +1. QA Creator opens the Mixed Run form. +2. System shows the CI-source choice with the CI Profile picker empty or disabled, and surfaces guidance to configure a profile (or to use the local CLI path). +3. QA Creator either sets up a CI Profile (out of scope for this flow) or switches to the local-CLI path (A1). + +> **Note:** exact UI copy for this state is unverified in the POC window — see [13-open-questions.md § OQ-02](../13-open-questions.md#oq-02). Tracked by the feature-review HIGH item ([ref § 7 #4](../../../test-cases/manual-tests-execution/_feature-review.md)). + +### E2: CI trigger fails at Launch +1. System creates the Run record but the CI Profile call fails. +2. Behaviour is unverified in the POC window — see [13-open-questions.md § OQ-02](../13-open-questions.md#oq-02). + +### E3: Require-RunGroup violation +See [UC-01 E1](./UC-01-create-manual-run.md#e1-require-rungroup-validation-blocks-launch) — applies identically. + +## Postconditions + +- **Success:** A Mixed Run exists, visible under the Runs list *Mixed* filter (AC-68). Automated tests are queued on CI (or awaiting local CLI push); manual tests are executable in the Manual Runner. Mixed Run participates in the standard Run lifecycle — Finish, Archive, Purge, Relaunch variants apply, including the CI-aware Relaunch forms (AC-59, AC-60). +- **Failure:** No Mixed Run is created, or a Run exists but its automated leg failed to trigger (see E2 caveat). + +## Business rules referenced + +- [**BR-1**](../07-business-rules.md#br-1) — Require-RunGroup gating (shared with UC-01). +- [**BR-3**](../07-business-rules.md#br-3) — A Mixed Run requires either a configured CI Profile (on-CI path) or a local `@testomatio/reporter` CLI invocation (off-CI path). + +## Functional requirements covered + +- AC-13 (dropdown item presence — *New group*, touched as sibling), AC-15 (Mixed Run item), AC-16 (CI vs local CLI), AC-17 (Report Automated Tests item), AC-18 (Launch from CLI item). +- `run-creation-ac-delta.md` ac-delta-1 (split-button chevron behaviour). + +## Related use cases + +- **[UC-01](./UC-01-create-manual-run.md)** — the purely-manual sibling reached from the same split-button (left part). +- **[UC-05](./UC-05-relaunch-run.md)** *(Phase 2)* — owns Relaunch-on-CI variants that assume a Mixed or Automated Run source (AC-59, AC-60). +- **[UC-08](./UC-08-manage-rungroup.md)** *(Phase 2)* — the *New group* item in the same dropdown. + +## Verifying tests + + + + + + +_11 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | normal | run-creation | [Arrow-dropdown closes on outside click without selecting any item @negative](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | AC-13, run-creation/ac-delta-1 | +| 2 | normal | run-creation | [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | AC-13, AC-15, AC-17, AC-18, run-creation/ac-delta-1 | +| 3 | high | run-creation | [Clicking the Manual Run split-button left part navigates to the creation URL](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation/ac-delta-1 | +| 4 | critical | run-creation | [Open New Manual Run sidebar and verify form chrome renders @smoke](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation/ac-delta-1 | +| 5 | high | run-groups | [Create a new RunGroup via the New group dialog @smoke](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | AC-13 | +| 6 | normal | run-groups | [Dismissing the New RunGroup panel via ${dismiss_method} does not create a group @negative](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | AC-13 | +| 7 | normal | runs-list-management | [Multi-environment runs render with environment indicators in the Runs list](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-68 | +| 8 | high | runs-list-management | [RunGroup in the Groups tab expands in place to reveal child runs @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-68 | +| 9 | critical | runs-list-management | [Switch to the ${tab} filter tab scopes the list to matching runs @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-68 | +| 10 | low | runs-list-management | [Switching to the Groups tab in a project with no RunGroups shows an empty state @negative](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-68 | +| 11 | normal | runs-list-management | [Switching to the Unfinished tab in a project with no unfinished runs shows an empty state @negative](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-68 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-03-execute-test-in-runner.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-03-execute-test-in-runner.md new file mode 100644 index 0000000..cac0140 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-03-execute-test-in-runner.md @@ -0,0 +1,177 @@ +# UC-03: Execute a test in the Manual Runner — Tester + + + +**Primary actor:** Tester +**Stakeholders:** QA Creator / Manager (observes results and progress); Project (consumes [Custom Statuses](../03-glossary.md#custom-status) configured at project scope); other assigned testers (share the same runner tree, see per-test assignee chips). +**Goal:** Record a pass/fail/skip outcome for a test inside an ongoing [Run](../03-glossary.md#run), optionally enriched with result message, attachments, step-by-step markings, notes, time tracking, and a [Custom Status](../03-glossary.md#custom-status). +**Trigger:** Tester opens the [Manual Runner](../03-glossary.md#manual-runner) for an [In-Progress](../03-glossary.md#in-progress) Run — either from **Launch**/**Continue** in the Runs list, or from a direct deep link `/projects/{p}/runs/launch/{id}/?entry={testId}`. +**Scope:** `test-execution-runner` (owner). Touches `bulk-status-actions` (Multi-Select mode — variant flow moves to [UC-09](./UC-09-bulk-status-in-runner.md)), `tester-assignment` (per-test assignee chip rendering only — assignment UX owned by [UC-06](./UC-06-assign-testers.md)), `run-lifecycle` (runner is only reachable for In-Progress Runs — state gating). + +## Preconditions + +- Actor holds Execute-Run permission on the target project (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +- The target Run is in the [In-Progress](../03-glossary.md#in-progress) state — [Finished](../03-glossary.md#finished) and [Terminated](../03-glossary.md#terminated) Runs open the [Run Report](../03-glossary.md#run-report) instead (`test-execution-runner-ac-delta.md` ac-delta-1; owner of the state transition is [UC-04](./UC-04-finish-run.md)). +- The Run contains at least one test — an empty *Without tests* Run opens the runner shell with no test pre-selected ([BR-2](../07-business-rules.md#br-2)). +- Actor is assigned to the Run, or can execute as the Run's manager (permission semantics noted in [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix) — self-assignment in the runner is covered in A7). + +## Main success scenario — record a PASSED result with a message + +1. Tester opens the Manual Runner for an In-Progress Run and the first test is pre-selected in the detail pane (ac-delta-1, ac-delta-2). +2. System renders the runner layout: + - **Left:** tests tree grouped by suite, with status icons, labels / tags chips, priority markers, and per-test assignee avatars (ac-delta-22). + - **Right:** detail pane with Title, Description (hidden when the Run is a [Checklist](../03-glossary.md#run-as-checklist), see A5), Steps, Attachments, Result message field, standard-status buttons (PASSED / FAILED / SKIPPED), optional [Custom Status](../03-glossary.md#custom-status) dropdown (disabled until a standard status is chosen, ac-delta-21, AC-31), Notes area, and Extra menu (AC-29, AC-30, ac-delta-2). + - **Header:** status counters (Passed / Failed / Skipped / Pending / Custom), search + Priority filter (ac-delta-17), Multi-Select toggle, Extra options dots (ac-delta-16), Finish Run button. +3. Tester types a Result message into the message field (ac-delta-3). +4. Tester clicks **PASSED** (AC-29). +5. System commits the status, increments the *Passed N* counter, updates the tests-tree row icon, and keeps the detail pane focused on the test (AC-29, AC-30). +6. Tester presses the arrow key (↓) or clicks the next test row — System advances selection to the next test matching the current filter scope (ac-delta-18). + +## Alternate flows + +### A1: FAILED with attachment + Custom Status +**Branches at step 4.** +1. Tester clicks **FAILED** (AC-29). +2. Tester drags a screenshot into the Attachments drop zone (ac-delta-4) — System stores it and renders a thumbnail. Tester may toggle the attachment view between Large / Small Thumbnail / Grid / List (AC-32, ac-delta-5) and open the attachment in **Fit to width** or **Full screen** (AC-33, ac-delta-6). +3. Tester chooses a Custom Status (e.g., `Blocked`) from the dropdown, which is now enabled (AC-31, ac-delta-21). +4. System records standard=FAILED + custom=Blocked, increments both standard and custom counters, and updates the test row with both icons. + +### A2: Step-by-step marking +**Extends the detail pane at step 2/3.** +1. Tester clicks a Step to mark it **Passed** (single-click → green), double-clicks a Step to mark it **Failed** (red), or triple-clicks to mark it **Skipped** (grey) (AC-35, ac-delta-8). +2. System records step results alongside the test result; the markings survive navigation away and return (AC-36, ac-delta-9). + +### A3: Delete an attachment +**Extends A1 step 2 after upload.** +1. Tester clicks the trash icon on the attachment. +2. System prompts *"Are you sure?"* (AC-34, ac-delta-7). +3. Tester confirms — System removes the attachment. On cancel, the attachment is preserved. + +### A4: Notes — test / suite / bulk / convert-to-test +1. Tester clicks **Create notes +** on the selected test and enters note text — System attaches the note to the test; it is visible on re-entry (ac-delta-10). +2. On a suite header, Tester uses **Add note to suite** — System attaches the note to the suite context (ac-delta-11). +3. Tester opens a note's context action and chooses **Convert to Test** — System creates a new test under the parent suite and the tree refreshes (ac-delta-12). +4. In [Multi-Select](../03-glossary.md#multi-select) mode, Tester selects several tests and invokes **Create notes +** — System attaches the same note body to every selected test (ac-delta-13). + +### A5: Run as Checklist — description hidden +**Applies when the Run was created with the [Run as Checklist](../03-glossary.md#run-as-checklist) toggle ON (AC-96).** +1. The Description area is hidden by default for every test. +2. Tester opens the per-test Extra menu and clicks **Toggle Description** (ac-delta-15) — System reveals the description for that test; a subsequent click hides it again. +3. Per-test description visibility is local — other tests remain in their default hidden state. + +### A6: Filter + Priority narrow the tree +1. Tester applies a status filter (e.g., `Pending only`), a search string, or a Priority chip (Low / Normal / High / Critical, ac-delta-17). +2. System restricts the tree to matching tests; ↑/↓ navigation scopes to matching tests only (ac-delta-18). This shapes the [selection-scope](../03-glossary.md#filter-applied-scope) used by bulk actions in [UC-09](./UC-09-bulk-status-in-runner.md). + +### A7: Time tracking — Auto-Track vs Set Time +1. Tester enables **Auto-Track** — System starts a stopwatch when the test is opened and stops on navigate-away or status apply; the elapsed duration is stored on the result (ac-delta-19). +2. Alternatively, Tester opens **Set Time** and enters an explicit `hh:mm:ss`; the manual value replaces the auto-tracked value (ac-delta-20). + +### A8: Extra options toggles (tree rendering) +1. Tester opens the runner header's Extra options menu (dots icon, ac-delta-16). +2. System exposes four toggles: **Refresh structure** (reloads the tree), **Show/Hide Creation Buttons**, **Show/Hide Labels**, **Show/Hide Tags**. Each updates the tree immediately. + +### A9: Resize the detail pane +1. Tester drags the horizontal divider between description and result area (ac-delta-14). +2. System persists the resized height for the current session. + +### A10: Fast Forward +1. Tester looks for a **Fast Forward** control to auto-advance through pending tests (AC-97). +2. **Behaviour unverified in the POC window** — see [13-open-questions.md § OQ-11](../13-open-questions.md#oq-11). Captured as [AC-97 UNCLEAR](../../../test-cases/manual-tests-execution/test-execution-runner-ac-delta.md). + +## Exception flows + +### E1: Run is not In-Progress +1. Tester opens a deep link to a [Finished](../03-glossary.md#finished) or [Terminated](../03-glossary.md#terminated) Run. +2. System opens the [Run Report](../03-glossary.md#run-report) (see [UC-11](./UC-11-view-run-report.md)) instead of the runner — the runner is gated on run state (ac-delta-1). No error is shown. + +### E2: Custom Status picked without a standard status +1. Tester attempts to open the Custom Status dropdown before clicking PASSED / FAILED / SKIPPED. +2. System keeps the dropdown disabled (ac-delta-21, AC-31) — no implicit standard status is inferred. This is enforced by [BR-5](../07-business-rules.md#br-5). + +### E3: Attachment upload failure +1. Tester drags a file whose size / type is rejected (exact limits unverified in POC — tracked in [13-open-questions.md § OQ-12](../13-open-questions.md#oq-12)). +2. System surfaces an inline failure indicator; previously-uploaded attachments are preserved. + +## Postconditions + +- **Success:** The selected test's stored result is PASSED / FAILED / SKIPPED (plus optional Custom Status, Result message, attachments, step markings, time, notes). Runner counters reflect the change; the tree row icon updates synchronously. Run state remains [In-Progress](../03-glossary.md#in-progress) (no auto-finish on last test — **Finish Run** is an explicit action owned by [UC-04](./UC-04-finish-run.md)). +- **Failure:** No status is recorded; detail pane remains editable. Attachments / notes may be partially persisted (per-call atomicity — see [13-open-questions.md § OQ-12](../13-open-questions.md#oq-12)). + +## Business rules referenced + +- [**BR-5**](../07-business-rules.md#br-5) — Custom Status requires a standard status first. +- [**BR-2**](../07-business-rules.md#br-2) — Empty Runs open the runner shell without a pre-selected test (inherits from UC-01 creation). + +## Functional requirements covered + +- AC-29, AC-30, AC-31, AC-32, AC-33, AC-34, AC-35, AC-36, AC-96, AC-97. +- `test-execution-runner-ac-delta.md` ac-delta-1..22. + +## Related use cases + +- **[UC-01](./UC-01-create-manual-run.md)** — owns the *Run as Checklist* toggle surfaced as A5 here. +- **[UC-04](./UC-04-finish-run.md)** — Finish Run closes out the In-Progress state. +- **[UC-06](./UC-06-assign-testers.md)** — owns per-test / per-suite assignment; runner only renders the per-test avatar (ac-delta-22). +- **[UC-09](./UC-09-bulk-status-in-runner.md)** — Multi-Select variant of runner status apply. +- **[UC-11](./UC-11-view-run-report.md)** — consumes the recorded results for reporting. + +## Verifying tests + + + + + + +_42 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | critical | bulk-status-actions | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters @smoke](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | AC-29 | +| 2 | high | bulk-status-actions | [Bulk quick-set ${status} via the toolbar with native confirm Accept applies the status @smoke](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | AC-29 | +| 3 | low | bulk-status-actions | [Custom status dropdown appears in the bulk Result Message modal when custom statuses exist @unclear @needs-project-setting](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | AC-31 | +| 4 | high | bulk-status-actions | [Bulk apply with a message persists the status and the message together](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-30 | +| 5 | normal | run-creation | ["Run as checklist" ON at creation time persists on the created run](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-96 | +| 6 | normal | run-creation | ["Run as checklist" toggle is OFF by default and can be enabled](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-96 | +| 7 | normal | test-execution-runner | [Add an attachment via drag-and-drop onto the drop zone](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | AC-32, test-execution-runner/ac-delta-4 | +| 8 | high | test-execution-runner | [Add an attachment via the 'browse' file picker](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | AC-32, test-execution-runner/ac-delta-4 | +| 9 | normal | test-execution-runner | [Cancelling the 'Are you sure?' dialog keeps the attachment @negative](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | AC-34, test-execution-runner/ac-delta-7 | +| 10 | normal | test-execution-runner | [Change attachment display layout to ${view_mode} @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | AC-32, test-execution-runner/ac-delta-5 | +| 11 | high | test-execution-runner | [Deleting the last attachment with 'Confirm' restores the empty drop zone @boundary](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | AC-34, test-execution-runner/ac-delta-7 | +| 12 | normal | test-execution-runner | [Open an attachment preview in ${preview_mode} and close back to the runner @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | AC-33, test-execution-runner/ac-delta-6 | +| 13 | high | test-execution-runner | [Checklist-mode run hides test descriptions by default (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | AC-96, test-execution-runner/ac-delta-15 | +| 14 | normal | test-execution-runner | [Custom sub-status counter impact is visible in the runner header (cross-cut E)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | AC-31, test-execution-runner/ac-delta-21 | +| 15 | normal | test-execution-runner | [Per-test 'Toggle Description' in a checklist run reveals and re-hides the description (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | AC-96, test-execution-runner/ac-delta-15 | +| 16 | normal | test-execution-runner | [Per-test assignee badge is visible in the tree on a multi-assignee run (cross-cut B) @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | test-execution-runner/ac-delta-22 | +| 17 | low | test-execution-runner | ['Refresh structure' reloads the tests tree from the server](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | test-execution-runner/ac-delta-16 | +| 18 | normal | test-execution-runner | [Extra-options menu toggle ${toggle_label} hides the matching chrome in the tree](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | test-execution-runner/ac-delta-16 | +| 19 | normal | test-execution-runner | [Keyboard navigation between tests respects the active priority filter (cross-cut F)](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | test-execution-runner/ac-delta-18 | +| 20 | normal | test-execution-runner | [Opening a finished run does not present the Manual Runner @negative](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | test-execution-runner/ac-delta-1 | +| 21 | high | test-execution-runner | [Priority filter ${priority_level} restricts the tree to matching tests](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | test-execution-runner/ac-delta-17 | +| 22 | normal | test-execution-runner | [Priority filter with no matching tests renders an empty tree @negative @boundary](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | test-execution-runner/ac-delta-17 | +| 23 | low | test-execution-runner | [Resize handle between the tree and the detail pane changes pane widths](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | test-execution-runner/ac-delta-14 | +| 24 | normal | test-execution-runner | [Add a note to a suite via the suite row affordance](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | test-execution-runner/ac-delta-11 | +| 25 | normal | test-execution-runner | [Bulk-create a note across multiple selected tests @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | test-execution-runner/ac-delta-13 | +| 26 | normal | test-execution-runner | [Convert an existing note into a full test](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | test-execution-runner/ac-delta-12 | +| 27 | high | test-execution-runner | [Create a note via the runner header 'Create notes' action](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | test-execution-runner/ac-delta-10 | +| 28 | normal | test-execution-runner | [Saving a note with an empty title is rejected @negative](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | test-execution-runner/ac-delta-10 | +| 29 | normal | test-execution-runner | [Applied custom sub-status is reflected on the test row indicator in the tree (cross-cut E)](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | test-execution-runner/ac-delta-21 | +| 30 | critical | test-execution-runner | [Apply standard status ${status} to a pending test @smoke](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-29, test-execution-runner/ac-delta-1, test-execution-runner/ac-delta-2 | +| 31 | high | test-execution-runner | [Applying a custom sub-status to ${standard_status} keeps the standard status selected](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-31, test-execution-runner/ac-delta-21 | +| 32 | high | test-execution-runner | [Custom sub-status dropdown is disabled before a standard status is chosen @negative](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-31, test-execution-runner/ac-delta-21 | +| 33 | high | test-execution-runner | [Result message is editable only after a standard status is selected @negative](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-30, test-execution-runner/ac-delta-2 | +| 34 | high | test-execution-runner | [Result message persists after navigating to another test and back](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-30, test-execution-runner/ac-delta-3 | +| 35 | normal | test-execution-runner | [Switching status from Passed to Failed updates the header counters accordingly @boundary](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-29, AC-30 | +| 36 | normal | test-execution-runner | [Test detail pane renders the documented sections for a test with description and steps](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | test-execution-runner/ac-delta-2 | +| 37 | normal | test-execution-runner | [Step left unmarked remains Pending when other steps of the same test are marked @negative @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) | AC-35, AC-36 | +| 38 | normal | test-execution-runner | [Step markings persist after closing and re-opening the test @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) | AC-36, test-execution-runner/ac-delta-9 | +| 39 | high | test-execution-runner | [Step-by-step click gesture ${click_count} sets the step to ${target_status} @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) | AC-35, test-execution-runner/ac-delta-8 | +| 40 | normal | test-execution-runner | [Auto-Track records elapsed time on the test result](../../../../test-cases/manual-tests-execution/test-execution-runner/time-tracking.md) | test-execution-runner/ac-delta-19 | +| 41 | normal | test-execution-runner | [Saving 'Set Time' with an empty duration is rejected @negative @boundary @unclear](../../../../test-cases/manual-tests-execution/test-execution-runner/time-tracking.md) | test-execution-runner/ac-delta-20 | +| 42 | normal | test-execution-runner | [Set Time manual entry replaces the auto-tracked duration](../../../../test-cases/manual-tests-execution/test-execution-runner/time-tracking.md) | test-execution-runner/ac-delta-20 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-04-finish-run.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-04-finish-run.md new file mode 100644 index 0000000..43f776e --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-04-finish-run.md @@ -0,0 +1,128 @@ +# UC-04: Finish a Run — QA Creator / Tester + + + +**Primary actor:** QA Creator (also performed by Tester who holds Execute permission). +**Stakeholders:** Manager / Owner (observes the transition); downstream consumers of the [Run Report](../03-glossary.md#run-report), TQL filters, and Combined Report ([UC-08](./UC-08-manage-rungroup.md), [UC-10](./UC-10-manage-runs-list.md), [UC-11](./UC-11-view-run-report.md)); Tests with *Pending* status at finish time (auto-marked Skipped per [BR-7](../07-business-rules.md#br-7)). +**Goal:** Close out an [In-Progress](../03-glossary.md#in-progress) [Run](../03-glossary.md#run) to the [Finished](../03-glossary.md#finished) terminal state so its results are available for reporting, comparison, archival, and Relaunch variants. +**Trigger:** Actor clicks **Finish Run** in the Manual Runner header, or **Continue** on a Pending/unfinished Run in the Runs list and then Finish. +**Scope:** `run-lifecycle` (owner). Touches `run-creation` (consumes Launched/Saved outputs from [UC-01](./UC-01-create-manual-run.md) / [UC-02](./UC-02-create-mixed-run.md)), `tester-assignment` (Edit-run may amend assignees — see [UC-06](./UC-06-assign-testers.md)), `environment-configuration` (Edit-run may amend environment — see [UC-07](./UC-07-configure-environments.md)), `runs-list-management` (Continue action is exposed from the list — [UC-10](./UC-10-manage-runs-list.md)). + +## Preconditions + +- Target Run is either **In-Progress** (the actor is executing in the runner) or **Pending** (Saved via [UC-01 A4](./UC-01-create-manual-run.md#a4-save-store-without-launching) and resumable via **Continue**). +- Actor holds Manage-Run permission (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +- The Run must not already be [Terminated](../03-glossary.md#terminated) (Terminated Runs cannot be resumed — [BR-8](../07-business-rules.md#br-8)). + +## Main success scenario — Finish an In-Progress Run with some Pending tests + +1. Actor is in the Manual Runner of an In-Progress Run with N tests Pending. +2. Actor clicks **Finish Run** in the runner header (AC-25). +3. System opens a confirmation dialog stating the count of not-run tests and announcing that they will be marked **Skipped** unless linked to another result (AC-28, `run-lifecycle-ac-delta.md` ac-delta-9). +4. Actor confirms. +5. System transitions the Run to **Finished** (AC-25), flips every Pending test to **Skipped** (AC-26, [BR-7](../07-business-rules.md#br-7)), navigates to the [Run Report](../03-glossary.md#run-report), and exposes Relaunch variants + Archive actions on the row extra menu going forward (see [UC-05](./UC-05-relaunch-run.md), [UC-12](./UC-12-archive-unarchive-purge.md)). + +## Alternate flows + +### A1: Continue a Pending Run, then Finish +**Replaces step 1.** +1. Run is in Pending state (created via **Save** in [UC-01 A4](./UC-01-create-manual-run.md#a4-save-store-without-launching)). +2. Actor clicks **Continue** in the Runs list row — System transitions the Run to In-Progress on first entry and navigates to `/projects/{p}/runs/launch/{id}/` (AC-24, ac-delta-7). +3. Flow continues at the main scenario step 2. + +### A2: Edit an unfinished Run — `+ Tests`, `+ Plans`, remove test, amend metadata +**Branches before Finish; actor opens Edit Run from the runner header or the Runs list row.** +1. Edit sidebar exposes: Assign to, Title, Environment, Description, `+ Tests`, `+ Plans`, and per-test Trash icon (AC-27, ac-delta-3, ac-delta-4, ac-delta-5). +2. `+ Tests` appends selected tests to the Run without restarting it; added tests are Pending (ac-delta-3). +3. `+ Plans` appends a plan's tests; added tests are Pending (ac-delta-4). +4. Trash icon on a row removes that test; removal persists on Save (ac-delta-5). +5. **Save** commits; **Cancel** discards — no implicit save on navigation (ac-delta-6). +6. Flow continues to Finish (main scenario step 2). + +### A3: Multi-environment Run — finish one env group at a time +**Applies when the Run spans ≥ 2 environment groups (see [UC-07](./UC-07-configure-environments.md) for configuration).** +1. Each env group runs its own lifecycle; Finish is applied per-group — see *Concern A* in [destructuring.md](../../../test-cases/manual-tests-execution/destructuring.md#cross-cutting-concerns). +2. The runner header exposes one Finish Run action per env; confirming Finish transitions only the active env's slice. +3. When the last env group finishes, the parent Run's consolidated state becomes Finished and the Report is served. + +> **Note:** exact multi-env Finish affordance is unverified in the POC window — see [13-open-questions.md § OQ-13](../13-open-questions.md#oq-13). + +### A4: Edit assignees / environment on an ongoing Run +1. Edit sidebar amends assignees (delegated to [UC-06](./UC-06-assign-testers.md)) or env groups (delegated to [UC-07](./UC-07-configure-environments.md)) without restarting the Run (AC-27; concern B and concern A). + +## Exception flows + +### E1: Cancel the Finish Run confirmation +1. Actor clicks Finish Run and the confirmation dialog appears. +2. Actor dismisses the dialog (Cancel / `Esc`). +3. System leaves the Run In-Progress; no status changes occur; the runner remains open (AC-28, ac-delta-10). This preserves [BR-7](../07-business-rules.md#br-7)'s invariant — Pending tests are only auto-Skipped on confirmed Finish. + +### E2: Actor attempts to Finish a Terminated Run +1. Run was previously Terminated (e.g., by an admin via the runner's Terminate affordance — tracked in [13-open-questions.md § OQ-14](../13-open-questions.md#oq-14)). +2. System does not expose Finish Run on a Terminated Run — the runner is not reachable and the Run Report is served instead (`test-execution-runner-ac-delta.md` ac-delta-1). The `Terminated → In-Progress` transition is explicitly absent ([05-state-diagrams.md § Run](../05-state-diagrams.md#run), [BR-8](../07-business-rules.md#br-8)). + +### E3: Server error on Finish commit +1. System fails to commit the transition (network, 4xx, 5xx). +2. Run stays In-Progress; the runner remains open; an error banner/toast surfaces inline. Actor may retry. + +## Postconditions + +- **Success:** Run state is **Finished**. Every previously Pending test is now Skipped ([BR-7](../07-business-rules.md#br-7), AC-26). Row extra menu now exposes Relaunch variants (AC-58..AC-62, ac-delta-8 — owned by [UC-05](./UC-05-relaunch-run.md)), Archive ([UC-12](./UC-12-archive-unarchive-purge.md)), and Export / Share entry points in the Report ([UC-11](./UC-11-view-run-report.md)). +- **Failure:** Run remains In-Progress (or Pending if A1 was interrupted). No test statuses are mutated. + +## Business rules referenced + +- [**BR-7**](../07-business-rules.md#br-7) — Finished Pending → Skipped transition. +- [**BR-8**](../07-business-rules.md#br-8) — Terminated Runs cannot resume. + +## Functional requirements covered + +- AC-23, AC-24, AC-25, AC-26, AC-27, AC-28. +- `run-lifecycle-ac-delta.md` ac-delta-3 (+ Tests), ac-delta-4 (+ Plans), ac-delta-5 (Trash delete), ac-delta-6 (Save/Cancel), ac-delta-7 (Continue visibility), ac-delta-9 (Finish dialog message), ac-delta-10 (Cancel Finish). + +## Related use cases + +- **[UC-01](./UC-01-create-manual-run.md)** / **[UC-02](./UC-02-create-mixed-run.md)** — upstream creation flows producing In-Progress / Pending Runs. +- **[UC-03](./UC-03-execute-test-in-runner.md)** — per-test execution inside the In-Progress Run. +- **[UC-05](./UC-05-relaunch-run.md)** — Relaunch variants consume the Finished state. +- **[UC-06](./UC-06-assign-testers.md)** — Edit-run assignee amendment. +- **[UC-07](./UC-07-configure-environments.md)** — Edit-run environment amendment + multi-env Finish semantics. +- **[UC-11](./UC-11-view-run-report.md)** — destination after Finish. +- **[UC-12](./UC-12-archive-unarchive-purge.md)** — Archive / Purge become actionable on Finished Runs. + +## Verifying tests + + + + + + +_19 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | normal | run-creation | [Double-clicking Launch creates only a single run @negative](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-23 | +| 2 | critical | run-creation | [Launch creates a run and navigates to the Manual Runner with the first test pre-opened @smoke](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-23 | +| 3 | critical | run-creation | ["All tests" is the default scope and Launch creates a run with every manual test @smoke](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | AC-23 | +| 4 | high | run-lifecycle | [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | AC-25 | +| 5 | high | run-lifecycle | [Adding and removing testers on an ongoing run via Edit Run persists the assignee set](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | AC-27, run-lifecycle/ac-delta-6 | +| 6 | normal | run-lifecycle | [Appending a plan via the `+ Plans` tab on an ongoing run adds the plan's tests as Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | AC-27, run-lifecycle/ac-delta-4 | +| 7 | high | run-lifecycle | [Appending tests via the `+ Tests` tab on an ongoing run adds them as Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | AC-27, run-lifecycle/ac-delta-3 | +| 8 | normal | run-lifecycle | [Cancelling the Edit Run form discards pending changes @negative](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | run-lifecycle/ac-delta-6 | +| 9 | normal | run-lifecycle | [Edit is not available on a finished run @negative @unclear](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | AC-27 | +| 10 | high | run-lifecycle | [Editing ${field} on an ongoing run via Save persists the change @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | AC-27, run-lifecycle/ac-delta-6 | +| 11 | normal | run-lifecycle | [Removing a test from an ongoing run via the row trash icon persists the removal](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | AC-27, run-lifecycle/ac-delta-5 | +| 12 | high | run-lifecycle | [Cancelling the Finish Run confirmation leaves the run ongoing @negative](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | AC-28, run-lifecycle/ac-delta-10 | +| 13 | critical | run-lifecycle | [Finish Run confirms and terminates the run, marking Pending tests as Skipped @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | AC-25, AC-26, AC-28, run-lifecycle/ac-delta-9 | +| 14 | normal | run-lifecycle | [Finish Run when every test already has a result still surfaces the confirmation with count 0 @boundary](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | AC-25, AC-28, run-lifecycle/ac-delta-9 | +| 15 | normal | run-lifecycle | [Continue and Edit are not available on a finished run @negative](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | run-lifecycle/ac-delta-7, AC-27 | +| 16 | high | run-lifecycle | [Continue from the Run Detail panel resumes an unfinished run in the Manual Runner](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | AC-24, run-lifecycle/ac-delta-7 | +| 17 | high | run-lifecycle | [Launching a new run transitions it to the in-progress state and opens the runner @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | AC-23 | +| 18 | high | run-lifecycle | [Launching a previously saved Pending run transitions it to in-progress on first entry @boundary](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | AC-23 | +| 19 | normal | run-lifecycle | [Resume an unfinished run from the Runs list row extra menu via the 'Launch' item](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | AC-24, run-lifecycle/ac-delta-7 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-05-relaunch-run.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-05-relaunch-run.md new file mode 100644 index 0000000..e43c54b --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-05-relaunch-run.md @@ -0,0 +1,156 @@ +# UC-05: Relaunch a Run — QA Creator + + + +**Primary actor:** QA Creator +**Stakeholders:** Tester (receives the re-opened runner); CI orchestrator (consumes on-CI variants — Relaunch Failed on CI, Relaunch All on CI); Project (consumes RunGroup / environment / assignee inheritance); downstream Report / TQL consumers (new Runs land in the list and become filterable). +**Goal:** Re-execute some or all tests of a [Finished](../03-glossary.md#finished) Run — either in place (same Run ID), as a fresh Run, or as an independent copy — with fine-grained control over test selection, title, and prior-result retention. +**Trigger:** Actor opens the **Relaunch ▾** menu on a Finished Run (exposed from the Runs list row extra menu, the [Run Report](../03-glossary.md#run-report), or the Run Detail extra menu — `run-lifecycle-ac-delta.md` ac-delta-8). +**Scope:** `run-lifecycle` (owner). Touches `run-creation` (Launch-a-Copy produces a sibling Run), `test-execution-runner` (manual re-execution opens the Runner — see [UC-03](./UC-03-execute-test-in-runner.md)), `bulk-status-actions` / filter-applied scope for Advanced Relaunch selection ([UC-09](./UC-09-bulk-status-in-runner.md), AC-66), `run-detail-and-report` (entry point from the report — [UC-11](./UC-11-view-run-report.md)). + +## Preconditions + +- Target Run is in the **Finished** state (`run-lifecycle-ac-delta.md` ac-delta-8 — Relaunch variants are not exposed on In-Progress / Pending / Terminated Runs). +- Actor holds Create-Run permission (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +- For on-CI variants (*Relaunch Failed on CI*, *Relaunch All on CI*): a [CI Profile](../03-glossary.md#ci-profile) must be configured on the project (same precondition as UC-02, [BR-3](../07-business-rules.md#br-3)). +- Source Run's assignees, environment, and RunGroup exist (inherited unless overridden — ac-delta-13). + +## Main success scenario — "Relaunch Manually" (re-execute all tests in UI) + +1. Actor opens Relaunch ▾ on a Finished Run. +2. System exposes six variants: + - **Relaunch** (AC-58) — re-open the same Run in the Manual Runner in place. + - **Launch a Copy** (AC-67) — duplicate the Run as a new sibling Run (same scope and assignees). + - **Advanced Relaunch** (AC-62) — sidebar with full control over selection, new/same Run ID, and Keep-values semantics. + - **Relaunch Failed on CI** (AC-59) — failed automated tests go to CI; failed manual tests open in the runner. + - **Relaunch All on CI** (AC-60) — every automated test is re-triggered via the CI Profile. + - **Relaunch Manually** (AC-61) — every test re-executes manually in UI (including automated ones treated as manual). +3. Actor clicks **Relaunch Manually**. +4. System re-opens the Run in the [Manual Runner](../03-glossary.md#manual-runner); every test is reset to Pending; the Run transitions to In-Progress (AC-61). The title, assignees, environment, and RunGroup of the source Run are carried over (ac-delta-13). +5. Actor executes tests per [UC-03](./UC-03-execute-test-in-runner.md) and finishes per [UC-04](./UC-04-finish-run.md). + +## Alternate flows + +### A1: Relaunch (in-place) +1. Actor picks **Relaunch** (AC-58). +2. System re-opens the same Run ID in the Manual Runner; every test is reset to Pending; the Run is In-Progress. No new Run is created. + +### A2: Launch a Copy +1. Actor picks **Launch a Copy** (AC-67) — creates a sibling Run with the same scope. +2. System creates a new Run record; both the source Finished Run and the new In-Progress copy coexist in the Runs list. The copy opens in the Manual Runner (or CI path for Mixed Runs — see A7). + +### A3: Launch a Copy Manually +**Distinct from A2 — enforces the manual path regardless of source type.** +1. Actor picks **Launch a Copy Manually** (ac-delta-1). +2. System creates a new Run with the same scope and opens the Manual Runner immediately (not CI). + +### A4: Relaunch Failed on CI +**Applies when the source Run is Mixed and the CI Profile is configured.** +1. Actor picks **Relaunch Failed on CI** (AC-59). +2. System triggers the CI Profile for tests that are *automated and failed*, and opens the Manual Runner for tests that are *manual and failed*. The rest of the Run's results are preserved on the source Run. [BR-3](../07-business-rules.md#br-3) gates the on-CI portion — missing CI Profile blocks the variant. + +### A5: Relaunch All on CI +1. Actor picks **Relaunch All on CI** (AC-60). +2. System triggers the CI Profile for every automated test; manual tests are either untouched or queued per project policy (see [13-open-questions.md § OQ-15](../13-open-questions.md#oq-15)). + +### A6: Advanced Relaunch (per-test selection, Create-new-run toggle, Keep values) +1. Actor picks **Advanced Relaunch** (AC-62) — System opens the Advanced sidebar. +2. Sidebar fields: + - **Title** — optional override; otherwise inherits source title with a relaunch indicator (ac-delta-13). + - **Create new run** (toggle). + - **Keep values** (toggle) — enabled only when *Create new run* is ON (ac-delta-11). + - **Tests list** with per-test checkboxes and **Select all** that honours any active filter (ac-delta-12, AC-66). + - **Relaunch** (primary action). +3. Actor configures selection and toggles; clicks **Relaunch**. +4. System closes the sidebar and navigates the actor to the Manual Runner of the target Run (new Run ID if Create-new-run:ON, original Run ID if OFF — ac-delta-2). +5. Apply matrix: + + | Create new run | Keep values | Outcome | + |---|---|---| + | **ON** | **ON** | New Run ID; selected tests reset to Pending; **unselected tests retain their source statuses** (AC-63, AC-65). | + | **ON** | **OFF** | New Run ID; every test resets to Pending (AC-63). | + | **OFF** | n/a (hidden/disabled, ac-delta-11) | Original Run ID reused; only selected tests reset to Pending (AC-64). | + +### A7: Relaunch on a Mixed Run +**Applies when the source Run is a [Mixed Run](../03-glossary.md#mixed-run).** +1. CI variants (A4 / A5) route automated tests to CI; manual tests open in the runner. +2. UI variants (main / A1 / A3 / A6-manual) stay entirely in the Manual Runner for every test (ac-delta-14). + +### A8: Advanced Relaunch with a filter applied (selection scope) +1. Actor applies a filter on the runner / Runs list prior to opening Advanced Relaunch. +2. **Select all** in the Advanced sidebar covers only the filtered set (ac-delta-12, AC-66). + +## Exception flows + +### E1: On-CI variant without CI Profile +1. Actor picks *Relaunch Failed on CI* or *Relaunch All on CI* on a project with no CI Profile. +2. Behaviour unverified in the POC window — see [13-open-questions.md § OQ-02](../13-open-questions.md#oq-02) and [OQ-15](../13-open-questions.md#oq-15). Per [BR-3](../07-business-rules.md#br-3), the on-CI leg requires a source; the UI is expected to block or surface guidance. + +### E2: Advanced Relaunch with zero tests selected +1. Actor unchecks every test in the Advanced sidebar and clicks **Relaunch**. +2. Behaviour unverified — the sidebar may disable the primary action or proceed with a no-op. Tracked in [13-open-questions.md § OQ-15](../13-open-questions.md#oq-15). + +### E3: Source Run is not Finished +1. Actor attempts to open Relaunch ▾ on an In-Progress / Pending Run. +2. System does not expose the Relaunch menu items for that Run (ac-delta-8). Relaunch is specifically a post-Finish affordance. + +## Postconditions + +- **Success (in-place variants — A1, A6 with Create-new-run:OFF):** Source Run's selected tests reset to Pending; Run transitions back to In-Progress. No new Run record is created. +- **Success (new-Run variants — main flow, A2, A3, A6 with Create-new-run:ON):** A new Run exists, In-Progress, Title / assignees / env / RunGroup inherited (overridable via Advanced title, ac-delta-13). Source Run remains Finished. +- **Success (CI variants — A4, A5):** CI Profile is triggered for the applicable automated subset; manual subset opens in the runner or remains untouched per variant semantics. +- **Failure:** No state change. Source Run remains Finished; no new Run is created; CI is not triggered. + +## Business rules referenced + +- [**BR-3**](../07-business-rules.md#br-3) — CI-variants require a configured CI Profile. +- [**BR-8**](../07-business-rules.md#br-8) — Terminated Runs cannot resume (Relaunch is gated on Finished; Terminated is not Finished — see [05-state-diagrams.md § Run](../05-state-diagrams.md#run)). + +## Functional requirements covered + +- AC-58, AC-59, AC-60, AC-61, AC-62, AC-63, AC-64, AC-65, AC-66, AC-67. +- `run-lifecycle-ac-delta.md` ac-delta-1, ac-delta-2, ac-delta-8, ac-delta-11, ac-delta-12, ac-delta-13, ac-delta-14. + +## Related use cases + +- **[UC-04](./UC-04-finish-run.md)** — produces the Finished state that gates Relaunch. +- **[UC-03](./UC-03-execute-test-in-runner.md)** — consumes the re-opened runner for manual variants. +- **[UC-02](./UC-02-create-mixed-run.md)** — defines CI Profile / CLI duality that A4/A5 reuse. +- **[UC-07](./UC-07-configure-environments.md)** — source Run's environment is inherited; multi-env interaction with Relaunch tracked in [13-open-questions.md § OQ-15](../13-open-questions.md#oq-15). +- **[UC-11](./UC-11-view-run-report.md)** — Report is a Relaunch entry point. + +## Verifying tests + + + + + + +_18 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | critical | bulk-status-actions | [Bulk Result Message apply with a status filter active affects only filter-matching tests @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-66 | +| 2 | normal | bulk-status-actions | [Suite-level checkbox with a status filter active selects only filter-matching tests @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-66 | +| 3 | high | run-lifecycle | ['Keep values' ${keep_values_state} with 'Create new run' ON ${expected_outcome} @boundary](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-65, AC-63 | +| 4 | high | run-lifecycle | ['Keep values' toggle is disabled while 'Create new run' is OFF @negative @boundary](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | run-lifecycle/ac-delta-11 | +| 5 | normal | run-lifecycle | ['Select all' inside Advanced Relaunch respects an active status filter](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-66, run-lifecycle/ac-delta-12 | +| 6 | critical | run-lifecycle | [Advanced Relaunch with 'Create new run' OFF reuses the original Run ID and resets selected tests to Pending @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-64, run-lifecycle/ac-delta-2 | +| 7 | critical | run-lifecycle | [Advanced Relaunch with 'Create new run' ON creates a new Run ID inheriting the source metadata @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-63, run-lifecycle/ac-delta-2, run-lifecycle/ac-delta-13 | +| 8 | normal | run-lifecycle | [Advanced Relaunch with a custom Title and per-test selection relaunches only the chosen tests](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-62, run-lifecycle/ac-delta-12, run-lifecycle/ac-delta-13 | +| 9 | normal | run-lifecycle | [Cancelling the Advanced Relaunch sidebar leaves the source run unchanged @negative](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-62 | +| 10 | low | run-lifecycle | [CI-routing Relaunch variants via ${variant} appear on finished ${run_type} runs @unclear](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) | AC-59, AC-60, AC-61, run-lifecycle/ac-delta-1, run-lifecycle/ac-delta-14 | +| 11 | normal | run-lifecycle | [Launch a Copy of a finished run creates a duplicate run with a new Run ID @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) | AC-67, run-lifecycle/ac-delta-13 | +| 12 | normal | run-lifecycle | [Relaunch menu items appear only on finished runs — not on unfinished runs @negative](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) | run-lifecycle/ac-delta-8 | +| 13 | critical | run-lifecycle | [Relaunching a finished manual run re-opens the same Run ID in the Manual Runner @smoke](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) | AC-58, run-lifecycle/ac-delta-8 | +| 14 | low | run-lifecycle | ['Launch a Copy Manually' variant on a mixed run opens the duplicate in the Manual Runner @unclear](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle/ac-delta-1 | +| 15 | high | run-lifecycle | [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle/ac-delta-8 | +| 16 | low | run-lifecycle | [Relaunch ${variant} on a finished ${run_type} run routes ${routing} @unclear](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle/ac-delta-14, AC-59, AC-60, AC-61 | +| 17 | high | run-lifecycle | [Row extra-menu on ${run_state} runs exposes only ${available_items} lifecycle actions @boundary](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle/ac-delta-8, AC-58, AC-67 | +| 18 | normal | run-lifecycle | [Edit is not available on a finished run @negative @unclear](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | run-lifecycle/ac-delta-8 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-06-assign-testers.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-06-assign-testers.md new file mode 100644 index 0000000..7b8c4cf --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-06-assign-testers.md @@ -0,0 +1,162 @@ +# UC-06: Assign testers to a Run, a suite, or a test — QA Creator + + + +**Primary actor:** QA Creator (also performed by Manager / Owner; Tester holds only read affordances on the assignee chip — see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +**Stakeholders:** Tester (receives assignments and executes); Project (supplies role data — the manager exclusion in random distribution relies on the manager role per project); [Manual Runner](../03-glossary.md#manual-runner) and Runs list / Report readers (consume assignee rendering). +**Goal:** Establish who is responsible for executing which tests within a Run — at Run level (prerequisite for finer granularity per [BR-6](../07-business-rules.md#br-6)), at suite level, and at test level (individually or in bulk). +**Trigger:** Actor opens the **Assign more users** link in the New Manual Run sidebar, the Edit Run **Assign users** multi-select, or the Manual Runner's per-suite / per-test / Multi-Select **Assign to** affordances. +**Scope:** `tester-assignment` (owner — cross-cutting concern B and affects concern H for bulk assign). Touches `run-creation` (sidebar exposes the entry point — [UC-01](./UC-01-create-manual-run.md)), `run-lifecycle` (Edit-run surface — [UC-04](./UC-04-finish-run.md)), `test-execution-runner` (per-suite / per-test affordances render in the runner but assignment UX is owned here — [UC-03](./UC-03-execute-test-in-runner.md)), `bulk-status-actions` (shares the Multi-Select bottom toolbar with a distinct *Assign to* action — [UC-09](./UC-09-bulk-status-in-runner.md)). + +## Preconditions + +- Target Run exists (from [UC-01](./UC-01-create-manual-run.md) / [UC-02](./UC-02-create-mixed-run.md)) or is being created (assign-at-creation path). +- Actor holds Manage-Run permission (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix); readonly / some paths are tracked in [AC-100 UNCLEAR](../../../test-cases/manual-tests-execution/tester-assignment-ac-delta.md)). +- Project has ≥ 1 additional member for multi-user assignment (otherwise only the creator manager chip is shown, AC-37). +- For per-suite / per-test assignment: target users **must already be assigned to the Run** (AC-41, [BR-6](../07-business-rules.md#br-6)). + +## Main success scenario — add two testers at creation time + +1. Actor opens the New Manual Run sidebar ([UC-01](./UC-01-create-manual-run.md) main flow). +2. Assignee section shows the creator chip labeled `as manager` — unremovable from this surface (AC-37, `tester-assignment-ac-delta.md` ac-delta-1). +3. Actor clicks **Assign more users** — System opens the Assignee panel with: + - **Assign users** — multi-select populated from project membership. + - **Auto-Assign Users** strategy selector — options: `None`, `Prefer test assignee`, `Randomly distribute tests between team members`; default `None` (AC-39, ac-delta-2, ac-delta-3). +4. Actor picks two users. Strategy stays `None`. +5. Actor clicks **Launch** (or proceeds into [UC-01](./UC-01-create-manual-run.md) main steps 6–8). +6. System creates the Run with three assignees — the creator (manager) and the two added users; tests are unassigned at test-level until further action (AC-41). + +## Alternate flows + +### A1: Auto-Assign — `Prefer test assignee` +**Branches at step 4.** +1. Actor picks the `Prefer test assignee` strategy (AC-39). +2. On Launch, tests whose pre-set assignee is one of the Run's assigned users are given to that user; tests without a pre-set assignee fall back to **unassigned** (or to the manager — **UNCLEAR**, see [13-open-questions.md § OQ-08](../13-open-questions.md#oq-08); ac-delta-4). + +### A2: Auto-Assign — `Randomly distribute tests between team members` +1. Actor picks the random-distribute strategy. +2. On Launch, every **non-manager** assigned user receives a share of the Run's tests; the distribution is deterministic at launch (no re-shuffle on refresh, ac-delta-5). +3. **Manager exclusion** ([BR-5](../07-business-rules.md#br-5) analogue — actually [BR-6a](../07-business-rules.md#br-6a) below): the manager role is skipped; if the only assigned user *is* a manager, no tests are auto-assigned and the per-test assignee column shows an empty/"—" state without surfacing an error (AC-40, ac-delta-11). + +### A3: Per-suite assignment inside the Runner +**Applies on an In-Progress Run.** +1. Actor hovers a suite row in the Runner tree and clicks the **Assign to** icon (AC-42). +2. System opens a user dropdown **limited to users already assigned to the Run** (ac-delta-8, enforcement of [BR-6](../07-business-rules.md#br-6)). +3. Actor picks a user — System applies the assignment to every test within the suite; per-test assignee avatars update (ac-delta-22 of test-execution-runner). + +### A4: Per-test assignment via Multi-Select (bulk) +1. Actor enters Multi-Select mode in the Runner and selects ≥ 1 test. +2. Actor clicks **Assign to** in the bulk-action bottom toolbar (AC-43, ac-delta-9). +3. System opens a user dropdown limited to Run-assigned users and a confirmation dialog ("Are you sure you want to assign …"). +4. Actor confirms — System applies the user to every selected test in one operation; per-test column updates immediately (ac-delta-10). +5. When a filter is active in the Runner, only filter-matching tests are affected (AC-66, concern F — shared with [UC-09](./UC-09-bulk-status-in-runner.md)). + +### A5: Per-test reassignment via the detail pane (no confirmation) +1. Inside the Runner, Actor clicks the per-test **Assignee chip** in the detail pane. +2. System opens a dropdown limited to Run-assigned users plus `Unassigned`. +3. Actor picks a user — change is applied **immediately, without a confirmation dialog** (ac-delta-13 — contrast with A4). + +### A6: Edit an ongoing Run — amend assignees +1. Actor opens Edit Run (per [UC-04 A2](./UC-04-finish-run.md#a2-edit-an-unfinished-run-tests--plans-remove-test-amend-metadata)). +2. Assign users multi-select and `Remove assign users` are available; `Select All` convenience button bulk-adds every project member without confirmation (ac-delta-13, ac-delta-7). +3. Actor adds / removes users and clicks **Save** — assignment changes propagate inside the Runner without a full reload (ac-delta-7). +4. Removing a user who has already recorded results prompts a confirmation (ac-delta-6; exact copy **UNCLEAR** — see [13-open-questions.md § OQ-09](../13-open-questions.md#oq-09)). + +### A7: Read-only surfaces +1. The Runs list **Assigned to** column and the Extended Run Report **Assignees** overview render assignee state (ac-delta-12). Rendering is owned by [UC-10](./UC-10-manage-runs-list.md) / [UC-11](./UC-11-view-run-report.md) respectively. + +## Exception flows + +### E1: Attempt per-suite / per-test assign for a non-Run user +1. Actor tries to assign a user who is not on the Run. +2. System does not present them in the dropdown (ac-delta-8, ac-delta-9). There is no affordance to bypass — the prerequisite is enforced at UI level per [BR-6](../07-business-rules.md#br-6). This is not surfaced as an explicit error. + +### E2: Random-distribute with only a manager assigned +1. Actor picks `Randomly distribute` strategy with only a manager-role user assigned. +2. System launches the Run with zero per-test auto-assignments (ac-delta-11); no error is shown. Per [BR-6a](../07-business-rules.md#br-6a), the manager exclusion is by design; the resulting empty state is not an error. + +### E3: Remove a user who has logged results +1. Actor removes the user via Edit Run. +2. System prompts a confirmation (ac-delta-6). On confirm, the user is removed from all per-suite / per-test assignments within the Run; recorded results are retained (attributed state — see [13-open-questions.md § OQ-09](../13-open-questions.md#oq-09)). + +## Postconditions + +- **Success (Run-level assignment):** Run has ≥ 1 additional assignee beyond the manager chip; users are selectable in downstream per-suite / per-test assignment dropdowns ([BR-6](../07-business-rules.md#br-6)). +- **Success (per-suite / per-test):** Targeted tests carry the new assignee; the Runner tree and Runs list `Assigned to` column (ac-delta-12) reflect the change. +- **Success (Auto-Assign):** Tests are distributed per strategy at Launch; state is deterministic and visible in the Runner and Report. +- **Failure:** No assignee changes persist. For Auto-Assign variants, no partial distribution occurs (commit is atomic at Launch). + +## Business rules referenced + +- [**BR-6**](../07-business-rules.md#br-6) — Run-assignment prerequisite for per-suite / per-test assignment (AC-41). +- [**BR-6a**](../07-business-rules.md#br-6a) — Manager-role exclusion from random distribution (AC-40). + +## Functional requirements covered + +- AC-37, AC-38, AC-39, AC-40, AC-41, AC-42, AC-43. +- `tester-assignment-ac-delta.md` ac-delta-1..13. + +## Related use cases + +- **[UC-01](./UC-01-create-manual-run.md)** — entry point `Assign more users` during creation. +- **[UC-04](./UC-04-finish-run.md)** — Edit-run surfaces assignee amendment on ongoing Runs. +- **[UC-03](./UC-03-execute-test-in-runner.md)** — Runner renders per-suite / per-test affordances whose UX is owned here. +- **[UC-09](./UC-09-bulk-status-in-runner.md)** — shares the Multi-Select bottom toolbar. +- **[UC-10](./UC-10-manage-runs-list.md)** / **[UC-11](./UC-11-view-run-report.md)** — read-only assignee rendering. + +## Verifying tests + + + + + + +_39 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | critical | bulk-status-actions | [Bulk Result Message apply with a status filter active affects only filter-matching tests @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-66 | +| 2 | normal | bulk-status-actions | [Suite-level checkbox with a status filter active selects only filter-matching tests @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-66 | +| 3 | normal | run-creation | [Cancelling the Assign more users panel reverts the assignee section to creator-only @negative](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-38 | +| 4 | normal | run-creation | [Create a run with multiple testers assigned via "Assign more users"](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-38 | +| 5 | normal | run-creation | [Assignee section shows the creator with "as manager" label by default](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | AC-37 | +| 6 | normal | run-lifecycle | ['Select all' inside Advanced Relaunch respects an active status filter](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-66 | +| 7 | high | tester-assignment | [Auto-Assign defaults to None and leaves all tests unassigned after Launch @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | AC-39, tester-assignment/ac-delta-3 | +| 8 | high | tester-assignment | [Auto-Assign strategy ${strategy} produces ${expected_distribution} after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | AC-39, AC-40, tester-assignment/ac-delta-4, tester-assignment/ac-delta-5, tester-assignment/ac-delta-11 | +| 9 | normal | tester-assignment | [Prefer test assignee fallback for tests without a pre-set assignee is recorded @unclear @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | AC-39, tester-assignment/ac-delta-4 | +| 10 | normal | tester-assignment | [Randomly distribute outcome is deterministic after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | tester-assignment/ac-delta-5 | +| 11 | normal | tester-assignment | [Randomly distribute with a single non-manager user assigns every test to that user @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | AC-39, tester-assignment/ac-delta-5 | +| 12 | high | tester-assignment | [Randomly distribute with only a manager attached leaves every test unassigned @boundary @negative](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | AC-40, tester-assignment/ac-delta-5, tester-assignment/ac-delta-11 | +| 13 | normal | tester-assignment | [Switching strategy then dismissing the sidebar discards the selection @negative](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | tester-assignment/ac-delta-3 | +| 14 | normal | tester-assignment | [Add a user via ${add_method} to the Assign users multi-select](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | AC-38, tester-assignment/ac-delta-2 | +| 15 | high | tester-assignment | [Adding the first user reveals Auto-Assign selector and propagates the assignee on Launch @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | AC-38, tester-assignment/ac-delta-2, tester-assignment/ac-delta-3, tester-assignment/ac-delta-12 | +| 16 | low | tester-assignment | [Creator manager chip has no remove control and cannot be cleared from the sidebar @negative](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | AC-37, tester-assignment/ac-delta-1 | +| 17 | normal | tester-assignment | [Dismiss the sidebar via ${dismiss_method} after editing assignees discards the pending state @negative](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | tester-assignment/ac-delta-2, tester-assignment/ac-delta-3 | +| 18 | critical | tester-assignment | [Opening the New Manual Run sidebar shows the creator as manager with the Assign more users entry point @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | AC-37, tester-assignment/ac-delta-1, tester-assignment/ac-delta-2 | +| 19 | normal | tester-assignment | [Remove an added user via the chip × before Launch keeps them off the new run @negative](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | tester-assignment/ac-delta-2, tester-assignment/ac-delta-12 | +| 20 | critical | tester-assignment | [Concern B — multi-user assignment propagates from creation through runner to runs list @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) | AC-38, AC-39, AC-40, tester-assignment/ac-delta-5, tester-assignment/ac-delta-12 | +| 21 | normal | tester-assignment | [Concern B × permissions — a qa-role run-assignee can use Assign to controls end-to-end](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) | AC-42, AC-43 | +| 22 | high | tester-assignment | [Concern H × F — bulk Assign to in runner respects the active filter @negative @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) | AC-43, tester-assignment/ac-delta-10 | +| 23 | critical | tester-assignment | [Adding a user on Edit Run propagates to the ongoing runner Assign to dropdowns @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | AC-38, AC-41, tester-assignment/ac-delta-7, tester-assignment/ac-delta-8 | +| 24 | normal | tester-assignment | [Cancel on Edit Run after modifying assignees discards the pending state @negative](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | tester-assignment/ac-delta-7 | +| 25 | normal | tester-assignment | [Manager chip on Edit Run cannot be removed by any control @negative](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | AC-37, tester-assignment/ac-delta-1 | +| 26 | normal | tester-assignment | [Remove ${remove_scope} via ${remove_method} on Edit Run updates chips immediately](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | tester-assignment/ac-delta-6, tester-assignment/ac-delta-7, tester-assignment/ac-delta-13 | +| 27 | normal | tester-assignment | [Removing a user who has recorded results surfaces the confirmation flow @unclear](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | tester-assignment/ac-delta-6 | +| 28 | normal | tester-assignment | [Save on Edit Run with all non-managers removed keeps the run with the manager only @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | AC-37, tester-assignment/ac-delta-7, tester-assignment/ac-delta-11 | +| 29 | normal | tester-assignment | [Select All on Edit Run adds every project member to Assign users in one click](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | tester-assignment/ac-delta-13 | +| 30 | normal | tester-assignment | [Detail-panel Assignee chip single-click assigns a test without a confirmation](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | tester-assignment/ac-delta-13 | +| 31 | normal | tester-assignment | [Detail-panel Assignee dropdown lists only run-assigned users plus Unassigned](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-41, tester-assignment/ac-delta-13 | +| 32 | high | tester-assignment | [Multi-Select bulk Assign to → Cancel on the native confirm leaves tests unchanged @negative](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-43, tester-assignment/ac-delta-9 | +| 33 | critical | tester-assignment | [Multi-Select bulk Assign to applies to every selected test after OK on the native confirm @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-43, tester-assignment/ac-delta-9, tester-assignment/ac-delta-10 | +| 34 | normal | tester-assignment | [Multi-Select bulk Assign to with exactly one test selected still applies the assignment @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-43, tester-assignment/ac-delta-10 | +| 35 | normal | tester-assignment | [Multi-Select bulk Assign to with zero tests selected does not open a confirm @negative @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-43, tester-assignment/ac-delta-9 | +| 36 | normal | tester-assignment | [Reassign an assigned test to Unassigned via detail-panel chip clears all indicators @boundary](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | tester-assignment/ac-delta-13 | +| 37 | low | tester-assignment | [Run header avatar stack reflects all run-assigned users with tooltips](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-38 | +| 38 | high | tester-assignment | [Suite Assign to dropdown excludes non-run project members @negative](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-41, tester-assignment/ac-delta-8 | +| 39 | critical | tester-assignment | [Suite Assign to dropdown lists Unassigned and run-assigned users only @smoke](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | AC-41, AC-42, tester-assignment/ac-delta-8 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-07-configure-environments.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-07-configure-environments.md new file mode 100644 index 0000000..497733c --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-07-configure-environments.md @@ -0,0 +1,136 @@ +# UC-07: Configure environments for a Run — QA Creator + + + +**Primary actor:** QA Creator +**Stakeholders:** Tester (executes per-env child runs); Project (supplies the Settings → Environments seed list, AC-44, out of scope here); Runs list / Report readers (consume per-env badges and grouping). +**Goal:** Attach one or more [environment groups](../03-glossary.md#environment-group) to a new Run so that execution is scoped to the chosen environment slice — a single run against one set, a [Launch in Sequence](../03-glossary.md#launch-in-sequence) batch that runs groups one-after-another, or a [Launch All](../03-glossary.md#launch-all) batch that runs groups in parallel. +**Trigger:** Actor clicks **+** in the Environment section of the New Manual Run sidebar ([UC-01](./UC-01-create-manual-run.md) main step 4), opens the **Multi-Environment Configuration** modal, and saves ≥ 1 env group before Launch. +**Scope:** `environment-configuration` (owner of cross-cutting concern A). Touches `run-creation` (field presence, entry point — [UC-01](./UC-01-create-manual-run.md)), `run-lifecycle` (each group spawns its own lifecycle — [UC-04](./UC-04-finish-run.md)), `runs-list-management` (per-env badges and parent/child grouping render in the list — [UC-10](./UC-10-manage-runs-list.md)), `run-detail-and-report` (per-env breakdown in the Report — [UC-11](./UC-11-view-run-report.md)). + +## Preconditions + +- Actor is in the New Manual Run sidebar (or the Mixed Run equivalent — [UC-02](./UC-02-create-mixed-run.md)). +- Project Settings → Environments seed list contains ≥ 1 environment (AC-44, out of scope here — tracked by project setup). +- Recommended format for environment values: `Category:Value` (e.g., `Browser:Chrome`) — enables category grouping in the modal dropdown (ac-delta-4 — **UNCLEAR** when seed data does not use the format, [13-open-questions.md § OQ-10](../13-open-questions.md#oq-10)). + +## Main success scenario — single-group Run + +1. Actor opens the Environment section of the New Manual Run sidebar — the primary selector is visible next to a **+** affordance (AC-45, `environment-configuration-ac-delta.md` ac-delta-1). +2. Actor clicks **+** — System opens the **Multi-Environment Configuration** modal (overlay). +3. Actor selects one or more environments inside the current (first) group from the dropdown (AC-46). +4. Actor clicks **Save** — System commits the selection and returns the Actor to the creation sidebar (ac-delta-5). +5. The Environment field now displays the selected env(s); the creation sidebar's primary launch button remains **Launch** (single-group case — ac-delta-6). +6. Actor proceeds with Launch per [UC-01 main step 6](./UC-01-create-manual-run.md#main-success-scenario-happy-path--all-tests-scope) — System creates a single Run scoped to the chosen environment. + +## Alternate flows + +### A1: Multi-group — **Launch in Sequence** +1. Inside the modal, Actor clicks **Add Environment** (AC-47) to append a second (and further) env group. +2. Each group supports multi-select; `All` master checkbox toggles every option in the group (ac-delta-13); **Add all envs** footer shortcut populates every checkbox of the currently expanded group (ac-delta-14). +3. Actor saves. +4. With **2+ groups** saved, the creation sidebar replaces **Launch** with two side-by-side buttons: **Launch in Sequence** and **Launch All** (ac-delta-7). +5. Actor clicks **Launch in Sequence** (AC-49) — System creates a parent [RunGroup](../03-glossary.md#rungroup) + one child Run per env group; child Runs execute one-after-another — only one is active at a time (ac-delta-9). + +### A2: Multi-group — **Launch All** (parallel) +1. Same setup as A1. +2. Actor clicks **Launch All** (AC-50) — System creates a parent RunGroup + one child Run per env group; every child Run starts simultaneously and appears immediately in the Runs list as **In-Progress** (ac-delta-10). + +### A3: Edit an already-saved env selection +1. The Environment field shows `N environments configured` when 2+ groups are saved. +2. Actor clicks the field — System re-opens the Multi-Environment Configuration modal with the existing selection preserved for round-trip edit (ac-delta-15). +3. Actor amends / removes groups (ac-delta-2, ac-delta-3) and saves. + +### A4: Remove an env group +1. Inside the modal, Actor clicks the delete / remove affordance on a group (ac-delta-3). +2. System removes the group; remaining groups renumber; if only one group remains, the launch button reverts to **Launch** (ac-delta-6). + +### A5: Category-prefixed grouping in the dropdown +1. Project's env seed uses the recommended `Category:Value` format (AC-44). +2. Inside the modal, the dropdown groups/prefixes entries by category — e.g., `Browser:Chrome`, `Browser:Firefox`, `OS:Windows` are rendered under collapsible *Browser* / *OS* sections (ac-delta-4). +3. **UNCLEAR** when seed data does not follow the `Category:Value` pattern — see [13-open-questions.md § OQ-10](../13-open-questions.md#oq-10). + +### A6: AC-48 "One Run" mode (single-run multi-env) +1. AC-48 describes a "One Run" mode where all selected groups apply to a single Run with results grouped by environment. +2. **UNCLEAR** in the current UI — not observable as a distinct launch action (ac-delta-8). The mode may have been subsumed by single-group Launch, removed, or hidden behind a project setting. Tracked in [13-open-questions.md § OQ-07](../13-open-questions.md#oq-07). + +## Exception flows + +### E1: Save with a zero-environment group +1. Actor saves a group with no environments selected. +2. System silently accepts the empty group; no validation error surfaces (ac-delta-12). +3. Downstream consequence: at Launch, the empty group still produces a child Run scoped to the seed default — exact behaviour **UNCLEAR** ([13-open-questions.md § OQ-10](../13-open-questions.md#oq-10)). + +### E2: **Launch All** with *Without tests* scope +1. Actor selects the *Without tests* scope in [UC-01 A3](./UC-01-create-manual-run.md#a3-without-tests-scope) and configures 2+ env groups. +2. Actor clicks **Launch All** — System blocks with a non-modal banner: *"Select a plan or select all"* (ac-delta-12 note). +3. This is **scope validation**, not environment-group validation — empty env groups are silently accepted per E1. + +### E3: Dismiss the modal without saving +1. Actor clicks **Cancel** or the × close — System discards any draft group changes and returns to the creation sidebar with the prior env state intact (ac-delta-5). + +## Postconditions + +- **Success (single group):** Run is created scoped to one env set. The Runs list row displays the env value as a badge (ac-delta-11, rendering owned by [UC-10](./UC-10-manage-runs-list.md)). +- **Success (multi-group — Launch in Sequence / Launch All):** A parent [RunGroup](../03-glossary.md#rungroup) contains one child Run per env group. Child Runs display env badges; their lifecycles are independent (each Finishes on its own — see [UC-04 A3](./UC-04-finish-run.md#a3-multi-environment-run--finish-one-env-group-at-a-time)). +- **Failure:** No Run is created; the creation sidebar stays open with the env configuration preserved. + +## Business rules referenced + +- No new business rules surface from this UC beyond those inherited from the creation flow ([BR-1](../07-business-rules.md#br-1) Require-RunGroup continues to apply). A candidate invariant — *"an env group saved with zero environments must not block launch"* — is documented here as observed behaviour (ac-delta-12) and not yet promoted to a BR pending [OQ-10](../13-open-questions.md#oq-10) resolution. + +## Functional requirements covered + +- AC-45, AC-46, AC-47, AC-48 (tracked as UNCLEAR — ac-delta-8), AC-49, AC-50. +- `environment-configuration-ac-delta.md` ac-delta-1..15. + +## Related use cases + +- **[UC-01](./UC-01-create-manual-run.md)** / **[UC-02](./UC-02-create-mixed-run.md)** — expose the entry point. +- **[UC-04](./UC-04-finish-run.md)** — per-group Finish semantics (A3). +- **[UC-10](./UC-10-manage-runs-list.md)** — per-env badge rendering + RunGroup-as-parent rendering. +- **[UC-11](./UC-11-view-run-report.md)** — per-env breakdown + filter on the Report (concern A). + +## Verifying tests + + + + + + +_26 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | normal | environment-configuration | [`Add all envs` footer link populates the currently expanded group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | environment-configuration/ac-delta-14 | +| 2 | normal | environment-configuration | [`All` master checkbox toggles every environment in the current group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | environment-configuration/ac-delta-13 | +| 3 | normal | environment-configuration | [`Cancel` after adding a new env group discards the pending group @negative](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | AC-47, environment-configuration/ac-delta-5 | +| 4 | normal | environment-configuration | [`Cancel` after removing a group via minus restores the removed group @negative](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | environment-configuration/ac-delta-3, environment-configuration/ac-delta-5 | +| 5 | high | environment-configuration | [Add a second env group via `Add Environment` @smoke](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | AC-47, environment-configuration/ac-delta-7 | +| 6 | normal | environment-configuration | [Edit an existing group's env selection via round-trip of the modal](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | environment-configuration/ac-delta-2, environment-configuration/ac-delta-15 | +| 7 | normal | environment-configuration | [Remove one env group via the per-group minus button](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | environment-configuration/ac-delta-3 | +| 8 | normal | environment-configuration | [Select multiple environments in a single group and commit them](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | AC-45, AC-46 | +| 9 | critical | environment-configuration | [Launch All creates a RunGroup with parallel env-labeled child runs @smoke](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | AC-50, environment-configuration/ac-delta-10, environment-configuration/ac-delta-11 | +| 10 | critical | environment-configuration | [Launch in Sequence creates a RunGroup with sequential env-labeled child runs @smoke](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | AC-49, environment-configuration/ac-delta-9, environment-configuration/ac-delta-11 | +| 11 | normal | environment-configuration | [Single env group configuration keeps a single `Launch` button @boundary](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | environment-configuration/ac-delta-6 | +| 12 | normal | environment-configuration | [Two env groups replace `Launch` with `Launch in Sequence` and `Launch All` @boundary](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | environment-configuration/ac-delta-7 | +| 13 | normal | environment-configuration | [Close modal via `×` after editing a saved selection discards the edits @negative](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | environment-configuration/ac-delta-5, environment-configuration/ac-delta-15 | +| 14 | high | environment-configuration | [Dismiss Multi-Environment Configuration modal via ${dismiss_method} discards pending changes @negative](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | environment-configuration/ac-delta-5 | +| 15 | high | environment-configuration | [Open Multi-Environment Configuration modal from the sidebar @smoke](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | AC-45, environment-configuration/ac-delta-1 | +| 16 | high | environment-configuration | [Re-open modal via the `N environments configured` button preserves the existing selection](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | environment-configuration/ac-delta-15 | +| 17 | high | environment-configuration | [Save one-group env selection commits it to the sidebar @smoke](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | AC-45, AC-46, environment-configuration/ac-delta-5 | +| 18 | low | environment-configuration | [`Category:Value` grouping of environments in the checklist @needs-project-setting](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | environment-configuration/ac-delta-4 | +| 19 | low | environment-configuration | [`One Run` single-run multi-environment mode — documented gap @unclear](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | AC-48, environment-configuration/ac-delta-8 | +| 20 | normal | environment-configuration | [Clicking `Launch All` with `Without tests` scope surfaces the validation banner and blocks run creation @negative](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | environment-configuration/ac-delta-12 | +| 21 | normal | environment-configuration | [Remove the last remaining env group clears selection and reverts to the single-`Launch` state @boundary](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | environment-configuration/ac-delta-3, environment-configuration/ac-delta-6 | +| 22 | normal | environment-configuration | [Save modal with an empty env group is silently accepted @boundary](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | environment-configuration/ac-delta-12 | +| 23 | normal | run-creation | [Adding and removing an environment slot leaves only the initial slot @boundary](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-45, AC-47 | +| 24 | high | run-creation | [Create a run with two environment groups configured at creation time](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-45 | +| 25 | normal | run-creation | [Cancelling the Environment modal preserves the sidebar state without assigning env @negative](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | AC-45 | +| 26 | high | run-lifecycle | [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | AC-48, AC-49, AC-50 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-08-manage-rungroup.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-08-manage-rungroup.md new file mode 100644 index 0000000..a13feb7 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-08-manage-rungroup.md @@ -0,0 +1,189 @@ +# UC-08: Create and manage a RunGroup — QA Creator + + + +**Primary actor:** QA Creator +**Stakeholders:** Tester (opens group pages to pick Runs); Project (supplies merge-strategy enum, group types); Runs list consumers (render Groups tab and pin region — [UC-10](./UC-10-manage-runs-list.md)); Archive / Purge cascade consumers ([UC-12](./UC-12-archive-unarchive-purge.md)). +**Goal:** Organise Runs into a named [RunGroup](../03-glossary.md#rungroup) — create it with a merge strategy, populate it with existing or new Runs, inspect the basic group view + [Combined Report](../03-glossary.md#combined-report), copy it, pin it, edit it, and optionally archive / purge with cascade semantics. +**Trigger:** Actor opens the arrow-dropdown next to the **Manual Run** split-button → **New group** (AC-13), or opens an existing RunGroup and acts on its extra menu. +**Scope:** `run-groups` (owner of concern C — RunGroup membership). Touches `run-creation` (dropdown entry point, RunGroup field pre-populate — [UC-01](./UC-01-create-manual-run.md)), `runs-list-management` (Groups tab, Move-to-group from the Runs list, pinned region render — [UC-10](./UC-10-manage-runs-list.md)), `archive-and-purge` (cascade semantics are verified here but owned by [UC-12](./UC-12-archive-unarchive-purge.md)). + +## Preconditions + +- Actor holds Create-RunGroup permission (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +- Project exists with ≥ 0 prior RunGroups (a no-group project is a valid starting point; the Groups tab empty state is owned by [UC-10](./UC-10-manage-runs-list.md)). + +## Main success scenario — create a RunGroup, then open it + +1. Actor opens the Runs page and clicks the arrow next to **Manual Run** → **New group** (AC-13, `run-groups-ac-delta.md` ac-delta-1). +2. System opens the **New Group** dialog with fields in order: + - **Group Type** (optional selector; ≥ 1 predefined types — ac-delta-2). + - **Name** (required). + - **Merge Strategy** (required selector; typical set includes *Merge all* / *Best of all* / *Fresh run* / *Last run* — ac-delta-3). + - **Description** (optional). + - Primary **Save**; Cancel / dismiss. + (AC-14, ac-delta-1) +3. Actor enters a Name, picks a Merge Strategy, optionally picks a Type and Description. +4. Actor clicks **Save** — System creates the RunGroup, closes the dialog, and surfaces the new group in the Runs list under the **Groups** tab (or top-level tree) without a page refresh (ac-delta-5). +5. Actor clicks the group row — System opens the **RunGroup page** (ac-delta-6) with: + - Header (Name + meta: type / strategy). + - Chart / summary visual. + - Per-run list with each child's title, status, and aggregate counters (AC-54, ac-delta-8). + - **Combined Report** action. + - **Add Manual Run** entry point (scoped to this group). + +## Alternate flows + +### A1: Add a Run from inside the RunGroup +1. On the RunGroup page, Actor clicks **Add Manual Run** (ac-delta-7). +2. System opens the New Manual Run sidebar ([UC-01](./UC-01-create-manual-run.md) main) with the RunGroup field **pre-populated to the current group** but editable (AC-51, [UC-01 A5](./UC-01-create-manual-run.md#a5-rungroup-pre-populated-from-context)). +3. Actor proceeds per UC-01 Launch / Save. + +### A2: Move an existing Run into a RunGroup (from the Runs list) +**Entry point is a Run's extra menu on the Runs list — ownership shared with [UC-10](./UC-10-manage-runs-list.md).** +1. Actor opens a Run row's extra menu → **Move** → selects destination RunGroup → **Move** (AC-52). +2. System moves the Run into the chosen group; the Run leaves its prior group (or the ungrouped set) and appears under the new one. + +### A3: Add Existing Run from inside the RunGroup +1. On the RunGroup page, Actor opens the group's extra menu → **Add Existing Run** (AC-53, ac-delta-14). +2. System opens a picker listing runs eligible to be moved in (excludes runs already in this group) with multi-select. +3. Actor confirms — System returns to the group view with the newly added Runs present. + +### A4: Combined Report +1. On the RunGroup page, Actor clicks **Combined Report** (AC-54, ac-delta-10). +2. System opens the Combined Report view exposing: + - **Main run anchor** selector. + - **Compare To** selector (one or more peer runs to diff against the anchor — cross-group support **UNCLEAR** per [13-open-questions.md § OQ-16](../13-open-questions.md#oq-16)). + - Filters over the combined set (status / type / assignee). + - Aggregated totals (counts / percentages). +3. Actor switches the anchor — System re-bases the diff and refreshes totals without leaving the view (ac-delta-11). + +### A5: Customise the RunGroup page columns +1. On the RunGroup page, Actor drags column dividers or toggles columns via the view menu. +2. System persists the column / width configuration **per-RunGroup, per-user**, independently of the global Runs list customisation (AC-55, ac-delta-9). + +### A6: Edit group metadata +1. Actor opens the group's extra menu → **Edit** (ac-delta-12). +2. System re-opens the editor pre-populated with current Name / Type / Merge Strategy / Description (ac-delta-13). +3. Actor changes a field and clicks **Save** — System commits in-place (no new group is created). Cancel discards. + +### A7: Pin / Unpin a RunGroup +1. Actor opens the group's extra menu → **Pin** (AC-70, ac-delta-12, ac-delta-16). +2. System moves the group into the pinned region at the top of the Runs list (and/or Groups tab). +3. Extra menu now shows **Unpin**; clicking it returns the group to its natural position. + +### A8: Copy Group +1. Actor opens the group's extra menu → **Copy** (ac-delta-15). +2. System opens the Copy Group dialog with toggles / checkboxes for scope: **Assignees**, **Issues**, **Labels**, **Environments**, **Nested Structure** (child runs). +3. Actor selects slices and confirms — System creates a new RunGroup with the selected slices duplicated; the source group remains untouched. + +### A9: Archive the RunGroup (cascade) +**Ownership crosses over to [UC-12](./UC-12-archive-unarchive-purge.md) — noted here for completeness.** +1. Actor opens the group's extra menu → **Archive** (AC-56, ac-delta-12, ac-delta-17). +2. System shows a confirmation dialog. +3. On confirm, the group **and all nested Runs** move to the Groups / Runs Archive; nested Runs carry an "Archived" badge; the group disappears from the active Runs list ([BR-9](../07-business-rules.md#br-9)). +4. **Unarchive** (from the Groups Archive extra menu) restores the group and all nested Runs to their prior statuses. + +### A10: Purge the RunGroup (cascade + 20 000-Run ceiling) +1. Actor opens the group's extra menu → **Purge** (AC-57). +2. System cascades the purge across all nested Runs; purged Runs receive a Purged badge and remain in Archive. +3. **Ceiling:** per-purge limit is **20 000 Runs** per group ([BR-10](../07-business-rules.md#br-10)); enforcement mode (pre-check banner vs silent server-side cap) is **UNCLEAR** (ac-delta-U1, [13-open-questions.md § OQ-17](../13-open-questions.md#oq-17)). + +## Exception flows + +### E1: Save with empty Name +1. Actor attempts to save the New Group dialog without a Name. +2. System blocks — the primary action stays disabled or the field surfaces inline validation; no group is created (ac-delta-4). + +### E2: Save without a Merge Strategy +1. Actor tries to save without picking a Merge Strategy. +2. System blocks — Save is not active until a strategy is picked (ac-delta-3). + +### E3: Cancel / dismiss the dialog +1. Actor clicks Cancel or the close affordance. +2. System discards the draft and closes the dialog; no group is created (ac-delta-1). + +## Postconditions + +- **Success — create:** RunGroup exists; appears in Runs list (Groups tab + top-level tree) without page refresh; page is reachable; **Add Manual Run** entry point pre-populates the RunGroup field in creation. +- **Success — populate:** Child Runs appear in the group view with per-run summary and aggregate counters (ac-delta-8). +- **Success — Archive / Purge:** Group + nested Runs cascade per [BR-9](../07-business-rules.md#br-9); Purge is bounded by [BR-10](../07-business-rules.md#br-10). +- **Failure:** No group / state change persists. + +## Business rules referenced + +- [**BR-1**](../07-business-rules.md#br-1) — Require-RunGroup may demand this UC's output before Launch in UC-01 / UC-02. +- [**BR-9**](../07-business-rules.md#br-9) — RunGroup cascade on Archive / Unarchive / Purge. +- [**BR-10**](../07-business-rules.md#br-10) — 20 000-Run Purge ceiling per RunGroup. + +## Functional requirements covered + +- AC-13, AC-14, AC-51, AC-52, AC-53, AC-54, AC-55, AC-56, AC-57, AC-70. +- `run-groups-ac-delta.md` ac-delta-1..17. + +## Related use cases + +- **[UC-01](./UC-01-create-manual-run.md)** — creation entry point reuses the arrow dropdown and pre-populates RunGroup. +- **[UC-10](./UC-10-manage-runs-list.md)** — Groups tab, pinned region, Move-to-group from the list. +- **[UC-12](./UC-12-archive-unarchive-purge.md)** — owns the Archive / Unarchive / Purge action set; cascade semantics verified here. + +## Verifying tests + + + + + + +_43 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | critical | archive-and-purge | [Archive a RunGroup cascades to every nested run](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-56 | +| 2 | high | archive-and-purge | [Cancelling the RunGroup archive confirmation leaves the group and nested runs untouched @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-56 | +| 3 | high | archive-and-purge | [Purge an archived RunGroup deletes the group and moves nested runs to Runs Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-57 | +| 4 | low | archive-and-purge | [Purging a RunGroup with more than 20 000 runs is blocked @boundary @unclear](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-57 | +| 5 | high | archive-and-purge | [Unarchive a RunGroup from Groups Archive restores all nested runs @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-56 | +| 6 | high | run-creation | [Opening creation from a RunGroup page pre-populates the RunGroup field](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | AC-51 | +| 7 | normal | run-creation | [Arrow-dropdown closes on outside click without selecting any item @negative](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | AC-13 | +| 8 | normal | run-creation | [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | AC-13 | +| 9 | critical | run-groups | [Archive a RunGroup cascades to all nested runs @smoke](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-56, run-groups/ac-delta-17 | +| 10 | normal | run-groups | [Cancelling the archive confirmation dialog leaves the group untouched @negative](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-56, run-groups/ac-delta-17 | +| 11 | normal | run-groups | [Cancelling the purge confirmation leaves the group and nested runs on the active list @negative](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-57, run-groups/ac-delta-17 | +| 12 | high | run-groups | [Purge a RunGroup cascades with a Purged badge](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-57, run-groups/ac-delta-17 | +| 13 | high | run-groups | [Unarchive a RunGroup from Groups Archive restores all nested runs](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-56, run-groups/ac-delta-17 | +| 14 | normal | run-groups | [Add Existing Run picker excludes runs already in the group @boundary](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | run-groups/ac-delta-14 | +| 15 | normal | run-groups | [Add Existing Run picker shows an empty selectable list when every existing run already belongs to the group @boundary](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | run-groups/ac-delta-14 | +| 16 | high | run-groups | [Add Existing Run(s) to a RunGroup via the group extra menu @smoke](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | AC-53, run-groups/ac-delta-14 | +| 17 | critical | run-groups | [Add Manual Run from inside a RunGroup pre-populates the RunGroup field @smoke](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | AC-51, run-groups/ac-delta-7 | +| 18 | high | run-groups | [Move an existing Run into a RunGroup via the row extra menu @smoke](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | AC-52 | +| 19 | normal | run-groups | [Combined Report button is disabled on a RunGroup with no first-level runs @negative](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | run-groups/ac-delta-6 | +| 20 | low | run-groups | [Combined Report Compare To across different RunGroups @unclear](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | run-groups/ac-delta-11 | +| 21 | high | run-groups | [Combined Report shows Overview, Summary totals, and the Main Run anchor with within-group Compare To @smoke](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | AC-54, run-groups/ac-delta-10 | +| 22 | low | run-groups | [Per-group Runs list column customisation persists independently of the global list @boundary](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | AC-55, run-groups/ac-delta-9 | +| 23 | normal | run-groups | [RunGroup detail panel on an empty group shows header, empty-state, and action buttons @smoke](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | AC-54, run-groups/ac-delta-6, run-groups/ac-delta-8 | +| 24 | normal | run-groups | [Rungroup Statistic Report button requires two or more child runs @boundary](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | run-groups/ac-delta-6 | +| 25 | normal | run-groups | [Switching the main run anchor in the Combined Report re-bases Summary totals @boundary](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | run-groups/ac-delta-11 | +| 26 | normal | run-groups | [Cancel on Edit RunGroup discards pending changes @negative](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | run-groups/ac-delta-13 | +| 27 | high | run-groups | [Create a new RunGroup via the New group dialog @smoke](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | AC-13, AC-14, run-groups/ac-delta-1, run-groups/ac-delta-5 | +| 28 | normal | run-groups | [Creating a group with Group Type ${type} persists the choice @boundary](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | AC-14, run-groups/ac-delta-2 | +| 29 | normal | run-groups | [Creating a group with Merge Strategy ${strategy} persists the choice @boundary](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | AC-14, run-groups/ac-delta-3 | +| 30 | normal | run-groups | [Dismissing the New RunGroup panel via ${dismiss_method} does not create a group @negative](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | AC-13, run-groups/ac-delta-1 | +| 31 | high | run-groups | [Edit an existing RunGroup commits the changes in place @smoke](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | run-groups/ac-delta-13 | +| 32 | high | run-groups | [New RunGroup panel blocks save with an empty Name @negative](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | AC-14, run-groups/ac-delta-4 | +| 33 | normal | run-groups | [${pin_action} a RunGroup via the extra menu moves it to ${destination_region}](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | AC-70, run-groups/ac-delta-16 | +| 34 | normal | run-groups | [Cancel Copy RunGroup dialog does not create a new group @negative](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | run-groups/ac-delta-15 | +| 35 | normal | run-groups | [Copy RunGroup with custom toggle selection (Assignee, Issues, Environments enabled) propagates the selected slices](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | run-groups/ac-delta-15 | +| 36 | normal | run-groups | [Copy RunGroup with default toggle selection creates a duplicate with Nested structure and Labels only @smoke](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | AC-53, run-groups/ac-delta-15 | +| 37 | normal | run-groups | [RunGroup extra menu action set is state-aware — ${group_state} @smoke](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | run-groups/ac-delta-12 | +| 38 | high | runs-list-management | [RunGroup in the Groups tab expands in place to reveal child runs @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-52 | +| 39 | normal | runs-list-management | [Cancelling the Move dialog leaves the run in place @negative](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-52 | +| 40 | normal | runs-list-management | [Move dialog in a project with no RunGroups shows Root as the only destination @negative](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-52 | +| 41 | high | runs-list-management | [Moving a run to ${destination} via the Move dialog relocates the row](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-52 | +| 42 | critical | runs-list-management | [Pin then Unpin a run cycles the indicator and repositions the row @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-70 | +| 43 | normal | runs-list-management | [Pinning a RunGroup repositions the group to the top of the Groups tab](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-70 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-09-bulk-status-in-runner.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-09-bulk-status-in-runner.md new file mode 100644 index 0000000..9175c95 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-09-bulk-status-in-runner.md @@ -0,0 +1,130 @@ +# UC-09: Apply bulk status in the Manual Runner — Tester + + + +**Primary actor:** Tester +**Stakeholders:** QA Creator / Manager (observes aggregate counters + result messages); [Custom Statuses](../03-glossary.md#custom-status) may not participate in bulk apply (to be verified in UI — [13-open-questions.md § OQ-18](../13-open-questions.md#oq-18)); downstream Report / RunGroup consumers (bulk updates reflect on the Report like single-test updates). +**Goal:** Mark a selection of tests in the [Manual Runner](../03-glossary.md#manual-runner) with a single standard status — PASSED / FAILED / SKIPPED — with an optional shared Result message, in one commit, so the Tester avoids repeating the single-test path per row. +**Trigger:** Tester activates **Multi-Select** in the Manual Runner header, selects ≥ 1 test, and chooses a bulk action from the bottom toolbar (**Result message** modal, or one of the **quick-set** PASSED / FAILED / SKIPPED buttons). +**Scope:** `bulk-status-actions` (owner). Touches `test-execution-runner` (shares the runner chrome — [UC-03](./UC-03-execute-test-in-runner.md)), `tester-assignment` (shares the Multi-Select bottom toolbar where *Assign to* lives — owned by [UC-06](./UC-06-assign-testers.md)), cross-cutting concern F (filter-applied scope, AC-66). + +## Preconditions + +- Target Run is [In-Progress](../03-glossary.md#in-progress) (runner is only reachable in this state, `test-execution-runner-ac-delta.md` ac-delta-1). +- Actor holds Execute-Run permission (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +- Run has ≥ 1 test (a *Without tests* Run has nothing to select). + +## Main success scenario — bulk **Result message** → FAILED with a shared message + +1. Tester opens the Manual Runner and toggles **Multi-Select** mode in the header. +2. System reveals per-test checkboxes in the tree; the single-test result entry stops being the primary affordance; the bulk-action bottom toolbar is **not yet rendered** (`bulk-status-actions-ac-delta.md` ac-delta-1, ac-delta-5). +3. Tester ticks checkboxes on several tests. +4. System renders the bulk-action bottom toolbar with a selection counter reflecting the tick count (ac-delta-4), and exposes: **Result message** (modal), **PASSED / FAILED / SKIPPED** quick-set buttons, **Assign to** (owned by [UC-06 A4](./UC-06-assign-testers.md#a4-per-test-assignment-via-multi-select-bulk)), **Clear-Selection ×** (ac-delta-11), **Create notes +** (owned by [UC-03 A4](./UC-03-execute-test-in-runner.md#a4-notes--test--suite--bulk--convert-to-test)). +5. Tester clicks **Result message** — System opens the Result Message modal with: + - Status choice (PASSED / FAILED / SKIPPED). + - Optional **Message** textarea. + - Primary **Apply** (disabled until a status is picked — ac-delta-6). +6. Tester picks **FAILED**, types a message, clicks **Apply**. +7. System commits status + message to every selected test in one operation; the modal closes silently (no toast) (AC-94, ac-delta-6, ac-delta-8). +8. System updates the tree row icons for every affected test and increments / decrements the header status counters (Passed N / Failed N / Skipped N / Pending N) accordingly (AC-95, ac-delta-9). + +## Alternate flows + +### A1: Quick-set button with native confirm +1. Tester clicks the toolbar's **FAILED** (or PASSED / SKIPPED) quick-set button (ac-delta-10). +2. System shows a browser-native `confirm()` dialog: *"Are you sure to set status 'FAILED' for all selected tests?"* +3. On **Accept** — System applies FAILED to every selected test in one commit (no Result message); counters and row icons update (ac-delta-9). +4. On **Cancel** — Selection and state are untouched. + +### A2: Select all (filter-aware) +1. Tester clicks **Select all** in Multi-Select mode. +2. System selects **every test currently visible** in the tree (ac-delta-3) — which equals every test when no filter is applied, or only the filter-matching subset when a filter is active (AC-66, concern F). +3. Subsequent bulk apply affects only the visible (possibly filtered) set — this is the runner-scope counterpart to [UC-05 A8 (Advanced Relaunch filter)](./UC-05-relaunch-run.md#a8-advanced-relaunch-with-a-filter-applied-selection-scope). + +### A3: Dismiss the Result message modal without applying +1. Tester opens **Result message**, does not click Apply, and closes the modal (× / Esc). +2. System applies **no status change AND clears the current selection** — the bulk toolbar disappears together with the modal (ac-delta-7). + +### A4: Clear-Selection × (keep Multi-Select mode) +1. Tester clicks the toolbar's **×** Clear-Selection affordance (ac-delta-11). +2. System clears every current selection and hides the toolbar; Multi-Select stays active (checkboxes remain visible; counter = 0). + +### A5: Exit Multi-Select entirely +1. Tester toggles Multi-Select OFF, uses the Cancel affordance, or navigates away (ac-delta-2). +2. System clears any selections, hides the toolbar, and restores single-test result entry as the primary affordance. + +## Exception flows + +### E1: Zero selection — no toolbar +1. Tester enters Multi-Select but selects no tests. +2. System renders **no** bulk-action bottom toolbar — there is no empty-state toolbar and no affordance to trigger a bulk apply against an empty set (ac-delta-5). + +### E2: Apply disabled until a status is picked +1. Tester opens **Result message**, types a message, and tries to click Apply without picking PASSED / FAILED / SKIPPED. +2. System keeps **Apply** disabled until a standard status is picked (ac-delta-6) — [BR-5](../07-business-rules.md#br-5) analogue for the bulk path. + +### E3: Custom Status in bulk — UNCLEAR +1. Whether a Custom Status dropdown is exposed after standard status choice in the bulk modal (parallel to single-test AC-31) is **UNCLEAR** ([13-open-questions.md § OQ-18](../13-open-questions.md#oq-18)). +2. AC-31 is listed as *applicable* to this sub-feature but flagged for verification in UI. If absent, bulk apply cannot set a Custom Status and actors must fall back to single-test status entry. + +## Postconditions + +- **Success:** Every selected test carries the chosen standard status (PASSED / FAILED / SKIPPED) and, for the Result message path, the shared message string. Tree row icons update synchronously; Runner header counters reflect the delta. Run state is unchanged (still In-Progress — Finish Run is owned by [UC-04](./UC-04-finish-run.md)). +- **Failure / cancel:** No status or message change. Selection state depends on path — dismissing the Result message modal also clears selection (ac-delta-7); the × Clear-Selection path clears selection while keeping Multi-Select ON (ac-delta-11). + +## Business rules referenced + +- [**BR-5**](../07-business-rules.md#br-5) — analogue applies to bulk: standard status required before Apply / Custom Status. + +## Functional requirements covered + +- AC-29, AC-30, AC-31 (UNCLEAR — see E3), AC-66, AC-93, AC-94, AC-95. +- `bulk-status-actions-ac-delta.md` ac-delta-1..11. + +## Related use cases + +- **[UC-03](./UC-03-execute-test-in-runner.md)** — single-test runner flow; Multi-Select is its bulk variant (per concern H). +- **[UC-06](./UC-06-assign-testers.md)** — shares the same bottom toolbar (Assign-to action). +- **[UC-04](./UC-04-finish-run.md)** — destination after bulk apply (Finish Run). +- **[UC-05](./UC-05-relaunch-run.md)** — Advanced Relaunch filter-aware selection is the post-Finish counterpart (AC-66). + +## Verifying tests + + + + + + +_23 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | critical | bulk-status-actions | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters @smoke](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | AC-29, AC-94, AC-95, bulk-status-actions/ac-delta-6, bulk-status-actions/ac-delta-8, bulk-status-actions/ac-delta-9 | +| 2 | high | bulk-status-actions | [Bulk quick-set ${status} via the toolbar with native confirm Accept applies the status @smoke](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | AC-29, bulk-status-actions/ac-delta-10, bulk-status-actions/ac-delta-9 | +| 3 | low | bulk-status-actions | [Custom status dropdown appears in the bulk Result Message modal when custom statuses exist @unclear @needs-project-setting](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | AC-31, bulk-status-actions/ac-delta-6 | +| 4 | normal | bulk-status-actions | [Dismissing the quick-set native confirm dialog leaves all test statuses unchanged @negative](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | bulk-status-actions/ac-delta-10 | +| 5 | normal | bulk-status-actions | [Dismissing the Result Message modal via ${dismiss_method} clears the selection without applying a status @negative](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | bulk-status-actions/ac-delta-7 | +| 6 | high | bulk-status-actions | [Result Message modal Apply button stays disabled until a status is selected @negative](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | bulk-status-actions/ac-delta-6 | +| 7 | high | bulk-status-actions | [Bulk apply with a message persists the status and the message together](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-30, AC-93, AC-94, bulk-status-actions/ac-delta-6, bulk-status-actions/ac-delta-8 | +| 8 | critical | bulk-status-actions | [Bulk Result Message apply with a status filter active affects only filter-matching tests @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-66, AC-94, AC-95, bulk-status-actions/ac-delta-6, bulk-status-actions/ac-delta-8, bulk-status-actions/ac-delta-9 | +| 9 | normal | bulk-status-actions | [Suite-level checkbox with a status filter active selects only filter-matching tests @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | AC-66, bulk-status-actions/ac-delta-3 | +| 10 | high | bulk-status-actions | [Activate Multi-Select mode reveals per-test checkboxes @smoke](../../../../test-cases/manual-tests-execution/bulk-status-actions/multi-select-mode.md) | bulk-status-actions/ac-delta-1, bulk-status-actions/ac-delta-4 | +| 11 | normal | bulk-status-actions | [Clearing the selection keeps Multi-Select mode active with an empty selection @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/multi-select-mode.md) | bulk-status-actions/ac-delta-11 | +| 12 | high | bulk-status-actions | [Toggling Multi-Select off clears the selection and hides the bulk toolbar](../../../../test-cases/manual-tests-execution/bulk-status-actions/multi-select-mode.md) | bulk-status-actions/ac-delta-2 | +| 13 | normal | bulk-status-actions | [Bulk-action toolbar is not rendered when no tests are selected @boundary](../../../../test-cases/manual-tests-execution/bulk-status-actions/selection-mechanics.md) | bulk-status-actions/ac-delta-5 | +| 14 | normal | bulk-status-actions | [Per-test checkboxes update the selection counter as they toggle](../../../../test-cases/manual-tests-execution/bulk-status-actions/selection-mechanics.md) | bulk-status-actions/ac-delta-4 | +| 15 | normal | bulk-status-actions | [Suite-level checkbox selects every test in the suite](../../../../test-cases/manual-tests-execution/bulk-status-actions/selection-mechanics.md) | bulk-status-actions/ac-delta-3 | +| 16 | normal | run-lifecycle | ['Select all' inside Advanced Relaunch respects an active status filter](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | AC-66 | +| 17 | normal | test-execution-runner | [Custom sub-status counter impact is visible in the runner header (cross-cut E)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | AC-31 | +| 18 | critical | test-execution-runner | [Apply standard status ${status} to a pending test @smoke](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-29 | +| 19 | high | test-execution-runner | [Applying a custom sub-status to ${standard_status} keeps the standard status selected](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-31 | +| 20 | high | test-execution-runner | [Custom sub-status dropdown is disabled before a standard status is chosen @negative](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-31 | +| 21 | high | test-execution-runner | [Result message is editable only after a standard status is selected @negative](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-30 | +| 22 | high | test-execution-runner | [Result message persists after navigating to another test and back](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-30 | +| 23 | normal | test-execution-runner | [Switching status from Passed to Failed updates the header counters accordingly @boundary](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | AC-29, AC-30 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-10-manage-runs-list.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-10-manage-runs-list.md new file mode 100644 index 0000000..580da99 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-10-manage-runs-list.md @@ -0,0 +1,217 @@ +# UC-10: Manage the Runs list — QA Creator + + + +**Primary actor:** QA Creator +**Stakeholders:** Tester (uses Continue / Runner entry from the list); Manager / Owner (shares filter URLs, pins important groups); Project (supplies TQL variables over Runs — `rungroup`, `env`, `finished_at`, labels, custom statuses, counts); downstream UCs — [UC-04](./UC-04-finish-run.md) (Continue / Finish entry points), [UC-05](./UC-05-relaunch-run.md) (Relaunch ▾ row extra menu), [UC-08](./UC-08-manage-rungroup.md) (Move-to-group), [UC-11](./UC-11-view-run-report.md) (click-through), [UC-12](./UC-12-archive-unarchive-purge.md) (Archive / Purge entry points, Archive page links). +**Goal:** Navigate, filter, sort, pin, multi-select, and share the Runs list — scope the visible Runs (by tab, by TQL, by Custom view) and launch row/bulk actions that delegate to downstream UCs. +**Trigger:** Actor opens the Runs page (`/projects/{p}/runs`) and interacts with the filter tabs, the chart toggle, Multi-Select mode, the TQL editor, the Custom view toggle, row extra menus, or the Archive links at the bottom. +**Scope:** `runs-list-management` (owner). Touches `run-groups` (Groups tab + Move-to-group — [UC-08](./UC-08-manage-rungroup.md)), `run-detail-and-report` (row click navigates to Report + some bulk actions dock into Report surfaces — [UC-11](./UC-11-view-run-report.md)), `archive-and-purge` (archive links + row-level Archive / Purge — [UC-12](./UC-12-archive-unarchive-purge.md)), `run-lifecycle` (Continue / Relaunch variants surface from row extra menu — [UC-04](./UC-04-finish-run.md) / [UC-05](./UC-05-relaunch-run.md)). + +## Preconditions + +- Actor holds Read permission on the project (all roles incl. Readonly can view the list; destructive actions gate per role — see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix) + [BR-11](../07-business-rules.md#br-11)). +- Project contains ≥ 0 Runs — the list renders empty states per tab when no matching Runs exist. + +## Main success scenario — filter by tab + pin + click through to report + +1. Actor navigates to the Runs page. +2. System renders the Runs list with: + - Chart area above the list (toggleable — `runs-list-management-ac-delta.md` ac-delta-1) whose legend entries (Passed / Failed / Skipped) act as dataset toggles (ac-delta-2). + - Breadcrumb area with a **run count badge** reflecting the active tab + filter combination (ac-delta-3). + - Toolbar: **Manual Run** split-button (entry to [UC-01](./UC-01-create-manual-run.md) / [UC-02](./UC-02-create-mixed-run.md)), Filter tabs, Multi-Select toggle, Expand-all toggle (ac-delta-14), TQL editor entry, Custom-view / Default-view toggle (ac-delta-11), **Runs Status Report** (AI, disabled < 5 finished runs — ac-delta-4). + - Filter tabs: **Manual · Automated · Mixed · Unfinished · Groups** (AC-68). + - Rows with state-aware extra menus (AC-69, ac-delta-5). + - Archive entry links at the bottom (**Runs Archive** + **Groups Archive**, with counts — AC-77, ac-delta-17). +3. Actor clicks the **Mixed** filter tab — System re-renders the list scoped to Mixed Runs; the run-count badge updates (ac-delta-3). +4. Actor pins a Run via row extra menu → **Pin** (AC-70, ac-delta-6). +5. System repositions the Run at the top of the list; the row shows a pin indicator; a toast *"Run has been pinned"* appears. +6. Actor clicks the Run row — System navigates to the Run Detail + Report ([UC-11](./UC-11-view-run-report.md)). + +## Alternate flows + +### A1: Groups tab — expand in place +1. Actor clicks the **Groups** tab (AC-68). +2. System renders RunGroup rows, each with an expand chevron (ac-delta-13). +3. Actor clicks a group's chevron — System reveals nested child Runs in-place without navigation (ac-delta-13). The toolbar's **Expand** button toggles expand/collapse for every visible RunGroup (ac-delta-14). + +### A2: Row extra menu (state-aware) +1. Actor opens a row's extra menu (AC-69, ac-delta-5). +2. System exposes a state-dependent list: + - On a **Finished / Terminated** Run: *Relaunch / Launch a Copy / Advanced Relaunch / Copy / Pin / Move / Labels / Archive / Purge / Export as PDF / Download*. Each action delegates downstream (Relaunch variants → [UC-05](./UC-05-relaunch-run.md); Move → [UC-08 A2](./UC-08-manage-rungroup.md#a2-move-an-existing-run-into-a-rungroup-from-the-runs-list); Archive / Purge → [UC-12](./UC-12-archive-unarchive-purge.md); Export / Download → [UC-11](./UC-11-view-run-report.md) entry points). + - On an **Unfinished** Run: *Continue* replaces Relaunch / Launch-a-Copy / Advanced Relaunch (ac-delta-5). Continue → [UC-04 A1](./UC-04-finish-run.md#a1-continue-a-pending-run-then-finish). + +### A3: Multi-Select + bulk action +1. Actor toggles the toolbar's **Multi-select** icon (ac-delta-7). +2. System reveals per-row checkboxes and a bottom bulk-action toolbar. +3. Actor ticks ≥ 1 rows; the toolbar exposes: **Select all**, **Archive**, **Labels**, **Compare**, **Extra** (Link, Download, Merge, Move), **Purge** (AC-71). +4. Actor can apply: + - **Archive** (bulk) — delegates to [UC-12](./UC-12-archive-unarchive-purge.md). + - **Labels** — applies / removes labels across all selected Runs in one submit (ac-delta-9); the Labels column (when visible in Custom view) reflects on return. + - **Compare** — enabled only when ≥ 2 rows are selected; navigates to the Compare view (owned by [UC-11](./UC-11-view-run-report.md), ac-delta-8, AC-92). + - **Move / Merge / Link / Download** — delegate per AC-71. + +### A4: TQL Query +1. Actor opens the TQL Query Language Editor (AC-72) — System opens the modal. +2. Modal exposes: **Apply** / **Save** (disabled until non-empty) / **Cancel**; Saved Queries tab + Examples tab; autocomplete checkbox (default ON); Operators + Variables sidebar (ac-delta-15). +3. Actor types e.g. `rungroup == "Release 42" and passed_count >= 10`. +4. Actor clicks **Apply** — System filters the list to matching Runs; the **URL reflects the filter state** making it shareable (AC-73, ac-delta-16). +5. Invalid query — error surface inside the editor; no list filtering performed (ac-delta-16). + +### A5: Custom view — columns + widths persist +1. Actor clicks the view-toggle button — System switches from **Default view** (card) to **Custom view** (table); the button label flips (ac-delta-11). +2. Actor opens Custom view Settings (AC-74) — System exposes column visibility toggles (incl. **Tags & Envs**, **Labels**, **Assigned to**, custom-status columns) and drag handles for reorder/resize (ac-delta-10). +3. Widths + visibility **persist per-user, per-project** across reloads (AC-74, ac-delta-10). + +### A6: URL share +1. Any filter state (tab + TQL + Custom view selection) is reflected in the URL (AC-73, ac-delta-16). +2. Actor copies the URL and shares it — recipient lands on the same filter scope (sharing pages include the Runs page **and the Runs Archive page** — AC-73). + +### A7: Runs Status Report (AI) gating +1. Actor clicks **Runs Status Report** when < 5 finished Runs exist — System keeps the button disabled with tooltip *"More than 5 runs are needed to generate a report."* (ac-delta-4). +2. When ≥ 5 finished Runs exist, the button becomes enabled. Clicking generates the AI-authored report (destination out of POC scope — [13-open-questions.md § OQ-19](../13-open-questions.md#oq-19) for payload details). + +### A8: Pagination +1. When row count exceeds the page size, System shows pagination controls: **«** (first) / current page number (plain text) / **»** (last) (ac-delta-12). +2. Under the page-size threshold, pagination is not rendered. + +### A9: Chart legend toggles +1. Actor clicks a legend item (Passed / Failed / Skipped) in the chart area (ac-delta-2). +2. System toggles the dataset's visibility in the chart; other datasets remain. + +### A10: Hide / Show chart +1. Actor clicks the chart area's **Hide chart** / **Show chart** toggle (ac-delta-1). +2. System collapses / expands the chart container; the toggle label flips. + +### A11: Move to RunGroup from the row +1. Actor opens a Run's extra menu → **Move** → picks destination group → **Move** (AC-52). +2. System moves the Run into the chosen group; Run leaves its prior group (or ungrouped set) and appears under the new one (delegates to [UC-08 A2](./UC-08-manage-rungroup.md#a2-move-an-existing-run-into-a-rungroup-from-the-runs-list)). + +### A12: Archive links (footer) +1. Actor scrolls to the bottom of the Runs page. +2. **Runs Archive** and **Groups Archive** links display archived-item counts (AC-77, ac-delta-17). +3. Clicking navigates to the archive pages (`/runs/archive`, `/runs/group-archive`) — destinations owned by [UC-12](./UC-12-archive-unarchive-purge.md). + +## Exception flows + +### E1: Empty state per tab +1. Project has no Runs for the active tab (e.g., a fresh project on **Mixed**). +2. System renders a neutral empty state (no error) — run count badge is zero (ac-delta-3). + +### E2: Destructive action attempted by Readonly +1. A Readonly user opens a row extra menu. +2. Destructive actions (Archive / Purge / Labels edit / Move) are hidden or disabled per [BR-11](../07-business-rules.md#br-11) (owned by [UC-12](./UC-12-archive-unarchive-purge.md)'s permission gating). + +### E3: Compare with < 2 rows selected +1. Actor enters Multi-Select and ticks only one row. +2. System keeps **Compare** disabled (ac-delta-8). Enabling requires ≥ 2 selections. + +### E4: TQL syntax error +1. Actor applies an invalid TQL query (ac-delta-16). +2. System surfaces an inline error inside the editor; the list remains at its prior filter state; no URL update. + +## Postconditions + +- **Success — navigation / filter:** The list reflects the chosen tab + TQL + Custom view; the URL is shareable (AC-73). +- **Success — pin:** Pinned Runs / RunGroups surface at the top with a pin indicator (AC-70, ac-delta-6); Unpin reverts to chronological order. +- **Success — bulk action:** Targeted Runs receive the applied label set / comparison dock / archive status per the chosen action. +- **Failure:** List stays at prior state; no URL / filter / row mutation persists. + +## Business rules referenced + +- [**BR-11**](../07-business-rules.md#br-11) — Readonly cannot perform destructive actions (Archive / Unarchive / Purge / Labels / Move) from row or bulk toolbar. + +## Functional requirements covered + +- AC-52, AC-68, AC-69, AC-70, AC-71, AC-72, AC-73, AC-74, AC-77, AC-87, AC-88, AC-92. +- `runs-list-management-ac-delta.md` ac-delta-1..17. + +## Related use cases + +- **[UC-01](./UC-01-create-manual-run.md)** / **[UC-02](./UC-02-create-mixed-run.md)** — entry point (Manual Run split-button lives on this page). +- **[UC-04](./UC-04-finish-run.md)** — Continue entry point from unfinished rows. +- **[UC-05](./UC-05-relaunch-run.md)** — Relaunch ▾ variants from finished rows. +- **[UC-08](./UC-08-manage-rungroup.md)** — Groups tab + Move-to-group. +- **[UC-11](./UC-11-view-run-report.md)** — row click navigates to Report; Compare destination. +- **[UC-12](./UC-12-archive-unarchive-purge.md)** — row + bulk Archive / Purge; footer Archive links. + +## Verifying tests + + + + + + +_63 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | high | archive-and-purge | [Navigate to Runs Archive via ${entry_point}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | AC-77 | +| 2 | critical | archive-and-purge | [Archive a single run from the row extra menu @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-69 | +| 3 | normal | archive-and-purge | [Bulk Archive button is disabled when no runs are selected @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71 | +| 4 | critical | archive-and-purge | [Bulk archive multiple runs via Multi-select @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71 | +| 5 | high | archive-and-purge | [Bulk purge multiple runs via Multi-select "Delete" action](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71 | +| 6 | critical | archive-and-purge | [Purge a single run from the row extra menu @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-69 | +| 7 | normal | archive-and-purge | [Select All link bulk-archives every run on the current page @boundary](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71 | +| 8 | normal | run-detail-and-report | [Compare action requires at least two runs to be selected @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 9 | critical | run-detail-and-report | [Compare at least two finished runs from the Runs list navigates to the Compare matrix @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 10 | high | run-detail-and-report | [Compare matrix renders per-run status cells with test titles as row links @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 11 | low | run-detail-and-report | [Compare matrix renders with four runs selected at the supported maximum @boundary](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 12 | low | run-detail-and-report | [Manually entering the Compare URL with a single run id renders a neutral empty or fallback state @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 13 | normal | run-detail-and-report | [Extra menu Download as Spreadsheet triggers an XLSX download @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-87 | +| 14 | high | run-detail-and-report | [Extra menu Export as PDF triggers a PDF download of the current report view @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-88 | +| 15 | high | run-groups | [Move an existing Run into a RunGroup via the row extra menu @smoke](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | AC-52 | +| 16 | normal | run-groups | [${pin_action} a RunGroup via the extra menu moves it to ${destination_region}](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | AC-70 | +| 17 | normal | runs-list-management | [Archive entry links at the bottom of the Runs page navigate to ${archive_page}](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | AC-77, runs-list-management/ac-delta-17 | +| 18 | normal | runs-list-management | [Expand-all toolbar button expands and collapses every visible RunGroup row](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | runs-list-management/ac-delta-14, AC-69 | +| 19 | low | runs-list-management | [Hyphenation toggle in Runs list settings wraps long column values](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | AC-74 | +| 20 | normal | runs-list-management | [Legend click toggles the ${dataset} dataset in the chart](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | runs-list-management/ac-delta-2 | +| 21 | normal | runs-list-management | [Pagination first and last controls navigate and disable at boundaries @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | runs-list-management/ac-delta-12 | +| 22 | low | runs-list-management | [Run count badge reflects the number of runs in the active tab](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | runs-list-management/ac-delta-3 | +| 23 | normal | runs-list-management | [Runs Status Report AI button is disabled below the 5-finished-runs threshold @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | runs-list-management/ac-delta-4 | +| 24 | normal | runs-list-management | [Toggling the chart hides and restores the chart area @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | runs-list-management/ac-delta-1 | +| 25 | high | runs-list-management | [Bulk multi-select archive applies across every selected run end to end @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-71, runs-list-management/ac-delta-7, runs-list-management/ac-delta-9 | +| 26 | normal | runs-list-management | [Multi-environment runs render with environment indicators in the Runs list](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-68, AC-74, runs-list-management/ac-delta-13 | +| 27 | high | runs-list-management | [RunGroup in the Groups tab expands in place to reveal child runs @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-68, AC-52, runs-list-management/ac-delta-13 | +| 28 | normal | runs-list-management | [TQL has_custom_status filters the list to runs that recorded a custom status](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-72, runs-list-management/ac-delta-16 | +| 29 | normal | runs-list-management | [Changing a column width in Custom view Settings persists across reload](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-74, runs-list-management/ac-delta-10 | +| 30 | high | runs-list-management | [Copying the Runs URL reproduces the active filter in a new session](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-73, runs-list-management/ac-delta-16 | +| 31 | normal | runs-list-management | [Hiding a column in Custom view Settings persists across reload](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-74, runs-list-management/ac-delta-10 | +| 32 | normal | runs-list-management | [Opening the Runs page with a malformed filterParam falls back to the unfiltered list @negative](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-73, runs-list-management/ac-delta-16 | +| 33 | high | runs-list-management | [Settings gear is enabled only in Custom view @negative](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-74, runs-list-management/ac-delta-10 | +| 34 | critical | runs-list-management | [Switch to the ${tab} filter tab scopes the list to matching runs @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-68, runs-list-management/ac-delta-3 | +| 35 | low | runs-list-management | [Switching to the Groups tab in a project with no RunGroups shows an empty state @negative](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-68 | +| 36 | normal | runs-list-management | [Switching to the Unfinished tab in a project with no unfinished runs shows an empty state @negative](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-68, runs-list-management/ac-delta-3 | +| 37 | high | runs-list-management | [Toggle Default view and Custom view switches list layout and button label @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | AC-74, runs-list-management/ac-delta-11 | +| 38 | high | runs-list-management | [Bulk Archive moves every selected run off the default list](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71, runs-list-management/ac-delta-5 | +| 39 | normal | runs-list-management | [Bulk Labels applies a label to every selected run](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71, runs-list-management/ac-delta-9 | +| 40 | high | runs-list-management | [Closing the bulk toolbar via the close button keeps selection hidden](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71, runs-list-management/ac-delta-7 | +| 41 | critical | runs-list-management | [Compare enables only at two or more selected runs and navigates to the comparison view @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71, AC-92, runs-list-management/ac-delta-8 | +| 42 | normal | runs-list-management | [Deselecting the last selected run removes the bulk toolbar @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71, runs-list-management/ac-delta-7 | +| 43 | normal | runs-list-management | [Extra dropdown shows ${extra_items} at ${selection_size} @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71, AC-87, runs-list-management/ac-delta-8 | +| 44 | normal | runs-list-management | [Merge action is absent in the Extra dropdown at a single selection @negative](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 45 | normal | runs-list-management | [Select all selects every visible run row in Multi-select mode](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 46 | critical | runs-list-management | [Toggling Multi-select on and off shows and hides the row checkboxes and bottom toolbar @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71, runs-list-management/ac-delta-7 | +| 47 | normal | runs-list-management | [Cancelling the Move dialog leaves the run in place @negative](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-52, runs-list-management/ac-delta-5 | +| 48 | normal | runs-list-management | [Move dialog in a project with no RunGroups shows Root as the only destination @negative](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-52, runs-list-management/ac-delta-5 | +| 49 | high | runs-list-management | [Move to Archive via row extra menu removes the run from the active list](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-69, runs-list-management/ac-delta-5 | +| 50 | high | runs-list-management | [Moving a run to ${destination} via the Move dialog relocates the row](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-52, runs-list-management/ac-delta-5 | +| 51 | critical | runs-list-management | [Pin then Unpin a run cycles the indicator and repositions the row @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-70, runs-list-management/ac-delta-6 | +| 52 | normal | runs-list-management | [Pinning a RunGroup repositions the group to the top of the Groups tab](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-70, runs-list-management/ac-delta-6 | +| 53 | normal | runs-list-management | [Purge via row extra menu removes the run and shows the deletion toast](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-69 | +| 54 | high | runs-list-management | [Row extra menu exposes the ${state}-specific action set @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-69, AC-88, runs-list-management/ac-delta-5 | +| 55 | normal | runs-list-management | [Applying a TQL query with no matching runs surfaces a zero-result state @negative](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-16 | +| 56 | critical | runs-list-management | [Applying a valid query filters the list and reflects the filter in the URL @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, AC-73, runs-list-management/ac-delta-16 | +| 57 | normal | runs-list-management | [Cancelling the Query Language Editor discards the typed query @negative](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-15 | +| 58 | normal | runs-list-management | [Examples tab lists three preset queries that can be inserted into the editor](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-15 | +| 59 | high | runs-list-management | [Invalid query surfaces an error without filtering the list @negative](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-16 | +| 60 | low | runs-list-management | [Operators and Variables sidebars expose the documented TQL vocabulary](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-15 | +| 61 | high | runs-list-management | [Query Language Editor opens with Apply always enabled and Cancel always enabled @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-15 | +| 62 | normal | runs-list-management | [Save button remains disabled until a non-empty query is typed @unclear](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-15 | +| 63 | low | runs-list-management | [Toggling the Enable autocomplete checkbox changes suggestion behavior](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | AC-72, runs-list-management/ac-delta-15 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-11-view-run-report.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-11-view-run-report.md new file mode 100644 index 0000000..7a4ae8e --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-11-view-run-report.md @@ -0,0 +1,211 @@ +# UC-11: View a Run detail and Report — QA Creator + + + +**Primary actor:** QA Creator (also performed by Manager / Owner / Tester; Readonly has view-only access). +**Stakeholders:** Tester (consumes Defects tab links, Description / Code template sub-tabs); stakeholders outside the project (consume Share-by-Email / Share-Publicly exports); downstream Archive / Purge ([UC-12](./UC-12-archive-unarchive-purge.md)). +**Goal:** Inspect a Run's results — overall summary, per-test outcomes, grouped overviews, Flaky Tests analytics (when applicable), Defects, Statistics — then Share, Compare, Export PDF, or Download as XLSX. +**Trigger:** Actor clicks a Run row on the Runs list ([UC-10](./UC-10-manage-runs-list.md)), deep-links to `/projects/{p}/runs/{id}`, or completes Finish in [UC-04](./UC-04-finish-run.md) and is navigated to the Report. +**Scope:** `run-detail-and-report` (owner). Touches `runs-list-management` (entry point from the list; Compare destination — [UC-10](./UC-10-manage-runs-list.md)), `run-lifecycle` (entered after Finish — [UC-04](./UC-04-finish-run.md)), `test-execution-runner` (the runner is the write-side counterpart — the Report is read-only), `archive-and-purge` (Extra menu exposes Archive / Purge — [UC-12](./UC-12-archive-unarchive-purge.md)). + +## Preconditions + +- Actor holds Read-Run permission on the project (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). +- Target Run exists in any state — the Report renders for In-Progress, Finished, and Terminated Runs; runner reachability is separate (see `test-execution-runner-ac-delta.md` ac-delta-1 — Finished / Terminated Runs open the Report instead of the Runner). +- For **Share Publicly**: Company-level *Sharing* flag **AND** Project-level *Sharing* flag are enabled ([BR-13](../07-business-rules.md#br-13), AC-90). + +## Main success scenario — open Basic Report, drill into a test + +1. Actor clicks a Run row on the Runs list ([UC-10](./UC-10-manage-runs-list.md) main flow). +2. System opens the **Basic Run Report** with (AC-82, `run-detail-and-report-ac-delta.md` ac-delta-1): + - **Header** — Run title, status chip (In-Progress / Finished / Terminated), created-by + created-at, environment chips (one per env when multi-env), quick counters (Passed / Failed / Skipped / Pending / Custom). + - **Tabs** — *Tests · Statistics · Defects* (AC-83). +3. Actor is on the default **Tests** tab (ac-delta-2) — tests grouped by suite; each row shows status icon, title, duration, assignee avatar (when assigned), custom-status badge (when set). +4. Actor clicks a test row — System opens the **test sub-panel** on the right (ac-delta-3); the row stays highlighted; the panel persists across test switches until explicitly closed. +5. Sub-panel exposes tabs (AC-84): **Summary** (default — ac-delta-4) · **Description** (read-only markdown — ac-delta-5) · **Code Template** (automation code, empty state for manual-only — ac-delta-6) · **Runs** (prior runs of this test; each row clickable — ac-delta-7). + +## Alternate flows + +### A1: Filter / sort / search / keyboard nav on the Tests tab +1. Actor applies filter chips: **status / type / messages / custom-status / assignee** — chips combine with AND semantics; the filter button shows a chip-count badge (AC-85, ac-delta-13). +2. Actor sorts by **Suite / Name / Failure-first** with ASC/DESC toggles; sort persists within the session (ac-delta-15). +3. Actor searches free-text over title + result message; filter persists until cleared (ac-delta-12). +4. Actor uses **↑ / ↓** to move selection between tests; **Enter** opens the sub-panel; **Esc** closes it (AC-86, ac-delta-14). + +### A2: Statistics tab +1. Actor clicks **Statistics** (AC-83, ac-delta-8). +2. System renders aggregate counts + percentage split of statuses + duration totals; the tab re-renders when filters from the Tests tab are applied. + +### A3: Defects tab +1. Actor clicks **Defects** (AC-83, ac-delta-9). +2. System lists tests that have linked issues / defects; each row links to the defect tracker (Jira / GitHub) when a link is configured. +3. Empty state renders when no defects are linked. **Behaviour details UNCLEAR** — whether add/remove a defect link is supported inside this tab is tracked in [13-open-questions.md § OQ-04](../13-open-questions.md#oq-04) (AC-98 UNCLEAR). + +### A4: Extended Run Report (grouped overview) +1. Actor switches to the **Extended** view (AC-86, ac-delta-10). +2. System shows a grouped overview with dimensions **Suites / Tags / Labels / Assignees / Priorities**; switching dimensions re-renders the list without reloading. +3. The **Flaky Tests Analytics** section renders **only** when the Run contains tests with flaky history (≥ 2 prior Runs with status changes — ac-delta-11). Otherwise the section is hidden. +4. Run Report Summary is rendered (AC-86). + +### A5: Download as Spreadsheet (XLSX) +1. Actor opens the Report extra menu → **Download as Spreadsheet** (AC-87, ac-delta-16). +2. System generates an XLSX named e.g. `Run-{id}.xlsx` with one row per test (status / duration / message / assignee). + +### A6: Export as PDF +1. Actor opens the Report extra menu → **Export as PDF** (AC-88, ac-delta-17). +2. System generates a PDF mirroring the current view (Basic or Extended) including Run Report Summary and active filters. + +### A7: Share by Email +1. In the **Extended** view, Actor opens **Share Report by Email** (AC-89, ac-delta-18). +2. Actor enters a comma-separated email list. +3. Invalid email formats — rejected inline with an error; submit is blocked. +4. On Submit, a success toast confirms send. + +### A8: Share Publicly (URL + passcode) +**Applies when Company + Project *Sharing* flag are enabled — [BR-13](../07-business-rules.md#br-13), AC-90.** +1. In the **Extended** view, Actor opens **Share Publicly** (AC-90). +2. Dialog shows (ac-delta-19): + - **Expiration** selector — *1 day / 7 days / 30 days / custom* (default **7 days**). + - **Protect by passcode** toggle (**default ON**). +3. On confirm, System generates a public **URL** + **Passcode** shown once (both copyable). [BR-13](../07-business-rules.md#br-13) enforces the defaults. +4. **Stop Sharing** — later click immediately revokes the URL (AC-91, ac-delta-20); subsequent attempts to load the URL return a revoked/expired state. + +### A9: Compare selected Runs +1. Actor enters Compare either via **Multi-select → Compare** on the Runs list ([UC-10 A3](./UC-10-manage-runs-list.md#a3-multi-select--bulk-action), AC-92) or via the Report's own Compare affordance. +2. System opens a side-by-side matrix of test statuses across selected Runs; rows where statuses differ are highlighted (ac-delta-21). + +### A10: Custom Report-view Settings +1. Actor opens the Report's Custom view Settings (distinct from the Runs list's Custom view). +2. Toggles columns (**Duration / Assignee / Labels / Tags / Envs / Custom Status / …**); width + visibility persist per-project, per-user (ac-delta-22). + +### A11: Copy Link — UNCLEAR +1. Actor looks for a non-public **Copy Link** action on the Report extra menu (AC-99). +2. **UNCLEAR** — presence and behaviour (copies app URL to clipboard?) are to be verified; tracked in [13-open-questions.md § OQ-20](../13-open-questions.md#oq-20). + +### A12: Multi-environment — per-env breakdown +1. When the Run was created with ≥ 2 environment groups ([UC-07 A1 / A2](./UC-07-configure-environments.md#a1-multi-group--launch-in-sequence)), the Report surfaces an **Environment** column / filter; Statistics rolls up per-environment counts (Concern A, ac-delta-1 header env chips). + +### A13: Multi-user — filter / group by assignee +1. Tests tab — filter by assignee (AC-85); Extended Report groups by **Assignees** (ac-delta-10). Concern B — consumes the per-test assignment from [UC-06](./UC-06-assign-testers.md). + +### A14: Custom status — filter +1. Tests tab — custom-status filter chip restricts the list to tests with the chosen custom status (ac-delta-13, concern E). + +## Exception flows + +### E1: Share Publicly attempted with Sharing flag disabled +1. Company- or Project-level *Sharing* is disabled. +2. System disables / hides the Share Publicly action (AC-90, [BR-13](../07-business-rules.md#br-13)). Permission surface **UNCLEAR** — see [13-open-questions.md § OQ-06](../13-open-questions.md#oq-06) (AC-100 UNCLEAR). + +### E2: Empty sub-panel sections +1. Test has no attachments / no steps / no message / no prior runs / no code template. +2. Each sub-tab renders a neutral empty state, not an error (ac-delta-4, ac-delta-6, ac-delta-7). + +### E3: Email share with invalid addresses +1. Actor submits a list with malformed emails. +2. System rejects inline; no send occurs (ac-delta-18). + +## Postconditions + +- **Success — view:** Actor has observed the Run's outcome at the chosen granularity (Basic / Extended / Statistics / Defects / sub-panel). +- **Success — Share:** Recipient has either an emailed report (A7) or a revocable public URL + passcode (A8, AC-91). +- **Success — Export / Download:** An XLSX or PDF artefact is produced mirroring the current view. +- **Success — Compare:** Multiple Runs are rendered side-by-side with differences highlighted. +- **Failure:** No artefact is produced / no link is generated; the Report view is unchanged. + +## Business rules referenced + +- [**BR-13**](../07-business-rules.md#br-13) — Public Share preconditions (Company + Project *Sharing* flag; passcode ON by default; 7-day expiration default). + +## Functional requirements covered + +- AC-82, AC-83, AC-84, AC-85, AC-86, AC-87, AC-88, AC-89, AC-90, AC-91, AC-92, AC-98 (UNCLEAR), AC-99 (UNCLEAR). +- `run-detail-and-report-ac-delta.md` ac-delta-1..22. + +## Related use cases + +- **[UC-04](./UC-04-finish-run.md)** — Finish navigates here. +- **[UC-10](./UC-10-manage-runs-list.md)** — entry point + Compare entry from Multi-select. +- **[UC-05](./UC-05-relaunch-run.md)** — Relaunch ▾ is an entry point on the Report extra menu. +- **[UC-12](./UC-12-archive-unarchive-purge.md)** — Archive / Purge on the Report extra menu. + +## Verifying tests + + + + + + +_63 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | normal | run-detail-and-report | [Compare action requires at least two runs to be selected @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 2 | critical | run-detail-and-report | [Compare at least two finished runs from the Runs list navigates to the Compare matrix @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 3 | high | run-detail-and-report | [Compare matrix renders per-run status cells with test titles as row links @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92, run-detail-and-report/ac-delta-21 | +| 4 | low | run-detail-and-report | [Compare matrix renders with four runs selected at the supported maximum @boundary](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92, run-detail-and-report/ac-delta-21 | +| 5 | normal | run-detail-and-report | [Compare view renders correctly across runs with different environments and assignees](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | run-detail-and-report/ac-delta-21 | +| 6 | low | run-detail-and-report | [Manually entering the Compare URL with a single run id renders a neutral empty or fallback state @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | AC-92 | +| 7 | normal | run-detail-and-report | [Rows where statuses differ across runs are visually highlighted](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | run-detail-and-report/ac-delta-21 | +| 8 | critical | run-detail-and-report | [Copy Link button in the report header copies the report URL to clipboard @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-99 | +| 9 | normal | run-detail-and-report | [Extra menu Download as Spreadsheet triggers an XLSX download @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-87, run-detail-and-report/ac-delta-16 | +| 10 | high | run-detail-and-report | [Extra menu Export as PDF triggers a PDF download of the current report view @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-88, run-detail-and-report/ac-delta-17 | +| 11 | normal | run-detail-and-report | [Make Public Report with the minimum 1-day Expiration generates a short-lived URL @boundary](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-90, run-detail-and-report/ac-delta-19 | +| 12 | normal | run-detail-and-report | [Passcode is shown only once and cannot be recovered after the dialog is closed @boundary](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-91, run-detail-and-report/ac-delta-19 | +| 13 | normal | run-detail-and-report | [Public share URL rejects an incorrect passcode @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-91 | +| 14 | normal | run-detail-and-report | [Report Custom view Settings toggles column visibility on the Tests tab](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | run-detail-and-report/ac-delta-22 | +| 15 | normal | run-detail-and-report | [Share by Email with ${email_count} email(s) sends the report to every recipient @boundary](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-89, run-detail-and-report/ac-delta-18 | +| 16 | normal | run-detail-and-report | [Share by Email with an empty input surfaces an inline validation error @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-89, run-detail-and-report/ac-delta-18 | +| 17 | high | run-detail-and-report | [Share report by Email accepts comma-separated emails and rejects invalid format @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-89, run-detail-and-report/ac-delta-18 | +| 18 | high | run-detail-and-report | [Share Report Publicly generates a URL and passcode with default Expiration and Protect-by-passcode ON @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-90, AC-91, run-detail-and-report/ac-delta-19 | +| 19 | high | run-detail-and-report | [Stop Sharing revokes the public URL and blocks subsequent unauthenticated access @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | AC-91, run-detail-and-report/ac-delta-20 | +| 20 | normal | run-detail-and-report | [Close the Run Detail panel returns to the Runs list](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | AC-82 | +| 21 | normal | run-detail-and-report | [Multi-environment run shows per-environment chips in the Detail header](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | run-detail-and-report/ac-delta-1 | +| 22 | normal | run-detail-and-report | [Navigate to a non-existent run id shows a not-found state @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | AC-82 | +| 23 | critical | run-detail-and-report | [Open a finished run from the Runs list lands on Run Detail with Tests tab active @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | AC-82, run-detail-and-report/ac-delta-1 | +| 24 | high | run-detail-and-report | [Run Detail header surfaces run metadata summary @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | run-detail-and-report/ac-delta-1 | +| 25 | high | run-detail-and-report | [Switch to the ${tab} tab reveals its dedicated content area @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | AC-83, run-detail-and-report/ac-delta-1 | +| 26 | high | run-detail-and-report | [Switching tabs preserves the active test selection and applied filters](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | AC-83, run-detail-and-report/ac-delta-3 | +| 27 | normal | run-detail-and-report | [Analytics section is hidden when the run has no flaky-test history @boundary](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | run-detail-and-report/ac-delta-11 | +| 28 | normal | run-detail-and-report | [Analytics section renders the Flaky Tests chart when flaky history exists](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | run-detail-and-report/ac-delta-11 | +| 29 | low | run-detail-and-report | [Keyboard shortcuts reference modal opens from the report page](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | AC-86 | +| 30 | critical | run-detail-and-report | [Open the Report page shows the test list alongside the Summary and Overview panel @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | AC-82, AC-86 | +| 31 | normal | run-detail-and-report | [Overview grouping by a dimension with no matching data renders a neutral empty bucket list @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | AC-86, run-detail-and-report/ac-delta-10 | +| 32 | high | run-detail-and-report | [Overview grouping by Assignees buckets tests under each tester on a multi-assignee run](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | AC-86, run-detail-and-report/ac-delta-10 | +| 33 | normal | run-detail-and-report | [Switch the Overview grouping to ${grouping} rebuckets the list without reloading @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | AC-86, run-detail-and-report/ac-delta-10 | +| 34 | low | run-detail-and-report | [Tree View toggle on the Report page switches between flat list and tree-grouped layout](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | run-detail-and-report/ac-delta-13 | +| 35 | normal | run-detail-and-report | [Defects tab lists linked defects for tests that have them](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | AC-98, run-detail-and-report/ac-delta-9 | +| 36 | high | run-detail-and-report | [Defects tab shows empty-state links when the run has no linked defects @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | AC-98, run-detail-and-report/ac-delta-9 | +| 37 | low | run-detail-and-report | [Folders toggle in the Statistics Suites section collapses and expands nested folders](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | run-detail-and-report/ac-delta-8 | +| 38 | normal | run-detail-and-report | [Sort and status filter icons in a Statistics section reorder its rows](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | run-detail-and-report/ac-delta-8 | +| 39 | normal | run-detail-and-report | [Statistics tab groups counts under Suites, Tags, Labels, Assignees, Priorities, Custom Statuses @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | AC-83, run-detail-and-report/ac-delta-8 | +| 40 | normal | run-detail-and-report | [Statistics tab surfaces per-environment counts on a multi-environment run](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | run-detail-and-report/ac-delta-8 | +| 41 | critical | run-detail-and-report | [Click a test row opens the sub-panel with the row visibly highlighted @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | AC-84, run-detail-and-report/ac-delta-3 | +| 42 | normal | run-detail-and-report | [Close the sub-panel via Escape returns the list to full width](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | run-detail-and-report/ac-delta-14 | +| 43 | normal | run-detail-and-report | [Code template tab shows the test's code template with a copy control](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | AC-84, run-detail-and-report/ac-delta-6 | +| 44 | normal | run-detail-and-report | [Description tab renders the test description and is read-only in run context](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | AC-84, run-detail-and-report/ac-delta-5 | +| 45 | normal | run-detail-and-report | [Runs sub-tab for a test without prior runs shows the empty-state message @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | AC-84, run-detail-and-report/ac-delta-7 | +| 46 | normal | run-detail-and-report | [Runs tab lists the test's prior runs and links back to each run's report](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | AC-84, run-detail-and-report/ac-delta-7 | +| 47 | high | run-detail-and-report | [Sub-panel exposes Summary, Description, Code template, and Runs tabs @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | AC-84 | +| 48 | normal | run-detail-and-report | [Summary tab shows the last execution status, message, and step results](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | AC-84, run-detail-and-report/ac-delta-4 | +| 49 | normal | run-detail-and-report | [Swapping selection between tests keeps the sub-panel open](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | run-detail-and-report/ac-delta-3 | +| 50 | normal | run-detail-and-report | [Combining Passed and Failed filters shows tests in either status](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-85, run-detail-and-report/ac-delta-13 | +| 51 | high | run-detail-and-report | [Filter by Assignee on a multi-assignee run shows only tests for that assignee](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-85, run-detail-and-report/ac-delta-13 | +| 52 | normal | run-detail-and-report | [Filter by Assignee with no matching tests renders the empty-state message @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-85, run-detail-and-report/ac-delta-13 | +| 53 | high | run-detail-and-report | [Filter by Custom Status on a run with custom statuses narrows the list to matching tests](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-85, run-detail-and-report/ac-delta-13 | +| 54 | normal | run-detail-and-report | [Keyboard navigation ↑ and ↓ moves selection between test rows and Esc closes the sub-panel](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-86, run-detail-and-report/ac-delta-14 | +| 55 | normal | run-detail-and-report | [Search in the Tests tab filters rows by title or result message in real time @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-85, run-detail-and-report/ac-delta-12 | +| 56 | low | run-detail-and-report | [Search input accepts a query at the 500-character length @boundary](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | run-detail-and-report/ac-delta-12 | +| 57 | normal | run-detail-and-report | [Search with no matches renders the empty-state message @negative](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | run-detail-and-report/ac-delta-12 | +| 58 | normal | run-detail-and-report | [Sort the test list by ${sort_dimension} reorders rows accordingly @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-85, run-detail-and-report/ac-delta-15 | +| 59 | normal | run-detail-and-report | [Status filter button ${status} narrows the list to matching tests @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-85, run-detail-and-report/ac-delta-13 | +| 60 | critical | run-detail-and-report | [Test rows are grouped by suite with status, title, and duration metadata @smoke](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | AC-82, run-detail-and-report/ac-delta-2 | +| 61 | critical | runs-list-management | [Compare enables only at two or more selected runs and navigates to the comparison view @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-92 | +| 62 | normal | runs-list-management | [Extra dropdown shows ${extra_items} at ${selection_size} @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-87 | +| 63 | high | runs-list-management | [Row extra menu exposes the ${state}-specific action set @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-88 | + diff --git a/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-12-archive-unarchive-purge.md b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-12-archive-unarchive-purge.md new file mode 100644 index 0000000..5040bbf --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/06-use-cases/UC-12-archive-unarchive-purge.md @@ -0,0 +1,218 @@ +# UC-12: Archive, unarchive, and purge a Run or RunGroup — QA Creator + + + +**Primary actor:** QA Creator (Manager / Owner may perform all actions; Readonly is blocked on destructive variants per [BR-11](../07-business-rules.md#br-11)). +**Stakeholders:** Project (supplies **Purge Old Runs** retention setting — [BR-12](../07-business-rules.md#br-12)); [Pulse](../03-glossary.md#pulse) (records permanent-deletion events); RunGroup cascade consumers ([UC-08](./UC-08-manage-rungroup.md)); downstream reporting (archived/purged Runs become invisible on the active list). +**Goal:** Move Runs or RunGroups out of the active list (Archive), optionally compress them with metadata preserved (Purge), bring them back (Unarchive), or remove them irreversibly (Permanent delete). Configure auto-purge retention per project. +**Trigger:** Actor opens a row's extra menu (Runs list / Groups tab / RunGroup page / Report) → **Archive** / **Purge**; or the Archive pages' **Unarchive** / **Delete permanently**; or Project Settings → Purge Old Runs for the retention window. +**Scope:** `archive-and-purge` (owner of concerns C + G — cascade and ongoing-vs-finished semantics). Touches `runs-list-management` (entry points, Archive footer links — [UC-10](./UC-10-manage-runs-list.md)), `run-groups` (cascade; Groups Archive — [UC-08](./UC-08-manage-rungroup.md)), `run-lifecycle` (Archiving an ongoing Run terminates it — owned here; state machine is in [05-state-diagrams.md](../05-state-diagrams.md#run)), `run-detail-and-report` (entry points from the Report extra menu — [UC-11](./UC-11-view-run-report.md)). + +## Preconditions + +- Actor holds destructive-action permission for the target project (see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix) + [BR-11](../07-business-rules.md#br-11)). +- Target Run or RunGroup exists; for Purge cascade, group nest size ≤ 20 000 ([BR-10](../07-business-rules.md#br-10), AC-57, `archive-and-purge-ac-delta.md` ac-delta-19). + +## Main success scenario — Archive a single finished Run + +1. Actor opens the Run row's extra menu on the Runs list ([UC-10](./UC-10-manage-runs-list.md)) → **Archive** (AC-75, `archive-and-purge-ac-delta.md` ac-delta-1). +2. System opens a confirmation dialog; Cancel aborts with no state change. +3. Actor confirms. +4. System moves the Run out of the active list into **Runs Archive**, applies an **"Archived"** badge (ac-delta-16), and records no destructive-data loss (results, attachments, custom statuses preserved). +5. The Run is reachable via the footer **Runs Archive** link ([UC-10 A12](./UC-10-manage-runs-list.md#a12-archive-links-footer), AC-77, ac-delta-5). + +## Alternate flows + +### A1: Archive an ongoing Run — terminates it +1. Actor Archives a Run whose state is [In-Progress](../03-glossary.md#in-progress) (AC-76, concern G). +2. System: + - Transitions Run to **Terminated** (ac-delta-16 — **"Terminated"** badge). + - Sets every **Pending** test to **Skipped**. + - Leaves other statuses (Passed / Failed / Skipped / Custom) unchanged. + - Moves the Run to Archive. +3. The `Terminated → In-Progress` edge does not exist — restoring a Terminated Run via Unarchive does **not** return it to In-Progress ([BR-8](../07-business-rules.md#br-8), [05-state-diagrams.md § Run](../05-state-diagrams.md#run), AC-80). + +### A2: Bulk Archive from Multi-Select +1. Actor enters Multi-Select on the Runs list ([UC-10 A3](./UC-10-manage-runs-list.md#a3-multi-select--bulk-action)), ticks ≥ 1 Runs, clicks **Archive** (AC-71, ac-delta-2). +2. System shows a single confirmation dialog covering all selected Runs. +3. On confirm, every selected Run is archived atomically. +4. **Scope:** Multi-Select archive targets Runs only — RunGroups are not archivable via Multi-Select (ac-delta-2). + +### A3: Archive a RunGroup (cascade) +1. Actor opens a RunGroup's extra menu → **Archive** ([UC-08 A9](./UC-08-manage-rungroup.md#a9-archive-the-rungroup-cascade), AC-56). +2. System shows a confirmation dialog. +3. On confirm, the group **and every nested Run** move to Archive ([BR-9](../07-business-rules.md#br-9)); nested Runs carry an Archived badge; the group disappears from the active Runs list. + +### A4: Purge a Run (compress, move to Archive with badge) +1. Actor opens a Run's extra menu → **Purge** (AC-78, ac-delta-3). +2. System shows a confirmation dialog with explicit destructive wording (distinct from Archive). +3. On confirm, the Run is compressed and moved to Archive with a **"Purged"** badge (ac-delta-16). +4. Preserved: **recorded test statuses, attachments, custom statuses, Run ID, title** (ac-delta-4). +5. Removed: **stack traces** (ac-delta-4, AC-78). + +### A5: Purge a RunGroup (cascade + 20 000 ceiling) +1. Actor opens a RunGroup's extra menu → **Purge** (AC-57, [UC-08 A10](./UC-08-manage-rungroup.md#a10-purge-the-rungroup-cascade--20-000-run-ceiling)). +2. System cascades Purge to every nested Run; all carry Purged badges in Archive. +3. **Ceiling:** groups containing > 20 000 Runs are blocked ([BR-10](../07-business-rules.md#br-10), ac-delta-19). Enforcement mode (pre-check banner vs error-on-submit) is **UNCLEAR** — [13-open-questions.md § OQ-17](../13-open-questions.md#oq-17). + +### A6: Automatic Purge — retention window +1. Actor opens Project Settings → **Purge Old Runs** (AC-79). +2. Retention input accepts a numeric value + unit (days); default **90 days** on first use (ac-delta-8, ac-delta-9). +3. Runs finished older than the retention window are auto-purged and carry the Purged badge ([BR-12](../07-business-rules.md#br-12)). +4. **Empty / non-numeric / negative** values are rejected — either disables auto-purge or surfaces validation (ac-delta-9). Exact copy **UNCLEAR**. + +### A7: Unarchive a single Run +1. Actor navigates to Runs Archive (AC-77, ac-delta-5) and opens the row extra menu → **Unarchive** (ac-delta-13). +2. System returns the Run to the active Runs list with its prior statuses intact. +3. **Exception — Terminated:** an Archived Run that is Terminated cannot resume ([BR-8](../07-business-rules.md#br-8), AC-80) — it returns to the active list in Terminated state; the Runner remains unreachable. + +### A8: Bulk Unarchive +1. On Runs Archive, Actor enters Multi-Select, ticks ≥ 1 Runs, clicks **Unarchive** (ac-delta-14). +2. System restores all selected Runs in one operation. + +### A9: Unarchive a RunGroup (cascade restore) +1. Actor opens Groups Archive and unarchives a group (ac-delta-15). +2. System restores the group **and every nested Run** to the active list (cascade CC-C, [BR-9](../07-business-rules.md#br-9)). + +### A10: Runs Archive page filters + sort +1. Runs Archive supports filter tabs: **Manual / Automated / Mixed** + status/badge filter distinguishing **Archived / Purged / Terminated** (ac-delta-6). +2. **Rungroup Structure** toggle groups archived Runs hierarchically when ON; flat list when OFF (ac-delta-7). + +### A11: Groups Archive search / filter / sort +1. Groups Archive supports Search (by group name) + Group-type filter (ac-delta-10). +2. **Finish Range** date-range filter excludes out-of-window groups (ac-delta-11). +3. Sort by **Name** or **Date** with ASC/DESC; active column shows sort indicator (ac-delta-12). + +### A12: Permanent delete (irreversible) +1. Actor opens an Archived item's extra menu → **Delete permanently** (AC-81, ac-delta-17). +2. System shows a distinct confirmation with **irreversibility wording**. +3. On confirm, the item is removed from Archive (irreversible). +4. [Pulse](../03-glossary.md#pulse) records the event under **"Deleted Run"** with actor (email / name), timestamp, and entity identifier (AC-81, ac-delta-18). + +## Exception flows + +### E1: Readonly attempts a destructive action +1. Readonly user opens a row extra menu or enters Multi-Select. +2. Destructive actions (Archive / Unarchive / Purge / Delete permanently) are hidden or disabled ([BR-11](../07-business-rules.md#br-11), ac-delta-20). + +### E2: Cancel confirmation +1. Actor opens Archive / Purge / Delete permanently and dismisses the confirmation (Cancel / Esc / ×). +2. No state change; item stays in its current list (ac-delta-1, ac-delta-3, ac-delta-17). + +### E3: Retention input rejected +1. Actor enters a negative or non-numeric retention value. +2. System rejects with inline validation; the prior valid value is retained (ac-delta-9). + +### E4: RunGroup Purge exceeds 20 000 Runs +1. Actor attempts to Purge a group over the ceiling (ac-delta-19). +2. System blocks the action and surfaces guidance / an error; the group is not purged ([BR-10](../07-business-rules.md#br-10)). + +## Postconditions + +- **Success — Archive (finished):** Run exits the active list with the **Archived** badge; data preserved; reachable via Runs Archive. +- **Success — Archive (ongoing):** Run is **Terminated**, Pending → Skipped, badge **Terminated** (A1, AC-76, AC-80); cannot resume ([BR-8](../07-business-rules.md#br-8)). +- **Success — Purge:** Run / group in Archive with **Purged** badge; recorded statuses / attachments / custom statuses / Run ID / title preserved; stack traces removed ([BR-12](../07-business-rules.md#br-12)). +- **Success — Unarchive:** Run / group restored to active list with prior statuses (Terminated remains Terminated). +- **Success — Permanent delete:** Item gone from Archive; Pulse records a **Deleted Run** entry. +- **Failure:** No state change; item remains where it was. + +## Business rules referenced + +- [**BR-8**](../07-business-rules.md#br-8) — Terminated Runs cannot resume. +- [**BR-9**](../07-business-rules.md#br-9) — RunGroup cascade on Archive / Unarchive / Purge. +- [**BR-10**](../07-business-rules.md#br-10) — 20 000-Run Purge ceiling per RunGroup. +- [**BR-11**](../07-business-rules.md#br-11) — Readonly cannot perform destructive actions. +- [**BR-12**](../07-business-rules.md#br-12) — Automatic Purge retention default (90 days). + +## Functional requirements covered + +- AC-56, AC-57, AC-69 (archive/purge portion), AC-71 (archive/purge portion), AC-75, AC-76, AC-77, AC-78, AC-79, AC-80, AC-81, AC-100 (resolved for this sub-feature scope per ac-delta-20). +- `archive-and-purge-ac-delta.md` ac-delta-1..20. + +## Related use cases + +- **[UC-08](./UC-08-manage-rungroup.md)** — group-level Archive / Purge entry points; cascade semantics verified here. +- **[UC-10](./UC-10-manage-runs-list.md)** — Runs list row / Multi-Select entry points + Archive footer links. +- **[UC-11](./UC-11-view-run-report.md)** — Archive / Purge entry from Report extra menu. +- **[UC-04](./UC-04-finish-run.md)** — Archiving an ongoing Run terminates it (A1 here); Finish is the non-destructive alternative. + +## Verifying tests + + + + + + +_63 test(s) match the cited sources._ + +| # | Priority | Sub-feature | Test | Sources matched | +|---|---|---|---|---| +| 1 | low | archive-and-purge | [Filter archived groups by Finish Range @unclear](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-11 | +| 2 | low | archive-and-purge | [Filter archived groups by Group type @unclear](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-10 | +| 3 | normal | archive-and-purge | [Filter archived runs by ${run_type}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-6 | +| 4 | high | archive-and-purge | [Navigate to Runs Archive via ${entry_point}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | AC-77, archive-and-purge/ac-delta-5 | +| 5 | normal | archive-and-purge | [Rungroup Structure toggle switches between hierarchical and flat list](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-7 | +| 6 | normal | archive-and-purge | [Runs Archive row displays ${badge} for ${state} @unclear](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-16 | +| 7 | normal | archive-and-purge | [Runs Archive search with no matching title shows an empty result @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-6 | +| 8 | normal | archive-and-purge | [Search archived groups by name in Groups Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-10 | +| 9 | normal | archive-and-purge | [Sort archived groups by ${sort_mode}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | archive-and-purge/ac-delta-12 | +| 10 | high | archive-and-purge | [Manager can perform ${destructive_action} on a run](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) | archive-and-purge/ac-delta-20 | +| 11 | normal | archive-and-purge | [Read-only user can browse Runs Archive and Groups Archive pages](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) | archive-and-purge/ac-delta-20 | +| 12 | critical | archive-and-purge | [Read-only user cannot ${destructive_action} @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) | archive-and-purge/ac-delta-20 | +| 13 | high | archive-and-purge | [Bulk permanent delete from Runs Archive Multi-select](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | AC-81, archive-and-purge/ac-delta-17 | +| 14 | normal | archive-and-purge | [Bulk unarchive multiple runs from Runs Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | archive-and-purge/ac-delta-14 | +| 15 | high | archive-and-purge | [Cancelling the permanent-delete confirmation keeps the run in the Archive @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | AC-81, archive-and-purge/ac-delta-17 | +| 16 | normal | archive-and-purge | [Cancelling the unarchive confirmation keeps the run in the Archive @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | archive-and-purge/ac-delta-13 | +| 17 | critical | archive-and-purge | [Permanently delete a single run from the Archive via irreversible confirmation](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | AC-81, archive-and-purge/ac-delta-17 | +| 18 | high | archive-and-purge | [Pulse records a Deleted Run event after permanent deletion @unclear](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | AC-81, archive-and-purge/ac-delta-18 | +| 19 | high | archive-and-purge | [Unarchive a single run from Runs Archive @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | archive-and-purge/ac-delta-13 | +| 20 | low | archive-and-purge | [Automatic purge runs on a daily cadence after the retention period @unclear](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | AC-79 | +| 21 | low | archive-and-purge | [Configure retention at boundary value ${boundary_value} persists @boundary](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | archive-and-purge/ac-delta-9 | +| 22 | high | archive-and-purge | [Configure retention to a positive number of days persists across reloads @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | AC-79, archive-and-purge/ac-delta-8 | +| 23 | normal | archive-and-purge | [Default retention is 90 days when the project has no saved value](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | AC-79, archive-and-purge/ac-delta-9 | +| 24 | high | archive-and-purge | [Retention input rejects ${invalid_value} @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | archive-and-purge/ac-delta-9 | +| 25 | critical | archive-and-purge | [Archive a single run from the row extra menu @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-69, AC-75, archive-and-purge/ac-delta-1, archive-and-purge/ac-delta-16 | +| 26 | normal | archive-and-purge | [Bulk Archive button is disabled when no runs are selected @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71, archive-and-purge/ac-delta-2 | +| 27 | critical | archive-and-purge | [Bulk archive multiple runs via Multi-select @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71, archive-and-purge/ac-delta-2 | +| 28 | high | archive-and-purge | [Bulk purge multiple runs via Multi-select "Delete" action](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71, archive-and-purge/ac-delta-2 | +| 29 | normal | archive-and-purge | [Cancelling the archive confirmation keeps the run active @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-75, archive-and-purge/ac-delta-1 | +| 30 | normal | archive-and-purge | [Cancelling the purge confirmation keeps the run active @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-78, archive-and-purge/ac-delta-3 | +| 31 | critical | archive-and-purge | [Purge a single run from the row extra menu @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-69, AC-78, archive-and-purge/ac-delta-3, archive-and-purge/ac-delta-16 | +| 32 | normal | archive-and-purge | [Purged run preserves statuses, attachments, and custom statuses but removes stack traces](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-78, archive-and-purge/ac-delta-4 | +| 33 | normal | archive-and-purge | [Select All link bulk-archives every run on the current page @boundary](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | AC-71, archive-and-purge/ac-delta-2 | +| 34 | high | archive-and-purge | [A restored Terminated run cannot be resumed @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | AC-80, archive-and-purge/ac-delta-13 | +| 35 | normal | archive-and-purge | [Archiving a finished run preserves every test status](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | AC-75, AC-76, archive-and-purge/ac-delta-1 | +| 36 | normal | archive-and-purge | [Archiving a Without-tests run succeeds with zero-test counts @boundary](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | AC-75 | +| 37 | high | archive-and-purge | [Archiving an ongoing run terminates it and converts Pending tests to Skipped](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | AC-76, AC-80, archive-and-purge/ac-delta-16 | +| 38 | high | archive-and-purge | [Purging an ongoing run terminates it and preserves recorded statuses](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | AC-80, archive-and-purge/ac-delta-3 | +| 39 | critical | archive-and-purge | [Archive a RunGroup cascades to every nested run](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-56, archive-and-purge/ac-delta-15 | +| 40 | high | archive-and-purge | [Cancelling the RunGroup archive confirmation leaves the group and nested runs untouched @negative](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-56, archive-and-purge/ac-delta-1 | +| 41 | high | archive-and-purge | [Purge an archived RunGroup deletes the group and moves nested runs to Runs Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-57, archive-and-purge/ac-delta-15 | +| 42 | low | archive-and-purge | [Purging a RunGroup with more than 20 000 runs is blocked @boundary @unclear](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-57, archive-and-purge/ac-delta-19 | +| 43 | high | archive-and-purge | [Unarchive a RunGroup from Groups Archive restores all nested runs @smoke](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | AC-56, archive-and-purge/ac-delta-15 | +| 44 | critical | run-groups | [Archive a RunGroup cascades to all nested runs @smoke](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-56 | +| 45 | normal | run-groups | [Cancelling the archive confirmation dialog leaves the group untouched @negative](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-56 | +| 46 | normal | run-groups | [Cancelling the purge confirmation leaves the group and nested runs on the active list @negative](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-57 | +| 47 | high | run-groups | [Purge a RunGroup cascades with a Purged badge](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-57 | +| 48 | high | run-groups | [Unarchive a RunGroup from Groups Archive restores all nested runs](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | AC-56 | +| 49 | normal | runs-list-management | [Archive entry links at the bottom of the Runs page navigate to ${archive_page}](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | AC-77 | +| 50 | normal | runs-list-management | [Expand-all toolbar button expands and collapses every visible RunGroup row](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | AC-69 | +| 51 | high | runs-list-management | [Bulk multi-select archive applies across every selected run end to end @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | AC-71 | +| 52 | high | runs-list-management | [Bulk Archive moves every selected run off the default list](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 53 | normal | runs-list-management | [Bulk Labels applies a label to every selected run](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 54 | high | runs-list-management | [Closing the bulk toolbar via the close button keeps selection hidden](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 55 | critical | runs-list-management | [Compare enables only at two or more selected runs and navigates to the comparison view @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 56 | normal | runs-list-management | [Deselecting the last selected run removes the bulk toolbar @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 57 | normal | runs-list-management | [Extra dropdown shows ${extra_items} at ${selection_size} @boundary](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 58 | normal | runs-list-management | [Merge action is absent in the Extra dropdown at a single selection @negative](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 59 | normal | runs-list-management | [Select all selects every visible run row in Multi-select mode](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 60 | critical | runs-list-management | [Toggling Multi-select on and off shows and hides the row checkboxes and bottom toolbar @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | AC-71 | +| 61 | high | runs-list-management | [Move to Archive via row extra menu removes the run from the active list](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-69 | +| 62 | normal | runs-list-management | [Purge via row extra menu removes the run and shows the deletion toast](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-69 | +| 63 | high | runs-list-management | [Row extra menu exposes the ${state}-specific action set @smoke](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | AC-69 | + diff --git a/skills/create-test-cases/examples/generatedDocs/07-business-rules.md b/skills/create-test-cases/examples/generatedDocs/07-business-rules.md new file mode 100644 index 0000000..50319b4 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/07-business-rules.md @@ -0,0 +1,180 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 07 — Business Rules + +Invariants the product must preserve across Manual Tests Execution. Each rule is one-sentence-first, derivation-cited, and consumable as an edge-case generator during exploratory testing. Rules are added as they surface from UCs — Phase 1 seeded BR-1..BR-4 from UC-01 / UC-02; Phase 2 added BR-5..BR-13 (with BR-6a) as UC-03..UC-12 were drafted. Further rules will be appended as new UCs or regressions surface. + +> **Adding a BR.** Append a new `## BR-NN` section using the block from [`templates/business-rule-template.md`](./templates/business-rule-template.md). Do **not** split BRs into per-file entries — they live here, in one file, for scannability. + +--- + +## BR-1: Require-RunGroup gating on Launch + + +**Statement:** When the project setting *Require RunGroup for new runs* is enabled and a new Run's [RunGroup](./03-glossary.md#rungroup) field is empty, the system blocks Launch, highlights the RunGroup field, and shows a warning — no Run is created. +**Rationale:** Grouping is a reporting and organisation contract set at the project level. Allowing ungrouped Runs when the project has opted into mandatory grouping undermines downstream analytics (per-group Combined Report, TQL `rungroup` filter, archive cascade). +**Scope:** Applies to every creation entry point that launches a Run — the New Manual Run sidebar, Mixed Run, Launch from CLI (when the CLI path eventually creates a Run), and the Tests-page shortcuts ([UC-01](./06-use-cases/UC-01-create-manual-run.md), [UC-02](./06-use-cases/UC-02-create-mixed-run.md)). Save is **not** blocked by this rule — storing a Pending Run without a group is permitted (to be verified in Phase 1 UI check; tracked in [13-open-questions.md § OQ-06](./13-open-questions.md#oq-06)). +**Violations / enforcement:** Launch action is a no-op; RunGroup field receives error styling; a warning message appears inline; the sidebar stays open so the user can select a group and retry (`run-creation-ac-delta.md` ac-delta-18). +**Derived from:** [AC-9](../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--new-manual-run-dialog), `run-creation-ac-delta.md` ac-delta-18. +**Referenced by:** [UC-01](./06-use-cases/UC-01-create-manual-run.md) (E1), [UC-02](./06-use-cases/UC-02-create-mixed-run.md) (A4/E3). + +--- + +## BR-2: A Run may be launched with zero tests + + +**Statement:** The *Without tests* scope legitimately produces a Run containing zero tests at Launch; such a Run exists, is In-Progress (or Pending if Saved), and can be populated later via Edit (`+ Tests` / `+ Plans`). +**Rationale:** *Without tests* is an intentional scoping mode, not an error state — it lets a team stand up a Run container while curation of its contents happens in parallel (common when the test list is being drafted or migrated). +**Scope:** Scope selector step of the creation sidebar. Applies to [UC-01](./06-use-cases/UC-01-create-manual-run.md) (A3). Does **not** apply to UC-02 Mixed Run (which, by definition, intermingles manual + automated tests; empty-test Mixed Runs are not meaningful and are out of scope in the POC window). +**Violations / enforcement:** A test-count-based validation that blocks Launch for *Without tests* would violate this rule. Editing is the supported path to add tests (AC-22, AC-27). +**Derived from:** [AC-6, AC-22, AC-27](../../test-cases/manual-tests-execution/_ac-baseline.md#test-scope--select-tests--plan--without). +**Referenced by:** [UC-01](./06-use-cases/UC-01-create-manual-run.md) (A3, postconditions), UC-04 *(Phase 2)*. + +--- + +## BR-3: Mixed Run requires CI Profile OR local CLI + + +**Statement:** A [Mixed Run](./03-glossary.md#mixed-run) cannot launch automated execution without a source — either a configured [CI Profile](./03-glossary.md#ci-profile) (on-CI path) or a local invocation of `@testomatio/reporter` (off-CI path). The UI requires the user to pick exactly one. +**Rationale:** Automated test execution happens outside Testomat.io's UI surface; the Mixed Run must point at an executor, otherwise the automated portion is orphaned (a Run record exists, but no results arrive). The dichotomy is binary and deliberate — AC-16 documents both paths. +**Scope:** Mixed Run creation flow ([UC-02](./06-use-cases/UC-02-create-mixed-run.md) main flow + A1). Does not apply to UC-01 (purely manual — no automated leg). *Report Automated Tests* (AC-17) and *Launch from CLI* (AC-18) are CLI-driven variants that share the same CI-or-CLI dichotomy but are **not** UC-02's Mixed Run flow. +**Violations / enforcement:** Attempting to Launch a Mixed Run without choosing a CI source should be blocked or produce a degraded state where automated tests never execute. The exact UI enforcement mode (disabled Launch vs validation message vs silent zero-arrival) is **unverified** in the POC window — see [13-open-questions.md § OQ-02](./13-open-questions.md#oq-02). +**Derived from:** [AC-16](../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--additional-variants-header-extras-menu). +**Referenced by:** [UC-02](./06-use-cases/UC-02-create-mixed-run.md) (main flow, E1, E2). + +--- + +## BR-4: Creation scope tabs are mutually exclusive + + +**Statement:** In the New Manual Run sidebar, the four scope tabs — *All tests* / *Test plan* / *Select tests* / *Without tests* — behave as a single-select radio group. Switching tabs discards any selection made in the previously active tab; no cross-tab retention exists. +**Rationale:** The four scopes produce structurally different Run contents (everything / plan-union / hand-picked / empty); mixing them would be ambiguous. Retaining selection across tab switches would create hidden state the user cannot see in the active tab, producing surprising Launch outcomes. +**Scope:** The scope-selector row in the creation sidebar ([UC-01](./06-use-cases/UC-01-create-manual-run.md) main + A1..A3). Applies to UC-02's creation surface by inheritance. +**Violations / enforcement:** Clicking a different tab clears the prior tab's state synchronously — e.g., a plan selected under *Test plan* vanishes the moment *Select tests* becomes active; the test tree checkboxes are disabled outside *Select tests* (`run-creation-ac-delta.md` ac-delta-8, ac-delta-9). A violation would be checkbox state surviving a tab switch, or a plan-selection affecting the *All tests* launch outcome. +**Derived from:** [AC-2](../../test-cases/manual-tests-execution/_ac-baseline.md#run-creation--new-manual-run-dialog), `run-creation-ac-delta.md` ac-delta-8, ac-delta-9. +**Referenced by:** [UC-01](./06-use-cases/UC-01-create-manual-run.md) (Business rules referenced, A1..A3). + +--- + +## BR-5: Custom Status requires a standard status first + + +**Statement:** In the Manual Runner — both single-test and Multi-Select bulk surfaces — the [Custom Status](./03-glossary.md#custom-status) dropdown is disabled until a **standard** status (PASSED / FAILED / SKIPPED) has been chosen. The custom status attaches to the standard status; it never replaces it. +**Rationale:** Custom statuses are project-defined labels layered on top of the three canonical outcomes so reporting, TQL (`has_custom_status`), and counter aggregation can still aggregate by the standard axis. Letting a custom status stand alone would break every downstream consumer that assumes a standard status exists. +**Scope:** Single-test path in the runner ([UC-03 main + E2](./06-use-cases/UC-03-execute-test-in-runner.md#exception-flows)); Multi-Select bulk "Result message" modal ([UC-09 E2](./06-use-cases/UC-09-bulk-status-in-runner.md#e2-apply-disabled-until-a-status-is-picked)). Applicability of Custom Status inside bulk is **UNCLEAR** — see [13-open-questions.md § OQ-18](./13-open-questions.md#oq-18). +**Violations / enforcement:** Dropdown disabled state; Apply button disabled until a standard status is picked; implicit or default standard inference is prohibited (`test-execution-runner-ac-delta.md` ac-delta-21, AC-31). +**Derived from:** [AC-31](../../test-cases/manual-tests-execution/_ac-baseline.md#manual-runner--status--attachments--steps-details-panel), `test-execution-runner-ac-delta.md` ac-delta-21, `bulk-status-actions-ac-delta.md` ac-delta-6. +**Referenced by:** [UC-03](./06-use-cases/UC-03-execute-test-in-runner.md), [UC-09](./06-use-cases/UC-09-bulk-status-in-runner.md). + +--- + +## BR-6: Run-assignment prerequisite for per-suite and per-test assignment + + +**Statement:** Before a user can be assigned to a suite or an individual test within a Run, that user must already be assigned to the Run itself. Per-suite / per-test assignment dropdowns surface only Run-assigned users. +**Rationale:** The Run is the unit of responsibility; finer-grained assignments are a refinement of the Run's assignee set. Permitting a non-Run user to take a test creates two conflicting sources of truth (who is on the Run vs. who holds tests) and breaks the *Assigned to* column, Extended Report assignee grouping, and Edit-run removal semantics (removing a user from the Run must atomically drop their per-test assignments). +**Scope:** Per-suite *Assign to* inside the Runner (AC-42); Multi-Select bulk *Assign to* in the Runner (AC-43); per-test detail-pane reassignment (`tester-assignment-ac-delta.md` ac-delta-13). Enforced via UI — non-Run users do not appear in the user dropdowns (ac-delta-8, ac-delta-9). +**Violations / enforcement:** The UI filters dropdowns to Run-assigned users. Removing a user from the Run cascades to drop their per-suite / per-test assignments (ac-delta-6). +**Derived from:** [AC-41](../../test-cases/manual-tests-execution/_ac-baseline.md#assignment--run-assignment-strategies), `tester-assignment-ac-delta.md` ac-delta-8, ac-delta-9. +**Referenced by:** [UC-06](./06-use-cases/UC-06-assign-testers.md), [UC-03](./06-use-cases/UC-03-execute-test-in-runner.md), [UC-09](./06-use-cases/UC-09-bulk-status-in-runner.md). + +--- + +## BR-6a: Manager-role exclusion from random distribution + + +**Statement:** The Auto-Assign Users *Randomly distribute tests between team members* strategy skips any assigned user whose project role is **manager**. When the only assigned user is a manager, no tests are auto-assigned — the per-test assignee column shows empty / "—", not an error. +**Rationale:** Managers are observers by convention; auto-distributing execution work to them breaks the separation between oversight and execution. The rule is deliberate product policy, not a bug — the resulting empty-assignment state is treated as legitimate and must not be surfaced as a failure. +**Scope:** Random-distribute strategy only (AC-39). Does not apply to the *Prefer test assignee* or *None* strategies. Manager chip on the creation sidebar is independently unremovable ([UC-01 main flow](./06-use-cases/UC-01-create-manual-run.md), AC-37). +**Violations / enforcement:** Distribution logic excludes manager-role users; empty per-test state is a valid post-launch outcome (`tester-assignment-ac-delta.md` ac-delta-11). +**Derived from:** [AC-40](../../test-cases/manual-tests-execution/_ac-baseline.md#assignment--run-assignment-strategies), `tester-assignment-ac-delta.md` ac-delta-11. +**Referenced by:** [UC-06 A2 / E2](./06-use-cases/UC-06-assign-testers.md#a2-auto-assign--randomly-distribute-tests-between-team-members). + +--- + +## BR-7: Finishing a Run marks Pending tests as Skipped + + +**Statement:** When a Run transitions from **In-Progress** to **Finished** via the Finish Run action, every test that is still **Pending** at that moment is automatically marked **Skipped**. Already-recorded statuses (Passed / Failed / Skipped / Custom) are preserved. +**Rationale:** A Finished Run is a terminal reporting artefact — every test must have a definitive outcome. *Pending* is an in-flight state that has no meaning post-Finish. Skipped is the least-committal terminal status and matches the user intent of "we decided not to run this one". +**Scope:** Finish Run action only ([UC-04 main / AC-25 / AC-26](./06-use-cases/UC-04-finish-run.md)). Does **not** apply to manual Archive of an ongoing Run — [BR-8](#br-8) covers the Terminated path, which has the same Pending → Skipped outcome but via a different transition (AC-76). +**Violations / enforcement:** The confirmation dialog on Finish Run states the count of not-run tests and announces the Skipped transition (`run-lifecycle-ac-delta.md` ac-delta-9, AC-28); cancel of the dialog preserves the In-Progress state (ac-delta-10). +**Derived from:** [AC-26](../../test-cases/manual-tests-execution/_ac-baseline.md#run-lifecycle--creation--continue--finish--edit), `run-lifecycle-ac-delta.md` ac-delta-9, ac-delta-10. +**Referenced by:** [UC-04](./06-use-cases/UC-04-finish-run.md), [UC-11](./06-use-cases/UC-11-view-run-report.md). + +--- + +## BR-8: Terminated Runs cannot resume + + +**Statement:** A Run in the [Terminated](./03-glossary.md#terminated) state — reached via Archive of an ongoing Run (AC-76) — cannot transition back to **In-Progress**. Restoring it from Archive via Unarchive keeps the Terminated state; the Manual Runner remains unreachable; [Run Report](./03-glossary.md#run-report) is the only view served. +**Rationale:** Terminated means "we stopped executing this Run and decided the recorded snapshot is final." Allowing resume would introduce ambiguity about the already-applied Pending → Skipped coercion (AC-76) and about any results attributed to a prior snapshot. The state machine enforces finality ([05-state-diagrams.md § Run](./05-state-diagrams.md#run) explicitly omits the `Terminated → InProgress` edge). +**Scope:** Terminated Runs only. **Finished** Runs retain Relaunch variants (AC-58..AC-62, [UC-05](./06-use-cases/UC-05-relaunch-run.md)) and are not subject to this rule. Unarchiving a Terminated Run is permitted; it only returns visibility, not executability ([UC-12 A7](./06-use-cases/UC-12-archive-unarchive-purge.md#a7-unarchive-a-single-run)). +**Violations / enforcement:** Runner entry is gated on run state (`test-execution-runner-ac-delta.md` ac-delta-1); Relaunch ▾ is exposed only for Finished Runs (`run-lifecycle-ac-delta.md` ac-delta-8); the state diagram has no edge that targets In-Progress from Terminated. +**Derived from:** [AC-80](../../test-cases/manual-tests-execution/_ac-baseline.md#archive-and-purge), [05-state-diagrams.md § Run](./05-state-diagrams.md#run), `test-execution-runner-ac-delta.md` ac-delta-1. +**Referenced by:** [UC-03 E1](./06-use-cases/UC-03-execute-test-in-runner.md), [UC-04 E2](./06-use-cases/UC-04-finish-run.md), [UC-05](./06-use-cases/UC-05-relaunch-run.md), [UC-12](./06-use-cases/UC-12-archive-unarchive-purge.md). + +--- + +## BR-9: RunGroup cascade on Archive, Unarchive, and Purge + + +**Statement:** Group-level destructive actions fan out atomically to every nested Run — Archiving a [RunGroup](./03-glossary.md#rungroup) archives every child Run; Unarchiving restores every child; Purging cascades the Purge to every child (subject to [BR-10](#br-10)). No orphan state can arise where the group and its children disagree on archive state. +**Rationale:** Groups are organisational containers; destructive operations are authored at the group scope precisely to avoid the per-Run tedium. Partial cascades would stranded children in an inconsistent state (visible on the active list under a vanished group) and would break the Groups tab / Archive page invariants. +**Scope:** Archive / Unarchive / Purge actions on a RunGroup ([UC-08 A9, A10](./06-use-cases/UC-08-manage-rungroup.md), [UC-12 A3, A5, A9](./06-use-cases/UC-12-archive-unarchive-purge.md)). Does **not** apply to a Multi-Select on the Runs list — that bulk mode targets Runs only (ac-delta-2). Orphan (ungrouped) Runs are unaffected by any group operation. +**Violations / enforcement:** Confirmation dialog wording on group-level Archive signals the cascade (ac-delta-17); the Groups Archive page shows nested Runs by default via the *Rungroup Structure* toggle (ac-delta-7). +**Derived from:** [AC-56, AC-57](../../test-cases/manual-tests-execution/_ac-baseline.md#archive-and-purge), `archive-and-purge-ac-delta.md` ac-delta-15, ac-delta-17. +**Referenced by:** [UC-08](./06-use-cases/UC-08-manage-rungroup.md), [UC-12](./06-use-cases/UC-12-archive-unarchive-purge.md). + +--- + +## BR-10: 20 000-Run Purge ceiling per RunGroup + + +**Statement:** A single Purge operation on a [RunGroup](./03-glossary.md#rungroup) covers at most **20 000** nested Runs. Groups over this ceiling are blocked with an error or guidance; the operation does not proceed. +**Rationale:** Purge compresses data and mutates Archive state at bulk scale; the ceiling is a defensive bound against unbounded server-side work. Splitting such groups (or using per-Run purge / auto-purge retention per [BR-12](#br-12)) is the supported workaround. +**Scope:** RunGroup-level **Purge** only. The group-Archive path ([BR-9](#br-9)) has no such ceiling. Automatic Purge ([BR-12](#br-12)) is governed by retention windows, not size, so the ceiling does not apply there either. +**Violations / enforcement:** Enforcement mode is **UNCLEAR** — whether the UI pre-checks and disables/warns, or server returns an error on submit, is tracked in [13-open-questions.md § OQ-17](./13-open-questions.md#oq-17). Manual testing at 20 000+ scale is not practical — this rule is primarily a specification constraint (AC-57, ac-delta-19). +**Derived from:** [AC-57](../../test-cases/manual-tests-execution/_ac-baseline.md#archive-and-purge), `archive-and-purge-ac-delta.md` ac-delta-19. +**Referenced by:** [UC-08 A10](./06-use-cases/UC-08-manage-rungroup.md#a10-purge-the-rungroup-cascade--20-000-run-ceiling), [UC-12 A5](./06-use-cases/UC-12-archive-unarchive-purge.md#a5-purge-a-rungroup-cascade--20-000-ceiling). + +--- + +## BR-11: Readonly cannot perform destructive actions + + +**Statement:** Users with the Readonly project role cannot perform any destructive action on Runs or RunGroups — Archive, Unarchive, Purge, and Permanent delete are all blocked. Destructive bulk actions (Archive, Purge, Labels edit, Move) are hidden or disabled in the UI for Readonly; the backend also rejects the operation if attempted directly. +**Rationale:** Readonly is an observation role by definition. Destructive actions mutate shared state that downstream consumers (Report, Pulse, Archive pages) depend on; Readonly semantics would be meaningless if bypassable. +**Scope:** Readonly role — every destructive surface, whether from a row extra menu, Multi-Select bottom toolbar, RunGroup page, or Archive page extra menu. Non-destructive read actions (open Report, switch tabs, Custom view) remain available. Partial coverage of AC-100 — exact UI affordance (hidden vs disabled) may vary per surface; resolved for this sub-feature per `archive-and-purge-ac-delta.md` ac-delta-20. +**Violations / enforcement:** UI hides / disables the affected menu items and toolbar buttons; API returns a permission-denied error on direct invocation (expected — not exercised in POC, tracked as [OQ-06](./13-open-questions.md#oq-06) for full matrix). +**Derived from:** [AC-100 (resolved for archive scope)](../../test-cases/manual-tests-execution/_ac-baseline.md#cross-cutting--permissions--unclear), `archive-and-purge-ac-delta.md` ac-delta-20, [02-actors-and-permissions.md § Role × Action matrix](./02-actors-and-permissions.md#role--action-matrix). +**Referenced by:** [UC-10 E2](./06-use-cases/UC-10-manage-runs-list.md#e2-destructive-action-attempted-by-readonly), [UC-12 E1](./06-use-cases/UC-12-archive-unarchive-purge.md#e1-readonly-attempts-a-destructive-action). + +--- + +## BR-12: Automatic Purge retention default is 90 days + + +**Statement:** The project setting **Purge Old Runs** governs automatic purge retention. Default value on first use is **90 days**. Non-numeric and negative values are rejected; an empty value disables automatic purge. Runs finished older than the retention window are auto-purged and receive the **Purged** badge. +**Rationale:** A predictable default lets teams benefit from data hygiene without explicit configuration. Rejecting malformed input avoids silent misconfiguration where a typo (e.g., `-90`) would otherwise be interpreted unpredictably by the purge scheduler. +**Scope:** Project-level setting only. Applies to Finished Runs older than the window; does not apply to In-Progress or Pending Runs (they have no *finished_at* to compare against). Unaffected by [BR-10](#br-10)'s 20 000-Run ceiling — auto-purge is a per-Run scheduler, not a group-level batch. +**Violations / enforcement:** Input validation on the retention field (`archive-and-purge-ac-delta.md` ac-delta-8, ac-delta-9). Exact validation copy is **UNCLEAR** for malformed / empty values — tracked for UI capture. +**Derived from:** [AC-79](../../test-cases/manual-tests-execution/_ac-baseline.md#archive-and-purge), `archive-and-purge-ac-delta.md` ac-delta-8, ac-delta-9. +**Referenced by:** [UC-12 A6](./06-use-cases/UC-12-archive-unarchive-purge.md#a6-automatic-purge--retention-window). + +--- + +## BR-13: Public Share requires both Company and Project Sharing flags + + +**Statement:** The **Share Report Publicly** action is permitted only when both the Company-level *Sharing* feature flag and the Project-level *Sharing* setting are enabled. The dialog defaults are: **Expiration 7 days** and **Protect by passcode ON**. Generated URL and passcode are shown **once** and cannot be re-retrieved after dialog close; **Stop Sharing** immediately revokes the URL. +**Rationale:** Public sharing exposes internal test results outside the authenticated boundary; the two-level flag is a deliberate belt-and-braces control (a company can opt out globally even if a project is misconfigured). The 7-day default and passcode-ON default are conservative sharing primitives that must hold unless the user explicitly relaxes them in the dialog. +**Scope:** [UC-11 A8](./06-use-cases/UC-11-view-run-report.md#a8-share-publicly-url--passcode). Does **not** apply to Share by Email (A7) — email recipients receive authenticated content via the app. Does **not** apply to the (UNCLEAR) non-public *Copy Link* action ([A11 / AC-99](./06-use-cases/UC-11-view-run-report.md#a11-copy-link--unclear)). +**Violations / enforcement:** Action is disabled / hidden when either flag is off (AC-90). Defaults are set by the dialog on open (`run-detail-and-report-ac-delta.md` ac-delta-19). Revocation is immediate — subsequent loads of the public URL return a revoked/expired state (ac-delta-20, AC-91). +**Derived from:** [AC-90, AC-91](../../test-cases/manual-tests-execution/_ac-baseline.md#run-detail--report), `run-detail-and-report-ac-delta.md` ac-delta-19, ac-delta-20. +**Referenced by:** [UC-11 A8 / E1](./06-use-cases/UC-11-view-run-report.md#a8-share-publicly-url--passcode). diff --git a/skills/create-test-cases/examples/generatedDocs/08-functional-requirements.md b/skills/create-test-cases/examples/generatedDocs/08-functional-requirements.md new file mode 100644 index 0000000..9ffa986 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/08-functional-requirements.md @@ -0,0 +1,160 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 08 — Functional Requirements + +Regrouping of the 100 baseline ACs and every `*-ac-delta.md` into functional requirement clusters (FR-1..FR-14). Each FR points back to the ACs it spans and the UCs that exercise it. This page is a **cluster index** — the authoritative source of individual ACs remains [_ac-baseline.md](../../../test-cases/manual-tests-execution/_ac-baseline.md) and the per-sub-feature delta files. + +> **How to read.** Each FR block lists: covering ACs + AC-deltas, owning UC(s), and any relevant BR. FRs are organised by user-visible capability rather than by sub-feature (sub-features are the decomposition axis in [destructuring.md](../../../test-cases/manual-tests-execution/destructuring.md); FRs are the read-through axis for stakeholders). + +--- + +## FR-1: Run creation (entry points, scope, form fields, Save vs Launch) + +**Covers:** AC-1, AC-2, AC-3, AC-4, AC-5, AC-6, AC-7, AC-8, AC-9, AC-10, AC-11, AC-12, AC-19, AC-20, AC-21, AC-22, AC-23, AC-96; `run-creation-ac-delta.md` ac-delta-1..18. +**Owner UC:** [UC-01](./06-use-cases/UC-01-create-manual-run.md). +**Business rules:** [BR-1](./07-business-rules.md#br-1), [BR-2](./07-business-rules.md#br-2), [BR-4](./07-business-rules.md#br-4). + +Split-button + arrow dropdown on Runs page; New Manual Run sidebar with Title / RunGroup / Environment / Description / Scope tabs / Run-as-checklist / Run-Automated-as-Manual / Launch · Save · Cancel. Scope tabs: All tests (default) / Test plan / Select tests / Without tests — mutually exclusive ([BR-4](./07-business-rules.md#br-4)). Entry points from Tests page (Add to Run, Run Tests from suite / Multi-select). Require-RunGroup gating on Launch ([BR-1](./07-business-rules.md#br-1)). Zero-test Runs are legal ([BR-2](./07-business-rules.md#br-2)). + +--- + +## FR-2: Mixed-Run creation and CI / CLI variants + +**Covers:** AC-13, AC-15, AC-16, AC-17, AC-18, AC-68; `run-creation-ac-delta.md` ac-delta-1 (shared). +**Owner UC:** [UC-02](./06-use-cases/UC-02-create-mixed-run.md). +**Business rules:** [BR-3](./07-business-rules.md#br-3). + +Arrow-dropdown items: *New group*, *Mixed Run*, *Report Automated Tests*, *Launch from CLI*. Mixed Run sidebar exposes CI-source choice — CI Profile vs local `@testomatio/reporter` CLI ([BR-3](./07-business-rules.md#br-3)). Mixed filter tab on the Runs list (AC-68). + +--- + +## FR-3: Manual Runner — single-test execution + +**Covers:** AC-29, AC-30, AC-31, AC-32, AC-33, AC-34, AC-35, AC-36, AC-96, AC-97 (UNCLEAR); `test-execution-runner-ac-delta.md` ac-delta-1..22. +**Owner UC:** [UC-03](./06-use-cases/UC-03-execute-test-in-runner.md). +**Business rules:** [BR-5](./07-business-rules.md#br-5). + +Runner layout (tree / detail / header counters), standard + custom status, result message, attachments (browse + drag-drop, views, preview, delete-with-confirm), step-by-step click cadence, notes (test / suite / bulk / convert-to-test), Priority filter, Extra options toggles (Refresh structure / Creation buttons / Labels / Tags), detail-pane resize, Auto-Track / Set Time, checklist-mode description hide, per-test assignee badge. Runner is gated on In-Progress state; Finished / Terminated Runs open the Report. + +--- + +## FR-4: Bulk status application in the runner + +**Covers:** AC-29, AC-30, AC-31 (UNCLEAR for bulk), AC-66, AC-93, AC-94, AC-95; `bulk-status-actions-ac-delta.md` ac-delta-1..11. +**Owner UC:** [UC-09](./06-use-cases/UC-09-bulk-status-in-runner.md). +**Business rules:** [BR-5](./07-business-rules.md#br-5) analogue. + +Multi-Select mode toggling; bottom bulk-action toolbar (Result message modal + PASSED/FAILED/SKIPPED quick-set with native confirm + Clear-Selection × + Create notes); selection-scope honours active filter (concern F). Dismiss of Result message modal clears selection (ac-delta-7). + +--- + +## FR-5: Run lifecycle — Finish, Edit, Continue + +**Covers:** AC-23, AC-24, AC-25, AC-26, AC-27, AC-28; `run-lifecycle-ac-delta.md` ac-delta-3..7, ac-delta-9, ac-delta-10. +**Owner UC:** [UC-04](./06-use-cases/UC-04-finish-run.md). +**Business rules:** [BR-7](./07-business-rules.md#br-7), [BR-8](./07-business-rules.md#br-8). + +Launch → In-Progress (AC-23); Continue resumes Pending / unfinished (AC-24); Finish Run confirms Pending→Skipped and transitions to Finished (AC-25/26/28, [BR-7](./07-business-rules.md#br-7)). Edit unfinished run: Assign to / Title / Env / Description / Trash-delete test / +Tests / +Plans / Save · Cancel (AC-27, ac-delta-3..6). + +--- + +## FR-6: Relaunch variants + +**Covers:** AC-58, AC-59, AC-60, AC-61, AC-62, AC-63, AC-64, AC-65, AC-66, AC-67; `run-lifecycle-ac-delta.md` ac-delta-1, ac-delta-2, ac-delta-8, ac-delta-11..14. +**Owner UC:** [UC-05](./06-use-cases/UC-05-relaunch-run.md). +**Business rules:** [BR-3](./07-business-rules.md#br-3), [BR-8](./07-business-rules.md#br-8). + +Relaunch / Launch a Copy / Advanced Relaunch / Relaunch Failed on CI / Relaunch All on CI / Relaunch Manually (+ Launch a Copy Manually delta). Advanced Relaunch matrix (Create-new-run × Keep-values). Per-test selection; filter-aware Select all (AC-66). Source Run inherits Title / assignees / env / RunGroup. Mixed Runs honour CI/UI routing (ac-delta-14). + +--- + +## FR-7: Tester assignment (run / suite / test / bulk / Auto-Assign) + +**Covers:** AC-37, AC-38, AC-39, AC-40, AC-41, AC-42, AC-43; `tester-assignment-ac-delta.md` ac-delta-1..13. +**Owner UC:** [UC-06](./06-use-cases/UC-06-assign-testers.md). +**Business rules:** [BR-6](./07-business-rules.md#br-6), [BR-6a](./07-business-rules.md#br-6a). + +Creator manager chip; Assign more users panel + Auto-Assign strategies (None / Prefer test assignee / Randomly distribute — manager-excluded per [BR-6a](./07-business-rules.md#br-6a)); per-suite Assign to; Multi-Select bulk Assign to (with confirmation); per-test detail-pane reassignment (no confirmation); Edit-run Remove assign users (with confirmation when results exist). Per-suite / per-test prerequisite [BR-6](./07-business-rules.md#br-6). + +--- + +## FR-8: Environment configuration + +**Covers:** AC-45, AC-46, AC-47, AC-48 (UNCLEAR), AC-49, AC-50; `environment-configuration-ac-delta.md` ac-delta-1..15. +**Owner UC:** [UC-07](./06-use-cases/UC-07-configure-environments.md). + +Multi-Environment Configuration modal; Add Environment; Save / Cancel; All / Add-all-envs shortcuts; single-group Launch vs 2+ groups Launch-in-Sequence + Launch-All; round-trip edit preserves selection. AC-48 "One Run" mode unobservable in current UI (ac-delta-8). + +--- + +## FR-9: RunGroup management + +**Covers:** AC-13, AC-14, AC-51, AC-52, AC-53, AC-54, AC-55, AC-56, AC-57, AC-70; `run-groups-ac-delta.md` ac-delta-1..17. +**Owner UC:** [UC-08](./06-use-cases/UC-08-manage-rungroup.md). +**Business rules:** [BR-1](./07-business-rules.md#br-1), [BR-9](./07-business-rules.md#br-9), [BR-10](./07-business-rules.md#br-10). + +New Group dialog (Name / Merge Strategy / Group Type / Description); RunGroup page (header, chart, per-run list, Combined Report, Add Manual Run); Edit, Copy (with scope toggles), Pin / Unpin, Add Existing Run; column customisation per group; Archive / Unarchive / Purge cascade ([BR-9](./07-business-rules.md#br-9), [BR-10](./07-business-rules.md#br-10)). + +--- + +## FR-10: Runs list — tabs, pins, Multi-Select, TQL, Custom view, URL share + +**Covers:** AC-52, AC-68, AC-69, AC-70, AC-71, AC-72, AC-73, AC-74, AC-77, AC-87, AC-88, AC-92; `runs-list-management-ac-delta.md` ac-delta-1..17. +**Owner UC:** [UC-10](./06-use-cases/UC-10-manage-runs-list.md). +**Business rules:** [BR-11](./07-business-rules.md#br-11). + +Filter tabs (Manual / Automated / Mixed / Unfinished / Groups); chart toggle + legend filters; run-count badge; state-aware row extra menu (Continue vs Relaunch ▾); Pin; Multi-Select bulk (Archive / Labels / Compare / Move / Merge / Download / Link / Purge); TQL editor (Apply / Save / Cancel, Saved Queries, Examples, autocomplete, Operators + Variables sidebar); URL-share; Custom view Settings (columns + widths, per-user per-project); pagination (« page »); Runs Status Report (AI) gating ≥ 5 finished; Groups tab expand; Runs / Groups Archive footer links. + +--- + +## FR-11: Run detail and Report + +**Covers:** AC-82, AC-83, AC-84, AC-85, AC-86, AC-87, AC-88, AC-89, AC-90, AC-91, AC-92, AC-98 (UNCLEAR), AC-99 (UNCLEAR); `run-detail-and-report-ac-delta.md` ac-delta-1..22. +**Owner UC:** [UC-11](./06-use-cases/UC-11-view-run-report.md). +**Business rules:** [BR-13](./07-business-rules.md#br-13). + +Basic Report (header / tabs Tests · Statistics · Defects); test sub-panel (Summary / Description / Code Template / Runs); filter + sort + search + keyboard nav on Tests tab; Extended Report grouped overview (Suites / Tags / Labels / Assignees / Priorities); Flaky Tests Analytics (conditional); Statistics aggregate counts; Defects tab (UNCLEAR add/remove). Share by Email (validated), Share Publicly (Expiration default 7d + passcode default ON — [BR-13](./07-business-rules.md#br-13)); Compare side-by-side matrix; Download XLSX; Export PDF; Custom view Settings (per-user per-project); Copy Link (UNCLEAR). + +--- + +## FR-12: Archive, Unarchive, Purge, Permanent delete, retention + +**Covers:** AC-56, AC-57, AC-69 (archive/purge portion), AC-71 (archive/purge portion), AC-75, AC-76, AC-77, AC-78, AC-79, AC-80, AC-81, AC-100 (partially resolved); `archive-and-purge-ac-delta.md` ac-delta-1..20. +**Owner UC:** [UC-12](./06-use-cases/UC-12-archive-unarchive-purge.md). +**Business rules:** [BR-8](./07-business-rules.md#br-8), [BR-9](./07-business-rules.md#br-9), [BR-10](./07-business-rules.md#br-10), [BR-11](./07-business-rules.md#br-11), [BR-12](./07-business-rules.md#br-12). + +Archive (finished) / Archive-ongoing → Terminated + Pending→Skipped; Purge (compress + preserve results / attachments / custom statuses / Run ID / title, drop stack traces); Bulk Archive / Bulk Purge; Unarchive (single + bulk + group cascade); Runs Archive (filter tabs + Archived/Purged/Terminated badges + Rungroup Structure toggle + retention input); Groups Archive (Search + type + Finish Range + sort); Permanent delete with irreversibility dialog + Pulse "Deleted Run" audit; Readonly gating [BR-11](./07-business-rules.md#br-11); auto-purge retention default 90 days [BR-12](./07-business-rules.md#br-12). + +--- + +## FR-13: Permissions model + +**Covers:** AC-100 (UNCLEAR across several sub-features; partially resolved for archive scope). +**Owner artefact:** [02-actors-and-permissions.md](./02-actors-and-permissions.md). +**Business rules:** [BR-11](./07-business-rules.md#br-11). + +Roles: Owner, Manager, QA Creator, Tester, Readonly. Role × Action matrix in [02-actors-and-permissions.md § Role × Action matrix](./02-actors-and-permissions.md#role--action-matrix). Several cells remain UNCLEAR in POC window (Share Publicly gating, Assign permissions edge cases — [13-open-questions.md § OQ-06](./13-open-questions.md#oq-06)). + +--- + +## FR-14: Notifications, toasts, and inline feedback + +**Covers:** Transverse across UCs — Pin toast (ac-delta-6 of runs-list), Run created / started toasts (ac-delta-10 of run-creation), server error inline feedback (ac-delta-18 of run-creation), validation feedback (Name empty — ac-delta-4 of run-groups; retention — ac-delta-9 of archive-and-purge). +**Owner artefact:** Shared UI convention (no dedicated UC). Captured per-UC as inline or exception flows. + +--- + +## Cross-reference quick-find + +| Want to find... | Go to | +|---|---| +| A specific AC number | [_ac-baseline.md](../../../test-cases/manual-tests-execution/_ac-baseline.md) | +| All ACs for a sub-feature | [`test-cases/manual-tests-execution/{sub}-ac-delta.md`](../../../test-cases/manual-tests-execution/) | +| Which UC covers an AC | Traceability matrix — [_generated/traceability-matrix.md](./_generated/traceability-matrix.md) | +| Which manual tests exercise an AC | Same matrix — `AC ↔ Tests` section | +| Which BR derives from an AC | [07-business-rules.md](./07-business-rules.md) — grep by AC in *Derived from:* fields | diff --git a/skills/create-test-cases/examples/generatedDocs/09-process-flows.md b/skills/create-test-cases/examples/generatedDocs/09-process-flows.md new file mode 100644 index 0000000..542fd59 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/09-process-flows.md @@ -0,0 +1,221 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 09 — Process Flows + +Sequence diagrams for the three load-bearing end-to-end journeys plus two notable variants. Each diagram names only the user-visible surfaces — internal API calls are abstracted as `System`. State transitions are cited to [05-state-diagrams.md](./05-state-diagrams.md) and the relevant UCs. + +> **Reading key.** `QA` = QA Creator; `T` = Tester; `Sys` = Testomat.io app (UI + backend collapsed). `CI` = external CI orchestrator. `UI` tags mark user-visible feedback (dialogs, toasts, URL changes) that the flow must preserve. + +--- + +## Flow A: Launch → Execute → Finish → Report → Relaunch + +Canonical happy path for a Manual Run. References [UC-01](./06-use-cases/UC-01-create-manual-run.md) → [UC-03](./06-use-cases/UC-03-execute-test-in-runner.md) → [UC-04](./06-use-cases/UC-04-finish-run.md) → [UC-11](./06-use-cases/UC-11-view-run-report.md) → [UC-05](./06-use-cases/UC-05-relaunch-run.md). + +```mermaid +sequenceDiagram + autonumber + actor QA as QA Creator + actor T as Tester + participant Sys as Testomat.io + + QA->>Sys: Open Runs page, click Manual Run (left) + Sys-->>QA: New Manual Run sidebar opens (AC-1, ac-delta-1) + QA->>Sys: Fill Title / RunGroup / Env / Scope; click Launch + Note over Sys: Validate Require-RunGroup (BR-1) + Sys-->>QA: Run transitions to In-Progress; Manual Runner opens on first test (AC-23) + + rect rgb(245,245,245) + Note over T,Sys: Execution loop (UC-03) + T->>Sys: Select test; optionally enter Result message + T->>Sys: Click PASSED / FAILED / SKIPPED + Sys-->>T: Counter increments; tree row icon updates (AC-29, AC-30, AC-95) + T->>Sys: (Optional) attach file, set Custom Status (BR-5), add notes + T->>Sys: ↓ or click next test + end + + QA->>Sys: Click Finish Run in runner header + Sys-->>QA: Confirmation dialog — announces Pending→Skipped count (AC-28, ac-delta-9) + QA->>Sys: Confirm + Note over Sys: Pending → Skipped (BR-7); Run → Finished (AC-25/26) + Sys-->>QA: Navigate to Run Report (UC-11) + + QA->>Sys: Inspect Basic → Extended → Export PDF + Sys-->>QA: Report rendered; artefacts produced (AC-82..AC-88) + + QA->>Sys: Open Relaunch ▾ → Relaunch Manually + Sys-->>QA: Same Run reopens In-Progress; tests reset to Pending (AC-61) +``` + +### Invariants +- **Launch is atomic** — either the Run exists (and the Runner opens) or it doesn't; partial creation is not observable to the user (ac-delta-18 of run-creation). +- **Finish is terminal + confirmable** — cancelling the dialog is a no-op ([BR-7](./07-business-rules.md#br-7), ac-delta-10 of run-lifecycle). +- **Relaunch ▾ is gated on Finished** — not exposed on In-Progress / Pending / Terminated (ac-delta-8 of run-lifecycle). + +--- + +## Flow B: Archive cascade on a RunGroup + +References [UC-08](./06-use-cases/UC-08-manage-rungroup.md) + [UC-12](./06-use-cases/UC-12-archive-unarchive-purge.md), enforced by [BR-9](./07-business-rules.md#br-9) and (for ongoing children) [BR-8](./07-business-rules.md#br-8). + +```mermaid +sequenceDiagram + autonumber + actor QA as QA Creator + participant Sys as Testomat.io + + QA->>Sys: Runs page → Groups tab → RunGroup extra ⋯ → Archive + Sys-->>QA: Confirmation dialog (cascade wording) + QA->>Sys: Confirm + + rect rgb(245,245,245) + Note over Sys: Cascade — all nested Runs (BR-9) + loop each nested Run + alt Run state = Finished + Sys->>Sys: Apply "Archived" badge, move to Archive + else Run state = In-Progress / Pending + Sys->>Sys: Transition to Terminated (BR-8), Pending→Skipped (AC-76) + Sys->>Sys: Apply "Terminated" badge, move to Archive + end + end + end + + Sys-->>QA: Group disappears from active Runs list; Groups Archive link count +1 + Sys-->>QA: Toast / confirmation banner (UI) + + Note over QA,Sys: Reverse path — Groups Archive → extra ⋯ → Unarchive restores group + all children (ac-delta-15) +``` + +### Invariants +- **Atomic cascade** — no observable intermediate state where group is archived but children aren't (or vice versa) — [BR-9](./07-business-rules.md#br-9). +- **Unarchive preserves prior status** — Terminated stays Terminated (cannot resume — [BR-8](./07-business-rules.md#br-8)); Finished stays Finished; Archived stays Archived. +- **Runs-only bulk** — Multi-Select on the Runs list does not target RunGroups for archive (ac-delta-2 of archive-and-purge). + +--- + +## Flow C: Multi-Environment Launch in Sequence + +References [UC-07](./06-use-cases/UC-07-configure-environments.md) A1 (Launch in Sequence). Cross-cutting concern A ownership. + +```mermaid +sequenceDiagram + autonumber + actor QA as QA Creator + participant Sys as Testomat.io + + QA->>Sys: Click "+" on Environment section (New Manual Run) + Sys-->>QA: Multi-Environment Configuration modal opens (ac-delta-1) + QA->>Sys: Configure group #1 (e.g. Browser:Chrome) + QA->>Sys: Click "Add Environment" → configure group #2 (e.g. Browser:Firefox) + QA->>Sys: Click Save + Note over Sys: 2+ groups — Launch replaced by "Launch in Sequence" + "Launch All" (ac-delta-7) + + QA->>Sys: Click "Launch in Sequence" (AC-49) + Note over Sys: Create parent RunGroup + one child Run per env group + + rect rgb(245,245,245) + Note over Sys: Sequential execution + Sys->>Sys: Child #1 → In-Progress, runner active + Sys-->>QA: Runs list shows parent group expanded, only child #1 active + Note over Sys: Child #1 finished via UC-04 + Sys->>Sys: Child #2 → In-Progress (activates only now, ac-delta-9) + Note over Sys: Child #2 finished via UC-04 + end + + Sys-->>QA: Parent RunGroup consolidated; Report + Combined Report available (UC-08 A4) +``` + +### Invariants +- **Only one child active at a time** (Sequence) — ac-delta-9 of environment-configuration. +- **Each env badge renders per child** — ac-delta-11 of environment-configuration; rendered by [UC-10](./06-use-cases/UC-10-manage-runs-list.md). +- **Launch All** is the parallel variant — all children transition to In-Progress simultaneously (ac-delta-10). `Launch All` with *Without tests* scope is blocked with a non-modal banner *"Select a plan or select all"* (ac-delta-12). + +--- + +## Flow D: Mixed Run launch with CI Profile + +References [UC-02](./06-use-cases/UC-02-create-mixed-run.md) main flow. [BR-3](./07-business-rules.md#br-3). + +```mermaid +sequenceDiagram + autonumber + actor QA as QA Creator + actor T as Tester + participant Sys as Testomat.io + participant CI as CI Orchestrator + + QA->>Sys: Arrow dropdown → Mixed Run (AC-15) + Sys-->>QA: Mixed Run sidebar with CI-source choice (AC-16) + QA->>Sys: Pick "Run on CI" → select CI Profile + QA->>Sys: Click Launch + + par Automated leg (CI) + Sys->>CI: Trigger selected CI Profile + CI-->>Sys: Results stream in (out of POC UI) + and Manual leg (UI) + Sys-->>T: Manual Runner opens for manual tests (UC-03) + T->>Sys: Execute per test + end + + Sys-->>QA: Run consolidated on the Report after both legs finish (UC-04 / UC-11) +``` + +### Invariants +- **No CI, no automated execution** — Mixed Run launched without a CI Profile or local CLI (A1) leaves the automated portion orphaned ([BR-3](./07-business-rules.md#br-3)). Exact UI enforcement is **UNCLEAR** ([OQ-02](./13-open-questions.md#oq-02)). +- **Legs are independent** — the manual leg can finish before or after the automated leg. + +--- + +## Flow E: Bulk status in Runner (filter-aware) + +References [UC-09](./06-use-cases/UC-09-bulk-status-in-runner.md). Cross-cutting concerns F + H. + +```mermaid +sequenceDiagram + autonumber + actor T as Tester + participant Sys as Testomat.io + + T->>Sys: Toggle Multi-Select in runner header (ac-delta-1) + Note over Sys: Checkboxes appear, bulk toolbar is NOT yet rendered (ac-delta-5) + T->>Sys: Apply Priority filter "High" (ac-delta-17) + T->>Sys: Click "Select all" (ac-delta-3) + Note over Sys: Selects visible (= filter-matching) tests only (AC-66) + Sys-->>T: Bottom bulk-action toolbar renders with selection counter (ac-delta-4) + + T->>Sys: Click Result message → pick FAILED → type message → Apply (AC-94) + Note over Sys: Apply disabled until a standard status is picked (ac-delta-6, BR-5) + Sys-->>T: Every selected test gets FAILED + message; modal closes silently (ac-delta-8) + Sys-->>T: Header counters update immediately (AC-95, ac-delta-9) + + Note over T,Sys: Cancel path — dismissing the modal clears selection (ac-delta-7) + Note over T,Sys: × Clear-Selection keeps Multi-Select ON, clears selection only (ac-delta-11) +``` + +### Invariants +- **Zero selection, no toolbar** — ac-delta-5 of bulk-status-actions. No empty-state bulk affordance. +- **Filter-aware Select-all** — [UC-05 A8](./06-use-cases/UC-05-relaunch-run.md#a8-advanced-relaunch-with-a-filter-applied-selection-scope) mirrors this for Advanced Relaunch. +- **Dismiss-as-cancel** — closing the Result message modal without Apply clears selection (ac-delta-7). + +--- + +## State-transition quick-reference + +| From | Event | To | Source | +|---|---|---|---| +| Pending | Continue (first entry) | In-Progress | AC-24, ac-delta-7 of run-lifecycle | +| In-Progress | Finish Run (confirmed) | Finished | AC-25, [BR-7](./07-business-rules.md#br-7) | +| In-Progress | Archive (ongoing) | Terminated | AC-76, [BR-8](./07-business-rules.md#br-8) | +| Finished | Relaunch (in-place) | In-Progress (same Run ID) | AC-58 | +| Finished | Advanced Relaunch (Create-new-run ON) | In-Progress (new Run ID) | AC-63 | +| Finished | Archive | Archived (state preserved) | AC-75 | +| Any (Archive only) | Unarchive | prior state (Terminated stays Terminated) | [BR-8](./07-business-rules.md#br-8), AC-80 | +| Finished / Archived | Purge | Archived + "Purged" badge | AC-78, [BR-12](./07-business-rules.md#br-12) | +| Archived | Permanent delete | (gone) + Pulse "Deleted Run" | AC-81, ac-delta-18 of archive | + +> Full state diagrams: [05-state-diagrams.md](./05-state-diagrams.md). diff --git a/skills/create-test-cases/examples/generatedDocs/10-ui-catalog.md b/skills/create-test-cases/examples/generatedDocs/10-ui-catalog.md new file mode 100644 index 0000000..657dec6 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/10-ui-catalog.md @@ -0,0 +1,285 @@ +--- +audience: qa-team, dev-team, product +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +source: test-cases/manual-tests-execution/_shared-ui.md +--- + +# 10 — UI Catalog (Surface Map) + +A navigation + purpose map of every user-visible surface involved in a Manual Run's lifecycle. This is a BA-level distillation: what each surface **exists to do**, how users **arrive there**, which **sub-features** own it, and which **UCs / BRs** it enforces. For low-level element inventories, selectors, and DOM structure see [`_shared-ui.md`](../../../test-cases/manual-tests-execution/_shared-ui.md). + +> **Reading key.** *Owned by* = the sub-feature(s) whose acceptance criteria primarily govern the surface. *Enforces* = business rules whose validation is user-visible here. Surfaces are grouped by task phase (Plan → Launch → Execute → Finish → Report → Archive). + +--- + +## 0. Orientation — navigation map + +```mermaid +flowchart LR + Nav[Left Sidebar] --> RunsList[Runs List] + RunsList -->|"Manual Run (split)"| NewSidebar[New Manual Run sidebar] + RunsList -->|"Manual Run ▾ → Mixed Run"| MixedSidebar[Mixed Run sidebar] + RunsList -->|"Manual Run ▾ → New Group"| NewGroup[New RunGroup page] + RunsList -->|"Query Language Editor"| QLE[TQL editor modal] + RunsList -->|"Runs Archive / Groups Archive"| ArchiveList[Archive lists] + RunsList -->|row click| DetailPanel[Run Detail panel] + DetailPanel -->|"Report"| Report[Run Report] + DetailPanel -->|"Continue"| Runner[Manual Runner] + DetailPanel -->|"Edit"| EditRun[Edit Run page] + NewSidebar -->|"Environment +"| EnvModal[Multi-Env Config modal] + NewSidebar -->|"Launch"| Runner + Runner -->|"Finish Run (native confirm)"| Report + Report -->|"Extra ▾ → Share"| ShareDialogs[Share Email / Publicly] + Report -->|"Extra ▾ → Compare"| CompareMatrix[Compare modal] + RunsList -->|"row ⋯ → Archive / Purge"| ConfirmDialog[Confirm dialogs] +``` + +--- + +## 1. Persistent chrome + +### 1.1 Left sidebar navigation + +- **Purpose.** Global project navigation (Tests, Requirements, **Runs**, Plans, Steps, Pulse, Imports, Analytics, Branches, Settings, Help, Profile). +- **Arrival.** Present on every project page. +- **Relevance for this feature.** `Runs (Shift+3)` is the single entry point into the Manual Run flow; `Pulse (Shift+6)` surfaces the *"Deleted Run"* audit event (AC-81). +- **Owned by.** Out of scope (shared app chrome) — referenced only. + +### 1.2 Breadcrumbs (Runs context) + +- **Purpose.** Anchor the user inside the Runs area: `Project / Runs (count)`. +- **Count badge.** Total **non-archived** runs (includes ongoing, finished, terminated). +- **Owned by.** runs-list-management. + +--- + +## 2. Runs List (primary hub) + +**URL:** `/projects/{project}/runs/` + +- **Purpose.** The project-wide inventory of Manual / Automated / Mixed runs and RunGroups. Acts as launch pad (split button), triage surface (filters + chart), and governance surface (Multi-Select, TQL, Archive footer). +- **Arrival.** Left sidebar → Runs; or from any Run Report → `Run #{id}` breadcrumb. +- **Primary affordances.** + - **Filter tabs** — `Manual | Automated | Mixed | Unfinished | Groups` (swaps the active row set). + - **Split-button `Manual Run`** — primary click launches [UC-01](./06-use-cases/UC-01-create-manual-run.md); chevron expands to `New Group`, `Report Automated Tests`, `Launch from CLI`, `Mixed Run` ([UC-02](./06-use-cases/UC-02-create-mixed-run.md)). + - **Runs Status Report (AI)** — disabled unless ≥ 5 finished runs (ac-delta-4 of runs-list-management). + - **Multi-Select** — toggles row checkboxes and enables a floating bulk toolbar; RunGroups are **not** targeted (ac-delta-2 of archive-and-purge). + - **Query Language Editor** — opens the TQL modal (ac-delta-15). + - **Custom view / Default view toggle** — swaps card list ↔ table; column set differs (see `_shared-ui.md` § Runs List). + - **Chart area** — per-day stacked Passed / Failed / Skipped totals; legend is a clickable filter; `Hide chart / Show chart` toggle. + - **Pagination** — first / last arrows; current page is plain text. + - **Row extra menu (⋯)** — state-aware: Relaunch / Advanced Relaunch / Launch a Copy / Pin / Export as PDF / Move / Labels / Move to Archive / Purge. Relaunch entries are gated on Finished; Move cannot target the run's own group. + - **Footer Archive links** — Runs Archive + Groups Archive with live counts (ac-delta-17 of runs-list-management). +- **Owned by.** runs-list-management (rows) + archive-and-purge (footer) + run-lifecycle (status indicators) + run-groups (Groups tab). +- **Enforces.** [BR-9](./07-business-rules.md#br-9) (cascade badges on archived groups), [BR-11](./07-business-rules.md#br-11) (archived filter behavior). + +--- + +## 3. Launch surfaces + +### 3.1 New Manual Run sidebar + +**URL:** `/projects/{project}/runs/new` (right-side drawer) + +- **Purpose.** Single form that collects Title / RunGroup / Environment / Description / Scope / Checklist toggle and launches a Manual Run. +- **Arrival.** Runs list → left half of the `Manual Run` split button. +- **Key affordances.** + - **Assignee chip + `Assign more users`** — opens the tester-assignment subflow ([UC-06](./06-use-cases/UC-06-assign-testers.md)). + - **RunGroup selector** — `Without rungroup` + named groups; required if [BR-1](./07-business-rules.md#br-1) is active at project scope. + - **Environment multi-select** — clicking opens the Multi-Env Config modal (§ 3.2). + - **Scope tabs** — `All tests` | `Test plan` | `Select tests` | `Without tests` ([BR-2](./07-business-rules.md#br-2), BR-4). + - **Run as checklist** — hides descriptions; [UC-03 A5](./06-use-cases/UC-03-execute-test-in-runner.md#a5-run-as-checklist). + - **Run Automated as Manual** — promotes automated-tagged tests into the manual runner. + - **Launch / Save / Cancel** — Launch opens the runner; Save parks the Run as Pending (AC-24). +- **Owned by.** run-creation (+ environment-configuration, tester-assignment cross-cutting). +- **Enforces.** BR-1, BR-2, BR-4, BR-6. + +### 3.2 Multi-Environment Configuration modal + +**URL:** modal over `/runs/new` (and Edit Run) + +- **Purpose.** Build one or more **environment groups** (e.g. Windows+Chrome, Linux+Firefox) that each materialize as a child Run on Launch in Sequence / Launch All. +- **Affordances.** Numbered slots • environment checklist (OS + Browser) • `Add Environment` • `Add all envs` • `Save` / `Cancel`. +- **Launch-button morphism.** At ≥ 2 groups, the parent "Launch" button **splits** into `Launch in Sequence` + `Launch All` (ac-delta-7 of environment-configuration). +- **Owned by.** environment-configuration. +- **Enforces.** ac-delta-12 (Launch All + Without-tests is blocked with non-modal banner). + +### 3.3 Mixed Run sidebar + +Same shell as § 3.1 with an additional **CI-source picker** (Run on CI / CLI / None) — see [UC-02](./06-use-cases/UC-02-create-mixed-run.md). + +### 3.4 Query Language Editor modal + +- **Purpose.** Build TQL expressions that drive the Runs list view and can be saved as named queries. +- **Affordances.** Monaco-like editor with autocomplete toggle • Saved Queries + Examples tabs • Operators sidebar (`and`, `or`, `not`, comparators, `in [...]`, `%`) • Variables sidebar (title, plan, rungroup, env, tag, label, jira, durations, counts, status flags, dates…) • `Apply` / `Save` / `Cancel` • `Read Docs` external link. +- **Owned by.** runs-list-management (ac-delta-15). + +--- + +## 4. Execution surface + +### 4.1 Manual Runner + +**URL:** `/projects/{project}/runs/launch/{id}/?entry={testId}` + +- **Purpose.** The single-tester execution surface — one test at a time, navigable via tree + hotkeys, marking PASSED / FAILED / SKIPPED with optional message, attachment, and notes. +- **Arrival.** Launch click from § 3.1, or **Continue** from Run Detail panel (AC-24). +- **Regions.** + - **Header** — back-to-runs link • `N/M tests (X% completed)` • Fast Forward (tooltip) • Auto-Track (tooltip) • Create notes • **Finish Run** (primary). Fast Forward behaviour is **UNCLEAR** (AC-97 / [OQ-11](./13-open-questions.md#oq-11)). + - **Status counter bar** — Passed / Failed / Skipped / Pending; clicking a counter filters the tree (AC-95). + - **Filter toolbar** — Priority (`Normal | Low | High | Important | Critical`) + Multi-Select toggle + Collapse-all. + - **Tree panel** — suites + tests; each suite has `Add note to suite` + `Add test to suite`. + - **Execution panel** — Test title + breadcrumb • Result section (hotkey hint + PASSED / FAILED / SKIPPED full-width buttons) • Result message textarea • attachment slot • Edit metafields expandable. + - **Bulk toolbar** (appears only when a selection exists under Multi-Select — ac-delta-5 of bulk-status-actions) — Status • Result message • Assign tester • × Clear-selection. +- **Hotkeys.** PASSED = `Cmd+Enter`, FAILED = `Cmd+U`, SKIPPED = `Cmd+I`. +- **Owned by.** test-execution-runner (+ bulk-status-actions for Multi-Select). +- **Enforces.** [BR-5](./07-business-rules.md#br-5) (custom statuses require a standard status), BR-7 (Pending → Skipped at Finish). + +### 4.2 Finish Run confirmation (native `confirm` dialog) + +- **Purpose.** Irreversible gate before flipping the Run to Finished — announces the Pending → Skipped count verbatim (ac-delta-9 of run-lifecycle). +- **Trigger.** `Finish Run` button in § 4.1. +- **Outcome.** Confirm → Run transitions to Finished (AC-25) and navigates to § 5.2; Cancel → no-op. +- **Owned by.** run-lifecycle. Enforces [BR-7](./07-business-rules.md#br-7). + +--- + +## 5. Review & reporting surfaces + +### 5.1 Run Detail panel (right-side drawer on Runs list) + +**URL:** `/projects/{project}/runs/{id}/` + +- **Purpose.** Mid-flow inspection without leaving the Runs list. Surfaces run identity, summary metrics, and entry points to the Runner and the Report. +- **Header.** Copy Settings • Run Summary AI button (disabled when ongoing) • `Report` link • Edit • Close. +- **Body.** Doughnut chart • Status / Duration / Tests / Plan / Executed / Executed by / Created by / Set labels. +- **Tabs.** Tests (default), Statistics, Defects. +- **Test sub-panel** (when a row is clicked). Tabs: Summary | Description | Code template | Runs. +- **Owned by.** run-detail-and-report. + +### 5.2 Run Report page + +**URL:** `/projects/{project}/runs/{id}/report/` + +- **Purpose.** Read-only post-execution view optimised for triage, sharing, and archival. Supports both Basic and Extended layouts. +- **Header affordances.** Run title + status ● • **Copy Link** (AC-99 behavior is **UNCLEAR**, [OQ-20](./13-open-questions.md#oq-20)) • Extra ▾ menu (Download XLSX, Export PDF, Share Email, Share Publicly, Compare, Custom Report view — see UC-11). +- **Filter toolbar.** Pass / Fail / Skip counters + search + Tree View toggle. +- **Summary panel.** Run metadata + Overview tabs: Suites | Tags | Labels | Assignees | Priorities (Suites tab has Folders toggle + sort by name/failed). +- **Test sub-panel.** Mirrors § 5.1's sub-panel. +- **Related dialogs.** + - **Share Email dialog** — recipient list + message; governed by BR-13. + - **Share Publicly dialog** — defaults: **7-day expiry + passcode ON** (ac-delta-19 of run-detail-and-report). + - **Compare matrix modal** — ac-delta-21. + - **AI Run Summary** — disabled mid-run (same affordance as § 5.1). +- **Owned by.** run-detail-and-report. +- **Enforces.** [BR-13](./07-business-rules.md#br-13). + +### 5.3 Edit Run page (full form) + +**URL:** `/projects/{project}/runs/edit/{id}/` + +- **Purpose.** Structural mutation of an existing (non-finished) Run — Title / Assigned users / Environment / Description / Tests scope. +- **Arrival.** Run Detail panel → Edit; or row extra menu. +- **Constraints.** Editing a Finished Run is blocked (BR-10); testers cannot reach this view (BR-6). +- **Owned by.** run-creation (edit path) + tester-assignment. + +--- + +## 6. RunGroup surfaces + +### 6.1 New RunGroup page + +- **Purpose.** Create a parent RunGroup with a title, optional description, plan binding, and ordering hints. +- **Arrival.** Runs list → split-button ▾ → `New Group`; or from inside Groups tab. +- **Owned by.** run-groups. Enforces [BR-1](./07-business-rules.md#br-1) (if the project requires RunGroup on Runs). + +### 6.2 RunGroup detail page + +**URL:** `/projects/{project}/runs/groups/{id}` + +- **Purpose.** Browse child runs, consolidate results, and manage membership. +- **Key affordances.** Add Manual Run in-group • Move existing runs in/out • Add Existing Run • Pin / Unpin • Edit • Copy Group (with toggles) • Archive (cascade) • Purge (20 k ceiling, [OQ-17](./13-open-questions.md#oq-17)) • **Combined Report** link. +- **Extra menu (⋯).** Copy / Pin / Edit / Add Existing Run / Archive / Purge (ac-delta-12 of run-groups). +- **Owned by.** run-groups. +- **Enforces.** BR-9 (cascade), [BR-10](./07-business-rules.md#br-10) (Combined Report composition), [BR-12](./07-business-rules.md#br-12) (Purge behavior). + +### 6.3 Groups tab on the Runs list + +- **Purpose.** Filter the Runs list to just RunGroup rows; each row expands to show child runs (ac-delta-9 of environment-configuration — sequential activation visible here). +- **Owned by.** runs-list-management + run-groups. + +--- + +## 7. Archive surfaces + +### 7.1 Runs Archive + +**URL:** `/projects/{project}/runs/archive/` + +- **Purpose.** Read-only list of archived Runs (Archived / Purged / Terminated). Distinct badges per state (ac-delta-16 of archive-and-purge). +- **Affordances.** Filter tabs (mirrors main list) • Search • Sort • Row extra menu now exposes **Unarchive**, **Purge** (if Archived), **Permanent delete** (if Purged, gated by Admin — [OQ-13](./13-open-questions.md#oq-13)). +- **Owned by.** archive-and-purge. +- **Enforces.** BR-8 (Terminated is terminal — Unarchive preserves state), BR-11, BR-12. + +### 7.2 Groups Archive + +**URL:** `/projects/{project}/runs/group-archive/` + +- **Purpose.** Parallel archive for RunGroups; Unarchive restores the group **and** all children, each child retaining its prior state (ac-delta-15 of run-groups). + +### 7.3 Confirmation dialogs (archive / purge / unarchive / delete) + +- **Purpose.** Irreversible-action gating with copy that names the cascade when applicable. +- **Ownership.** archive-and-purge. Specific copy and button wording: see `_shared-ui.md` + UC-12. + +### 7.4 Pulse "Deleted Run" event + +- **Purpose.** Post-deletion audit trail in the Pulse feed — the only visible evidence once a Run is permanently deleted (AC-81, ac-delta-18). +- **Ownership.** archive-and-purge (surface) + external (Pulse feature). + +--- + +## 8. Cross-cutting UI patterns + +| Pattern | Where it appears | Intent | +|---|---|---| +| **Split primary button** | Manual Run (Runs list), Launch (Multi-env modal at 2+ groups) | Offer a safe default + advanced variants. | +| **Native browser `confirm`** | Finish Run, quick-set bulk status (ac-delta-10 of bulk-status-actions) | Browser-level irreversibility gate. | +| **App modal confirm** | Archive / Purge / Unarchive / Permanent delete | In-app confirmation with cascade copy. | +| **Row extra menu (⋯)** | Runs list, Groups tab, RunGroup detail | State-aware action surface — items show/hide with state. | +| **Toast** | After Save / Archive / Purge / Pin | Non-blocking success feedback. | +| **Non-modal banner** | Launch All + Without-tests ("Select a plan or select all") | Soft blocker inside a modal. | +| **Status ● circles** | Everywhere — list, runner, report | Single visual vocabulary (green / red / gray / orange / blue). | +| **Hotkey hint line** | Runner execution panel | Discoverability for Cmd+Enter / Cmd+U / Cmd+I. | +| **Badge slots** | List rows (Archived / Purged / Terminated), run type (manual/mixed/automated), env chips | Multi-dimensional state at a glance. | + +--- + +## 9. URL contract (stable deep-links) + +| URL | Surface | Primary UC | +|---|---|---| +| `/runs/` | Runs list | UC-10 | +| `/runs/new` | New Manual Run sidebar | UC-01 | +| `/runs/{id}/` | Run detail panel over list | UC-11 (preview) | +| `/runs/launch/{id}/?entry={testId}` | Manual Runner | UC-03 | +| `/runs/{id}/report/` | Run Report | UC-11 | +| `/runs/edit/{id}/` | Edit Run | UC-04 A2 / UC-06 A6 | +| `/runs/groups/new` | New RunGroup page | UC-08 | +| `/runs/groups/{id}` | RunGroup detail | UC-08 | +| `/runs/archive/` | Runs Archive | UC-12 | +| `/runs/group-archive/` | Groups Archive | UC-12 | + +> **Shareability.** The Runs list URL preserves active filter/TQL state via query-params (UC-10 A6); the Run Report URL is the canonical share target (Copy Link / Share Email / Share Publicly). + +--- + +## 10. Cross-reference + +- **Business rules enforced at UI.** [BR-1](./07-business-rules.md#br-1), BR-2, BR-4, BR-5, BR-6, BR-7, BR-8, BR-9, BR-10, BR-11, BR-12, BR-13. +- **Use cases anchored to these surfaces.** UC-01..UC-12 — see [`06-use-cases/README.md`](./06-use-cases/README.md). +- **State transitions visualised.** [`05-state-diagrams.md`](./05-state-diagrams.md). +- **Process flows through these surfaces.** [`09-process-flows.md`](./09-process-flows.md). +- **Element-level inventory.** [`test-cases/manual-tests-execution/_shared-ui.md`](../../../test-cases/manual-tests-execution/_shared-ui.md). diff --git a/skills/create-test-cases/examples/generatedDocs/11-integrations.md b/skills/create-test-cases/examples/generatedDocs/11-integrations.md new file mode 100644 index 0000000..d00b919 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/11-integrations.md @@ -0,0 +1,154 @@ +--- +audience: qa-team, dev-team, integrations +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 11 — Integrations & External Contracts + +External surfaces that a Manual Run touches or is touched by. For each integration: what it is, what crosses the boundary, where it appears in the UI, and which UCs / BRs depend on it. Items flagged **UNCLEAR** point to [13-open-questions.md](./13-open-questions.md). + +--- + +## I-1. CI Profile (Mixed Run — automated leg) + +- **What it is.** A server-side record that tells Testomat.io how to trigger an external CI job (GitHub Actions, Jenkins, GitLab, etc.) and where to listen for results. +- **Where configured.** Project → Settings → CI Profiles (out of scope for this feature's docs). +- **Where consumed.** [UC-02 Mixed Run](./06-use-cases/UC-02-create-mixed-run.md) sidebar `Run on CI` picker; referenced from Advanced Relaunch (UC-05 A4 / A5 — Failed-on-CI, All-on-CI). +- **Payload boundaries.** + - **Testomat → CI** — trigger call carrying at least: `run_id`, `project_id`, test selection (tag / plan / manual flag), environment matrix. **Exact shape is UNCLEAR** ([OQ-02](./13-open-questions.md#oq-02)). + - **CI → Testomat** — streamed test results via the **@testomatio/reporter** CLI (see I-2) or the public REST API. Results append to the same Run that the trigger created. +- **UI feedback.** The Mixed Run's automated leg appears alongside manual tests on the Runs list and Report after results arrive; no polling indicator is surfaced in the current UI (observed during Playwright walk). +- **Governed by.** [BR-3](./07-business-rules.md#br-3) (Mixed Run without any execution channel — CI Profile or local CLI — orphans the automated portion; exact UI enforcement UNCLEAR, [OQ-02](./13-open-questions.md#oq-02)). +- **Related UCs.** UC-02 main, UC-05 A4 + A5, UC-11 (consolidated report). + +--- + +## I-2. `@testomatio/reporter` CLI (automated leg — local run variant) + +- **What it is.** An npm-published reporter package that runs alongside local / CI-launched test suites (Codecept, Playwright, Mocha, Cypress, JUnit XML ingest) and posts results to Testomat.io. +- **Where consumed.** + - From a Mixed Run launched with `Launch from CLI` (dropdown on Runs list split button) — the user runs `npx @testomatio/reporter` locally. + - From any CI environment that doesn't use a CI Profile. +- **Configuration.** Typically via env vars: `TESTOMATIO` (API token), `TESTOMATIO_RUN` (existing Run ID to append to), `TESTOMATIO_TITLE`, `TESTOMATIO_ENV`, `TESTOMATIO_RUNGROUP`. +- **Boundary.** Reporter authenticates with a project API token and PATCHes testrun records on the server; arrivals are merged into the target Run via the same path as CI Profile deliveries. +- **UI feedback.** None during stream — reflected by test-count increment on the Runs list row and on the Report as results land. +- **Governed by.** BR-3. +- **Related UCs.** UC-02 main (A1 "Launch from CLI"), UC-11. + +--- + +## I-3. Test Query Language (TQL) + +- **What it is.** A Testomat.io-specific DSL for expressing run-level filters, powering both the URL-shareable filter state on the Runs list and the `Save` → Named Query workflow. +- **Editor.** Runs list → `Query Language Editor` modal (§ 3.4 of [10-ui-catalog.md](./10-ui-catalog.md)). +- **Grammar summary (observed).** + - **Operators.** `and`, `or`, `not`, `==`, `!=`, `<`, `>`, `>=`, `<=`, `in [ … ]`, `%` (wildcard / contains). + - **Variables (non-exhaustive).** `title`, `plan`, `rungroup`, `env`, `tag`, `label`, `jira`, `duration`, `passed_count`, `failed_count`, `skipped_count`, `automated`, `manual`, `mixed`, `finished`, `unfinished`, `passed`, `failed`, `terminated`, `published`, `private`, `archived`, `unarchived`, `with_defect`, `has_defect`, `has_test`, `has_test_tag`, `has_test_label`, `has_suite`, `has_message`, `has_custom_status`, `has_assigned_to`, `has_retries`, `has_test_duration`, `has_priority`, `created_at`, `updated_at`, `launched_at`, `finished_at`. + - **Boolean variables** are used as bare tokens (`terminated`, `archived`); string/numeric comparisons use the operator suite above. +- **Examples tab.** The modal ships 3 preset queries; parsing + syntax help is one click away via **Read Docs** → `https://docs.testomat.io/usage/query-language`. +- **Saved Queries.** Persisted per-user; the **Custom view / Default view** toggle has no direct TQL binding — TQL survives the view switch. +- **Related UCs.** UC-10 A4, UC-10 A6 (URL share), UC-12 A10 (Archive filters accept TQL). +- **Owned AC.** ac-delta-15 of runs-list-management. + +--- + +## I-4. Defect / issue trackers (Jira, GitHub, …) + +- **What it is.** Bi-directional link between a Testomat.io test result and an external ticket. +- **Where it appears.** + - Run Detail panel → **Defects** tab (UC-11 A3). + - Run Report → Defects column + per-test issue list. + - TQL variable `jira`, `with_defect`, `has_defect`. +- **Linkage mechanism.** Observed as free-text + URL references in the report panes; dedicated dialog behavior for AC-98 (`Defects` affordance on Report header) is **UNCLEAR** ([OQ-04](./13-open-questions.md#oq-04)). +- **Governance.** No BR authored at this phase — integration-layer concern (out of scope for Manual Tests Execution feature docs). +- **Related UCs.** UC-11 A3. + +--- + +## I-5. Pulse (audit feed) + +- **What it is.** A project-wide chronological activity stream (left sidebar → `Pulse`). +- **Where it intersects this feature.** Emits a **"Deleted Run"** event after a Permanent Delete from the Runs Archive (AC-81, ac-delta-18 of archive-and-purge). No other Manual Run lifecycle events are surfaced (no "Archived", no "Purged", no "Finished" Pulse entries observed). +- **Boundary.** Read-only for QA; write-side is internal to the server. +- **Related UCs.** UC-12 A12. Governed by [BR-12](./07-business-rules.md#br-12). + +--- + +## I-6. Email delivery (Share Email) + +- **What it is.** Transactional email channel used to distribute a Run Report. +- **Where invoked.** Run Report → Extra ▾ → `Share Email` (UC-11 A7). +- **Boundary.** User supplies recipient list + optional message; server renders the Report and dispatches. No in-app delivery status surfaces in the current UI. +- **Governed by.** [BR-13](./07-business-rules.md#br-13) (access rules for shared content). +- **Related UCs.** UC-11 A7. + +--- + +## I-7. Public share links (Share Publicly) + +- **What it is.** Signed, optionally passcode-protected URL for unauthenticated read access to a Run Report. +- **Where invoked.** Run Report → Extra ▾ → `Share Publicly` (UC-11 A8). +- **Contract.** + - **Defaults.** 7-day expiry **ON**, passcode **ON** (ac-delta-19 of run-detail-and-report). + - **Revocation.** Regenerating or disabling the link invalidates outstanding URLs (observed on toggle). + - **Scope.** One link per Run. Cross-group / Combined-Report sharing cadence is **UNCLEAR** ([OQ-16](./13-open-questions.md#oq-16)). +- **Governed by.** BR-13. +- **Related UCs.** UC-11 A8. + +--- + +## I-8. Downloadable artefacts + +| Artefact | Surface | Notes | +|---|---|---| +| **PDF** | Run Report → Extra ▾ → Export as PDF **or** Runs list row ⋯ → Export as PDF | Server-side render; includes summary + per-test results (UC-11 A6). | +| **XLSX** | Run Report → Extra ▾ → Download XLSX | Flat test rows with status/duration/assignee (UC-11 A5). | +| **Combined Report (PDF/HTML)** | RunGroup detail → Combined Report | Multi-run consolidated view (UC-08 A4), governed by BR-10. | + +All three are pull-only (user-initiated). No push/email of artefacts outside I-6. + +--- + +## I-9. Attachments & binaries + +- **What it is.** Per-test uploaded files (screenshots, logs) attached during execution. +- **Where invoked.** Manual Runner → test execution panel → attachment slot (UC-03 main + A1 + A3). +- **Boundary.** Uploaded via browser; persisted server-side; rendered inline on the Report test sub-panel. +- **Retention on Purge.** Attachments are **preserved** (UC-12 A4 / [BR-12](./07-business-rules.md#br-12)); only stack traces are dropped. Exact size/retention caps are **UNCLEAR** ([OQ-12](./13-open-questions.md#oq-12)). + +--- + +## I-10. Webhooks / outbound notifications + +- **Status.** Not observed as a first-class surface within the Manual Run feature during Phase 1/2 exploration. Webhook configuration lives in Project Settings (out of scope). +- **Flagged as.** Gap for future phase — see [OQ-22](./13-open-questions.md#oq-22) (if present) or raise during Phase 3. No BR authored. + +--- + +## Integration × UC matrix + +| Integration | UC-01 | UC-02 | UC-03 | UC-04 | UC-05 | UC-06 | UC-07 | UC-08 | UC-09 | UC-10 | UC-11 | UC-12 | +|---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +| I-1 CI Profile | | ● | | | ● | | | | | | ● | | +| I-2 Reporter CLI | | ● | | | ● | | | | | | ● | | +| I-3 TQL | | | | | | | | | | ● | | ● | +| I-4 Defects | | | | | | | | | | | ● | | +| I-5 Pulse | | | | | | | | | | | | ● | +| I-6 Email | | | | | | | | | | | ● | | +| I-7 Public share | | | | | | | | | | | ● | | +| I-8 PDF/XLSX | | | | | | | | ● | | ● | ● | | +| I-9 Attachments | | | ● | | | | | | | | ● | ● | + +--- + +## Summary of unresolved integration questions + +| OQ | Subject | +|---|---| +| [OQ-02](./13-open-questions.md#oq-02) | Mixed Run BR-3 UI enforcement + exact CI trigger payload | +| [OQ-04](./13-open-questions.md#oq-04) | AC-98 Defects affordance behavior | +| [OQ-12](./13-open-questions.md#oq-12) | Attachment retention / size caps | +| [OQ-16](./13-open-questions.md#oq-16) | Public share on Combined Report / cross-group | +| [OQ-20](./13-open-questions.md#oq-20) | AC-99 Copy Link target format | diff --git a/skills/create-test-cases/examples/generatedDocs/12-non-functional.md b/skills/create-test-cases/examples/generatedDocs/12-non-functional.md new file mode 100644 index 0000000..7ffa8fd --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/12-non-functional.md @@ -0,0 +1,234 @@ +--- +audience: qa-team, dev-team, sre, product +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 12 — Non-Functional Requirements + +Constraints that shape the feature's behaviour without being expressible as a single acceptance criterion: limits, retention, concurrency, permissions, and performance characteristics observed or implied by the current UI. Items flagged **UNCLEAR** map to [13-open-questions.md](./13-open-questions.md). + +--- + +## NFR-1. Capacity & limits + +### NFR-1.1 Purge ceiling — 20,000 test results + +- **Source.** UC-08 A10 / UC-12 A5; governed by [BR-12](./07-business-rules.md#br-12). +- **Behaviour.** Purging a RunGroup whose child Runs aggregate > 20 000 test results is blocked (or partitioned — UI mode UNCLEAR, [OQ-17](./13-open-questions.md#oq-17)). +- **Rationale.** Database-level safeguard against a single destructive action exceeding the storage engine's bulk-delete budget. +- **User-visible signal.** Inline validation / toast copy expected on the confirm dialog (exact copy UNCLEAR). + +### NFR-1.2 Title length — 255 characters + +- **Source.** New Manual Run sidebar `Title` input (observed `maxlength="255"`). +- **Applies to.** Run title, RunGroup title. Description textareas appear unbounded at the UI layer. + +### NFR-1.3 RunGroup + Run fan-out + +- **Observed ceilings.** Not surfaced in the UI during Phase 1/2 exploration. No visible cap on Runs per RunGroup, child Runs per Launch-All, or plans per Run. +- **Flagged as.** UNCLEAR — see [OQ-18](./13-open-questions.md#oq-18) (if present) or future phase. + +### NFR-1.4 AI-generated Run Status Report + +- **Gate.** Requires ≥ 5 finished Runs in the filtered view (ac-delta-4 of runs-list-management). +- **Payload / prompt structure.** UNCLEAR — see [OQ-19](./13-open-questions.md#oq-19). + +--- + +## NFR-2. Retention & lifecycle + +### NFR-2.1 Auto-purge windows + +- **Source.** UC-12 A6. +- **Behaviour.** Archived Runs become Purged after a project-configured retention window; Purged Runs may be permanently deleted after a second retention window. +- **Effect of Purge.** Run row remains with a `Purged` badge; stack traces are dropped; **statuses, attachments, and Run ID are preserved** (ac-delta-16 of archive-and-purge, BR-12). +- **Effect of Permanent Delete.** Row is removed entirely; a `"Deleted Run"` entry is emitted to Pulse (AC-81). +- **UNCLEAR.** Exact default retention values, per-project configurability UI, and whether retention runs on a fixed cadence or continuous sweep — see [OQ-15](./13-open-questions.md#oq-15). + +### NFR-2.2 Unarchive preserves prior state + +- **Source.** [BR-8](./07-business-rules.md#br-8), AC-80. +- **Behaviour.** Unarchive restores an item to its state at the moment of Archive — Terminated stays Terminated (cannot be resumed), Finished stays Finished. Archive is **not** a re-entry path into In-Progress. + +### NFR-2.3 Cascade atomicity on RunGroup Archive + +- **Source.** [BR-9](./07-business-rules.md#br-9). +- **Behaviour.** The parent group and every child Run transition together. No observable intermediate state where the group is Archived but children are not (or vice versa). Error handling for partial failure is server-side and not user-visible. + +--- + +## NFR-3. Concurrency + +### NFR-3.1 Sequential child activation (Launch in Sequence) + +- **Source.** UC-07 A1; ac-delta-9 of environment-configuration. +- **Invariant.** At most one child Run is In-Progress at a time under Launch in Sequence. Next child transitions to In-Progress only when the previous child reaches Finished. + +### NFR-3.2 Parallel child activation (Launch All) + +- **Source.** UC-07 A2; ac-delta-10. +- **Invariant.** All children transition to In-Progress simultaneously on Launch All. + +### NFR-3.3 Multi-tester concurrency on a single Run + +- **Observed.** Two or more testers can operate the same Runner URL simultaneously. Last-write-wins on the Result / status field; no optimistic-locking conflict dialog was observed. +- **Governed by.** None (no BR authored at this phase). Risk: silent overwrite of mid-flight edits. Flagged for future coverage. + +### NFR-3.4 Idempotency of `Finish Run` + +- **Source.** BR-7 + ac-delta-10 of run-lifecycle. +- **Invariant.** Cancelling the native confirm is a no-op; a double-confirm after Finish is not re-enterable because the Run's state has left In-Progress. + +--- + +## NFR-4. Permissions model (summary) + +Full permission matrix lives in [02-actors-and-permissions.md](./02-actors-and-permissions.md). Non-functional view: + +| Capability | Owner | Admin | QA Creator | Manager | Tester | Readonly | +|---|:-:|:-:|:-:|:-:|:-:|:-:| +| Create / Edit Run | ● | ● | ● | ● | | | +| Launch / Finish Run | ● | ● | ● | ● | ● (if assigned) | | +| Execute tests in Runner | ● | ● | ● | ● | ● (if assigned) | | +| Bulk status in Runner | ● | ● | ● | ● | ● | | +| Archive / Purge Run | ● | ● | ● | | | | +| Permanent Delete (from Purged) | ● | ● | | | | | +| Manage CI Profile | ● | ● | | | | | +| Configure Multi-Env | ● | ● | ● | ● | | | +| Assign testers | ● | ● | ● | ● | | | +| View Run / Report | ● | ● | ● | ● | ● | ● | +| Share Publicly | ● | ● | ● | ● | | | + +### Key NFRs from this matrix + +- **NFR-4.1** Tester role is excluded from assignee-distribution targets when `Randomly distribute` is used (ac-delta-11 of tester-assignment) — manager-role users are excluded by design. +- **NFR-4.2** Readonly cannot surface destructive affordances (ac-delta-20 of archive-and-purge): Archive / Purge / Unarchive / Permanent Delete are hidden, not disabled. +- **NFR-4.3** Edit Run page is blocked once the Run is Finished ([BR-10](./07-business-rules.md#br-10)); UI demotes Edit entry points but does not show an explicit error. +- **NFR-4.4** Permanent Delete admin-gating specifics — UNCLEAR ([OQ-13](./13-open-questions.md#oq-13)). +- **NFR-4.5** Shared-link access bypasses project-role checks (BR-13, I-7 in [11-integrations.md](./11-integrations.md)); revocation is the only control. + +--- + +## NFR-5. Performance & responsiveness + +### NFR-5.1 Runner interactivity targets (observed, not SLA-backed) + +- **Single-test mark (PASSED / FAILED / SKIPPED).** Sub-second UI acknowledgement (counter increments + tree icon swap) under normal load. No loading spinner surfaces. +- **Bulk status apply (Multi-Select).** UI acknowledges synchronously for typical selections; server-side completion implied by header counter update (AC-95). +- **UNCLEAR.** No formal P95/P99 targets exposed to product; tier-1 SLAs are SRE-owned and not documented in this feature scope. + +### NFR-5.2 Runs-list chart rendering + +- **Observed.** Chart renders client-side from a precomputed aggregate; no visible degradation up to the exploration dataset size (~20 runs). Behaviour on 1 000+ run projects is UNCLEAR. + +### NFR-5.3 TQL query evaluation + +- **Observed.** Sub-second for simple filters; complex `and/or` chains unbenchmarked. Autocomplete is client-side. + +### NFR-5.4 Report generation (PDF / XLSX) + +- **Mechanism.** Server-rendered download (pull model — I-8 in [11-integrations.md](./11-integrations.md)). +- **Observed latency.** Acceptable for single-Run exports; Combined Report latency at RunGroup scale is UNCLEAR. + +--- + +## NFR-6. Reliability + +### NFR-6.1 Launch atomicity + +- **Source.** UC-01 ac-delta-18. +- **Invariant.** Either the Run is created and the Runner opens, or it is not — partial creation is never observable to the user. + +### NFR-6.2 Terminal-state finality + +- **Source.** BR-7 (Finished is terminal), BR-8 (Terminated is terminal). +- **Invariant.** No transition out of Finished or Terminated back to In-Progress exists. The only re-entry path is Relaunch, which creates a **new** execution — either reusing the Run ID (AC-64) or minting a new one (AC-63). + +### NFR-6.3 Cancel paths preserve selection state where safe + +- **Runner Multi-Select × Clear-Selection.** Clears selection **but keeps Multi-Select ON** (ac-delta-11 of bulk-status-actions) — a safety-for-iteration trade-off. +- **Runner Multi-Select → dismiss Result modal.** **Clears selection** (ac-delta-7 of bulk-status-actions) — dismiss-as-cancel treats the whole action as undone. + +--- + +## NFR-7. Accessibility & usability + +### NFR-7.1 Keyboard shortcuts in Runner + +- PASSED = `Cmd+Enter` +- FAILED = `Cmd+U` +- SKIPPED = `Cmd+I` +- Hotkey hint is always visible in the execution panel. + +### NFR-7.2 Navigation shortcuts (global) + +- Left sidebar items bound to `Shift+1..9` (Tests, Requirements, Runs, Plans, Steps, Pulse, Imports, Analytics, Branches) — surface-level global chrome. + +### NFR-7.3 Screen-reader affordances + +- All icon-only buttons carry `aria-describedby` tooltips (Multi-Select, Query Language Editor, Fast Forward, Auto-Track, Create notes, priority filters, etc.). WCAG compliance level not formally attested — out of scope. + +### NFR-7.4 Destructive-action copy + +- Finish Run uses a native browser `confirm` with wording that **names the pending count** (ac-delta-9 of run-lifecycle) so the user cannot dismiss without reading the impact. +- Archive / Purge / Unarchive / Permanent Delete use app-level modals with cascade wording where applicable. + +--- + +## NFR-8. Security + +### NFR-8.1 Shared public links + +- **Defaults.** 7-day expiry + passcode **ON** (ac-delta-19 of run-detail-and-report). +- **Rationale.** Safe-by-default — expiry bounds exposure; passcode gates even short-lived leakage. +- **Owner.** Share Publicly dialog. + +### NFR-8.2 API token scope + +- **Observed.** Reporter CLI (I-2) uses project-scoped API tokens. Scope beyond project (user-level) not surfaced in this feature's UI. + +### NFR-8.3 CSRF / session + +- **Out of scope.** Platform-level; not surfaced in Manual Run flows. + +--- + +## NFR-9. Internationalisation + +- **Observed.** All UI strings are English-only at the time of this capture. No language-switcher surfaces in project context. +- **Impact on this feature.** Confirmation dialog copy (Finish Run pending-count message, cascade-archive wording) is English — tests should expect English substrings. + +--- + +## NFR-10. Observability + +### NFR-10.1 Pulse coverage + +- **Observed.** Only **"Deleted Run"** events from this feature are emitted to Pulse. No Archive, Purge, Finish, Relaunch events. +- **Gap.** Limits audit for ongoing compliance scenarios. Not a product requirement at this phase. + +### NFR-10.2 Client-side error surfacing + +- **Observed.** Toasts for success paths (create, archive, pin). Error toast for `"Title can't be blank"` — other failure modes (network drop, server 5xx) were not reproduced during exploration. + +--- + +## Summary — NFR × BR × UC + +| NFR | Related BR | Primary UC | +|---|---|---| +| NFR-1.1 (20k cap) | BR-12 | UC-08, UC-12 | +| NFR-2.1 (auto-purge) | BR-12 | UC-12 | +| NFR-2.2 (Unarchive preserves) | BR-8 | UC-12 | +| NFR-2.3 (cascade atomicity) | BR-9 | UC-08, UC-12 | +| NFR-3.1 / 3.2 (child activation) | — | UC-07 | +| NFR-3.4 (Finish idempotency) | BR-7 | UC-04 | +| NFR-4.1 (manager exclusion) | BR-6a | UC-06 | +| NFR-4.2 (readonly gating) | — | UC-10, UC-12 | +| NFR-4.3 (Edit blocked on Finished) | BR-10 | UC-04, UC-06 | +| NFR-6.1 (Launch atomicity) | — | UC-01 | +| NFR-6.2 (terminal finality) | BR-7, BR-8 | UC-04, UC-05, UC-12 | +| NFR-6.3 (cancel preserves) | BR-5 | UC-09 | +| NFR-8.1 (public link defaults) | BR-13 | UC-11 | diff --git a/skills/create-test-cases/examples/generatedDocs/13-open-questions.md b/skills/create-test-cases/examples/generatedDocs/13-open-questions.md new file mode 100644 index 0000000..6a97619 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/13-open-questions.md @@ -0,0 +1,233 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# 13 — Open Questions + +Ambiguities and unverified behaviours surfaced across Manual Tests Execution. Each entry is a concrete question with: where the uncertainty was introduced, what the current assumption is, and what resolution would look like (how to verify + who to ask). + +Sources compiled from: +- `_feature-review.md` § 7 prioritised action list (HIGH and MEDIUM items with behavioural impact). +- `@unclear` tags in per-sub-feature test files (`run-creation`, `run-lifecycle`, `tester-assignment`, `environment-configuration`, `run-groups`, `bulk-status-actions`, `runs-list-management`, `run-detail-and-report`, `archive-and-purge`, `test-execution-runner`). +- Baseline ACs explicitly marked UNCLEAR (AC-97, AC-98, AC-99, AC-100). +- Sub-feature AC-delta files with `UNCLEAR` sections. + +Resolve an OQ in situ — update the answer, link to the PR / UI recording that closes it, and move it to the [resolved archive](#resolved) at the bottom. Do not delete. + +--- + +## Role / permission matrix + +### OQ-01 — Complete role-gating for Create / Launch / Finish / Edit / Relaunch + + +**Question:** For the Tester and Readonly roles, which of the following actions are permitted: Create a Run, Launch, Finish, Edit an unfinished Run, Relaunch (any variant), Share Report (Email / Public)? +**Source:** [AC-100](../../test-cases/manual-tests-execution/_ac-baseline.md) (baseline UNCLEAR); `tester-assignment-ac-delta.md` UNCLEAR note on AC-100. +**Current assumption:** Readonly → ✗ for all write actions; Tester → ✓ for *Execute* and bulk status (for own tests), `?` elsewhere. See [02-actors-and-permissions.md § Role × Action matrix](./02-actors-and-permissions.md#role--action-matrix). +**Resolution path:** Verify in UI with a readonly-role user and with a tester-only user (non-creator) in `project-for-testing`. Record observed behaviour per action; resolve matrix cells marked `?`. + +### OQ-03 — Purge retention configuration & permanent-delete permissions + + +**Question:** Who may configure *Purge Old Runs* retention and who may permanently delete a Run from Archive? Do QA-role users have these, or are they Owner/Manager-only? +**Source:** `archive-and-purge-ac-delta.md` ac-delta-20 partially resolves Owner/Manager/Readonly but leaves QA-role unresolved; AC-79, AC-81. +**Current assumption:** Owner/Manager ✓, Readonly ✗, QA `?`. +**Resolution path:** UI verification as above. + +### OQ-04 — Readonly read-surface scope + + +**Question:** Can a Readonly user Download as Spreadsheet (AC-87), Export as PDF (AC-88), or Compare Runs (AC-92)? +**Source:** AC-87, AC-88, AC-92 use role-agnostic wording; not explicitly resolved in `archive-and-purge-ac-delta.md` ac-delta-20. +**Current assumption:** Readonly ✓ for read-only read-surface (Export / Download / Compare do not mutate state). +**Resolution path:** Try each action as Readonly; record. + +### OQ-05 — Creator "as manager" label semantics + + +**Question:** The `as manager` label attached to the creator chip in the New Manual Run sidebar (ac-delta-1 of `tester-assignment-ac-delta.md`) — is it creator-derived (every creator gets it), or project-role-derived (only project managers get it)? +**Source:** `tester-assignment-ac-delta.md` ac-delta-1 wording; [02-actors-and-permissions.md § Creator-specific semantics](./02-actors-and-permissions.md#creator-specific-semantics). +**Current assumption:** Creator-derived (label is a UI affordance for the creator, not a project-role projection). +**Resolution path:** Log in as a non-Manager role with Create permission, create a Run, inspect the chip label. + +--- + +## Mixed Run / CI + +### OQ-02 — Mixed Run CI-Profile vs local-CLI UI behaviour + + +**Question:** What exactly does the Mixed Run surface show when (a) a CI Profile exists vs (b) no CI Profile is configured, and what happens when the CI trigger fails at Launch? +**Source:** `_feature-review.md` § 7 #4 (HIGH-ish MEDIUM — AC-16 not exercised in tests); [BR-3](./07-business-rules.md#br-3) enforcement is currently speculative. +**Current assumption:** AC-16 documents the binary dichotomy; the UI is assumed to surface guidance in the no-CI-Profile case and a failure banner on trigger failure. +**Resolution path:** UI walk-through on `project-for-testing` with and without a configured CI Profile; capture the Mixed Run sidebar screenshots (out-of-scope for this POC per [01-feature-context.md](./01-feature-context.md)) and update [UC-02 E1/E2](./06-use-cases/UC-02-create-mixed-run.md#exception-flows). + +### OQ-07 — Mixed-run relaunch CI/UI routing + + +**Question:** For a Mixed Run, does *Relaunch Failed on CI* re-run only the automated failures or both the automated and manual failures (with manual failures re-opening the Manual Runner)? +**Source:** `run-lifecycle` test-file `@unclear` on `ac-delta-14` — *"No mixed runs exist in project; covered as @unclear deferred test"*. +**Current assumption:** AC-59 is explicit: failed automated tests re-run on CI; failed **manual** tests open in Manual Runner. Unverified in project due to fixture absence. +**Resolution path:** Seed a Mixed Run, let some automated + manual tests fail, invoke *Relaunch Failed on CI*, observe routing. + +### OQ-08 — "Launch a Copy Manually" variant + + +**Question:** Does a *"Launch a Copy Manually"* variant exist in addition to *Launch a Copy* (AC-67)? +**Source:** `run-lifecycle` test-file `@unclear` on `ac-delta-1` — *"variant not visible in project UI for manual runs"*. +**Current assumption:** If it exists, it is the same as *Launch a Copy* when the source is purely manual. Variant naming may be context-sensitive (only visible for Mixed / Automated sources). +**Resolution path:** Inspect row extra-menu on a Mixed Run. + +--- + +## Assignment + +### OQ-09 — "Prefer test assignee" fallback when no pre-set assignee + + +**Question:** When the *Prefer test assignee* Auto-Assign strategy encounters a test with no pre-set assignee, does the test fall back to unassigned, to the creator, or to a manager? +**Source:** `tester-assignment-ac-delta.md` ac-delta-4 UNCLEAR; `@unclear` tag on the matching deferred test. +**Current assumption:** Observed state per test — no silent fallback rule documented. +**Resolution path:** Seed a test without a pre-set assignee, launch with *Prefer* strategy, observe outcome. + +### OQ-10 — Confirmation dialog wording for removing an assigned user with recorded results + + +**Question:** Exact copy of the confirmation dialog when a user being removed from a Run has already recorded test results? +**Source:** `tester-assignment-ac-delta.md` ac-delta-6 UNCLEAR; `@unclear` deferred test. +**Current assumption:** Confirmation exists; wording is non-blocking but should be captured for UX consistency. +**Resolution path:** Trigger the scenario; capture copy verbatim. + +--- + +## State / lifecycle + +### OQ-11 — Edit availability on a Finished Run + + +**Question:** If a user attempts to edit a Finished Run, what is the exact UI response — is the Edit button hidden, disabled, or does clicking redirect to the Report? +**Source:** `run-lifecycle` test file `@unclear` on t7 ("Edit is not available on a finished run") — advisory from the lifecycle review. +**Current assumption:** Edit is gated on the *Ongoing* state (cross-cutting concern **G**) — most likely hidden or disabled. Redirect is speculative. +**Resolution path:** UI verification. + +### OQ-12 — Fast Forward vs Auto-Track + + +**Question:** Does a *Fast Forward* control exist in the Manual Runner separately from *Auto-Track*? +**Source:** [AC-97](../../test-cases/manual-tests-execution/_ac-baseline.md) (baseline UNCLEAR). +**Current assumption:** Only *Auto-Track* exists (docs only mention it); *Fast Forward* may be a removed or renamed affordance. +**Resolution path:** Inspect the Runner's time-tracking controls. + +### OQ-13 — Defects tab behaviour in Run detail + + +**Question:** What exactly is shown in the *Defects* tab inside Run detail (AC-83)? +**Source:** [AC-98](../../test-cases/manual-tests-execution/_ac-baseline.md) (baseline UNCLEAR). +**Current assumption:** Lists linked defects (Jira / GitHub issues) for tests in the Run. +**Resolution path:** Open a Run with failed tests that have linked issues; capture the tab. + +### OQ-14 — "Copy Link" affordance on Run Report extra menu + + +**Question:** Does a *Copy Link* action exist on the Run Report extra menu for non-public sharing? +**Source:** [AC-99](../../test-cases/manual-tests-execution/_ac-baseline.md) (baseline UNCLEAR); flagged `@unclear` on one `run-detail-and-report` test. +**Current assumption:** Unknown; the internal-share URL may only live in the Share dialog. +**Resolution path:** Inspect the row extra-menu on a Run Report. + +### OQ-15 — Edit-Run save toast copy + + +**Question:** Exact wording of the toast shown after saving an Edit-Run change? +**Source:** `tester-assignment-ac-delta.md` ac-delta-6 UNCLEAR (*"Run has been updated" presumed*). +**Current assumption:** "Run has been updated". +**Resolution path:** UI capture. + +--- + +## Runs list & reporting + +### OQ-16 — "Merge" action in Multi-select Extra menu — destination semantics + + +**Question:** What does the *Merge* bulk action do — pick a destination Run and append selected Runs' tests, or produce a combined report equivalent? +**Source:** `runs-list-management` `@unclear` note: *"destination / merge semantics ambiguous"*; AC-71. +**Current assumption:** Merge combines selected Runs into one container; exact output (new Run vs RunGroup promotion) unverified. +**Resolution path:** Try in UI with 2 Runs. + +### OQ-17 — Custom-status applicability in bulk status picker + + +**Question:** Does the bulk *Result message* dialog in Multi-Select mode expose the Custom Status dropdown after a standard status is chosen (AC-31 applied to bulk)? +**Source:** `bulk-status-actions` `@unclear` note: *"NOT PRESENT in the bulk 'Result message' dialog as of exploration date … may require custom statuses configured in project settings"*. +**Current assumption:** AC-31 applies to single-test result entry only; bulk may or may not carry it through. +**Resolution path:** Configure custom statuses in project; retry bulk picker. + +### OQ-18 — "One Run" multi-environment mode observability + + +**Question:** Is AC-48's *One Run* multi-environment mode observable as a distinct launch action in the current UI, or is it the implicit behaviour of a single-group Launch? +**Source:** `environment-configuration` `@unclear` on ac-delta-8. +**Current assumption:** *One Run* may have been removed, renamed, or is behind a toggle; the three-way Launch / Launch-in-Sequence / Launch-All picker may only surface with ≥2 env groups. +**Resolution path:** UI walk-through with 1 vs 2 env groups. + +### OQ-19 — 20 000-Run Purge limit surfacing + + +**Question:** Is the 20 000-Run per-Purge limit surfaced to the user (pre-check banner / disabled button) or enforced silently server-side? +**Source:** `archive-and-purge-ac-delta.md` ac-delta-U1 (UNCLEAR). +**Current assumption:** Server-side validation with an error message on violation; limit is not easily triggerable manually. +**Resolution path:** Requires seeded data (out of scope in POC). + +### OQ-20 — "Combined Report Compare To" across different RunGroups + + +**Question:** Can Combined Report's *Compare To* selector pick runs from a **different** RunGroup, or is it scoped to within-group only? +**Source:** `run-groups` Phase-3 review; one `@unclear` doc test documenting the observed within-group-only behaviour. +**Current assumption:** Within-group only (observed); full cross-group comparison withheld pending product clarification. +**Resolution path:** Product clarification — is cross-group intended? + +--- + +## Style / doc-process + +### OQ-21 — Single quotes vs backticks for UI labels in test-case prose + + +**Question:** Should the test-case corpus normalise to single-quoted UI labels (`'Launch'`) or backticked (`` `Launch` ``)? `_style.md` specifies single quotes; sub-features 5, 7, 8, 9, 10 drifted to backticks. +**Source:** `_feature-review.md` § 7 #1 (HIGH). +**Current assumption:** Single quotes are canonical per `_style.md`; drift needs to be either fixed or style guide updated. +**Resolution path:** Decision — pick one; either bulk-fix the minority convention before publish or append a "both acceptable" note to `_style.md`. This affects test-case files, **not** docs in this tree. + +### OQ-22 — run-groups ac-delta-18 / ac-delta-19 coverage + + +**Question:** Are `run-groups-ac-delta.md` ac-delta-18 and ac-delta-19 rollup/catalog-only deltas, or genuine behavioural gaps that need tests? +**Source:** `_feature-review.md` § 7 #2 (HIGH). +**Current assumption:** Unknown — `_feature-review.md` flags both deltas as uncited. +**Resolution path:** Re-read the two deltas; confirm whether they are behavioural or meta. + +### OQ-23 — Concern B dedicated cross-cutting test for run-detail-and-report + + +**Question:** run-detail-and-report (#8) lacks a dedicated multi-user (Concern B) test. +**Source:** `_feature-review.md` § 7 #3 (MEDIUM); ADV-4 in `tester-assignment-review.md`. +**Current assumption:** Assignee filter and grouping are exercised via AC-85 tests, but a pure multi-user scenario is not isolated. +**Resolution path:** Add 1 test in `run-detail-and-report/cross-cutting.md` exercising per-assignee grouping on a multi-assignee Run. + +### OQ-24 — "Extra menu" step phrasing drift + + +**Question:** The registered Testomat.io step phrase is `Click the '...' extra menu`; 30+ test steps in `archive-and-purge` / `run-lifecycle` use `Open the extra menu on the {row} row` instead. +**Source:** `_feature-review.md` § 5 (step drift — LOW). +**Current assumption:** Semantically equivalent; low priority; only matters at publish time if step library reuse is required. +**Resolution path:** Decide at publish whether to rewrite or accept the drift. + +--- + +## Resolved + + +*(empty — no questions resolved yet in Phase 1)* diff --git a/skills/create-test-cases/examples/generatedDocs/CONTRIBUTING.md b/skills/create-test-cases/examples/generatedDocs/CONTRIBUTING.md new file mode 100644 index 0000000..004bfaf --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/CONTRIBUTING.md @@ -0,0 +1,109 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# Contributing to Manual Tests Execution docs + +Short operating rules for adding / editing content in `docs/product/manual-tests-execution/`. Keep this page small — conventions, not prose. + +## 1. What goes where + +| Content type | Location | +|---|---| +| New Use Case | `06-use-cases/UC-NN-short-verb-object.md` (from `templates/use-case-template.md`) | +| New Business Rule | New H2 `## BR-NN:` section inside `07-business-rules.md` (never a separate file) | +| New Architectural Decision | `decisions/ADR-NNN-kebab-title.md` (from `templates/adr-template.md`) — only when the choice is non-obvious and needs justification | +| New top-level chapter | Numeric-prefixed `NN-kebab-title.md` at feature root | +| Cross-cutting term | Entry in `03-glossary.md` (anchor-linkable) | +| Open question / contradiction | Entry in `13-open-questions.md` | + +## 2. File naming + +- kebab-case everywhere. +- Top-level chapters use a numeric prefix: `01-…`, `02-…`, `05-…`. +- UC files: `UC-NN-short-verb-object.md` (e.g. `UC-01-create-manual-run.md`). +- ADRs: `ADR-NNN-kebab-title.md` (zero-padded 3 digits). + +## 3. Frontmatter (every top-level doc) + +```yaml +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: YYYY-MM-DD +owner: "@gololdf1sh" +--- +``` + +Update `last-reviewed` whenever the doc is revalidated against source ACs. + +## 4. Cross-reference pattern + +- First mention of a domain term links to glossary: + `[RunGroup](./03-glossary.md#rungroup)` +- Link to an AC: + `[AC-23](../../test-cases/manual-tests-execution/_ac-baseline.md#run-lifecycle)` (use the closest section heading anchor) +- Link between UCs: + `[UC-03](./UC-03-finish-run.md)` +- Link to a BR: + `[BR-2](./07-business-rules.md#br-2)` + +Links are relative — never absolute `/Users/...` paths. + +## 5. Mermaid conventions + +- Fence with `` ```mermaid ``. +- One diagram per fenced block. +- Use `stateDiagram-v2` for state machines, `sequenceDiagram` for flows, `erDiagram` for the data model. +- Descriptive node IDs (`InProgress`, not `S2`). +- Label transitions with the triggering action (`Launch`, `Finish`, `Archive`, `Purge`, `Unarchive`, `Relaunch`). +- PlantUML is reserved for diagrams Mermaid cannot render. Prefer Mermaid. + +## 6. Style + +- Short sections beat walls of text. Prefer tables when structure fits. +- Audience is technical — no executive-summary or FAQ layers. +- No QA-internal tags (`@unclear`, `@boundary`, `@needs-project-setting`) at doc-level headings; OK inside traceability tables or explicit open-question entries. +- No screenshots in POC. Mermaid + text only. +- English throughout, regardless of commit-message language. + +## 7. How to add a Use Case + +1. Copy `templates/use-case-template.md` to `06-use-cases/UC-NN-...md`. +2. Fill scenario from the governing ACs (`_ac-baseline.md` + relevant `*-ac-delta.md`). +3. Under **Business rules referenced**, list BR-IDs. If a referenced BR does not exist yet, add it to `07-business-rules.md` in the same change. +4. Under **Functional requirements covered**, cite AC IDs verbatim (`AC-9`, `ac-delta-11`). +5. Add the UC to the index in `06-use-cases/README.md` and its dependency graph. +6. Regenerate `_generated/traceability-matrix.md` (Phase 1+: `scripts/gen-traceability.ts`). + +## 8. How to add a Business Rule + +1. Append a new `## BR-NN: Rule name` section in `07-business-rules.md`. +2. Use the format from `templates/business-rule-template.md`. +3. Cite the AC(s) the rule is derived from under **Derived from:**. +4. Update `Referenced by:` in adjacent BRs if the new rule cross-references them. + +## 9. Source-of-truth rules + +- Behavioral source of truth: `test-cases/manual-tests-execution/_ac-baseline.md` + per-sub `*-ac-delta.md`. +- Test coverage source of truth: `` frontmatter inside per-sub test files. +- Docs are derivative — never contradict the ACs silently. If a contradiction surfaces, add an entry to `13-open-questions.md` and link the conflicting ACs. + +## 10. Review cadence + +- `last-reviewed` in frontmatter is updated on every verified pass (not on every typo fix). +- After a sub-feature's test-cases batch changes, re-verify the docs that reference it and bump `last-reviewed`. + +## 11. Branching + +Branch-per-phase discipline (from the execution plan): +- `docs/manual-runs-phase-0` — foundation (this phase). +- `docs/manual-runs-phase-1` — pilot UCs. +- `docs/manual-runs-phase-2` — scale. + +Never commit docs directly to `main`. Never push externally without explicit user approval. + +> **Note (POC):** this repo currently git-ignores `docs/` for the POC window, so local-only iteration is expected. When the directory is un-ignored, the branch rules above become binding. diff --git a/skills/create-test-cases/examples/generatedDocs/README.md b/skills/create-test-cases/examples/generatedDocs/README.md new file mode 100644 index 0000000..37b98d3 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/README.md @@ -0,0 +1,88 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-reviewed: 2026-04-21 +owner: "@gololdf1sh" +--- + +# Manual Tests Execution — internal docs + +Internal BA-style documentation for Testomat.io's **Manual Tests Execution** feature. Single source of truth for QA + Dev covering feature context, actors, state, use cases, business rules, and invariants — not just *what to test*, but *what the product must do and why*. + +> **Audience:** QA + Dev only. Not for Support / PM / CTO in this POC. +> **Language:** English throughout. +> **Status:** Phase 2 (Scale) — drafted. UC-01..UC-12 + BR-1..BR-13 authored; cross-cutting artefacts (`04-data-model`, `08-functional-requirements`, `09-process-flows`, `10-ui-catalog`, `11-integrations`, `12-non-functional`) complete; traceability regenerated. Awaiting Phase 2 review gate. + +## Feature scope at a glance + +- **Entry point under test:** https://app.testomat.io/projects/project-for-testing/runs/new +- **Covers 10 sub-features:** run-creation, test-execution-runner, tester-assignment, environment-configuration, run-groups, run-lifecycle, runs-list-management, run-detail-and-report, archive-and-purge, bulk-status-actions. +- **Full sub-feature map:** see [destructuring.md](../../../test-cases/manual-tests-execution/destructuring.md). + +## QA — start here + +Read in this order: + +1. [01-feature-context.md](./01-feature-context.md) — what the feature is and what's out of scope. +2. [02-actors-and-permissions.md](./02-actors-and-permissions.md) — role × action matrix (who can Launch, Finish, Archive, Purge, Assign…). +3. [05-state-diagrams.md](./05-state-diagrams.md) — Run / RunGroup / Test-in-Run state transitions. +4. [03-glossary.md](./03-glossary.md) — domain vocabulary. +5. **Phase 1+:** [07-business-rules.md](./07-business-rules.md) — invariants you should use as an edge-case generator during exploratory testing. +6. **Phase 1+:** [13-open-questions.md](./13-open-questions.md) — every `@unclear` and behavioural ambiguity tracked in one place. +7. **Phase 1+:** [_generated/traceability-matrix.md](./_generated/traceability-matrix.md) — AC → UC → Test mapping. Answers "which tests cover BR-N?" + +## Dev — start here + +Read in this order: + +1. [01-feature-context.md](./01-feature-context.md) — business goal + decomposition reasoning. +2. [05-state-diagrams.md](./05-state-diagrams.md) — state machines you'll be implementing guards against. +3. **Phase 2:** [04-data-model.md](./04-data-model.md) — ER diagram of Run / RunGroup / Test / Tester / Environment / Plan / Label / CustomStatus. +4. **Phase 1+:** [06-use-cases/README.md](./06-use-cases/README.md) — UC index + dependency graph. +5. **Phase 1+:** [07-business-rules.md](./07-business-rules.md) — invariants the UI must enforce. +6. **Phase 2:** [09-process-flows.md](./09-process-flows.md) — sequence diagrams for Launch → Execute → Finish → Relaunch, Archive cascade, Multi-env Launch-in-Sequence. +7. **Phase 2:** [11-integrations.md](./11-integrations.md) — CI Profile payload, `@testomatio/reporter` CLI, TQL grammar. +8. [decisions/](./decisions/) — ADRs for non-obvious design decisions. + +## Directory map + +``` +docs/product/manual-tests-execution/ +├── README.md # this file +├── CONTRIBUTING.md # how to add UC/BR/ADR + mermaid conventions +├── 01-feature-context.md # goal, scope, out-of-scope +├── 02-actors-and-permissions.md # role × action matrix +├── 03-glossary.md # domain terms with AC anchor refs +├── 04-data-model.md # ER diagram + entity cards [Phase 2] +├── 05-state-diagrams.md # Run / RunGroup / Test states +├── 06-use-cases/ [Phase 1+] +│ ├── README.md # UC index + dependency graph +│ └── UC-NN-*.md +├── 07-business-rules.md # BR-N invariants [Phase 1+] +├── 08-functional-requirements.md # FRs regrouped from ACs [Phase 2] +├── 09-process-flows.md # sequence diagrams [Phase 2] +├── 10-ui-catalog.md # navigation + purpose map [Phase 2] +├── 11-integrations.md # CI Profile, CLI reporter, TQL [Phase 2] +├── 12-non-functional.md # limits, retention, permissions [Phase 2] +├── 13-open-questions.md # compiled from @unclear + review [Phase 1] +├── decisions/ # ADR-light +├── _generated/traceability-matrix.md # FR ↔ UC ↔ Test (auto) [Phase 1] +├── scripts/gen-traceability.ts # parser + generator [Phase 1] +└── templates/ + ├── use-case-template.md + ├── business-rule-template.md + └── adr-template.md +``` + +## Source materials (authoritative behaviour spec) + +Docs in this tree never duplicate the source materials — they reference them: + +- [_ac-baseline.md](../../../test-cases/manual-tests-execution/_ac-baseline.md) — 100 baseline ACs. +- [destructuring.md](../../../test-cases/manual-tests-execution/destructuring.md) — 10 sub-features + cross-cutting concerns A–H. +- [_shared-ui.md](../../../test-cases/manual-tests-execution/_shared-ui.md) + per-sub `*-ui-delta.md` — UI element catalogs. +- [_feature-review.md](../../../test-cases/manual-tests-execution/_feature-review.md) — cross-sub audit (source for open questions). +- Per-sub `*-ac-delta.md` — 171 additional sub-feature-specific ACs. +- Per-sub test files under `test-cases/manual-tests-execution/*/` — 361 tests with `` frontmatter. + +See [CONTRIBUTING.md](./CONTRIBUTING.md) for file conventions, Mermaid style, and how to add a UC / BR / ADR. diff --git a/skills/create-test-cases/examples/generatedDocs/_generated/traceability-matrix.md b/skills/create-test-cases/examples/generatedDocs/_generated/traceability-matrix.md new file mode 100644 index 0000000..4e0a734 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/_generated/traceability-matrix.md @@ -0,0 +1,317 @@ +--- +audience: qa-team, dev-team +feature: manual-tests-execution +last-generated: 2026-04-21T08:34:52.273Z +owner: "@gololdf1sh" +generator: docs/product/manual-tests-execution/scripts/gen-traceability.ts +--- + +# Traceability Matrix — Manual Tests Execution + +> **Do not edit by hand.** Regenerate via `npx tsx docs/product/manual-tests-execution/scripts/gen-traceability.ts`. + +## Summary + +- **Tests scanned:** 361 +- **Unique ACs cited:** 97 +- **Unique ac-delta IDs cited:** 169 +- **UCs with sources:** 12 + +## UC ↔ Tests + +| UC | Title | Primary actor | Sub-feature | Sources | Tests | +|---|---|---|---|---|---| +| [UC-01](../06-use-cases/UC-01-create-manual-run.md) | Create a Manual Run — QA Creator | QA Creator | run-creation | AC-1, AC-2, AC-3, AC-4, AC-5, AC-6, AC-7, AC-8, … | 57 | +| [UC-02](../06-use-cases/UC-02-create-mixed-run.md) | Create a Mixed Run — QA Creator | QA Creator | run-creation | AC-13, AC-15, AC-16, AC-17, AC-18, AC-68, run-creation/ac-delta-1 | 11 | +| [UC-03](../06-use-cases/UC-03-execute-test-in-runner.md) | Execute a test in the Manual Runner — Tester | Tester | test-execution-runner | AC-29, AC-30, AC-31, AC-32, AC-33, AC-34, AC-35, AC-36, … | 42 | +| [UC-04](../06-use-cases/UC-04-finish-run.md) | Finish a Run — QA Creator / Tester | QA Creator (also performed by Tester who holds Execute permission). | run-lifecycle | AC-23, AC-24, AC-25, AC-26, AC-27, AC-28, run-lifecycle/ac-delta-3, run-lifecycle/ac-delta-4, … | 19 | +| [UC-05](../06-use-cases/UC-05-relaunch-run.md) | Relaunch a Run — QA Creator | QA Creator | run-lifecycle | AC-58, AC-59, AC-60, AC-61, AC-62, AC-63, AC-64, AC-65, … | 18 | +| [UC-06](../06-use-cases/UC-06-assign-testers.md) | Assign testers to a Run, a suite, or a test — QA Creator | QA Creator (also performed by Manager / Owner; Tester holds only read affordances on the assignee chip — see [02-actors-and-permissions.md](../02-actors-and-permissions.md#role--action-matrix)). | tester-assignment | AC-37, AC-38, AC-39, AC-40, AC-41, AC-42, AC-43, AC-66, … | 39 | +| [UC-07](../06-use-cases/UC-07-configure-environments.md) | Configure environments for a Run — QA Creator | QA Creator | environment-configuration | AC-45, AC-46, AC-47, AC-48, AC-49, AC-50, environment-configuration/ac-delta-1, environment-configuration/ac-delta-2, … | 26 | +| [UC-08](../06-use-cases/UC-08-manage-rungroup.md) | Create and manage a RunGroup — QA Creator | QA Creator | run-groups | AC-13, AC-14, AC-51, AC-52, AC-53, AC-54, AC-55, AC-56, … | 43 | +| [UC-09](../06-use-cases/UC-09-bulk-status-in-runner.md) | Apply bulk status in the Manual Runner — Tester | Tester | bulk-status-actions | AC-29, AC-30, AC-31, AC-66, AC-93, AC-94, AC-95, bulk-status-actions/ac-delta-1, … | 23 | +| [UC-10](../06-use-cases/UC-10-manage-runs-list.md) | Manage the Runs list — QA Creator | QA Creator | runs-list-management | AC-52, AC-68, AC-69, AC-70, AC-71, AC-72, AC-73, AC-74, … | 63 | +| [UC-11](../06-use-cases/UC-11-view-run-report.md) | View a Run detail and Report — QA Creator | QA Creator (also performed by Manager / Owner / Tester; Readonly has view-only access). | run-detail-and-report | AC-82, AC-83, AC-84, AC-85, AC-86, AC-87, AC-88, AC-89, … | 63 | +| [UC-12](../06-use-cases/UC-12-archive-unarchive-purge.md) | Archive, unarchive, and purge a Run or RunGroup — QA Creator | QA Creator (Manager / Owner may perform all actions; Readonly is blocked on destructive variants per [BR-11](../07-business-rules.md#br-11)). | archive-and-purge | AC-56, AC-57, AC-69, AC-71, AC-75, AC-76, AC-77, AC-78, … | 63 | + +## AC ↔ Tests + +| AC | Tests | Sub-feature(s) | +|---|---|---| +| AC-1 | [Open New Manual Run sidebar and verify form chrome renders](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Clicking the Manual Run split-button left part navigates to the creation URL](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation | +| AC-2 | ["All tests" is the default scope and Launch creates a run with every manual test](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Scope tabs are mutually exclusive — switching clears previously selected tests](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-3 | ["All tests" is the default scope and Launch creates a run with every manual test](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-4 | [Test plan — selecting multiple plans unions their tests into the run](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Test plan tab empty state shows "No test plans found" when none exist](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-5 | [Select tests — browse tree, search, toggle tests, and Launch creates run with the picked subset](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Launching Select tests scope with zero tests selected](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Select tests search with a zero-match query shows empty state](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Selected-tests counter decrements back to 0 when a selected test is unticked](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-6 | [Without tests — Launch creates an empty run and navigates to the runner shell](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-7 | [Open New Manual Run sidebar and verify form chrome renders](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Title input enforces the 255-character maximum](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [Blank title auto-generates a default title on Launch](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [Whitespace-only description is stored as blank](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · ["Run as checklist" toggle is OFF by default and can be enabled](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [RunGroup dropdown lists "Without rungroup" plus existing named groups](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) _(+ 4 more)_ | run-creation | +| AC-8 | [Launch creates a run and navigates to the Manual Runner with the first test pre-opened](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) · [Save creates a pending run that can be resumed via Continue](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) · [Double-clicking Launch creates only a single run](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | run-creation | +| AC-9 | [Required-RunGroup setting blocks Launch when the field is empty](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | run-creation | +| AC-10 | ["Run Automated as Manual" toggle is actionable only in Select tests tab](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | run-creation | +| AC-11 | [From Tests page, single-test "Add to Run" lists only unfinished runs as destinations](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | run-creation | +| AC-12 | [From Tests page, suite extra menu → 'Run Tests' pre-populates creation in Select tests tab](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) · [From Tests page Multi-select, 'Run Tests' pre-populates creation with the union of selected items](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) · [Multi-select bar 'Run Tests' is disabled when zero items are selected](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | run-creation | +| AC-13 | [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Arrow-dropdown closes on outside click without selecting any item](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Create a new RunGroup via the New group dialog](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) · [Dismissing the New RunGroup panel via ${dismiss_method} does not create a group](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | run-creation, run-groups | +| AC-14 | [Create a new RunGroup via the New group dialog](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) · [New RunGroup panel blocks save with an empty Name](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) · [Creating a group with Merge Strategy ${strategy} persists the choice](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) · [Creating a group with Group Type ${type} persists the choice](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | run-groups | +| AC-15 | [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation | +| AC-17 | [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation | +| AC-18 | [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | run-creation | +| AC-19 | [Select tests — browse tree, search, toggle tests, and Launch creates run with the picked subset](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Select tests search with a zero-match query shows empty state](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-20 | [Select tests — browse tree, search, toggle tests, and Launch creates run with the picked subset](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Selected-tests counter decrements back to 0 when a selected test is unticked](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-21 | [Test plan — selecting multiple plans unions their tests into the run](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Test plan tab empty state shows "No test plans found" when none exist](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | run-creation | +| AC-22 | [Archiving a Without-tests run succeeds with zero-test counts](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) · [Without tests — Launch creates an empty run and navigates to the runner shell](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | archive-and-purge, run-creation | +| AC-23 | [Launch creates a run and navigates to the Manual Runner with the first test pre-opened](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) · [Double-clicking Launch creates only a single run](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) · ["All tests" is the default scope and Launch creates a run with every manual test](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Launching a new run transitions it to the in-progress state and opens the runner](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) · [Launching a previously saved Pending run transitions it to in-progress on first entry](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | run-creation, run-lifecycle | +| AC-24 | [Continue from the Run Detail panel resumes an unfinished run in the Manual Runner](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) · [Resume an unfinished run from the Runs list row extra menu via the 'Launch' item](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | run-lifecycle | +| AC-25 | [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) · [Finish Run confirms and terminates the run, marking Pending tests as Skipped](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) · [Finish Run when every test already has a result still surfaces the confirmation with count 0](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | run-lifecycle | +| AC-26 | [Finish Run confirms and terminates the run, marking Pending tests as Skipped](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | run-lifecycle | +| AC-27 | [Editing ${field} on an ongoing run via Save persists the change](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) · [Adding and removing testers on an ongoing run via Edit Run persists the assignee set](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) · [Appending tests via the `+ Tests` tab on an ongoing run adds them as Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) · [Appending a plan via the `+ Plans` tab on an ongoing run adds the plan's tests as Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) · [Removing a test from an ongoing run via the row trash icon persists the removal](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) · [Edit is not available on a finished run](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) _(+ 1 more)_ | run-lifecycle | +| AC-28 | [Finish Run confirms and terminates the run, marking Pending tests as Skipped](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) · [Cancelling the Finish Run confirmation leaves the run ongoing](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) · [Finish Run when every test already has a result still surfaces the confirmation with count 0](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | run-lifecycle | +| AC-29 | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Bulk quick-set ${status} via the toolbar with native confirm Accept applies the status](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Apply standard status ${status} to a pending test](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Switching status from Passed to Failed updates the header counters accordingly](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | bulk-status-actions, test-execution-runner | +| AC-30 | [Bulk apply with a message persists the status and the message together](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) · [Result message is editable only after a standard status is selected](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Result message persists after navigating to another test and back](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Switching status from Passed to Failed updates the header counters accordingly](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | bulk-status-actions, test-execution-runner | +| AC-31 | [Custom status dropdown appears in the bulk Result Message modal when custom statuses exist](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Custom sub-status counter impact is visible in the runner header (cross-cut E)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) · [Custom sub-status dropdown is disabled before a standard status is chosen](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Applying a custom sub-status to ${standard_status} keeps the standard status selected](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | bulk-status-actions, test-execution-runner | +| AC-32 | [Add an attachment via the 'browse' file picker](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) · [Add an attachment via drag-and-drop onto the drop zone](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) · [Change attachment display layout to ${view_mode}](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | test-execution-runner | +| AC-33 | [Open an attachment preview in ${preview_mode} and close back to the runner](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | test-execution-runner | +| AC-34 | [Deleting the last attachment with 'Confirm' restores the empty drop zone](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) · [Cancelling the 'Are you sure?' dialog keeps the attachment](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | test-execution-runner | +| AC-35 | [Step-by-step click gesture ${click_count} sets the step to ${target_status}](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) · [Step left unmarked remains Pending when other steps of the same test are marked](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) | test-execution-runner | +| AC-36 | [Step markings persist after closing and re-opening the test](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) · [Step left unmarked remains Pending when other steps of the same test are marked](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) | test-execution-runner | +| AC-37 | [Assignee section shows the creator with "as manager" label by default](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [Opening the New Manual Run sidebar shows the creator as manager with the Assign more users entry point](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Creator manager chip has no remove control and cannot be cleared from the sidebar](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Manager chip on Edit Run cannot be removed by any control](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Save on Edit Run with all non-managers removed keeps the run with the manager only](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | run-creation, tester-assignment | +| AC-38 | [Create a run with multiple testers assigned via "Assign more users"](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Cancelling the Assign more users panel reverts the assignee section to creator-only](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Adding the first user reveals Auto-Assign selector and propagates the assignee on Launch](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Add a user via ${add_method} to the Assign users multi-select](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Concern B — multi-user assignment propagates from creation through runner to runs list](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) · [Adding a user on Edit Run propagates to the ongoing runner Assign to dropdowns](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) _(+ 1 more)_ | run-creation, tester-assignment | +| AC-39 | [Auto-Assign defaults to None and leaves all tests unassigned after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Auto-Assign strategy ${strategy} produces ${expected_distribution} after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Prefer test assignee fallback for tests without a pre-set assignee is recorded](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Randomly distribute with a single non-manager user assigns every test to that user](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Concern B — multi-user assignment propagates from creation through runner to runs list](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) | tester-assignment | +| AC-40 | [Auto-Assign strategy ${strategy} produces ${expected_distribution} after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Randomly distribute with only a manager attached leaves every test unassigned](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Concern B — multi-user assignment propagates from creation through runner to runs list](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) | tester-assignment | +| AC-41 | [Adding a user on Edit Run propagates to the ongoing runner Assign to dropdowns](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Suite Assign to dropdown lists Unassigned and run-assigned users only](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Suite Assign to dropdown excludes non-run project members](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Detail-panel Assignee dropdown lists only run-assigned users plus Unassigned](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | tester-assignment | +| AC-42 | [Concern B × permissions — a qa-role run-assignee can use Assign to controls end-to-end](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) · [Suite Assign to dropdown lists Unassigned and run-assigned users only](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | tester-assignment | +| AC-43 | [Concern H × F — bulk Assign to in runner respects the active filter](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) · [Concern B × permissions — a qa-role run-assignee can use Assign to controls end-to-end](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) · [Multi-Select bulk Assign to applies to every selected test after OK on the native confirm](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Multi-Select bulk Assign to → Cancel on the native confirm leaves tests unchanged](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Multi-Select bulk Assign to with exactly one test selected still applies the assignment](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Multi-Select bulk Assign to with zero tests selected does not open a confirm](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | tester-assignment | +| AC-45 | [Select multiple environments in a single group and commit them](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [Open Multi-Environment Configuration modal from the sidebar](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) · [Save one-group env selection commits it to the sidebar](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) · [Create a run with two environment groups configured at creation time](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Adding and removing an environment slot leaves only the initial slot](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Cancelling the Environment modal preserves the sidebar state without assigning env](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | environment-configuration, run-creation | +| AC-46 | [Select multiple environments in a single group and commit them](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [Save one-group env selection commits it to the sidebar](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | environment-configuration | +| AC-47 | [Add a second env group via `Add Environment`](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [`Cancel` after adding a new env group discards the pending group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [Adding and removing an environment slot leaves only the initial slot](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) | environment-configuration, run-creation | +| AC-48 | [`One Run` single-run multi-environment mode — documented gap](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) · [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | environment-configuration, run-lifecycle | +| AC-49 | [Launch in Sequence creates a RunGroup with sequential env-labeled child runs](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) · [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | environment-configuration, run-lifecycle | +| AC-50 | [Launch All creates a RunGroup with parallel env-labeled child runs](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) · [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | environment-configuration, run-lifecycle | +| AC-51 | [Opening creation from a RunGroup page pre-populates the RunGroup field](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Add Manual Run from inside a RunGroup pre-populates the RunGroup field](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | run-creation, run-groups | +| AC-52 | [Move an existing Run into a RunGroup via the row extra menu](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) · [RunGroup in the Groups tab expands in place to reveal child runs](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Moving a run to ${destination} via the Move dialog relocates the row](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Cancelling the Move dialog leaves the run in place](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Move dialog in a project with no RunGroups shows Root as the only destination](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | run-groups, runs-list-management | +| AC-53 | [Add Existing Run(s) to a RunGroup via the group extra menu](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) · [Copy RunGroup with default toggle selection creates a duplicate with Nested structure and Labels only](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | run-groups | +| AC-54 | [RunGroup detail panel on an empty group shows header, empty-state, and action buttons](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) · [Combined Report shows Overview, Summary totals, and the Main Run anchor with within-group Compare To](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | run-groups | +| AC-55 | [Per-group Runs list column customisation persists independently of the global list](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | run-groups | +| AC-56 | [Archive a RunGroup cascades to every nested run](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) · [Unarchive a RunGroup from Groups Archive restores all nested runs](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) · [Cancelling the RunGroup archive confirmation leaves the group and nested runs untouched](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) · [Archive a RunGroup cascades to all nested runs](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) · [Unarchive a RunGroup from Groups Archive restores all nested runs](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) · [Cancelling the archive confirmation dialog leaves the group untouched](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | archive-and-purge, run-groups | +| AC-57 | [Purge an archived RunGroup deletes the group and moves nested runs to Runs Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) · [Purging a RunGroup with more than 20 000 runs is blocked](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) · [Purge a RunGroup cascades with a Purged badge](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) · [Cancelling the purge confirmation leaves the group and nested runs on the active list](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) | archive-and-purge, run-groups | +| AC-58 | [Relaunching a finished manual run re-opens the same Run ID in the Manual Runner](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Row extra-menu on ${run_state} runs exposes only ${available_items} lifecycle actions](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle | +| AC-59 | [CI-routing Relaunch variants via ${variant} appear on finished ${run_type} runs](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Relaunch ${variant} on a finished ${run_type} run routes ${routing}](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle | +| AC-60 | [CI-routing Relaunch variants via ${variant} appear on finished ${run_type} runs](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Relaunch ${variant} on a finished ${run_type} run routes ${routing}](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle | +| AC-61 | [CI-routing Relaunch variants via ${variant} appear on finished ${run_type} runs](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Relaunch ${variant} on a finished ${run_type} run routes ${routing}](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle | +| AC-62 | [Advanced Relaunch with a custom Title and per-test selection relaunches only the chosen tests](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) · [Cancelling the Advanced Relaunch sidebar leaves the source run unchanged](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | run-lifecycle | +| AC-63 | [Advanced Relaunch with 'Create new run' ON creates a new Run ID inheriting the source metadata](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) · ['Keep values' ${keep_values_state} with 'Create new run' ON ${expected_outcome}](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | run-lifecycle | +| AC-64 | [Advanced Relaunch with 'Create new run' OFF reuses the original Run ID and resets selected tests to Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | run-lifecycle | +| AC-65 | ['Keep values' ${keep_values_state} with 'Create new run' ON ${expected_outcome}](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | run-lifecycle | +| AC-66 | [Suite-level checkbox with a status filter active selects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) · [Bulk Result Message apply with a status filter active affects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) · ['Select all' inside Advanced Relaunch respects an active status filter](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | bulk-status-actions, run-lifecycle | +| AC-67 | [Launch a Copy of a finished run creates a duplicate run with a new Run ID](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Row extra-menu on ${run_state} runs exposes only ${available_items} lifecycle actions](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | run-lifecycle | +| AC-68 | [Multi-environment runs render with environment indicators in the Runs list](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [RunGroup in the Groups tab expands in place to reveal child runs](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Switch to the ${tab} filter tab scopes the list to matching runs](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Switching to the Unfinished tab in a project with no unfinished runs shows an empty state](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Switching to the Groups tab in a project with no RunGroups shows an empty state](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | runs-list-management | +| AC-69 | [Archive a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Purge a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Expand-all toolbar button expands and collapses every visible RunGroup row](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) · [Row extra menu exposes the ${state}-specific action set](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Move to Archive via row extra menu removes the run from the active list](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Purge via row extra menu removes the run and shows the deletion toast](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | archive-and-purge, runs-list-management | +| AC-70 | [${pin_action} a RunGroup via the extra menu moves it to ${destination_region}](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) · [Pin then Unpin a run cycles the indicator and repositions the row](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Pinning a RunGroup repositions the group to the top of the Groups tab](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | run-groups, runs-list-management | +| AC-71 | [Bulk archive multiple runs via Multi-select](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Bulk purge multiple runs via Multi-select "Delete" action](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Select All link bulk-archives every run on the current page](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Bulk Archive button is disabled when no runs are selected](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Bulk multi-select archive applies across every selected run end to end](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Toggling Multi-select on and off shows and hides the row checkboxes and bottom toolbar](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) _(+ 8 more)_ | archive-and-purge, runs-list-management | +| AC-72 | [TQL has_custom_status filters the list to runs that recorded a custom status](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Query Language Editor opens with Apply always enabled and Cancel always enabled](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) · [Save button remains disabled until a non-empty query is typed](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) · [Applying a valid query filters the list and reflects the filter in the URL](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) · [Invalid query surfaces an error without filtering the list](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) · [Examples tab lists three preset queries that can be inserted into the editor](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) _(+ 4 more)_ | runs-list-management | +| AC-73 | [Copying the Runs URL reproduces the active filter in a new session](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Opening the Runs page with a malformed filterParam falls back to the unfiltered list](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Applying a valid query filters the list and reflects the filter in the URL](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) | runs-list-management | +| AC-74 | [Hyphenation toggle in Runs list settings wraps long column values](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) · [Multi-environment runs render with environment indicators in the Runs list](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Toggle Default view and Custom view switches list layout and button label](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Settings gear is enabled only in Custom view](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Hiding a column in Custom view Settings persists across reload](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Changing a column width in Custom view Settings persists across reload](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | runs-list-management | +| AC-75 | [Archive a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Cancelling the archive confirmation keeps the run active](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Archiving a finished run preserves every test status](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) · [Archiving a Without-tests run succeeds with zero-test counts](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | archive-and-purge | +| AC-76 | [Archiving a finished run preserves every test status](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) · [Archiving an ongoing run terminates it and converts Pending tests to Skipped](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | archive-and-purge | +| AC-77 | [Navigate to Runs Archive via ${entry_point}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) · [Archive entry links at the bottom of the Runs page navigate to ${archive_page}](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | archive-and-purge, runs-list-management | +| AC-78 | [Purge a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Cancelling the purge confirmation keeps the run active](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Purged run preserves statuses, attachments, and custom statuses but removes stack traces](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | archive-and-purge | +| AC-79 | [Configure retention to a positive number of days persists across reloads](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) · [Default retention is 90 days when the project has no saved value](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) · [Automatic purge runs on a daily cadence after the retention period](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | archive-and-purge | +| AC-80 | [Archiving an ongoing run terminates it and converts Pending tests to Skipped](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) · [Purging an ongoing run terminates it and preserves recorded statuses](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) · [A restored Terminated run cannot be resumed](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | archive-and-purge | +| AC-81 | [Permanently delete a single run from the Archive via irreversible confirmation](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) · [Cancelling the permanent-delete confirmation keeps the run in the Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) · [Bulk permanent delete from Runs Archive Multi-select](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) · [Pulse records a Deleted Run event after permanent deletion](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | archive-and-purge | +| AC-82 | [Open a finished run from the Runs list lands on Run Detail with Tests tab active](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Close the Run Detail panel returns to the Runs list](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Navigate to a non-existent run id shows a not-found state](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Open the Report page shows the test list alongside the Summary and Overview panel](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Test rows are grouped by suite with status, title, and duration metadata](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | run-detail-and-report | +| AC-83 | [Switch to the ${tab} tab reveals its dedicated content area](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Switching tabs preserves the active test selection and applied filters](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Statistics tab groups counts under Suites, Tags, Labels, Assignees, Priorities, Custom Statuses](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | run-detail-and-report | +| AC-84 | [Click a test row opens the sub-panel with the row visibly highlighted](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Sub-panel exposes Summary, Description, Code template, and Runs tabs](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Summary tab shows the last execution status, message, and step results](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Description tab renders the test description and is read-only in run context](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Code template tab shows the test's code template with a copy control](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Runs tab lists the test's prior runs and links back to each run's report](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) _(+ 1 more)_ | run-detail-and-report | +| AC-85 | [Sort the test list by ${sort_dimension} reorders rows accordingly](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Search in the Tests tab filters rows by title or result message in real time](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Status filter button ${status} narrows the list to matching tests](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Combining Passed and Failed filters shows tests in either status](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Filter by Assignee on a multi-assignee run shows only tests for that assignee](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Filter by Custom Status on a run with custom statuses narrows the list to matching tests](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) _(+ 1 more)_ | run-detail-and-report | +| AC-86 | [Open the Report page shows the test list alongside the Summary and Overview panel](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Switch the Overview grouping to ${grouping} rebuckets the list without reloading](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Overview grouping by Assignees buckets tests under each tester on a multi-assignee run](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Keyboard shortcuts reference modal opens from the report page](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Overview grouping by a dimension with no matching data renders a neutral empty bucket list](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Keyboard navigation ↑ and ↓ moves selection between test rows and Esc closes the sub-panel](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | run-detail-and-report | +| AC-87 | [Extra menu Download as Spreadsheet triggers an XLSX download](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Extra dropdown shows ${extra_items} at ${selection_size}](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | run-detail-and-report, runs-list-management | +| AC-88 | [Extra menu Export as PDF triggers a PDF download of the current report view](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Row extra menu exposes the ${state}-specific action set](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | run-detail-and-report, runs-list-management | +| AC-89 | [Share report by Email accepts comma-separated emails and rejects invalid format](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Share by Email with ${email_count} email(s) sends the report to every recipient](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Share by Email with an empty input surfaces an inline validation error](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | run-detail-and-report | +| AC-90 | [Share Report Publicly generates a URL and passcode with default Expiration and Protect-by-passcode ON](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Make Public Report with the minimum 1-day Expiration generates a short-lived URL](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | run-detail-and-report | +| AC-91 | [Share Report Publicly generates a URL and passcode with default Expiration and Protect-by-passcode ON](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Stop Sharing revokes the public URL and blocks subsequent unauthenticated access](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Passcode is shown only once and cannot be recovered after the dialog is closed](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Public share URL rejects an incorrect passcode](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | run-detail-and-report | +| AC-92 | [Compare at least two finished runs from the Runs list navigates to the Compare matrix](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Compare matrix renders per-run status cells with test titles as row links](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Compare action requires at least two runs to be selected](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Compare matrix renders with four runs selected at the supported maximum](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Manually entering the Compare URL with a single run id renders a neutral empty or fallback state](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Compare enables only at two or more selected runs and navigates to the comparison view](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | run-detail-and-report, runs-list-management | +| AC-93 | [Bulk apply with a message persists the status and the message together](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | bulk-status-actions | +| AC-94 | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Bulk Result Message apply with a status filter active affects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) · [Bulk apply with a message persists the status and the message together](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | bulk-status-actions | +| AC-95 | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Bulk Result Message apply with a status filter active affects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | bulk-status-actions | +| AC-96 | ["Run as checklist" ON at creation time persists on the created run](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · ["Run as checklist" toggle is OFF by default and can be enabled](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [Checklist-mode run hides test descriptions by default (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) · [Per-test 'Toggle Description' in a checklist run reveals and re-hides the description (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | run-creation, test-execution-runner | +| AC-98 | [Defects tab shows empty-state links when the run has no linked defects](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) · [Defects tab lists linked defects for tests that have them](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | run-detail-and-report | +| AC-99 | [Copy Link button in the report header copies the report URL to clipboard](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | run-detail-and-report | +| AC-100 | [Read-only user cannot ${destructive_action}](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) · [Manager can perform ${destructive_action} on a run](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) · [Read-only user can browse Runs Archive and Groups Archive pages](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) · [Role-based gating on Start / Finish / Relaunch lifecycle actions for ${role}](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) · [Concern B × permissions — a qa-role run-assignee can use Assign to controls end-to-end](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) · [Concern B × permissions — readonly-role user attempt to use Assign to controls is recorded](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) | archive-and-purge, run-lifecycle, tester-assignment | + +## ac-delta ↔ Tests + +| ac-delta | Tests | Count | +|---|---|---| +| archive-and-purge/ac-delta-1 | [Archive a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Cancelling the archive confirmation keeps the run active](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Archiving a finished run preserves every test status](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) · [Cancelling the RunGroup archive confirmation leaves the group and nested runs untouched](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | 4 | +| archive-and-purge/ac-delta-10 | [Search archived groups by name in Groups Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) · [Filter archived groups by Group type](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | 2 | +| archive-and-purge/ac-delta-11 | [Filter archived groups by Finish Range](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | 1 | +| archive-and-purge/ac-delta-12 | [Sort archived groups by ${sort_mode}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | 1 | +| archive-and-purge/ac-delta-13 | [Unarchive a single run from Runs Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) · [Cancelling the unarchive confirmation keeps the run in the Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) · [A restored Terminated run cannot be resumed](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | 3 | +| archive-and-purge/ac-delta-14 | [Bulk unarchive multiple runs from Runs Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | 1 | +| archive-and-purge/ac-delta-15 | [Archive a RunGroup cascades to every nested run](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) · [Unarchive a RunGroup from Groups Archive restores all nested runs](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) · [Purge an archived RunGroup deletes the group and moves nested runs to Runs Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | 3 | +| archive-and-purge/ac-delta-16 | [Runs Archive row displays ${badge} for ${state}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) · [Archive a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Purge a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Archiving an ongoing run terminates it and converts Pending tests to Skipped](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | 4 | +| archive-and-purge/ac-delta-17 | [Permanently delete a single run from the Archive via irreversible confirmation](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) · [Cancelling the permanent-delete confirmation keeps the run in the Archive](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) · [Bulk permanent delete from Runs Archive Multi-select](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | 3 | +| archive-and-purge/ac-delta-18 | [Pulse records a Deleted Run event after permanent deletion](../../../../test-cases/manual-tests-execution/archive-and-purge/restore-and-delete.md) | 1 | +| archive-and-purge/ac-delta-19 | [Purging a RunGroup with more than 20 000 runs is blocked](../../../../test-cases/manual-tests-execution/archive-and-purge/rungroup-cascade.md) | 1 | +| archive-and-purge/ac-delta-2 | [Bulk archive multiple runs via Multi-select](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Bulk purge multiple runs via Multi-select "Delete" action](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Select All link bulk-archives every run on the current page](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Bulk Archive button is disabled when no runs are selected](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | 4 | +| archive-and-purge/ac-delta-20 | [Read-only user cannot ${destructive_action}](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) · [Manager can perform ${destructive_action} on a run](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) · [Read-only user can browse Runs Archive and Groups Archive pages](../../../../test-cases/manual-tests-execution/archive-and-purge/permissions.md) | 3 | +| archive-and-purge/ac-delta-3 | [Purge a single run from the row extra menu](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Cancelling the purge confirmation keeps the run active](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) · [Purging an ongoing run terminates it and preserves recorded statuses](../../../../test-cases/manual-tests-execution/archive-and-purge/run-state-behavior.md) | 3 | +| archive-and-purge/ac-delta-4 | [Purged run preserves statuses, attachments, and custom statuses but removes stack traces](../../../../test-cases/manual-tests-execution/archive-and-purge/run-actions.md) | 1 | +| archive-and-purge/ac-delta-5 | [Navigate to Runs Archive via ${entry_point}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | 1 | +| archive-and-purge/ac-delta-6 | [Filter archived runs by ${run_type}](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) · [Runs Archive search with no matching title shows an empty result](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | 2 | +| archive-and-purge/ac-delta-7 | [Rungroup Structure toggle switches between hierarchical and flat list](../../../../test-cases/manual-tests-execution/archive-and-purge/archive-pages.md) | 1 | +| archive-and-purge/ac-delta-8 | [Configure retention to a positive number of days persists across reloads](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | 1 | +| archive-and-purge/ac-delta-9 | [Retention input rejects ${invalid_value}](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) · [Default retention is 90 days when the project has no saved value](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) · [Configure retention at boundary value ${boundary_value} persists](../../../../test-cases/manual-tests-execution/archive-and-purge/retention-settings.md) | 3 | +| bulk-status-actions/ac-delta-1 | [Activate Multi-Select mode reveals per-test checkboxes](../../../../test-cases/manual-tests-execution/bulk-status-actions/multi-select-mode.md) | 1 | +| bulk-status-actions/ac-delta-10 | [Bulk quick-set ${status} via the toolbar with native confirm Accept applies the status](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Dismissing the quick-set native confirm dialog leaves all test statuses unchanged](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | 2 | +| bulk-status-actions/ac-delta-11 | [Clearing the selection keeps Multi-Select mode active with an empty selection](../../../../test-cases/manual-tests-execution/bulk-status-actions/multi-select-mode.md) | 1 | +| bulk-status-actions/ac-delta-2 | [Toggling Multi-Select off clears the selection and hides the bulk toolbar](../../../../test-cases/manual-tests-execution/bulk-status-actions/multi-select-mode.md) | 1 | +| bulk-status-actions/ac-delta-3 | [Suite-level checkbox with a status filter active selects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) · [Suite-level checkbox selects every test in the suite](../../../../test-cases/manual-tests-execution/bulk-status-actions/selection-mechanics.md) | 2 | +| bulk-status-actions/ac-delta-4 | [Activate Multi-Select mode reveals per-test checkboxes](../../../../test-cases/manual-tests-execution/bulk-status-actions/multi-select-mode.md) · [Per-test checkboxes update the selection counter as they toggle](../../../../test-cases/manual-tests-execution/bulk-status-actions/selection-mechanics.md) | 2 | +| bulk-status-actions/ac-delta-5 | [Bulk-action toolbar is not rendered when no tests are selected](../../../../test-cases/manual-tests-execution/bulk-status-actions/selection-mechanics.md) | 1 | +| bulk-status-actions/ac-delta-6 | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Result Message modal Apply button stays disabled until a status is selected](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Custom status dropdown appears in the bulk Result Message modal when custom statuses exist](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Bulk Result Message apply with a status filter active affects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) _(+ 1 more)_ | 5 | +| bulk-status-actions/ac-delta-7 | [Dismissing the Result Message modal via ${dismiss_method} clears the selection without applying a status](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) | 1 | +| bulk-status-actions/ac-delta-8 | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Bulk Result Message apply with a status filter active affects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) · [Bulk apply with a message persists the status and the message together](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | 3 | +| bulk-status-actions/ac-delta-9 | [Bulk apply ${status} via the Result Message modal updates every selected test and header counters](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Bulk quick-set ${status} via the toolbar with native confirm Accept applies the status](../../../../test-cases/manual-tests-execution/bulk-status-actions/bulk-status-application.md) · [Bulk Result Message apply with a status filter active affects only filter-matching tests](../../../../test-cases/manual-tests-execution/bulk-status-actions/cross-cutting.md) | 3 | +| environment-configuration/ac-delta-1 | [Open Multi-Environment Configuration modal from the sidebar](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | 1 | +| environment-configuration/ac-delta-10 | [Launch All creates a RunGroup with parallel env-labeled child runs](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | 1 | +| environment-configuration/ac-delta-11 | [Launch in Sequence creates a RunGroup with sequential env-labeled child runs](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) · [Launch All creates a RunGroup with parallel env-labeled child runs](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | 2 | +| environment-configuration/ac-delta-12 | [Save modal with an empty env group is silently accepted](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) · [Clicking `Launch All` with `Without tests` scope surfaces the validation banner and blocks run creation](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | 2 | +| environment-configuration/ac-delta-13 | [`All` master checkbox toggles every environment in the current group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | 1 | +| environment-configuration/ac-delta-14 | [`Add all envs` footer link populates the currently expanded group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | 1 | +| environment-configuration/ac-delta-15 | [Edit an existing group's env selection via round-trip of the modal](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [Re-open modal via the `N environments configured` button preserves the existing selection](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) · [Close modal via `×` after editing a saved selection discards the edits](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) | 3 | +| environment-configuration/ac-delta-2 | [Edit an existing group's env selection via round-trip of the modal](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) | 1 | +| environment-configuration/ac-delta-3 | [Remove one env group via the per-group minus button](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [`Cancel` after removing a group via minus restores the removed group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [Remove the last remaining env group clears selection and reverts to the single-`Launch` state](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | 3 | +| environment-configuration/ac-delta-4 | [`Category:Value` grouping of environments in the checklist](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | 1 | +| environment-configuration/ac-delta-5 | [`Cancel` after adding a new env group discards the pending group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [`Cancel` after removing a group via minus restores the removed group](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [Dismiss Multi-Environment Configuration modal via ${dismiss_method} discards pending changes](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) · [Save one-group env selection commits it to the sidebar](../../../../test-cases/manual-tests-execution/environment-configuration/modal-lifecycle.md) _(+ 1 more)_ | 5 | +| environment-configuration/ac-delta-6 | [Single env group configuration keeps a single `Launch` button](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) · [Remove the last remaining env group clears selection and reverts to the single-`Launch` state](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | 2 | +| environment-configuration/ac-delta-7 | [Add a second env group via `Add Environment`](../../../../test-cases/manual-tests-execution/environment-configuration/group-management.md) · [Two env groups replace `Launch` with `Launch in Sequence` and `Launch All`](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | 2 | +| environment-configuration/ac-delta-8 | [`One Run` single-run multi-environment mode — documented gap](../../../../test-cases/manual-tests-execution/environment-configuration/validation-and-edge.md) | 1 | +| environment-configuration/ac-delta-9 | [Launch in Sequence creates a RunGroup with sequential env-labeled child runs](../../../../test-cases/manual-tests-execution/environment-configuration/launch-variants.md) | 1 | +| run-creation/ac-delta-1 | [Open New Manual Run sidebar and verify form chrome renders](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Arrow-dropdown item ${menu_item} opens ${target} without opening the creation sidebar](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Clicking the Manual Run split-button left part navigates to the creation URL](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Arrow-dropdown closes on outside click without selecting any item](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | 4 | +| run-creation/ac-delta-10 | [Creation ${action} shows success toast "${toast_text}"](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | 1 | +| run-creation/ac-delta-11 | [Launch creates a run and navigates to the Manual Runner with the first test pre-opened](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) · [Without tests — Launch creates an empty run and navigates to the runner shell](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Launching Select tests scope with zero tests selected](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | 3 | +| run-creation/ac-delta-12 | [Save creates a pending run that can be resumed via Continue](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | 1 | +| run-creation/ac-delta-13 | [Whitespace-only description is stored as blank](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [Description accepts very large content without enforced limit](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | 2 | +| run-creation/ac-delta-14 | ["Run as checklist" ON at creation time persists on the created run](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · ["Run as checklist" toggle is OFF by default and can be enabled](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | 2 | +| run-creation/ac-delta-15 | ["Run Automated as Manual" toggle is actionable only in Select tests tab](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | 1 | +| run-creation/ac-delta-16 | [From Tests page, single-test "Add to Run" lists only unfinished runs as destinations](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | 1 | +| run-creation/ac-delta-17 | [From Tests page, suite extra menu → 'Run Tests' pre-populates creation in Select tests tab](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) · [From Tests page Multi-select, 'Run Tests' pre-populates creation with the union of selected items](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) · [Multi-select bar 'Run Tests' is disabled when zero items are selected](../../../../test-cases/manual-tests-execution/run-creation/entry-points-and-extras.md) | 3 | +| run-creation/ac-delta-18 | [Required-RunGroup setting blocks Launch when the field is empty](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) · [Server-side validation error keeps the sidebar open and surfaces inline feedback](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | 2 | +| run-creation/ac-delta-2 | [Dismiss the New Manual Run sidebar via ${dismiss_method} restores runs list](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) · [Pressing ESC key closes the sidebar without creating a run](../../../../test-cases/manual-tests-execution/run-creation/dialog-lifecycle.md) | 2 | +| run-creation/ac-delta-3 | [Title input enforces the 255-character maximum](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [Title input accepts a single character as the minimum valid input](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | 2 | +| run-creation/ac-delta-4 | [Blank title auto-generates a default title on Launch](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [Title with only whitespace characters is treated as blank](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | 2 | +| run-creation/ac-delta-5 | [Create a run with multiple testers assigned via "Assign more users"](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Cancelling the Assign more users panel reverts the assignee section to creator-only](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Assignee section shows the creator with "as manager" label by default](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | 3 | +| run-creation/ac-delta-6 | [Opening creation from a RunGroup page pre-populates the RunGroup field](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [RunGroup dropdown lists "Without rungroup" plus existing named groups](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) · [RunGroup dropdown shows only "Without rungroup" when no groups exist in the project](../../../../test-cases/manual-tests-execution/run-creation/form-fields.md) | 3 | +| run-creation/ac-delta-7 | [Create a run with two environment groups configured at creation time](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Adding and removing an environment slot leaves only the initial slot](../../../../test-cases/manual-tests-execution/run-creation/cross-cutting.md) · [Cancelling the Environment modal preserves the sidebar state without assigning env](../../../../test-cases/manual-tests-execution/run-creation/launch-and-save.md) | 3 | +| run-creation/ac-delta-8 | [Scope tabs are mutually exclusive — switching clears previously selected tests](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | 1 | +| run-creation/ac-delta-9 | [Select tests — browse tree, search, toggle tests, and Launch creates run with the picked subset](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Test tree checkboxes are disabled outside the Select tests tab](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Select tests search with a zero-match query shows empty state](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) · [Selected-tests counter decrements back to 0 when a selected test is unticked](../../../../test-cases/manual-tests-execution/run-creation/scope-selection.md) | 4 | +| run-detail-and-report/ac-delta-1 | [Open a finished run from the Runs list lands on Run Detail with Tests tab active](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Run Detail header surfaces run metadata summary](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Switch to the ${tab} tab reveals its dedicated content area](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Multi-environment run shows per-environment chips in the Detail header](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) | 4 | +| run-detail-and-report/ac-delta-10 | [Switch the Overview grouping to ${grouping} rebuckets the list without reloading](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Overview grouping by Assignees buckets tests under each tester on a multi-assignee run](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Overview grouping by a dimension with no matching data renders a neutral empty bucket list](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | 3 | +| run-detail-and-report/ac-delta-11 | [Analytics section is hidden when the run has no flaky-test history](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Analytics section renders the Flaky Tests chart when flaky history exists](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) | 2 | +| run-detail-and-report/ac-delta-12 | [Search in the Tests tab filters rows by title or result message in real time](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Search with no matches renders the empty-state message](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Search input accepts a query at the 500-character length](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | 3 | +| run-detail-and-report/ac-delta-13 | [Tree View toggle on the Report page switches between flat list and tree-grouped layout](../../../../test-cases/manual-tests-execution/run-detail-and-report/report-overview.md) · [Status filter button ${status} narrows the list to matching tests](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Combining Passed and Failed filters shows tests in either status](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) · [Filter by Assignee on a multi-assignee run shows only tests for that assignee](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) _(+ 2 more)_ | 6 | +| run-detail-and-report/ac-delta-14 | [Close the sub-panel via Escape returns the list to full width](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Keyboard navigation ↑ and ↓ moves selection between test rows and Esc closes the sub-panel](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | 2 | +| run-detail-and-report/ac-delta-15 | [Sort the test list by ${sort_dimension} reorders rows accordingly](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | 1 | +| run-detail-and-report/ac-delta-16 | [Extra menu Download as Spreadsheet triggers an XLSX download](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | 1 | +| run-detail-and-report/ac-delta-17 | [Extra menu Export as PDF triggers a PDF download of the current report view](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | 1 | +| run-detail-and-report/ac-delta-18 | [Share report by Email accepts comma-separated emails and rejects invalid format](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Share by Email with ${email_count} email(s) sends the report to every recipient](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Share by Email with an empty input surfaces an inline validation error](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | 3 | +| run-detail-and-report/ac-delta-19 | [Share Report Publicly generates a URL and passcode with default Expiration and Protect-by-passcode ON](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Make Public Report with the minimum 1-day Expiration generates a short-lived URL](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) · [Passcode is shown only once and cannot be recovered after the dialog is closed](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | 3 | +| run-detail-and-report/ac-delta-2 | [Test rows are grouped by suite with status, title, and duration metadata](../../../../test-cases/manual-tests-execution/run-detail-and-report/tests-tab.md) | 1 | +| run-detail-and-report/ac-delta-20 | [Stop Sharing revokes the public URL and blocks subsequent unauthenticated access](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | 1 | +| run-detail-and-report/ac-delta-21 | [Compare matrix renders per-run status cells with test titles as row links](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Rows where statuses differ across runs are visually highlighted](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Compare view renders correctly across runs with different environments and assignees](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) · [Compare matrix renders with four runs selected at the supported maximum](../../../../test-cases/manual-tests-execution/run-detail-and-report/compare-runs.md) | 4 | +| run-detail-and-report/ac-delta-22 | [Report Custom view Settings toggles column visibility on the Tests tab](../../../../test-cases/manual-tests-execution/run-detail-and-report/exports-and-sharing.md) | 1 | +| run-detail-and-report/ac-delta-3 | [Switching tabs preserves the active test selection and applied filters](../../../../test-cases/manual-tests-execution/run-detail-and-report/navigation-and-header.md) · [Click a test row opens the sub-panel with the row visibly highlighted](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Swapping selection between tests keeps the sub-panel open](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | 3 | +| run-detail-and-report/ac-delta-4 | [Summary tab shows the last execution status, message, and step results](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | 1 | +| run-detail-and-report/ac-delta-5 | [Description tab renders the test description and is read-only in run context](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | 1 | +| run-detail-and-report/ac-delta-6 | [Code template tab shows the test's code template with a copy control](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | 1 | +| run-detail-and-report/ac-delta-7 | [Runs tab lists the test's prior runs and links back to each run's report](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) · [Runs sub-tab for a test without prior runs shows the empty-state message](../../../../test-cases/manual-tests-execution/run-detail-and-report/test-sub-panel.md) | 2 | +| run-detail-and-report/ac-delta-8 | [Statistics tab groups counts under Suites, Tags, Labels, Assignees, Priorities, Custom Statuses](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) · [Sort and status filter icons in a Statistics section reorder its rows](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) · [Statistics tab surfaces per-environment counts on a multi-environment run](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) · [Folders toggle in the Statistics Suites section collapses and expands nested folders](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | 4 | +| run-detail-and-report/ac-delta-9 | [Defects tab shows empty-state links when the run has no linked defects](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) · [Defects tab lists linked defects for tests that have them](../../../../test-cases/manual-tests-execution/run-detail-and-report/statistics-and-defects.md) | 2 | +| run-groups/ac-delta-1 | [Create a new RunGroup via the New group dialog](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) · [Dismissing the New RunGroup panel via ${dismiss_method} does not create a group](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | 2 | +| run-groups/ac-delta-10 | [Combined Report shows Overview, Summary totals, and the Main Run anchor with within-group Compare To](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | 1 | +| run-groups/ac-delta-11 | [Switching the main run anchor in the Combined Report re-bases Summary totals](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) · [Combined Report Compare To across different RunGroups](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | 2 | +| run-groups/ac-delta-12 | [RunGroup extra menu action set is state-aware — ${group_state}](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | 1 | +| run-groups/ac-delta-13 | [Edit an existing RunGroup commits the changes in place](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) · [Cancel on Edit RunGroup discards pending changes](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | 2 | +| run-groups/ac-delta-14 | [Add Existing Run(s) to a RunGroup via the group extra menu](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) · [Add Existing Run picker excludes runs already in the group](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) · [Add Existing Run picker shows an empty selectable list when every existing run already belongs to the group](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | 3 | +| run-groups/ac-delta-15 | [Copy RunGroup with default toggle selection creates a duplicate with Nested structure and Labels only](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) · [Copy RunGroup with custom toggle selection (Assignee, Issues, Environments enabled) propagates the selected slices](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) · [Cancel Copy RunGroup dialog does not create a new group](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | 3 | +| run-groups/ac-delta-16 | [${pin_action} a RunGroup via the extra menu moves it to ${destination_region}](../../../../test-cases/manual-tests-execution/run-groups/menu-actions.md) | 1 | +| run-groups/ac-delta-17 | [Archive a RunGroup cascades to all nested runs](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) · [Unarchive a RunGroup from Groups Archive restores all nested runs](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) · [Cancelling the archive confirmation dialog leaves the group untouched](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) · [Purge a RunGroup cascades with a Purged badge](../../../../test-cases/manual-tests-execution/run-groups/archive-and-purge.md) _(+ 1 more)_ | 5 | +| run-groups/ac-delta-2 | [Creating a group with Group Type ${type} persists the choice](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | 1 | +| run-groups/ac-delta-3 | [Creating a group with Merge Strategy ${strategy} persists the choice](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | 1 | +| run-groups/ac-delta-4 | [New RunGroup panel blocks save with an empty Name](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | 1 | +| run-groups/ac-delta-5 | [Create a new RunGroup via the New group dialog](../../../../test-cases/manual-tests-execution/run-groups/group-lifecycle.md) | 1 | +| run-groups/ac-delta-6 | [RunGroup detail panel on an empty group shows header, empty-state, and action buttons](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) · [Combined Report button is disabled on a RunGroup with no first-level runs](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) · [Rungroup Statistic Report button requires two or more child runs](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | 3 | +| run-groups/ac-delta-7 | [Add Manual Run from inside a RunGroup pre-populates the RunGroup field](../../../../test-cases/manual-tests-execution/run-groups/contents-and-runs.md) | 1 | +| run-groups/ac-delta-8 | [RunGroup detail panel on an empty group shows header, empty-state, and action buttons](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | 1 | +| run-groups/ac-delta-9 | [Per-group Runs list column customisation persists independently of the global list](../../../../test-cases/manual-tests-execution/run-groups/detail-and-reports.md) | 1 | +| run-lifecycle/ac-delta-1 | [CI-routing Relaunch variants via ${variant} appear on finished ${run_type} runs](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · ['Launch a Copy Manually' variant on a mixed run opens the duplicate in the Manual Runner](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | 2 | +| run-lifecycle/ac-delta-10 | [Cancelling the Finish Run confirmation leaves the run ongoing](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | 1 | +| run-lifecycle/ac-delta-11 | ['Keep values' toggle is disabled while 'Create new run' is OFF](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | 1 | +| run-lifecycle/ac-delta-12 | [Advanced Relaunch with a custom Title and per-test selection relaunches only the chosen tests](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) · ['Select all' inside Advanced Relaunch respects an active status filter](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | 2 | +| run-lifecycle/ac-delta-13 | [Advanced Relaunch with 'Create new run' ON creates a new Run ID inheriting the source metadata](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) · [Advanced Relaunch with a custom Title and per-test selection relaunches only the chosen tests](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) · [Launch a Copy of a finished run creates a duplicate run with a new Run ID](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) | 3 | +| run-lifecycle/ac-delta-14 | [CI-routing Relaunch variants via ${variant} appear on finished ${run_type} runs](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Relaunch ${variant} on a finished ${run_type} run routes ${routing}](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) | 2 | +| run-lifecycle/ac-delta-2 | [Advanced Relaunch with 'Create new run' OFF reuses the original Run ID and resets selected tests to Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) · [Advanced Relaunch with 'Create new run' ON creates a new Run ID inheriting the source metadata](../../../../test-cases/manual-tests-execution/run-lifecycle/advanced-relaunch.md) | 2 | +| run-lifecycle/ac-delta-3 | [Appending tests via the `+ Tests` tab on an ongoing run adds them as Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | 1 | +| run-lifecycle/ac-delta-4 | [Appending a plan via the `+ Plans` tab on an ongoing run adds the plan's tests as Pending](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | 1 | +| run-lifecycle/ac-delta-5 | [Removing a test from an ongoing run via the row trash icon persists the removal](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | 1 | +| run-lifecycle/ac-delta-6 | [Editing ${field} on an ongoing run via Save persists the change](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) · [Adding and removing testers on an ongoing run via Edit Run persists the assignee set](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) · [Cancelling the Edit Run form discards pending changes](../../../../test-cases/manual-tests-execution/run-lifecycle/edit-ongoing-run.md) | 3 | +| run-lifecycle/ac-delta-7 | [Continue from the Run Detail panel resumes an unfinished run in the Manual Runner](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) · [Resume an unfinished run from the Runs list row extra menu via the 'Launch' item](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) · [Continue and Edit are not available on a finished run](../../../../test-cases/manual-tests-execution/run-lifecycle/launch-and-continue.md) | 3 | +| run-lifecycle/ac-delta-8 | [Relaunching a finished manual run re-opens the same Run ID in the Manual Runner](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Relaunch menu items appear only on finished runs — not on unfinished runs](../../../../test-cases/manual-tests-execution/run-lifecycle/basic-relaunch.md) · [Row extra-menu on ${run_state} runs exposes only ${available_items} lifecycle actions](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) · [Finish on a multi-environment run terminates the expected scope and leaves other environment runs intact](../../../../test-cases/manual-tests-execution/run-lifecycle/cross-cutting.md) _(+ 1 more)_ | 5 | +| run-lifecycle/ac-delta-9 | [Finish Run confirms and terminates the run, marking Pending tests as Skipped](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) · [Finish Run when every test already has a result still surfaces the confirmation with count 0](../../../../test-cases/manual-tests-execution/run-lifecycle/finish-run.md) | 2 | +| runs-list-management/ac-delta-1 | [Toggling the chart hides and restores the chart area](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | 1 | +| runs-list-management/ac-delta-10 | [Settings gear is enabled only in Custom view](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Hiding a column in Custom view Settings persists across reload](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Changing a column width in Custom view Settings persists across reload](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | 3 | +| runs-list-management/ac-delta-11 | [Toggle Default view and Custom view switches list layout and button label](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | 1 | +| runs-list-management/ac-delta-12 | [Pagination first and last controls navigate and disable at boundaries](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | 1 | +| runs-list-management/ac-delta-13 | [Multi-environment runs render with environment indicators in the Runs list](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [RunGroup in the Groups tab expands in place to reveal child runs](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) | 2 | +| runs-list-management/ac-delta-14 | [Expand-all toolbar button expands and collapses every visible RunGroup row](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | 1 | +| runs-list-management/ac-delta-15 | [Query Language Editor opens with Apply always enabled and Cancel always enabled](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) · [Save button remains disabled until a non-empty query is typed](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) · [Examples tab lists three preset queries that can be inserted into the editor](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) · [Operators and Variables sidebars expose the documented TQL vocabulary](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) _(+ 2 more)_ | 6 | +| runs-list-management/ac-delta-16 | [TQL has_custom_status filters the list to runs that recorded a custom status](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Copying the Runs URL reproduces the active filter in a new session](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Opening the Runs page with a malformed filterParam falls back to the unfiltered list](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Applying a valid query filters the list and reflects the filter in the URL](../../../../test-cases/manual-tests-execution/runs-list-management/tql-query-editor.md) _(+ 2 more)_ | 6 | +| runs-list-management/ac-delta-17 | [Archive entry links at the bottom of the Runs page navigate to ${archive_page}](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | 1 | +| runs-list-management/ac-delta-2 | [Legend click toggles the ${dataset} dataset in the chart](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | 1 | +| runs-list-management/ac-delta-3 | [Run count badge reflects the number of runs in the active tab](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) · [Switch to the ${tab} filter tab scopes the list to matching runs](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) · [Switching to the Unfinished tab in a project with no unfinished runs shows an empty state](../../../../test-cases/manual-tests-execution/runs-list-management/filter-tabs-and-view.md) | 3 | +| runs-list-management/ac-delta-4 | [Runs Status Report AI button is disabled below the 5-finished-runs threshold](../../../../test-cases/manual-tests-execution/runs-list-management/chart-and-toolbar.md) | 1 | +| runs-list-management/ac-delta-5 | [Bulk Archive moves every selected run off the default list](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) · [Row extra menu exposes the ${state}-specific action set](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Moving a run to ${destination} via the Move dialog relocates the row](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Cancelling the Move dialog leaves the run in place](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) _(+ 2 more)_ | 6 | +| runs-list-management/ac-delta-6 | [Pin then Unpin a run cycles the indicator and repositions the row](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) · [Pinning a RunGroup repositions the group to the top of the Groups tab](../../../../test-cases/manual-tests-execution/runs-list-management/row-extra-menu.md) | 2 | +| runs-list-management/ac-delta-7 | [Bulk multi-select archive applies across every selected run end to end](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Toggling Multi-select on and off shows and hides the row checkboxes and bottom toolbar](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) · [Closing the bulk toolbar via the close button keeps selection hidden](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) · [Deselecting the last selected run removes the bulk toolbar](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | 4 | +| runs-list-management/ac-delta-8 | [Compare enables only at two or more selected runs and navigates to the comparison view](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) · [Extra dropdown shows ${extra_items} at ${selection_size}](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | 2 | +| runs-list-management/ac-delta-9 | [Bulk multi-select archive applies across every selected run end to end](../../../../test-cases/manual-tests-execution/runs-list-management/cross-cutting.md) · [Bulk Labels applies a label to every selected run](../../../../test-cases/manual-tests-execution/runs-list-management/multi-select.md) | 2 | +| test-execution-runner/ac-delta-1 | [Opening a finished run does not present the Manual Runner](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) · [Apply standard status ${status} to a pending test](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | 2 | +| test-execution-runner/ac-delta-10 | [Create a note via the runner header 'Create notes' action](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) · [Saving a note with an empty title is rejected](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | 2 | +| test-execution-runner/ac-delta-11 | [Add a note to a suite via the suite row affordance](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | 1 | +| test-execution-runner/ac-delta-12 | [Convert an existing note into a full test](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | 1 | +| test-execution-runner/ac-delta-13 | [Bulk-create a note across multiple selected tests](../../../../test-cases/manual-tests-execution/test-execution-runner/notes.md) | 1 | +| test-execution-runner/ac-delta-14 | [Resize handle between the tree and the detail pane changes pane widths](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | 1 | +| test-execution-runner/ac-delta-15 | [Checklist-mode run hides test descriptions by default (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) · [Per-test 'Toggle Description' in a checklist run reveals and re-hides the description (cross-cut D)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | 2 | +| test-execution-runner/ac-delta-16 | [Extra-options menu toggle ${toggle_label} hides the matching chrome in the tree](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) · ['Refresh structure' reloads the tests tree from the server](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | 2 | +| test-execution-runner/ac-delta-17 | [Priority filter ${priority_level} restricts the tree to matching tests](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) · [Priority filter with no matching tests renders an empty tree](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | 2 | +| test-execution-runner/ac-delta-18 | [Keyboard navigation between tests respects the active priority filter (cross-cut F)](../../../../test-cases/manual-tests-execution/test-execution-runner/detail-pane-and-tree.md) | 1 | +| test-execution-runner/ac-delta-19 | [Auto-Track records elapsed time on the test result](../../../../test-cases/manual-tests-execution/test-execution-runner/time-tracking.md) | 1 | +| test-execution-runner/ac-delta-2 | [Apply standard status ${status} to a pending test](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Result message is editable only after a standard status is selected](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Test detail pane renders the documented sections for a test with description and steps](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | 3 | +| test-execution-runner/ac-delta-20 | [Set Time manual entry replaces the auto-tracked duration](../../../../test-cases/manual-tests-execution/test-execution-runner/time-tracking.md) · [Saving 'Set Time' with an empty duration is rejected](../../../../test-cases/manual-tests-execution/test-execution-runner/time-tracking.md) | 2 | +| test-execution-runner/ac-delta-21 | [Custom sub-status counter impact is visible in the runner header (cross-cut E)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) · [Custom sub-status dropdown is disabled before a standard status is chosen](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Applying a custom sub-status to ${standard_status} keeps the standard status selected](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) · [Applied custom sub-status is reflected on the test row indicator in the tree (cross-cut E)](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | 4 | +| test-execution-runner/ac-delta-22 | [Per-test assignee badge is visible in the tree on a multi-assignee run (cross-cut B)](../../../../test-cases/manual-tests-execution/test-execution-runner/cross-cutting.md) | 1 | +| test-execution-runner/ac-delta-3 | [Result message persists after navigating to another test and back](../../../../test-cases/manual-tests-execution/test-execution-runner/result-entry.md) | 1 | +| test-execution-runner/ac-delta-4 | [Add an attachment via the 'browse' file picker](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) · [Add an attachment via drag-and-drop onto the drop zone](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | 2 | +| test-execution-runner/ac-delta-5 | [Change attachment display layout to ${view_mode}](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | 1 | +| test-execution-runner/ac-delta-6 | [Open an attachment preview in ${preview_mode} and close back to the runner](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | 1 | +| test-execution-runner/ac-delta-7 | [Deleting the last attachment with 'Confirm' restores the empty drop zone](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) · [Cancelling the 'Are you sure?' dialog keeps the attachment](../../../../test-cases/manual-tests-execution/test-execution-runner/attachments.md) | 2 | +| test-execution-runner/ac-delta-8 | [Step-by-step click gesture ${click_count} sets the step to ${target_status}](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) | 1 | +| test-execution-runner/ac-delta-9 | [Step markings persist after closing and re-opening the test](../../../../test-cases/manual-tests-execution/test-execution-runner/step-by-step-markings.md) | 1 | +| tester-assignment/ac-delta-1 | [Opening the New Manual Run sidebar shows the creator as manager with the Assign more users entry point](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Creator manager chip has no remove control and cannot be cleared from the sidebar](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Manager chip on Edit Run cannot be removed by any control](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | 3 | +| tester-assignment/ac-delta-10 | [Concern H × F — bulk Assign to in runner respects the active filter](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) · [Multi-Select bulk Assign to applies to every selected test after OK on the native confirm](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Multi-Select bulk Assign to with exactly one test selected still applies the assignment](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | 3 | +| tester-assignment/ac-delta-11 | [Auto-Assign strategy ${strategy} produces ${expected_distribution} after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Randomly distribute with only a manager attached leaves every test unassigned](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Save on Edit Run with all non-managers removed keeps the run with the manager only](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | 3 | +| tester-assignment/ac-delta-12 | [Adding the first user reveals Auto-Assign selector and propagates the assignee on Launch](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Remove an added user via the chip × before Launch keeps them off the new run](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Concern B — multi-user assignment propagates from creation through runner to runs list](../../../../test-cases/manual-tests-execution/tester-assignment/cross-cutting.md) | 3 | +| tester-assignment/ac-delta-13 | [Remove ${remove_scope} via ${remove_method} on Edit Run updates chips immediately](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Select All on Edit Run adds every project member to Assign users in one click](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Detail-panel Assignee chip single-click assigns a test without a confirmation](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Detail-panel Assignee dropdown lists only run-assigned users plus Unassigned](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) _(+ 1 more)_ | 5 | +| tester-assignment/ac-delta-2 | [Opening the New Manual Run sidebar shows the creator as manager with the Assign more users entry point](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Adding the first user reveals Auto-Assign selector and propagates the assignee on Launch](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Add a user via ${add_method} to the Assign users multi-select](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Remove an added user via the chip × before Launch keeps them off the new run](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) _(+ 1 more)_ | 5 | +| tester-assignment/ac-delta-3 | [Auto-Assign defaults to None and leaves all tests unassigned after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Switching strategy then dismissing the sidebar discards the selection](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Adding the first user reveals Auto-Assign selector and propagates the assignee on Launch](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) · [Dismiss the sidebar via ${dismiss_method} after editing assignees discards the pending state](../../../../test-cases/manual-tests-execution/tester-assignment/creation-dialog-assignment.md) | 4 | +| tester-assignment/ac-delta-4 | [Auto-Assign strategy ${strategy} produces ${expected_distribution} after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Prefer test assignee fallback for tests without a pre-set assignee is recorded](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) | 2 | +| tester-assignment/ac-delta-5 | [Auto-Assign strategy ${strategy} produces ${expected_distribution} after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Randomly distribute with a single non-manager user assigns every test to that user](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Randomly distribute with only a manager attached leaves every test unassigned](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) · [Randomly distribute outcome is deterministic after Launch](../../../../test-cases/manual-tests-execution/tester-assignment/auto-assign-strategies.md) _(+ 1 more)_ | 5 | +| tester-assignment/ac-delta-6 | [Remove ${remove_scope} via ${remove_method} on Edit Run updates chips immediately](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Removing a user who has recorded results surfaces the confirmation flow](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | 2 | +| tester-assignment/ac-delta-7 | [Adding a user on Edit Run propagates to the ongoing runner Assign to dropdowns](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Remove ${remove_scope} via ${remove_method} on Edit Run updates chips immediately](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Cancel on Edit Run after modifying assignees discards the pending state](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Save on Edit Run with all non-managers removed keeps the run with the manager only](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) | 4 | +| tester-assignment/ac-delta-8 | [Adding a user on Edit Run propagates to the ongoing runner Assign to dropdowns](../../../../test-cases/manual-tests-execution/tester-assignment/edit-run-assignment.md) · [Suite Assign to dropdown lists Unassigned and run-assigned users only](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Suite Assign to dropdown excludes non-run project members](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | 3 | +| tester-assignment/ac-delta-9 | [Multi-Select bulk Assign to applies to every selected test after OK on the native confirm](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Multi-Select bulk Assign to → Cancel on the native confirm leaves tests unchanged](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) · [Multi-Select bulk Assign to with zero tests selected does not open a confirm](../../../../test-cases/manual-tests-execution/tester-assignment/runner-assignment-paths.md) | 3 | + +## Uncovered ACs (AC-1..AC-100) + +3 baseline AC(s) not cited by any test: + +AC-16, AC-44, AC-97 diff --git a/skills/create-test-cases/examples/generatedDocs/scripts/gen-traceability.ts b/skills/create-test-cases/examples/generatedDocs/scripts/gen-traceability.ts new file mode 100644 index 0000000..82070ec --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/scripts/gen-traceability.ts @@ -0,0 +1,392 @@ +#!/usr/bin/env tsx +/** + * gen-traceability.ts + * + * Parses `` frontmatter across manual-tests-execution test-case files, + * parses UC source references from `docs/product/manual-tests-execution/06-use-cases/UC-*.md`, + * emits `_generated/traceability-matrix.md`, and rewrites each UC's + * `## Verifying tests` block between `` and ``. + * + * Run from repo root: + * npx tsx docs/product/manual-tests-execution/scripts/gen-traceability.ts + * + * Inputs + * - test-cases/manual-tests-execution/{sub}/*.md (test-case files only; leading-underscore, -ac-delta, + * -scope, -review, -validation-log, -ui-delta suffixes are ignored) + * - docs/product/manual-tests-execution/06-use-cases/UC-*.md + * + * Outputs + * - docs/product/manual-tests-execution/_generated/traceability-matrix.md + * - In-place edits to each UC-NN-*.md between the two trace markers + */ + +import { readFileSync, readdirSync, statSync, writeFileSync } from "node:fs"; +import { join, relative, resolve, dirname, basename } from "node:path"; +import { fileURLToPath } from "node:url"; + +const HERE = dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = resolve(HERE, "../../../../"); +const TEST_CASES_ROOT = join(REPO_ROOT, "test-cases/manual-tests-execution"); +const UC_ROOT = join(REPO_ROOT, "docs/product/manual-tests-execution/06-use-cases"); +const OUT_FILE = join( + REPO_ROOT, + "docs/product/manual-tests-execution/_generated/traceability-matrix.md", +); + +type TestRecord = { + subFeature: string; + file: string; // repo-relative + title: string; + tags: string[]; // @smoke, @negative, etc. + priority: string; + type: string; + automation: string; + automationNote?: string; + sources: string[]; // normalized: AC-N or {sub}/ac-delta-M +}; + +type UcRecord = { + id: string; // UC-01 + file: string; // repo-relative + absFile: string; + title: string; + primaryActor: string; + subFeature: string; + sources: string[]; // normalized +}; + +// ─── File walking ──────────────────────────────────────────────────────────── + +const SKIP_FILE_RE = /(?:^_|-(ac-delta|scope|review|validation-log|ui-delta)\.md$)/; + +function walkTestCases(): string[] { + const out: string[] = []; + const subs = readdirSync(TEST_CASES_ROOT) + .filter((name) => !name.startsWith("_") && !name.endsWith(".md")) + .filter((name) => { + try { + return statSync(join(TEST_CASES_ROOT, name)).isDirectory(); + } catch { + return false; + } + }); + for (const sub of subs) { + const dir = join(TEST_CASES_ROOT, sub); + for (const entry of readdirSync(dir)) { + if (!entry.endsWith(".md")) continue; + if (SKIP_FILE_RE.test(entry)) continue; + out.push(join(dir, entry)); + } + } + return out; +} + +// ─── Test-case parsing ─────────────────────────────────────────────────────── + +const TEST_BLOCK_RE = //g; + +function parseFrontmatter(body: string): Record { + const out: Record = {}; + for (const rawLine of body.split("\n")) { + const line = rawLine.trim(); + if (!line) continue; + const colon = line.indexOf(":"); + if (colon < 0) continue; + const key = line.slice(0, colon).trim(); + let value = line.slice(colon + 1).trim(); + if ( + (value.startsWith('"') && value.endsWith('"')) || + (value.startsWith("'") && value.endsWith("'")) + ) { + value = value.slice(1, -1); + } + out[key] = value; + } + return out; +} + +function normaliseSources(raw: string | undefined, sub: string): string[] { + if (!raw) return []; + return raw + .split(",") + .map((s) => s.trim()) + .filter(Boolean) + .map((s) => { + if (/^AC-\d+$/i.test(s)) return s.toUpperCase(); + if (/^ac-delta-\d+$/i.test(s)) return `${sub}/${s.toLowerCase()}`; + return s; // unknown shape — keep as-is for visibility + }); +} + +function extractTitleAndTags(afterBlock: string): { title: string; tags: string[] } { + const lines = afterBlock.split("\n"); + for (const line of lines) { + const m = line.match(/^##\s+(.+?)\s*$/); + if (m) { + const rest = m[1]; + const tagMatches = [...rest.matchAll(/@[\w-]+/g)].map((x) => x[0]); + const title = rest.replace(/@[\w-]+/g, "").trim(); + return { title, tags: tagMatches }; + } + if (/^/); + const srcMatch = raw.match(//); + const subMatch = raw.match(//); + const actorMatch = raw.match(/^\*\*Primary actor:\*\*\s*(.+)$/m); + const h1Match = raw.match(/^#\s+(.+)$/m); + if (!idMatch || !srcMatch) return null; + const id = idMatch[1]; + const subFeature = subMatch?.[1] ?? ""; + const sources = normaliseSources(srcMatch[1], subFeature); + return { + id, + file: relative(REPO_ROOT, abs), + absFile: abs, + title: (h1Match?.[1] ?? id).trim(), + primaryActor: (actorMatch?.[1] ?? "").trim(), + subFeature, + sources, + }; +} + +function readAllUcs(): UcRecord[] { + const out: UcRecord[] = []; + for (const entry of readdirSync(UC_ROOT)) { + if (!entry.startsWith("UC-") || !entry.endsWith(".md")) continue; + const rec = parseUcFile(join(UC_ROOT, entry)); + if (rec) out.push(rec); + } + return out.sort((a, b) => a.id.localeCompare(b.id)); +} + +// ─── Index building ────────────────────────────────────────────────────────── + +type SourceIndex = Map; + +function buildSourceIndex(tests: TestRecord[]): SourceIndex { + const idx: SourceIndex = new Map(); + for (const t of tests) { + for (const src of t.sources) { + const list = idx.get(src) ?? []; + list.push(t); + idx.set(src, list); + } + } + return idx; +} + +// ─── UC "Verifying tests" block rewrite ────────────────────────────────────── + +function rewriteUcVerifyingTestsBlock(uc: UcRecord, idx: SourceIndex): number { + const raw = readFileSync(uc.absFile, "utf8"); + const matched = new Map(); + for (const src of uc.sources) { + const list = idx.get(src) ?? []; + for (const t of list) matched.set(`${t.file}#${t.title}`, t); + } + const testsSorted = [...matched.values()].sort((a, b) => { + if (a.subFeature !== b.subFeature) return a.subFeature.localeCompare(b.subFeature); + if (a.file !== b.file) return a.file.localeCompare(b.file); + return a.title.localeCompare(b.title); + }); + + const lines: string[] = []; + lines.push(""); + lines.push(``); + lines.push(``); + lines.push(``); + if (testsSorted.length === 0) { + lines.push(""); + lines.push("_No matching tests found for cited sources._"); + } else { + lines.push(""); + lines.push(`_${testsSorted.length} test(s) match the cited sources._`); + lines.push(""); + lines.push("| # | Priority | Sub-feature | Test | Sources matched |"); + lines.push("|---|---|---|---|---|"); + let n = 1; + for (const t of testsSorted) { + const matchedSrcs = t.sources.filter((s) => uc.sources.includes(s)); + const tagSuffix = t.tags.length ? " " + t.tags.join(" ") : ""; + const link = `[${t.title}${tagSuffix}](../../../../${t.file})`; + lines.push( + `| ${n++} | ${t.priority || "—"} | ${t.subFeature} | ${link} | ${matchedSrcs.join(", ")} |`, + ); + } + } + lines.push(""); + const block = lines.join("\n"); + + const BLOCK_RE = + //; + if (!BLOCK_RE.test(raw)) { + console.warn( + `[warn] ${uc.id}: no existing trace block found; skipping rewrite (add a placeholder block first)`, + ); + return 0; + } + const next = raw.replace(BLOCK_RE, block); + if (next !== raw) { + writeFileSync(uc.absFile, next, "utf8"); + } + return testsSorted.length; +} + +// ─── Matrix output ─────────────────────────────────────────────────────────── + +function sortSourceKeys(keys: string[]): string[] { + return keys.sort((a, b) => { + const acA = a.match(/^AC-(\d+)$/); + const acB = b.match(/^AC-(\d+)$/); + if (acA && acB) return Number(acA[1]) - Number(acB[1]); + if (acA) return -1; + if (acB) return 1; + return a.localeCompare(b); + }); +} + +function writeMatrix( + tests: TestRecord[], + ucs: UcRecord[], + idx: SourceIndex, + ucMatchCounts: Map, +): void { + const acKeys = sortSourceKeys([...idx.keys()].filter((k) => /^AC-\d+$/.test(k))); + const deltaKeys = sortSourceKeys([...idx.keys()].filter((k) => !/^AC-\d+$/.test(k))); + + const lines: string[] = []; + lines.push("---"); + lines.push("audience: qa-team, dev-team"); + lines.push("feature: manual-tests-execution"); + lines.push(`last-generated: ${new Date().toISOString()}`); + lines.push('owner: "@gololdf1sh"'); + lines.push("generator: docs/product/manual-tests-execution/scripts/gen-traceability.ts"); + lines.push("---"); + lines.push(""); + lines.push("# Traceability Matrix — Manual Tests Execution"); + lines.push(""); + lines.push( + "> **Do not edit by hand.** Regenerate via `npx tsx docs/product/manual-tests-execution/scripts/gen-traceability.ts`.", + ); + lines.push(""); + lines.push("## Summary"); + lines.push(""); + lines.push(`- **Tests scanned:** ${tests.length}`); + lines.push(`- **Unique ACs cited:** ${acKeys.length}`); + lines.push(`- **Unique ac-delta IDs cited:** ${deltaKeys.length}`); + lines.push(`- **UCs with sources:** ${ucs.length}`); + lines.push(""); + lines.push("## UC ↔ Tests"); + lines.push(""); + lines.push("| UC | Title | Primary actor | Sub-feature | Sources | Tests |"); + lines.push("|---|---|---|---|---|---|"); + for (const uc of ucs) { + const sourcesStr = uc.sources.length > 8 ? `${uc.sources.slice(0, 8).join(", ")}, …` : uc.sources.join(", "); + const count = ucMatchCounts.get(uc.id) ?? 0; + lines.push( + `| [${uc.id}](../06-use-cases/${basename(uc.absFile)}) | ${uc.title.replace(/^UC-\d+:\s*/, "")} | ${uc.primaryActor} | ${uc.subFeature} | ${sourcesStr} | ${count} |`, + ); + } + lines.push(""); + lines.push("## AC ↔ Tests"); + lines.push(""); + lines.push("| AC | Tests | Sub-feature(s) |"); + lines.push("|---|---|---|"); + for (const key of acKeys) { + const list = idx.get(key)!; + const subs = [...new Set(list.map((t) => t.subFeature))].join(", "); + const testLinks = list + .map((t) => `[${t.title}](../../../../${t.file})`) + .slice(0, 6); + const moreSuffix = list.length > 6 ? ` _(+ ${list.length - 6} more)_` : ""; + lines.push(`| ${key} | ${testLinks.join(" · ")}${moreSuffix} | ${subs} |`); + } + lines.push(""); + lines.push("## ac-delta ↔ Tests"); + lines.push(""); + lines.push("| ac-delta | Tests | Count |"); + lines.push("|---|---|---|"); + for (const key of deltaKeys) { + const list = idx.get(key)!; + const testLinks = list + .map((t) => `[${t.title}](../../../../${t.file})`) + .slice(0, 4); + const moreSuffix = list.length > 4 ? ` _(+ ${list.length - 4} more)_` : ""; + lines.push(`| ${key} | ${testLinks.join(" · ")}${moreSuffix} | ${list.length} |`); + } + lines.push(""); + lines.push("## Uncovered ACs (AC-1..AC-100)"); + lines.push(""); + const covered = new Set(acKeys); + const uncovered: string[] = []; + for (let n = 1; n <= 100; n++) { + if (!covered.has(`AC-${n}`)) uncovered.push(`AC-${n}`); + } + if (uncovered.length === 0) { + lines.push("_All 100 baseline ACs are cited by at least one test._"); + } else { + lines.push(`${uncovered.length} baseline AC(s) not cited by any test:`); + lines.push(""); + lines.push(uncovered.join(", ")); + } + lines.push(""); + writeFileSync(OUT_FILE, lines.join("\n"), "utf8"); +} + +// ─── Main ──────────────────────────────────────────────────────────────────── + +function main(): void { + const testFiles = walkTestCases(); + const tests = testFiles.flatMap(parseTestFile); + const idx = buildSourceIndex(tests); + const ucs = readAllUcs(); + + const ucMatchCounts = new Map(); + for (const uc of ucs) { + const matched = rewriteUcVerifyingTestsBlock(uc, idx); + ucMatchCounts.set(uc.id, matched); + } + writeMatrix(tests, ucs, idx, ucMatchCounts); + + console.log( + `gen-traceability: ${tests.length} tests across ${testFiles.length} files; ${ucs.length} UCs rewritten; matrix → ${relative(REPO_ROOT, OUT_FILE)}`, + ); +} + +main(); diff --git a/skills/create-test-cases/examples/generatedDocs/templates/adr-template.md b/skills/create-test-cases/examples/generatedDocs/templates/adr-template.md new file mode 100644 index 0000000..1cf2d27 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/templates/adr-template.md @@ -0,0 +1,16 @@ +# ADR-NNN: {Decision title} + +**Status:** proposed | accepted | superseded-by-ADR-NNN +**Date:** YYYY-MM-DD +**Author:** ... + +## Context +... + +## Decision +... + +## Consequences +- Positive: ... +- Negative / trade-offs: ... +- Follow-up: ... diff --git a/skills/create-test-cases/examples/generatedDocs/templates/business-rule-template.md b/skills/create-test-cases/examples/generatedDocs/templates/business-rule-template.md new file mode 100644 index 0000000..da53359 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/templates/business-rule-template.md @@ -0,0 +1,15 @@ +# Business Rule template + +> Copy the block below into `07-business-rules.md` as a new H2 section. +> BRs live in a single file; do not create one file per rule. + +```markdown +## BR-NN: {Rule name} + +**Statement:** {invariant, one sentence} +**Rationale:** {why this rule exists} +**Scope:** {where it applies} +**Violations / enforcement:** {what happens if broken — error, blocked action, degraded state} +**Derived from:** AC-n, AC-m +**Referenced by:** UC-NN, UC-MM +``` diff --git a/skills/create-test-cases/examples/generatedDocs/templates/use-case-template.md b/skills/create-test-cases/examples/generatedDocs/templates/use-case-template.md new file mode 100644 index 0000000..b3c4c75 --- /dev/null +++ b/skills/create-test-cases/examples/generatedDocs/templates/use-case-template.md @@ -0,0 +1,46 @@ +# UC-NN: {Verb Object} — {primary actor} + + + +**Primary actor:** {role} +**Stakeholders:** {list} +**Goal:** {what actor achieves + business value} +**Trigger:** {event that starts the flow} +**Scope:** {sub-feature(s) involved} + +## Preconditions +- ... + +## Main success scenario +1. Actor ... +2. System ... +3. ... + +## Alternate flows +### A1: {condition} +... + +## Exception flows +### E1: {error condition} +... + +## Postconditions +- **Success:** ... +- **Failure:** ... + +## Business rules referenced +- BR-n, BR-m + +## Functional requirements covered +- FR-n (AC-n) + +## Related use cases +- UC-YY (extends), UC-ZZ (included) + +## Verifying tests + diff --git a/skills/create-test-cases/examples/generatedTests/_ac-baseline.md b/skills/create-test-cases/examples/generatedTests/_ac-baseline.md new file mode 100644 index 0000000..d1272c2 --- /dev/null +++ b/skills/create-test-cases/examples/generatedTests/_ac-baseline.md @@ -0,0 +1,164 @@ +--- +feature: manual-tests-execution +source: docs +sources: + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/running-tests-manually.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/managing-runs.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/rungroups.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/environments.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/reports.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/archive-runs-and-groups.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/custom-statuses.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/running-manual-and-automated-tests.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/merge-strategies.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/project/runs/temporary-tests-notes.md + - https://github.com/testomatio/docs/blob/docs/src/content/docs/advanced/tql/index.md + - UI exploration of https://app.testomat.io/projects/project-for-testing +ac_count: 96 +generated_at: 2026-04-17T00:00:00Z +--- + +## Run Creation — New Manual Run dialog + +AC-1: User can open the "New Manual Run" dialog from the Runs page by clicking the "Manual Run" button. +AC-2: The New Manual Run dialog exposes mutually exclusive scope selectors: All tests, Test plan, Select tests, Without tests. +AC-3: "All tests" is the default scope and includes all manual tests in the project. +AC-4: The "Test plan" scope supports selecting multiple plans and provides a "create new plan" action. +AC-5: The "Select tests" scope supports browsing the test tree, searching, and filter-based selection; multi-select is supported. +AC-6: The "Without tests" scope creates a run structure that can be populated later. +AC-7: The New Manual Run dialog exposes a Title field (optional), RunGroup selector, environment selector, Description (optional), and a "Run as checklist" toggle. +AC-8: The dialog exposes actions "Launch" (start run immediately), "Save" (store without launching), and "Cancel" (discard changes). +AC-9: When "Require RunGroup for new runs" is enabled in Project Settings and no RunGroup is selected, the RunGroup field is highlighted and a warning appears; launch is blocked. +AC-10: User can enable "Run Automated as Manual" toggle in the Select tests tab to include automated tests for manual re-execution. +AC-11: User can launch a single manual run from the Tests page via a test's extra menu → "Add to Run" and choosing an unfinished run. +AC-12: User can launch manual runs for one or more suites from the Tests page via suite extra menu or Multi-select → "Run Tests" → "Launch". + +## Run Creation — Additional variants (header extras menu) + +AC-13: User can create a new RunGroup via the Runs page → arrow next to Manual Run → "New group". +AC-14: The New Group dialog requires a Name and Merge Strategy; Group Type and Description are optional. +AC-15: User can launch a Mixed Run (manual + automated) via the arrow next to Manual Run → "Mixed Run". +AC-16: Mixed Run supports execution on CI (choose CI Profile) or without CI (local CLI via `@testomatio/reporter`). +AC-17: User can report automated test results via the arrow next to Manual Run → "Report Automated Tests" (CLI-driven). +AC-18: User can access a CLI launch helper via "Launch from CLI" option. + +## Test Scope — Select Tests / Plan / Without + +AC-19: In the Select tests tab, user can expand/collapse suites, toggle individual tests, and use search to filter the tree. +AC-20: Selected tests count is displayed and updates in real time as selections change. +AC-21: In the Test plan tab, selecting plans adds the plan's test set to the run. +AC-22: "Without tests" mode creates a run with zero tests that can be populated via edit or "+ Tests" / "+ Plans" later. + +## Run Lifecycle + +AC-23: Clicking "Launch" creates the run and transitions it to an active (in-progress) state. +AC-24: An ongoing/unfinished run can be resumed via "Continue" action from the Runs list. +AC-25: "Finish Run" transitions an ongoing run to a Finished state and presents a confirmation dialog. +AC-26: Finishing a run with Pending tests marks those tests as Skipped (or leaves Pending per configuration). +AC-27: User can edit an unfinished run's Assign to, Title, Environment, Description, current tests (trash delete), and add tests/plans. +AC-28: "Finish Run" is gated by a confirmation dialog before terminal transition. + +## Test Result Entry (PASSED / FAILED / SKIPPED) + +AC-29: In the Manual Runner, user can mark each test as PASSED, FAILED, or SKIPPED. +AC-30: After a standard status is chosen, a Result message field becomes editable; message is optional. +AC-31: Custom status dropdown (if configured) is shown only after a standard status is selected; it does not replace the standard status. +AC-32: User can attach files to a result via browse or drag-and-drop; attachments support Large/Small Thumbnail, Grid, and List views. +AC-33: User can open an attachment in "Fit to width" or "Full screen" mode. +AC-34: User can delete an attachment via its trash icon; the system shows "Are you sure?" confirmation before deletion. +AC-35: Test step-by-step markings: single click = Passed, double click = Failed, triple click = Skipped. +AC-36: Step results persist with the test result. + +## Tester Assignment + +AC-37: By default only the run creator is assigned to a run. +AC-38: User can add testers via the "Assign to" selector in the New Manual Run dialog (before launch) or via the Edit panel on an ongoing run. +AC-39: Auto-Assign Users strategies: None, Prefer test assignee, Randomly distribute tests between team members. +AC-40: The "Randomly distribute" strategy never assigns the manager role to any test. +AC-41: Users must be assigned to the run before they can be assigned to individual tests or suites. +AC-42: User can assign a user to a suite/folder via the suite's "Assign to" icon inside an ongoing run. +AC-43: User can assign a user to individual tests only via Multi-Select + "Assign to" bottom button, confirmed by OK in a "Are you sure…" popup. + +## Environments + +AC-44: Environments are managed at Settings → Environments; user enters one per line with recommended format `{category}:{value}` (e.g., `Browser:Chrome`). +AC-45: In the New Manual Run dialog, user can click "+" in the environment section to configure one or more environments per run group. +AC-46: Each environment group supports selecting multiple environments from the dropdown. +AC-47: "Add Environment" creates an additional environment group inside the same run. +AC-48: Multi-environment run mode "One Run" — all selected groups apply to a single run; results grouped by environment. +AC-49: Multi-environment "Launch in Sequence" — each group runs sequentially as a separate run, collected under one parent. +AC-50: Multi-environment "Launch All" (parallel) — each group starts simultaneously as a separate run. + +## RunGroups (as a container for runs) + +AC-51: A Run can be created inside an existing RunGroup; the RunGroup field is pre-populated but editable. +AC-52: User can move an existing Run into a RunGroup via the run's extra menu → "Move" → select destination → "Move". +AC-53: User can add existing runs to a RunGroup via the RunGroup's extra menu → "Add Existing Run". +AC-54: Opening a RunGroup shows a basic view with a chart, per-run summary, and Combined Report option. +AC-55: User can customize the Runs list view (columns, widths) per RunGroup; widths auto-save. +AC-56: Archiving a RunGroup archives all nested runs; unarchiving restores them all. +AC-57: Purging a RunGroup moves all nested Runs to Archive with a Purged badge; limit 20 000 runs per purge. + +## Run Lifecycle — Relaunch variants + +AC-58: "Relaunch" (manual run) re-opens the same run in Manual Runner to re-check tests; Run status updates after Finish. +AC-59: "Relaunch Failed on CI" (automated/mixed) re-runs only failed automated tests on CI; failed manual tests open in Manual Runner. +AC-60: "Relaunch All on CI" re-runs all automated tests on CI; mixed runs also open Manual Runner. +AC-61: "Relaunch Manually" re-executes all tests manually in UI (no CI or CLI). +AC-62: "Advanced Relaunch" opens a sidebar with: custom run title, "Create new run" toggle, "Keep values" toggle (enabled only with Create new run ON), per-test selection, and Relaunch action. +AC-63: Advanced Relaunch "Create new run: ON" creates a new Run ID; selected tests reset to Pending unless Keep values is ON. +AC-64: Advanced Relaunch "Create new run: OFF" reuses the original Run ID; only selected tests reset to Pending. +AC-65: "Keep values: ON" preserves selected and unselected test statuses in the new run; OFF resets them to Pending. +AC-66: With a filter applied, selection methods (Checkbox vs "Select All") include only tests matching the filter. +AC-67: "Launch a Copy" creates a separate duplicate run; both original and copy appear in Runs list after finishing. + +## Runs List — filter tabs / row actions / multi-select + +AC-68: Runs list supports filter tabs: Manual, Automated, Mixed, Unfinished, Groups. +AC-69: Each run row has an extra "..." menu with actions: Relaunch, Launch a Copy, Advanced Relaunch, Copy, Pin, Move, Labels, Archive, Purge, Export as PDF, Download (spreadsheet). +AC-70: User can Pin a Run or RunGroup; pinned items appear at the top of the list. +AC-71: Multi-select on Runs exposes bulk actions: Select all, Archive, Labels, Compare, Extra menu (Link, Download, Merge, Move), Purge. +AC-72: User can filter the Runs list via TQL in the Query Language Editor (variables include rungroup, env, passed_count, finished_at, has_test_label, has_custom_status, etc.). +AC-73: Filter parameters can be shared via URL (Runs page and Runs Archive page). +AC-74: User can customize the Runs list view (columns, widths) via Custom view Settings. + +## Archive / Purge + +AC-75: User can Archive a single Run or RunGroup from its extra menu → "Archive" → Confirm; item gets an "archived" badge. +AC-76: Archiving a run with Pending tests sets the run status to Terminated and Pending tests to Skipped; other statuses remain. +AC-77: Archive access is via "Runs/Groups Archive" at the bottom of the Runs page or via the Extra menu. +AC-78: "Purge" replaces Delete for Runs — compresses and moves to Archive with a Purged badge; test results, artifacts, custom statuses preserved; stack traces removed. +AC-79: Automatic Purge is controlled by Project Settings → Purge Old Runs; default retention 90 days; auto-purged runs get the Purged badge. +AC-80: Ongoing purged run: run terminated, recorded statuses kept, Pending → Skipped, receives a "terminated" flag; restored terminated runs cannot be resumed. +AC-81: Permanent deletion from Archive is irreversible and tracked in Pulse under "Deleted Run". + +## Run Detail / Run Report + +AC-82: Clicking a Run opens the Basic Run Report with tests list, statuses (Passed, Failed, Skipped, Pending, Custom), and overall Run summary. +AC-83: Run Report supports tabs/sections: Tests, Statistics, Defects. +AC-84: Test sub-panel (inside Run Report) shows tabs: Summary, Description, Code Template, Runs. +AC-85: User can sort tests by suite/name/failure status and filter by status, type, messages, custom statuses, assignees. +AC-86: Extended Run Report shows grouped overview (suites/tags/labels/assignees/priorities), Run Report Summary, Flaky Tests Analytics (when applicable); keys ↑/↓ navigate tests. +AC-87: User can Download run(s) as Spreadsheet (XLSX) via extra menu → Download (multi-run or single-run). +AC-88: User can Export a run as PDF via extra menu → Export as PDF. +AC-89: User can Share a Report by Email from Extended view → "Share Report by Email"; comma-separated emails supported. +AC-90: User can Share a Report Publicly from Extended view (requires Company + Project "Sharing" enabled); dialog has Expiration (default 7 days) and "Protect by passcode" toggle (ON by default). +AC-91: Public Share generates a URL and Passcode (shown once); user can "Stop Sharing" at any time. +AC-92: User can Compare multiple selected runs via Multi-select → "Compare". + +## Bulk Status Actions in Runner + +AC-93: In the Manual Runner, user can multi-select tests and apply bulk actions: Assign to, Result message (with status), and others. +AC-94: Bulk "Result message" requires status choice + optional message → "Apply"; statuses reflect immediately. +AC-95: Status counters (Passed N / Failed N / Skipped N / Pending N) update immediately after bulk apply. + +## Run as Checklist / Notes / Auto-Track / Time Tracking + +AC-96: "Run as checklist" hides test descriptions in the launched run; a test's description can be revealed via extra menu → "Toggle Description". + +## UNCLEAR / To be verified in UI + +AC-97: UNCLEAR — whether a "Fast Forward" control exists separately from "Auto-Track"; docs only mention Auto-Track. +AC-98: UNCLEAR — exact "Defects" tab behaviour inside the run detail (docs do not describe the tab in depth). +AC-99: UNCLEAR — whether "Copy Link" action exists on Run Report extra menu for non-public sharing. +AC-100: UNCLEAR — complete permission matrix (who may Start, Finish, Assign, Archive, Purge a run; impact of readonly vs qa vs manager roles). diff --git a/skills/create-test-cases/examples/generatedTests/_existing-steps.md b/skills/create-test-cases/examples/generatedTests/_existing-steps.md new file mode 100644 index 0000000..63c3727 --- /dev/null +++ b/skills/create-test-cases/examples/generatedTests/_existing-steps.md @@ -0,0 +1,25 @@ +--- +feature: manual-tests-execution +fetched_at: 2026-04-17T00:00:00Z +step_count: 14 +source: testomatio-mcp +--- + +## Existing step phrases + +Reusable phrases from Testomat.io step library (top usage, relevant to runs / manual execution). Prefer these in Step 3 Phase 2 when semantically equivalent. + +- open a project +- Navigate to the 'Runs' page +- Navigate to the 'Tests' page +- Navigate to the 'Settings' tab in the left sidebar +- go to Runs +- Click the 'Save' button +- Click the 'Create' button +- Click the 'Update' button +- Click the '...' extra menu +- save +- Click +- expant suites +- Select the 'Scope: all' +- Enter a unique label name in the field diff --git a/skills/create-test-cases/examples/generatedTests/_feature-review.md b/skills/create-test-cases/examples/generatedTests/_feature-review.md new file mode 100644 index 0000000..3809f55 --- /dev/null +++ b/skills/create-test-cases/examples/generatedTests/_feature-review.md @@ -0,0 +1,213 @@ +# Level 1 Cross-Sub-Feature Audit — manual-tests-execution + +Generated: 2026-04-20 +Scope: cross-cutting analysis only. Per-sub-feature Phase 3 reviews not re-executed. + +| Metric | Value | +|---|---| +| Sub-features | 10 | +| Total tests (by `` + `#` heading | ✅ | ✅ | ✅ | ✅ | +| Suite intro paragraph naming non-ownership | ✅ | ✅ ("Does NOT cover …") | ✅ ("Does NOT cover …") | ✅ | +| `` frontmatter with all required fields | ✅ | ✅ | ✅ | ✅ | +| Parameterized titles use `${snake_case}` | ✅ (`${dismiss_method}`) | ✅ (`${strategy}`, `${type}`) | ✅ (`${entry_point}`, `${badge}`) | ✅ | +| No AC refs in titles | ✅ | ✅ | ✅ | ✅ | +| Scenario tags appended | `@smoke`, `@negative` | `@smoke`, `@negative`, `@boundary` | `@smoke`, `@negative`, `@unclear` | ✅ | +| UI label quoting convention | Single quotes `'Runs'` | **Backticks** `` `Manual Run` `` | **Backticks** `` `Move to Archive` `` | ⚠️ DRIFT — `_style.md` §Language states single quotes (`Click the 'Launch' button`), but run-groups and archive-and-purge switched to backticks. Consistent within each sub-feature but inconsistent across the feature. | +| `_Expected_:` structure (single / multi-bullet) | Mixed (matches guide) | Mixed (matches guide) | Mixed (matches guide) | ✅ | +| Preconditions section | Omitted when none | Present | Present | ✅ | +| Priority distribution | 4 crit / 10 high / 26 normal / 4 low (pyramid) | 2 / 8 / 17 / 2 (pyramid) | 6 / 15 / 17 / 5 (pyramid) | ✅ | + +**Key finding — Style drift:** The `'` (single quote) vs `` ` `` (backtick) convention for UI labels diverged starting with run-groups. `_style.md` examples (line 73) specify single quotes: `Click the 'Launch' button`. Sub-features 5 (run-groups), 7 (bulk-status-actions), 8 (runs-list-management), 9 (run-detail-and-report), 10 (archive-and-purge) predominantly use backticks. Sub-features 1 (run-creation), 2 (runner), 3 (lifecycle), 4 (tester-assignment), 5 (environment-configuration) predominantly use single quotes. + +Priority pyramids: all ten sub-features show a normal-dominant shape with critical + high ≈ 30–45%. No flat distributions. Matches style guide expectation. + +--- + +## 5. Shared UI / Steps Drift + +`_existing-steps.md` lists 14 reusable Testomat.io-registered phrases. Scan results: + +| Existing step | Occurrences across test files | Comment | +|---|---|---| +| `Navigate to the 'Runs' page` | many (run-creation × 6, run-lifecycle × 5, tester-assignment × many) | Reused correctly. | +| `Navigate to the 'Tests' page` | multiple | Reused correctly. | +| `Click the 'Save' button` | multiple | Reused correctly. | +| `Click the 'Create' button` | multiple | Reused correctly. | +| `Click the '...' extra menu` | appears as variation "Open the extra menu on the … row" (archive-and-purge) | ⚠️ DRIFT — archive-and-purge writes `Open the extra menu on the {row} row` which is semantically equivalent but not the registered phrase `Click the '...' extra menu`. 30+ instances across archive/lifecycle. | +| `go to Runs` | 0 direct uses; zero hits in test folders | ✅ Tests prefer the canonical phrase. | +| `expant suites` (typo in source) | 0 uses | ✅ Tests ignore the typo-containing phrase. | +| `Select the 'Scope: all'` | 0 exact; scope selection uses "Click the 'All tests' tab" | ⚠️ Minor — test authors re-worded rather than reused. | + +**Overall drift: LOW.** The most common drift is the "extra menu" phrasing in archive-and-purge/run-lifecycle, where `Open the extra menu on the {row} row` is used instead of the registered `Click the '...' extra menu`. Not a blocker (the registered phrase places the `...` quoted literal which is less natural when naming a row target), but worth flagging for library reuse at publish time. + +--- + +## 6. Anti-pattern Smoke Check + +Scan confined to `{sub}/*.md` test case files (not ui-delta / scope / review docs). + +| Pattern | Total occurrences | Sub-features affected | Examples | +|---|---|---|---| +| `.css-` class leak | 0 | — | ✅ clean | +| `class="…"` attribute leak | 0 | — | ✅ clean | +| `icon-*` class leak | 3 | test-execution-runner (2), runs-list-management (1) | `test-execution-runner/notes.md:23,158` say "icon-only" (descriptive, false positive); `runs-list-management/row-extra-menu.md:243` leaks `svg.md-icon-pin` inside a ui-validator footer note (borderline — not a test step). | +| ``, ``) | Noise in a manual checklist; testers can't visually parse escaping from raw markup | Describe in prose: "a message containing HTML/script markup (e.g. a `