---
name: retest-orchestration
description: Gate 3 RETEST loop — Parse lệnh "RETEST: TC_ID" từ TESTER, re-run Dev Artifacts Check (phát hiện commit mới), chạy Playwright selective cho TCs được chỉ định, cập nhật evidence và bug status.
keywords: gate3, retest, loop, re-execute, playwright, dev artifacts, delta, bug fix, selective test
---

# RETEST Orchestration — Gate 3 Loop

> **Mục đích:** Xử lý lệnh `RETEST` từ TESTER sau khi dev fix bug, re-run Playwright có chọn lọc,
> và cập nhật evidence + bug status tương ứng.
>
> **Trigger:** TESTER gõ `RETEST: AD10_002` hoặc `RETEST: AD10_001, AD10_002, AD10_003`

---

## Trigger Syntax

```
RETEST: AD10_002                    # Re-run 1 TC
RETEST: AD10_002, AD10_005          # Re-run nhiều TCs
RETEST: AD10_002, AD10_005, AD10_008
```

AI parse TC IDs từ text sau `RETEST:` (case-insensitive, trim whitespace, split by comma).

---

## Step 1: Re-run Dev Artifacts Check

Trước khi re-execute, **luôn luôn** chạy Dev Artifacts Check (invoke `pr-impact-analysis` skill):

**Lý do:** Dev commit fix có thể thay đổi thêm code ngoài chỗ đang fix → cần phát hiện và cover.

1. Đọc SHA đã ghi trong `test-plan/impact-analysis.md`
2. Fetch SHA hiện tại: `gh pr view <url> --json headRefOid`
3. **Nếu SHA không thay đổi** → skip delta analysis, tiến sang Step 2
4. **Nếu SHA thay đổi** → có commit mới:
   - Phân tích diff delta (chỉ phần thay đổi từ SHA cũ → SHA mới)
   - Đề xuất TC bổ sung nếu có area mới bị ảnh hưởng
   - Hiển thị **mini-loop prompt:**

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ RETEST — DELTA DETECTED

Dev đã push commit mới (SHA: [old] → [new])
Diff mới ảnh hưởng thêm:
  - [file/area 1] → [feature bị ảnh hưởng]
  - [file/area 2] → [feature bị ảnh hưởng]

Đề xuất TC bổ sung:
  - TC_[Module]_XXX: [Scenario mới cần test do delta]

→ Type APPROVED to add these TCs and continue RETEST
→ Type SKIP to proceed without new TCs
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

   - TESTER gõ `APPROVED` → generate scripts cho TC mới → thêm vào RETEST list
   - TESTER gõ `SKIP` → tiến sang Step 2 chỉ với TCs ban đầu
   - Cập nhật SHA mới vào `impact-analysis.md`

---

## Step 2: Execute Playwright (Selective)

Chạy Playwright chỉ cho các TCs được chỉ định:

```bash
BASE_URL=<baseUrl> npx playwright test --grep "AD10_002|AD10_005" --headed
```

**Nếu một TC không có script** (type = Manual hoặc script chưa được sinh):
- Hiển thị: `⚠️ AD10_011: Không có Playwright script (Manual TC). Tester cần test thủ công.`
- Bỏ qua TC đó, tiếp tục với các TCs còn lại

**Nếu script bị lỗi syntax** (script cũ, selector đã hỏng):
- Hiển thị error cụ thể
- Đề xuất re-generate script: `Muốn tôi cập nhật script cho TC này không?`

---

## Step 3: Cập nhật Evidence

Invoke `evidence-aggregation` skill cho RETEST results:

Ngôn ngữ output: auto-detect theo ngôn ngữ của ticket/testcase input — xem `custom/rules/output-language.md` và `custom/skills/test-skills/rules/qa-writing-standards.md` (input tiếng Việt → output tiếng Việt; ngược lại mặc định tiếng Anh; tiêu đề cột bảng vẫn giữ tiếng Anh).

**Không xóa evidence cũ** — tạo subfolder theo run:

```
evidence/
├── AD10_002-error-sai-password/
│   ├── run-1/          ← Original run (FAIL)
│   │   ├── failure-screenshot.png
│   │   └── result.md
│   └── run-2/          ← RETEST run (kết quả mới)
│       ├── step-01.png
│       └── result.md
```

**result.md của run mới** phải link về run cũ:

```markdown
# Result: AD10_002 — RETEST Run 2

**Status:** ✅ PASS (Previous: ❌ FAIL — Run 1)
**Run date:** [YYYY-MM-DD HH:MM]
**Bug reference:** bugs/BUG-001-error-message-khong-hien.md → RESOLVED

...
```

---

## Step 4: Cập nhật Bug Status

Với mỗi TC trong RETEST:

**TC pass sau RETEST** (trước đó fail):
- Đọc `bugs/` để tìm BUG liên quan đến TC_ID đó
- Cập nhật BUG file: thêm section Resolution:

```markdown
## Resolution

**Status:** ✅ RESOLVED
**Fixed in commit:** [SHA từ impact-analysis.md]
**Retest result:** ✅ PASS — [YYYY-MM-DD]
**Retest evidence:** evidence/AD10_002-error-sai-password/run-2/
```

**TC vẫn fail sau RETEST**:
- Cập nhật BUG file: thêm RETEST attempt:

```markdown
## Retest History

| Run | Date | Result | Notes |
|-----|------|--------|-------|
| 1 | [Date] | ❌ FAIL | Initial run |
| 2 | [Date] | ❌ FAIL | Dev fix không resolve issue |

**Action needed:** Dev cần investigate thêm. Error vẫn reproduce với [details].
```

---

## Step 5: Display RETEST Summary

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔁 RETEST COMPLETE

TCs re-executed: [N]
  ✅ Now PASS: [N] (bugs RESOLVED)
  ❌ Still FAIL: [N] (bugs remain OPEN)
  ⏭ Skipped (Manual): [N]

Bugs updated:
  ✅ RESOLVED: BUG-001, BUG-003
  🔴 Still OPEN: BUG-002, BUG-004

[Nếu còn critical/high bugs open:]
→ Review bugs: bugs/
→ Dev cần fix thêm: [list bugs còn open]
→ Type RETEST: [TC_ID] when dev fixes again

[Nếu tất cả critical/high bugs đã resolved:]
→ All critical/high issues resolved! ✅
→ Type APPROVED to proceed to Gate 4 (Test Report)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

---

## Loop Continuation

Gate 3 loop tiếp tục cho đến khi:
- **Điều kiện kết thúc loop:** Tất cả Critical và High bugs đã RESOLVED và pass RETEST
- **Medium/Low bugs:** TESTER có thể chọn defer (không bắt buộc phải pass trước Gate 4)
- **TESTER gõ `APPROVED`** → Gate 4 bắt đầu (invoke `generate-test-report` skill)

---

## Mandatory Rules

- ✅ **PHẢI** re-run Dev Artifacts Check trước mỗi RETEST (kể cả delta = 0)
- ✅ **PHẢI** cập nhật bug status sau mỗi RETEST
- ✅ Evidence của các run phải được giữ lại (không xóa)
- ❌ **KHÔNG** tự động chuyển sang Gate 4 — chỉ khi TESTER gõ APPROVED
- ❌ **KHÔNG** skip delta analysis kể cả khi TESTER nói "chỉ 1 dòng fix"
- ✅ Manual TCs → nhắc TESTER test thủ công, không bỏ qua
