@keber/qa-framework 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +63 -18
  2. package/README.md +2 -2
  3. package/docs/architecture.md +30 -26
  4. package/docs/decisions/lane-heartbeat-caller.md +86 -0
  5. package/docs/final-report.md +23 -23
  6. package/docs/folder-structure-guide.md +106 -80
  7. package/docs/installation.md +35 -7
  8. package/docs/skills-architecture.md +23 -23
  9. package/docs/spec-driven-philosophy.md +9 -9
  10. package/docs/usage-with-agent.md +83 -9
  11. package/docs/visuals/diag-01-ejecutivo-1.png +0 -0
  12. package/docs/visuals/diag-02-tactico-1.png +0 -0
  13. package/docs/visuals/diag-03-tecnico-1.png +0 -0
  14. package/docs/visuals/info-01-ejecutivo-1.png +0 -0
  15. package/docs/visuals/info-02-tactico-1.png +0 -0
  16. package/docs/visuals/info-03-tecnico-1.png +0 -0
  17. package/docs/visuals/pres-01-ejecutivo-1.png +0 -0
  18. package/docs/visuals/pres-02-tactico-1.png +0 -0
  19. package/docs/visuals/pres-03-tecnico-1.png +0 -0
  20. package/docs/visuals/qa-01-problema-1.png +0 -0
  21. package/docs/visuals/qa-02-que-es-1.png +0 -0
  22. package/docs/visuals/qa-03-pipeline-1.png +0 -0
  23. package/docs/visuals/qa-04-6-archivos-1.png +0 -0
  24. package/docs/visuals/qa-05-humano-1.png +0 -0
  25. package/docs/visuals/qa-06-agente-1.png +0 -0
  26. package/docs/visuals/qa-07-skills-arch-1.png +0 -0
  27. package/docs/visuals/qa-08-traceability-1.png +0 -0
  28. package/docs/visuals/qa-en-01-problem-1.png +0 -0
  29. package/docs/visuals/qa-en-02-what-is-1.png +0 -0
  30. package/docs/visuals/qa-en-03-pipeline-1.png +0 -0
  31. package/docs/visuals/qa-en-04-6files-1.png +0 -0
  32. package/docs/visuals/qa-en-05-human-1.png +0 -0
  33. package/docs/visuals/qa-en-06-agent-1.png +0 -0
  34. package/docs/visuals/qa-en-07-skills-arch-1.png +0 -0
  35. package/docs/visuals/qa-en-08-traceability-1.png +0 -0
  36. package/examples/module-example/suppliers/00-inventory.md +1 -1
  37. package/examples/module-example/suppliers/suppliers-create.spec.ts +8 -8
  38. package/integrations/ado-powershell/README.md +1 -1
  39. package/integrations/ado-powershell/pipelines/azure-pipeline-qa.yml +92 -25
  40. package/integrations/ado-powershell/scripts/sync-ado-titles.ps1 +2 -2
  41. package/integrations/playwright/README.md +128 -4
  42. package/package.json +9 -6
  43. package/qa-framework.config.json +24 -3
  44. package/scripts/check-forbidden-chars.js +187 -0
  45. package/scripts/check-spanish-accents.js +159 -0
  46. package/scripts/cli.js +1 -1
  47. package/scripts/generate.js +2 -2
  48. package/scripts/init.js +108 -45
  49. package/scripts/lib/claude-agents.js +78 -0
  50. package/scripts/lib/claude-commands.js +56 -0
  51. package/scripts/sync-version.js +36 -0
  52. package/scripts/upgrade.js +461 -30
  53. package/scripts/validate.js +17 -17
  54. package/skills/qa-ado-integration/SKILL.md +19 -19
  55. package/skills/qa-ado-integration/references/scripts-and-config.md +6 -6
  56. package/skills/qa-automation/SKILL.md +49 -27
  57. package/skills/qa-automation/references/config-checklist.md +4 -4
  58. package/skills/qa-automation/references/dom-inspection-template.js +7 -7
  59. package/skills/qa-automation/references/patterns.md +20 -20
  60. package/skills/qa-automation/references/pom-template.md +161 -0
  61. package/skills/qa-maintenance/SKILL.md +11 -11
  62. package/skills/qa-maintenance/references/update-rules.md +8 -8
  63. package/skills/qa-module-analysis/SKILL.md +20 -19
  64. package/skills/qa-module-analysis/references/exploration-checklist.md +4 -4
  65. package/skills/qa-module-analysis/references/output-verification.md +69 -0
  66. package/skills/qa-module-analysis/references/spec-file-formats.md +14 -14
  67. package/skills/qa-spec-generation/SKILL.md +13 -7
  68. package/skills/qa-test-cases/SKILL.md +11 -81
  69. package/skills/qa-test-cases/references/test-case-template.md +5 -5
  70. package/skills/qa-test-plan/SKILL.md +22 -86
  71. package/skills/qa-test-plan/references/plan-de-pruebas-template.md +24 -24
  72. package/skills/qa-test-stabilization/SKILL.md +59 -30
  73. package/skills/qa-test-stabilization/references/classification-protocol.md +35 -35
  74. package/templates/agent-next-steps.md +10 -10
  75. package/templates/agents/qa-analisis.md +142 -0
  76. package/templates/agents/qa-asesoria.md +48 -0
  77. package/templates/agents/qa-informe-resultados.md +234 -0
  78. package/templates/agents/qa-plan.md +131 -0
  79. package/templates/automation-scaffold/.env.example +52 -3
  80. package/templates/automation-scaffold/fixtures/auth.ts +27 -5
  81. package/templates/automation-scaffold/fixtures/base.ts +130 -0
  82. package/templates/automation-scaffold/fixtures/test-helpers.ts +1 -1
  83. package/templates/automation-scaffold/global-setup.ts +196 -37
  84. package/templates/automation-scaffold/playwright.config.ts +74 -10
  85. package/templates/automation-scaffold/scripts/global-setup-guards.js +184 -0
  86. package/templates/automation-scaffold/scripts/lane-config.js +269 -0
  87. package/templates/automation-scaffold/scripts/lane-lock.js +589 -0
  88. package/templates/defect-report.md +18 -4
  89. package/templates/execution-report.md +9 -9
  90. package/templates/integration-scaffold/.env.example +40 -0
  91. package/templates/integration-scaffold/README.md +77 -0
  92. package/templates/integration-scaffold/global-setup.ts +119 -0
  93. package/templates/integration-scaffold/package.json +15 -0
  94. package/templates/integration-scaffold/playwright.config.ts +92 -0
  95. package/templates/integration-scaffold/tests/example.spec.ts +43 -0
  96. package/templates/memory/ci-pipeline-findings.md +36 -0
  97. package/templates/memory/data-volatility-strategies.md +70 -0
  98. package/templates/memory/e2e-stabilization-patterns.md +54 -0
  99. package/templates/qa-framework.instructions.md +16 -7
  100. package/templates/qa-framework.rules.md +53 -0
  101. package/templates/qa-readme.md +26 -5
  102. package/templates/session-summary.md +2 -2
  103. package/templates/specification/00-inventory.md +3 -3
  104. package/templates/specification/01-business-rules.md +6 -6
  105. package/templates/specification/02-workflows.md +1 -1
  106. package/templates/specification/03-roles-permissions.md +1 -1
  107. package/templates/specification/04-test-data.md +8 -8
  108. package/templates/specification/05-test-scenarios.md +5 -5
  109. package/templates/test-case.md +3 -3
  110. package/templates/test-data-guidelines.md +7 -7
  111. package/templates/test-plan-sprint.md +13 -13
  112. package/templates/test-plan.md +3 -3
  113. package/skills/qa-test-plan/references/priority-and-feasibility.md +0 -159
@@ -1,7 +1,8 @@
1
- # QA — {PROJECT_DISPLAY_NAME}
1
+ # QA - {PROJECT_DISPLAY_NAME}
2
2
 
3
3
  > Framework: `@keber/qa-framework` v{VERSION}
4
4
  > Language: {LANGUAGE} | Base URL: `{QA_BASE_URL}`
5
+ > ADO Project: `{ADO_ORG} / {ADO_PROJECT}` _(optional - remove line if not using Azure DevOps)_
5
6
 
6
7
  ---
7
8
 
@@ -9,7 +10,7 @@
9
10
 
10
11
  | Module | Submodule | TCs Total | TCs Automated | Plan | ADO Suite | Status | Last Run |
11
12
  |---|---|---|---|---|---|---|---|
12
- | {MODULE_NAME} | {SUBMODULE_NAME} | — | — | ⬜ | — | 🔲 Not started | — |
13
+ | {MODULE_NAME} | {SUBMODULE_NAME} | - | - | ⬜ | - | 🔲 Not started | - |
13
14
 
14
15
  **Legend**: ✅ Done · ⚠️ Partial · 🔲 Not started · ⛔ Blocked
15
16
 
@@ -43,15 +44,35 @@ npx playwright test --last-failed
43
44
 
44
45
  | ID | Description | Affects | Opened | Status |
45
46
  |---|---|---|---|---|
46
- | — | No active blockers | — | — | — |
47
+ | - | No active blockers | - | - | - |
47
48
 
48
49
  ---
49
50
 
51
+ ## Last Run
52
+
53
+ | Suite | Date | Pass | Fail | Skip | CI Link |
54
+ |---|---|---|---|---|---|
55
+ | E2E | - | - | - | - | - |
56
+ | API | - | - | - | - | - |
57
+
58
+ > Update this table after each significant run. The CI Link can be an ADO TestRun URL, a
59
+ > GitHub Actions run URL, or a path to a local report file.
60
+
50
61
  ## Last Execution
51
62
 
52
63
  | Date | Suite | Pass | Skip | Fail | Duration | Report |
53
64
  |---|---|---|---|---|---|---|
54
- | — | — | — | — | — | — | — |
65
+ | - | - | - | - | - | - | - |
66
+
67
+ ## Flaky Tests
68
+
69
+ > Mark known flaky tests with this inline annotation directly in the table or spec file.
70
+ > Format: `[flaky] <test-id-or-name> - <root cause> - last seen <YYYY-MM-DD>`
71
+ >
72
+ > Example:
73
+ > `[flaky] TC-MOD-012 - timing issue on slow CI agents - last seen 2026-01-15`
74
+ >
75
+ > Remove the annotation once the test has been stable for 2+ consecutive CI runs.
55
76
 
56
77
  ---
57
78
 
@@ -60,7 +81,7 @@ npx playwright test --last-failed
60
81
  <!-- Completed sprint checklists are moved here from AGENT-NEXT-STEPS.md -->
61
82
  <!-- Format per sprint: -->
62
83
  <!--
63
- ### Sprint N — {SPRINT_NAME} ({YYYY-MM-DD})
84
+ ### Sprint N - {SPRINT_NAME} ({YYYY-MM-DD})
64
85
 
65
86
  **Submodules**: {list}
66
87
  **TCs automated**: {N} P0 + {M} P1
@@ -1,4 +1,4 @@
1
- # Session Summary — {{SESSION_TITLE}}
1
+ # Session Summary - {{SESSION_TITLE}}
2
2
 
3
3
  **Date**: YYYY-MM-DD
4
4
  **Session type**: Module Analysis / Spec Generation / Test Plan / Automation / ADO Sync / Maintenance
@@ -44,7 +44,7 @@
44
44
 
45
45
  | DEF-ID | Title | Severity | File opened? |
46
46
  |--------|-------|----------|--------------|
47
- | DEF-{{NNN}} | {{title}} | {{severity}} | Yes — `qa/06-defects/open/DEF-{{NNN}}.md` |
47
+ | DEF-{{NNN}} | {{title}} | {{severity}} | Yes - `qa/06-defects/open/DEF-{{NNN}}.md` |
48
48
 
49
49
  ---
50
50
 
@@ -1,4 +1,4 @@
1
- # MODULE: {{MODULE_NAME}} — Submodule: {{SUBMODULE_NAME}}
1
+ # MODULE: {{MODULE_NAME}} - Submodule: {{SUBMODULE_NAME}}
2
2
 
3
3
  > **Template version**: 1.0 | Replace all `{{...}}` with actual values before committing.
4
4
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  | Level | Label | URL |
20
20
  |-------|-------|-----|
21
- | 1 | {{TOP_MENU}} | — |
21
+ | 1 | {{TOP_MENU}} | - |
22
22
  | 2 | {{SUBMENU}} | `{{URL}}` |
23
23
 
24
24
  ---
@@ -71,7 +71,7 @@
71
71
  | Submodule | Relationship | Notes |
72
72
  |-----------|-------------|-------|
73
73
  | {{submodule}} | Provides data to this module | Dropdown populated from {{API}} |
74
- | {{submodule}} | Depends on data from this module | — |
74
+ | {{submodule}} | Depends on data from this module | - |
75
75
 
76
76
  ---
77
77
 
@@ -1,4 +1,4 @@
1
- # Business Rules — {{MODULE_NAME}}: {{SUBMODULE_NAME}}
1
+ # Business Rules - {{MODULE_NAME}}: {{SUBMODULE_NAME}}
2
2
 
3
3
  > **Module code**: {{MODULE_CODE}} | **Submodule code**: {{SUBMODULE_CODE}}
4
4
  > **Last updated**: YYYY-MM-DD
@@ -32,7 +32,7 @@
32
32
  - **Type**: Access Control
33
33
  - **Trigger**: When user with role {{role}} navigates to {{URL}}
34
34
  - **Behavior**: {{redirect / error / empty page}}
35
- - **Notes**: —
35
+ - **Notes**: -
36
36
 
37
37
  ---
38
38
 
@@ -42,7 +42,7 @@
42
42
  - **Trigger**: When {{action}} is performed on a record with status {{STATUS_A}}
43
43
  - **Behavior**: Record transitions from {{STATUS_A}} to {{STATUS_B}}
44
44
  - **Invalid state**: Attempting this action on status {{STATUS_C}} results in {{error}}
45
- - **Notes**: —
45
+ - **Notes**: -
46
46
 
47
47
  ---
48
48
 
@@ -51,7 +51,7 @@
51
51
  - **Type**: Calculation
52
52
  - **Trigger**: When {{field}} or {{field}} changes
53
53
  - **Behavior**: {{calculated_field}} = {{formula}}
54
- - **Notes**: —
54
+ - **Notes**: -
55
55
 
56
56
  ---
57
57
 
@@ -59,9 +59,9 @@
59
59
 
60
60
  - **Type**: Integration
61
61
  - **Trigger**: When {{action}} completes successfully
62
- - **Behavior**: {{external system}} is notified/called — {{what happens}}
62
+ - **Behavior**: {{external system}} is notified/called - {{what happens}}
63
63
  - **Fallback**: {{what happens if external system fails}}
64
- - **Notes**: —
64
+ - **Notes**: -
65
65
 
66
66
  ---
67
67
 
@@ -1,4 +1,4 @@
1
- # Workflows — {{MODULE_NAME}}: {{SUBMODULE_NAME}}
1
+ # Workflows - {{MODULE_NAME}}: {{SUBMODULE_NAME}}
2
2
 
3
3
  > **Module code**: {{MODULE_CODE}} | **Submodule code**: {{SUBMODULE_CODE}}
4
4
  > **Last updated**: YYYY-MM-DD
@@ -1,4 +1,4 @@
1
- # Roles and Permissions — {{MODULE_NAME}}: {{SUBMODULE_NAME}}
1
+ # Roles and Permissions - {{MODULE_NAME}}: {{SUBMODULE_NAME}}
2
2
 
3
3
  > **Module code**: {{MODULE_CODE}} | **Submodule code**: {{SUBMODULE_CODE}}
4
4
  > **Last updated**: YYYY-MM-DD
@@ -1,4 +1,4 @@
1
- # Test Data — {{MODULE_NAME}}: {{SUBMODULE_NAME}}
1
+ # Test Data - {{MODULE_NAME}}: {{SUBMODULE_NAME}}
2
2
 
3
3
  > **Module code**: {{MODULE_CODE}} | **Submodule code**: {{SUBMODULE_CODE}}
4
4
  > **Last updated**: YYYY-MM-DD
@@ -23,13 +23,13 @@ The following data must exist in the QA environment before tests run:
23
23
 
24
24
  ## Data Shapes for Key Scenarios
25
25
 
26
- ### Scenario: Happy path — create record
26
+ ### Scenario: Happy path - create record
27
27
 
28
28
  | Field | Value / Rule |
29
29
  |-------|-------------|
30
- | {{name-field}} | `Test-{EXEC_IDX}` — unique per run via EXEC_IDX pattern |
30
+ | {{name-field}} | `Test-{EXEC_IDX}` - unique per run via EXEC_IDX pattern |
31
31
  | {{select-field}} | Any valid option (first option is acceptable) |
32
- | {{date-field}} | `${2120 + (EXEC_IDX % 10)}-01-01` — future date, collision-resistant |
32
+ | {{date-field}} | `${2120 + (EXEC_IDX % 10)}-01-01` - future date, collision-resistant |
33
33
  | User | `{{Role 1}}`, credentials from `QA_USER_{{ROLE1_UPPER}}_EMAIL` |
34
34
 
35
35
  ### Scenario: Required field validation
@@ -49,7 +49,7 @@ The following data must exist in the QA environment before tests run:
49
49
 
50
50
  **Expected**: System error message: "{{exact duplicate error text}}"
51
51
 
52
- ### Scenario: State transition — {{action}}
52
+ ### Scenario: State transition - {{action}}
53
53
 
54
54
  | Field | Value |
55
55
  |-------|-------|
@@ -82,8 +82,8 @@ const testDate = `${year}-${month}-${day}`;
82
82
 
83
83
  ## Data Isolation Rules
84
84
 
85
- 1. Each test creates its own data — no shared mutable state between tests
86
- 2. `beforeAll` creates records for the entire suite — provision ≥ N records for N consuming tests
85
+ 1. Each test creates its own data - no shared mutable state between tests
86
+ 2. `beforeAll` creates records for the entire suite - provision ≥ N records for N consuming tests
87
87
  3. No test teardown required when EXEC_IDX-based names are used (future-dated records do not collide across runs)
88
88
  4. If a test modifies shared data (approve/reject), it must create its own record in `beforeAll`
89
89
 
@@ -93,7 +93,7 @@ const testDate = `${year}-${month}-${day}`;
93
93
 
94
94
  | Item | Reason for retirement | Replaced by |
95
95
  |------|-----------------------|-------------|
96
- | {{item}} | Real employee data — PII risk | EXEC_IDX-generated test record |
96
+ | {{item}} | Real employee data - PII risk | EXEC_IDX-generated test record |
97
97
 
98
98
  ---
99
99
 
@@ -1,4 +1,4 @@
1
- # Test Scenarios — {{MODULE_NAME}}: {{SUBMODULE_NAME}}
1
+ # Test Scenarios - {{MODULE_NAME}}: {{SUBMODULE_NAME}}
2
2
 
3
3
  > **Module code**: {{MODULE_CODE}} | **Submodule code**: {{SUBMODULE_CODE}}
4
4
  > **Last updated**: YYYY-MM-DD
@@ -75,7 +75,7 @@
75
75
 
76
76
  ---
77
77
 
78
- ### TC-{{M}}-{{S}}-004: Create new record — happy path
78
+ ### TC-{{M}}-{{S}}-004: Create new record - happy path
79
79
 
80
80
  | Field | Value |
81
81
  |-------|-------|
@@ -97,7 +97,7 @@
97
97
 
98
98
  ---
99
99
 
100
- ### TC-{{M}}-{{S}}-005: Required field validation — name empty
100
+ ### TC-{{M}}-{{S}}-005: Required field validation - name empty
101
101
 
102
102
  | Field | Value |
103
103
  |-------|-------|
@@ -213,9 +213,9 @@
213
213
 
214
214
  | TC ID | Business Rules | Workflow |
215
215
  |-------|---------------|---------|
216
- | TC-{{M}}-{{S}}-001 | — | — |
216
+ | TC-{{M}}-{{S}}-001 | - | - |
217
217
  | TC-{{M}}-{{S}}-004 | RN-{{M}}-001 | FL-{{M}}-001 |
218
- | TC-{{M}}-{{S}}-005 | RN-{{M}}-001 | — |
218
+ | TC-{{M}}-{{S}}-005 | RN-{{M}}-001 | - |
219
219
 
220
220
  ---
221
221
 
@@ -1,4 +1,4 @@
1
- # Test Case — TC-{{MODULE}}-{{SUB}}-{{NNN}}: {{Title}}
1
+ # Test Case - TC-{{MODULE}}-{{SUB}}-{{NNN}}: {{Title}}
2
2
 
3
3
  | Field | Value |
4
4
  |-------|-------|
@@ -11,8 +11,8 @@
11
11
  | Type | Functional / Integration / Regression / Smoke |
12
12
  | Execution | Manual / Automated / Both |
13
13
  | Automation file | `qa/07-automation/e2e/{{module}}/{{submodule}}.spec.ts` (if automated) |
14
- | Preconditions | {{List required setup — see 04-test-data.md}} |
15
- | Author | (agent output — reviewed by human) |
14
+ | Preconditions | {{List required setup - see 04-test-data.md}} |
15
+ | Author | (agent output - reviewed by human) |
16
16
  | Last updated | YYYY-MM-DD |
17
17
 
18
18
  ---
@@ -16,7 +16,7 @@ All user emails, passwords, API keys, and tokens must come from environment vari
16
16
  const email = process.env.QA_USER_EMAIL!;
17
17
  const password = process.env.QA_USER_PASSWORD!;
18
18
 
19
- // ❌ WRONG — never commit credentials
19
+ // ❌ WRONG - never commit credentials
20
20
  const email = 'admin@example.com';
21
21
  const password = 'secret123';
22
22
  ```
@@ -25,7 +25,7 @@ Document env var names in `qa/04-test-data/users.md`. Use `<PLACEHOLDER>` for va
25
25
 
26
26
  ### 2. Use EXEC_IDX for unique values per run
27
27
 
28
- Never create records with static names — they collide between runs and can leave leftover data.
28
+ Never create records with static names - they collide between runs and can leave leftover data.
29
29
 
30
30
  ```typescript
31
31
  const EXEC_IDX = Math.floor(Date.now() / 60_000) % 100_000;
@@ -42,7 +42,7 @@ const date = `${year}-${month}-${day}`;
42
42
 
43
43
  ### 3. Provision in `beforeAll`, not `beforeEach`
44
44
 
45
- Create required records once per suite, not once per test. Each test that **consumes** a record needs its own provisioned record — never share a single record among multiple tests.
45
+ Create required records once per suite, not once per test. Each test that **consumes** a record needs its own provisioned record - never share a single record among multiple tests.
46
46
 
47
47
  ```typescript
48
48
  test.beforeAll(async ({ browser }) => {
@@ -61,10 +61,10 @@ Complex setup that cannot be done via the UI goes in a seeder script, not inside
61
61
 
62
62
  ```
63
63
  qa/04-test-data/
64
- ├── users.md ← Role catalog + env var names (no real values)
65
- ├── fixtures/ ← Static JSON/Markdown for reference data
66
- ├── factories/ ← Dynamic data generation patterns
67
- └── seeders/ ← DB/API seed scripts for complex prerequisites
64
+ ├── users.md <- Role catalog + env var names (no real values)
65
+ ├── fixtures/ <- Static JSON/Markdown for reference data
66
+ ├── factories/ <- Dynamic data generation patterns
67
+ └── seeders/ <- DB/API seed scripts for complex prerequisites
68
68
  ```
69
69
 
70
70
  ### 5. Add `.env` and `.auth/` to `.gitignore`
@@ -1,4 +1,4 @@
1
- # Plan de Pruebas — {{PROYECTO}} — Sprint {{NNN}} — {{MODULO_NOMBRE}}
1
+ # Plan de Pruebas - {{PROYECTO}} - Sprint {{NNN}} - {{MODULO_NOMBRE}}
2
2
 
3
3
  **Proyecto:** {{PROYECTO}}
4
4
  **Sprint:** {{NNN}}
@@ -6,7 +6,7 @@
6
6
  **Código módulo:** {{MODULO_CODE}}
7
7
  **Fecha planificación:** {{YYYY-MM-DD}}
8
8
  **Ventana QA:** {{YYYY-MM-DD}} y {{YYYY-MM-DD}}
9
- **ADO Test Plan:** [Plan {{ADO_PLAN_ID}} — {{PROYECTO}} Sprint {{NNN}}]({{ADO_TEST_PLAN_URL}}) *(omitir si ADO no está habilitado)*
9
+ **ADO Test Plan:** [Plan {{ADO_PLAN_ID}} - {{PROYECTO}} Sprint {{NNN}}]({{ADO_TEST_PLAN_URL}}) *(omitir si ADO no está habilitado)*
10
10
 
11
11
  ---
12
12
 
@@ -37,27 +37,27 @@
37
37
  > Si no hay ADO, listar los requerimientos o módulos abordados.
38
38
 
39
39
  ### {{AREA_FUNCIONAL_1}}
40
- - Task {{ID}} — {{DESCRIPCION}}
41
- - Task {{ID}} — {{DESCRIPCION}}
40
+ - Task {{ID}} - {{DESCRIPCION}}
41
+ - Task {{ID}} - {{DESCRIPCION}}
42
42
 
43
43
  ### {{AREA_FUNCIONAL_2}}
44
- - Task {{ID}} — {{DESCRIPCION}}
44
+ - Task {{ID}} - {{DESCRIPCION}}
45
45
 
46
46
  ---
47
47
 
48
48
  ## 4. Priorización
49
49
 
50
- **P0 – Confirmación (obligatorio)**
50
+ **P0 - Confirmación (obligatorio)**
51
51
  - {{ESCENARIO_CRITICO_1}}
52
52
  - {{ESCENARIO_CRITICO_2}}
53
53
 
54
- **P1 – Smoke (camino feliz)**
54
+ **P1 - Smoke (camino feliz)**
55
55
  - {{FLUJO_PRINCIPAL}}
56
56
 
57
- **P2 – Regresión mínima adyacente**
57
+ **P2 - Regresión mínima adyacente**
58
58
  - {{REGRESION_1}}
59
59
 
60
- **P3 – Exploratoria (timeboxed)**
60
+ **P3 - Exploratoria (timeboxed)**
61
61
  - Charter 1 ({{N}} min): {{DESCRIPCION_CHARTER}}
62
62
 
63
63
  ---
@@ -77,8 +77,8 @@
77
77
 
78
78
  - Ambiente QA disponible en `{{QA_BASE_URL}}`
79
79
  - Roles disponibles:
80
- - Usuario **{{ROL_1}}** — para {{ACCION}}
81
- - Usuario **{{ROL_2}}** — para {{ACCION}}
80
+ - Usuario **{{ROL_1}}** - para {{ACCION}}
81
+ - Usuario **{{ROL_2}}** - para {{ACCION}}
82
82
  - Datos base:
83
83
  - {{DATO_BASE_1}}
84
84
  - {{DATO_BASE_2}}
@@ -109,7 +109,7 @@
109
109
 
110
110
  > Convenciones:
111
111
  > - **TC-ID:** `TC-{{MODULO_CODE}}-{{SUBMODULO_CODE}}-NNN` (o `N/A` si no hay ID asignado aún)
112
- > - **Steps:** numerados, separados por `<br>` — verbos concretos de UI (`Navegar a`, `Ingresar`, `Hacer click`, `Verificar`)
112
+ > - **Steps:** numerados, separados por `<br>` - verbos concretos de UI (`Navegar a`, `Ingresar`, `Hacer click`, `Verificar`)
113
113
  > - **Confirma:** `Task NNNNN` si hay tarea ADO relacionada; `N/A` si no aplica
114
114
  > - **Tipo:** `Manual` | `Automatizado` | `Ambos`
115
115
  > - **Prioridad:** `P0` | `P1` | `P2` | `P3`
@@ -149,4 +149,4 @@
149
149
  > `qa/02-test-plans/sprints/Sprint-{{NNN}}/Plan-de-Pruebas-{{PROYECTO}}-Sprint-{{NNN}}.md`
150
150
  >
151
151
  > El consolidado se genera con el script `@keber/ado-qa consolidate-sprint --sprint {{NNN}}`.
152
- > **No editar manualmente** — es derivado de los archivos por módulo.
152
+ > **No editar manualmente** - es derivado de los archivos por módulo.
@@ -4,12 +4,12 @@
4
4
  >
5
5
  > This file is retained for reference only.
6
6
 
7
- # Test Plan — {{MODULE_NAME}}
7
+ # Test Plan - {{MODULE_NAME}}
8
8
 
9
9
  **Plan ID**: TP-{{MODULE}}-{{VERSION}}
10
10
  **Module**: {{MODULE_NAME}}
11
11
  **Sprint / Release**: Sprint {{NNN}}
12
- **Prepared by**: (agent output — reviewed by human)
12
+ **Prepared by**: (agent output - reviewed by human)
13
13
  **Date**: YYYY-MM-DD
14
14
  **ADO Test Plan**: #{ADO_PLAN_ID} (if ADO enabled)
15
15
 
@@ -74,7 +74,7 @@
74
74
 
75
75
  | Scenario | Feasible? | Reason if not |
76
76
  |----------|-----------|---------------|
77
- | Happy path create | Yes | — |
77
+ | Happy path create | Yes | - |
78
78
  | Export to PDF | No | Requires visual validation |
79
79
  | Third-party OAuth | No | External system |
80
80
 
@@ -1,159 +0,0 @@
1
- # Reference: Test Plan Template
2
-
3
- > Loaded by `skills/qa-test-plan/` when generating a test plan document.
4
-
5
- ---
6
-
7
- ## Complete Test Plan Template
8
-
9
- Create at: `qa/02-test-plans/automated/{module}-test-plan.md`
10
-
11
- ```markdown
12
- # Test Plan: {Module Display Name}
13
-
14
- | Field | Value |
15
- |-------|-------|
16
- | Version | 1.0 |
17
- | Date | YYYY-MM-DD |
18
- | Module | {module-code} |
19
- | Test plan type | Automated / Manual / Combined |
20
- | Author | {agent or human name} |
21
- | Status | Draft / Approved / Active |
22
-
23
- ---
24
-
25
- ## 1. Objective
26
-
27
- {1-2 sentences: what this test plan covers and why}
28
-
29
- ---
30
-
31
- ## 2. Scope
32
-
33
- ### In scope
34
- - {submodule 1}: {what is being tested}
35
-
36
- ### Out of scope
37
- - {what is explicitly excluded and why}
38
-
39
- ---
40
-
41
- ## 3. Automation Feasibility Analysis
42
-
43
- | Submodule | Total TCs | Fully automatable | Partially | Not automatable | Reason for exclusions |
44
- |-----------|-----------|------------------|-----------|-----------------|----------------------|
45
- | {name} | {N} | {N} ({%}) | {N} ({%}) | {N} ({%}) | {brief reason} |
46
-
47
- ---
48
-
49
- ## 4. Priority Distribution
50
-
51
- | Priority | TCs selected | Automated | Manual |
52
- |----------|-------------|-----------|--------|
53
- | P0 (Critical — every build) | {N} | {N} | {N} |
54
- | P1 (High — every release) | {N} | {N} | {N} |
55
- | P2 (Medium — periodic regression) | {N} | {N} | {N} |
56
- | P3 (Low — manual only) | {N} | 0 | {N} |
57
-
58
- ---
59
-
60
- ## 5. TC Selection and Automation Plan
61
-
62
- ### P0 Suite
63
-
64
- | TC ID | Title | Type | Automation status |
65
- |-------|-------|------|------------------|
66
- | TC-{M}-{S}-001 | {title} | Functional | Queued |
67
-
68
- ### P1 Suite
69
-
70
- | TC ID | Title | Type | Automation status |
71
- |-------|-------|------|------------------|
72
- | TC-{M}-{S}-010 | {title} | Functional | Queued |
73
-
74
- ---
75
-
76
- ## 6. Azure DevOps Test Plan (if enabled)
77
-
78
- | Item | Value |
79
- |------|-------|
80
- | ADO Plan ID | (populate after creation) |
81
- | ADO Suite IDs | (populate after creation) |
82
- | Reporter | @alex_neo/playwright-azure-reporter |
83
-
84
- ---
85
-
86
- ## 7. Test Environment
87
-
88
- | Item | Value |
89
- |------|-------|
90
- | QA URL | {{QA_BASE_URL}} |
91
- | Browser | Chromium (Playwright) |
92
- | Workers (local) | {N} |
93
- | Workers (CI) | {N} |
94
-
95
- ---
96
-
97
- ## 8. Risks and Assumptions
98
-
99
- | Risk | Likelihood | Impact | Mitigation |
100
- |------|-----------|--------|------------|
101
- | Unstable QA data | Medium | High | Use EXEC_IDX-generated data |
102
- | External service unavailable | High | Medium | Use intercept / mock strategy |
103
-
104
- ---
105
-
106
- ## 9. Excluded TCs
107
-
108
- | TC ID | Reason for exclusion |
109
- |-------|---------------------|
110
- | TC-{M}-{S}-NNN | `BLOCKED-PERMISSIONS` |
111
- | TC-{M}-{S}-NNN | `PENDING-CODE` |
112
-
113
- ---
114
-
115
- ## 10. Execution Schedule
116
-
117
- | Suite | Trigger | Frequency |
118
- |-------|---------|-----------|
119
- | P0 smoke | Every CI build | On push to main / PR |
120
- | P1 regression | Scheduled | Nightly |
121
- | P2 full regression | Manual trigger | Before each release |
122
-
123
- ---
124
-
125
- ## Changelog
126
-
127
- | Version | Date | Description |
128
- |---------|------|-------------|
129
- | 1.0 | YYYY-MM-DD | Initial creation |
130
- ```
131
-
132
- ---
133
-
134
- ## Priority Decision Tree
135
-
136
- ```
137
- Primary happy path of the feature?
138
- YES → P0
139
- Critical data corruption or show-stopper risk?
140
- YES → P0
141
- Common negative scenario (empty required field, duplicate)?
142
- YES → P1
143
- Cross-module dependency or state machine transition?
144
- YES → P1
145
- Secondary feature (export, pagination, search)?
146
- YES → P2
147
- Edge case, cosmetic, or low-frequency scenario?
148
- YES → P3
149
- ```
150
-
151
- ---
152
-
153
- ## Automation Feasibility Criteria
154
-
155
- | Feasibility | Criteria |
156
- |---|---|
157
- | Fully automatable | Deterministic, observable via browser, no external system dependency |
158
- | Partially automatable | External system can be mocked, or some step requires human inspection |
159
- | Not automatable | Physical access required; irreversible side effects; non-deterministic; BLOCKED-PERMISSIONS |