@keber/qa-framework 1.3.0-0 → 1.4.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.
@@ -0,0 +1,142 @@
1
+ # Reference: Failure Classification Protocol
2
+
3
+ > Loaded by `skills/qa-test-stabilization/` for failure diagnosis and reporting.
4
+
5
+ ---
6
+
7
+ ## Failure Categories
8
+
9
+ | Category | Definition | Correct action |
10
+ |----------|-----------|----------------|
11
+ | **A — Wrong selector** | Locator no longer matches the UI element | Fix selector; prefer `getByRole`, `getByLabel`, `getByTestId` |
12
+ | **B — Wrong assertion** | Assertion doesn't match TC acceptance criterion | Rewrite assertion to match spec |
13
+ | **C — Wrong flow** | Test steps don't reflect the user flow in the TC | Rewrite steps to match TC |
14
+ | **D — Fragile timing** | Intermittent failure due to missing `await`, race condition, or missing `waitFor` | Add proper async handling; never use `waitForTimeout` |
15
+ | **E — Incorrect data** | Data malformed, not unique, or conflicts with QA environment state | Fix data generation or `beforeAll` provisioning |
16
+ | **F — App Bug** | Test is correct; application doesn't behave as specified | Do NOT fix test; file defect; skip with DEF reference |
17
+ | **G — TC Mismatch** | TC acceptance criterion is ambiguous or wrong vs actual behavior | Do NOT fix test or app; update `05-test-scenarios.md` |
18
+ | **H — Infra/Environment** | Failure due to env unavailability, network, or credentials | Retry in clean environment before classifying further |
19
+ | **I — Intentional skip** | Test skipped for known defect or pending feature | Verify skip reason still valid; update defect reference if needed |
20
+
21
+ ---
22
+
23
+ ## Decision Protocol
24
+
25
+ ```
26
+ Are test steps and assertion derived correctly from 05-test-scenarios.md?
27
+ No → Category G (fix the spec, not the test)
28
+ Yes ↓
29
+ Does the application behave as the TC acceptance criterion describes?
30
+ No → Category F (file defect; skip test with DEF reference)
31
+ Yes ↓
32
+ Is the failure deterministic (every run)?
33
+ No → Category D or H (timing or environment issue)
34
+ Yes ↓
35
+ Is the failure caused by selector, assertion, flow, or data issue?
36
+ → Category A, B, C, or E (fix the test code)
37
+ ```
38
+
39
+ **Fix order**: E → A → C → B → D (data masks selectors; flow masks assertions)
40
+
41
+ ---
42
+
43
+ ## False Positive Check
44
+
45
+ For each **passing** test, perform a negation check:
46
+
47
+ 1. Temporarily change the assertion to assert the opposite
48
+ 2. Run the test — if it still passes, the original assertion is not evaluating the element
49
+ 3. Restore the original assertion
50
+
51
+ ```typescript
52
+ // Original
53
+ await expect(page.locator('.toast')).toHaveText('Guardado exitosamente');
54
+ // Negation check (temporary — revert after)
55
+ await expect(page.locator('.toast')).toHaveText('TEXTO_QUE_NO_EXISTE');
56
+ // If this passes → false positive detected
57
+ ```
58
+
59
+ ---
60
+
61
+ ## Confidence Scoring
62
+
63
+ | Level | Criteria |
64
+ |-------|---------|
65
+ | ✅ High (≥90%) | Passed negation check AND matches TC acceptance criterion exactly |
66
+ | ⚠️ Medium (70–89%) | Consistently passing; trace reviewed; negation check pending |
67
+ | ❌ Low (<70%) | Intermittent, unclassified, or negation check not done |
68
+
69
+ **Exit criterion**: All tests ✅ High or legitimately skipped with defect reference.
70
+
71
+ ---
72
+
73
+ ## STABILIZATION-REPORT Template
74
+
75
+ Create at: `qa/07-automation/e2e/tests/{module}/{STABILIZATION-REPORT-YYYY-MM-DD.md}`
76
+
77
+ ```markdown
78
+ # Stabilization Report — {MODULE} > {SUBMODULE}
79
+
80
+ **Date**: YYYY-MM-DD
81
+ **Sprint**: {sprint label}
82
+ **Spec reference**: `qa/01-specifications/{module}/{submodule}/05-test-scenarios.md`
83
+
84
+ ## Summary
85
+
86
+ | Metric | Value |
87
+ |--------|-------|
88
+ | Tests evaluated | N |
89
+ | Stabilized (✅ High confidence) | N |
90
+ | Skipped — App Bug (Category F) | N |
91
+ | Skipped — Intentional (Category I) | N |
92
+ | Remaining low-confidence | N |
93
+ | Overall confidence | NN% |
94
+
95
+ ## Test-by-Test Record
96
+
97
+ | TC-ID | Test title | Baseline | Final | Category | Changes made | Confidence |
98
+ |-------|-----------|----------|-------|----------|-------------|-----------|
99
+ | TC-... | ... | ❌ fail | ✅ pass | A | Selector `#old` → `getByRole('button', { name: '...' })` | ✅ High |
100
+
101
+ ## App Bugs Filed (Category F)
102
+
103
+ | DEF-ID | TC-ID | Description | ADO WI |
104
+ |--------|-------|-------------|--------|
105
+
106
+ ## Spec Defects (Category G)
107
+
108
+ | TC-ID | Issue | Recommended 05-test-scenarios.md update |
109
+ |-------|-------|----------------------------------------|
110
+
111
+ ## Coverage Gaps (note only — do not fix in this stage)
112
+
113
+ - TC-XXX: mapped in COVERAGE-MAPPING.md but spec function not found
114
+
115
+ ## Decisions Log
116
+
117
+ - YYYY-MM-DD: Classified TC-XXX as Category F — save endpoint returns 500 on duplicate. DEF-001 filed.
118
+ ```
119
+
120
+ ---
121
+
122
+ ## EXEC_IDX Collision Note
123
+
124
+ Two runs within the same 60-second window produce identical `EXEC_IDX` values. For fields requiring guaranteed uniqueness:
125
+
126
+ ```typescript
127
+ const EXEC_IDX = Math.floor(Date.now() / 60_000) % 100_000;
128
+ const RUN_SALT = Math.floor(Math.random() * 9999).toString().padStart(4, '0');
129
+ const uniqueName = `Test-${EXEC_IDX}-${RUN_SALT}`;
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Post-Stabilization Artifact Updates
135
+
136
+ 1. **Category G found** → update `05-test-scenarios.md` with `[REVISED - {date}]`
137
+ 2. **Category F found** → create `qa/06-defects/open/DEF-{NNN}.md` per bug
138
+ 3. **COVERAGE-MAPPING.md** → update Status column for all TCs:
139
+ - `Automated` — ✅ High confidence
140
+ - `Skipped-Defect` — skipped with DEF reference
141
+ - `Skipped-Infra` — environment limitation
142
+ - `Manual` — intentionally not automated