# QC Gate

## 1. Mục đích

QC Gate là điểm ra quyết định release. Tài liệu này xác định khi nào được `GO`, khi nào chỉ được `CONDITIONAL GO`, và khi nào phải `NO GO`.

**Ghi chú:** QC Gate không dựa trên cảm giác “nhìn có vẻ chạy”. Gate phải dựa trên kết quả test, evidence và trạng thái bug.

## 2. Kết luận hiện tại

| Hạng mục | Giá trị |
|---|---|
| Gate hiện tại | `NO GO - pending execution` |
| Lý do | Chưa chạy build/test/runtime thật |
| Điều kiện để đổi gate | Chạy và cập nhật kết quả build, smoke, API, browser, permission, regression |

## 3. Điều kiện bắt buộc để GO

| Gate item | Yêu cầu | Status hiện tại | Ghi chú |
|---|---|---|---|
| Source Ready | Source giải nén, dependency install được | Pending | Không test trên source lỗi setup |
| Build | Website/admin/backend build pass | Pending | Build fail là blocker |
| Smoke | Health API và route chính pass | Pending | `/ping`, `/version`, `/`, `/gio-hang`, admin shell |
| Core Website Flow | Homepage, PLP, PDP, cart, checkout pass | Pending | Checkout fail là NO GO |
| API Contract | Catalog, homepage, navigation, SEO pass | Pending | ERP missing phải ghi Blocked/Skipped |
| Admin Permission | Mutation/admin action cần auth/quyền | Pending | Sai role là High/Blocker |
| Stocktake/QC | Role QLCH/QC/KT đúng state/action | Pending | Bắt buộc nếu module này release |
| Regression | Không còn Critical/High bug | Pending | Medium phải có owner/workaround |
| Evidence | Có screenshot/log/API samples | Pending | Không có evidence thì chưa sign-off |

## 4. Quy tắc quyết định

| Decision | Điều kiện |
|---|---|
| GO | Tất cả P0/P1 pass; không còn Critical/High bug; evidence đầy đủ; risk còn lại được chấp nhận |
| CONDITIONAL GO | Không còn Critical/High; còn Medium/Low nhưng có workaround, owner, deadline |
| NO GO | Có Critical/High open; build/smoke/core flow fail; thiếu evidence bắt buộc; permission/security fail |

## 5. Blocker checklist

Nếu bất kỳ item nào dưới đây fail thì QC Gate phải là `NO GO`:

- Website không build được.
- Backend không start hoặc `/ping` fail.
- Trang chủ hoặc PDP bị blank screen.
- Không thêm được sản phẩm vào giỏ.
- Checkout không hoàn tất được.
- Tổng tiền/discount sai nghiêm trọng.
- Admin mutation không cần auth/quyền.
- User sai role vẫn thấy action QC/KT quan trọng.
- API public trả 500 với input hợp lệ.
- Có lỗi mất dữ liệu hoặc ghi sai dữ liệu.

## 6. Conditional GO checklist

Có thể cân nhắc `CONDITIONAL GO` nếu:

- Không có Critical/High.
- Bug còn lại là Medium/Low.
- Bug không ảnh hưởng mua hàng, bảo mật, dữ liệu, quyền hoặc vận hành chính.
- Có workaround rõ.
- Có owner và deadline fix.
- Stakeholder chấp nhận risk bằng văn bản hoặc trong ticket.

## 7. Checklist chạy gate

### 7.1 Backend

```bash
go run . migrate up
go run main.go
curl http://localhost:3000/ping
curl http://localhost:3000/version
```

**Expected:** health 200, không panic log, migration không fail.

### 7.2 Website public

```bash
pnpm install
pnpm lint
pnpm type-check
pnpm build
pnpm dev
```

**Expected:** build pass, route chính mở được, không console error nghiêm trọng.

### 7.3 Admin frontend

```bash
pnpm install
pnpm tsc
pnpm build
pnpm dev
```

**Expected:** admin shell mở được, protected route hoạt động, role/action đúng.

### 7.4 Browser smoke

| Route | Expected |
|---|---|
| `/` | Homepage render |
| `/collections/[slug]` | Collection render |
| `/products/[slug]` | Product detail render |
| `/gio-hang` | Cart render |
| `/thanh-toan` | Checkout render |
| `/thanh-toan-thanh-cong` | Success page render |
| Admin protected route | Auth/permission đúng |

### 7.5 API smoke

| Endpoint | Expected |
|---|---|
| `/v1/catalog/navigation` | Tree đúng |
| `/v1/homepage/bundle` | Bundle đúng |
| `/v1/catalog/products` | List đúng |
| `/v1/seo/redirects/lookup?path=/old-path` | Redirect/miss đúng contract |
| `/v1/seo/sitemap/products?limit=10` | Cursor/list đúng |

## 8. Mẫu kết luận QC Gate

```text
QC Gate: GO / CONDITIONAL GO / NO GO
Date:
Environment:
Build result:
Smoke result:
Core website flow:
API contract:
Admin permission:
Critical bugs:
High bugs:
Medium bugs:
Low bugs:
Evidence folder:
Decision owner:
Notes:
```

## 9. Kết luận hiện tại

Gate hiện tại vẫn là `NO GO - pending execution`, không phải vì source chắc chắn lỗi, mà vì chưa có evidence thực thi. Sau khi chạy đủ checklist và cập nhật report, gate có thể đổi sang `GO` hoặc `CONDITIONAL GO`.
