# Release Checklist

Checklist นี้ใช้คู่กับ [Smoke / UAT Runbook](./smoke-uat-runbook.md), [Browser Spot Check](./browser-spot-check.md), [Production Deployment Checklist](./production-deployment-checklist.md) และ [Deployment Copy Excludes](./deployment-copy-excludes.md) และเหมาะสำหรับใช้ก่อนปล่อยงานจริงทุกครั้ง

## Pre-Release

- [ ] ยืนยัน scope ของ release ว่าแตะ flow ไหนบ้าง
- [ ] ทบทวน config หรือ secret ที่เกี่ยวข้องให้ตรงกับ environment
- [ ] ตรวจว่ามี database change, cleanup script หรือ backfill ที่ต้องรันหรือไม่
- [ ] ตรวจว่าข้อมูลทดสอบจากรอบ debug ก่อนหน้าถูก cleanup แล้ว

## Required Gate

- [ ] รันคำสั่งนี้ให้ผ่าน:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\pre_release_gate.ps1
```

- [ ] ดู summary ท้ายรันว่า `php-lint` และ `smoke-system-suite` เป็น `passed`
- [ ] ถ้า suite ล้ม ให้หยุด release แล้วไล่ตาม [Failure Handling](./smoke-uat-runbook.md#failure-handling)

## Focused Recheck

- [ ] ถ้างานแตะ flow จอง/คิว/ชำระเงิน ให้รัน `scripts\smoke_order_flow.ps1`
- [ ] ถ้างานแตะ Quick Service ให้รัน `scripts\smoke_quick_service_suite.ps1`
- [ ] ถ้างานแตะ member/employee/service management ให้รัน `scripts\smoke_admin_support_suite.ps1`
- [ ] ถ้างานแตะ permission, branch scope หรือ data isolation ให้รัน `scripts\smoke_branch_scope_flow.ps1`
- [ ] ถ้างานแตะ deposit ให้รัน `scripts\smoke_booking_deposit_flow.ps1`

## Browser / UI Spot Check

- [ ] รัน automated browser check:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\browser_critical_pages_spot_check.ps1
```

- [ ] ดูว่า `dashboard`, `queue`, และ `job_details_browser_probe` ผ่าน หรือถูก `skipped:no-queue-item` แบบมีเหตุผล
- [ ] เก็บ screenshot artifact ที่สคริปต์สร้างไว้ ถ้ารอบนี้แตะ UI สำคัญ

## Manual UAT Spot Check

- [ ] เปิดหน้า login และยืนยันว่าเข้าใช้งานได้
- [ ] เปิดหน้า booking / queue / job details เพื่อตรวจ UI และข้อความแสดงผล
- [ ] เปิดหน้า quick service และตรวจ QR/slip ในจุดที่แตะ
- [ ] เปิดหน้า admin/report ที่เกี่ยวข้องเพื่อตรวจ layout, filter และ table
- [ ] ถ้างานแตะสิทธิ์ ให้ทดสอบด้วย role หรือ branch scope จริงที่เกี่ยวข้อง
- [ ] ถ้างานเปลี่ยน UI หลายหน้า ให้ไล่ตาม [Browser Spot Check](./browser-spot-check.md)

## CI / Secrets Readiness

- [ ] ตั้ง `CCW_SMOKE_USERNAME` และ `CCW_SMOKE_PASSWORD`
- [ ] ตั้ง `CCW_BASE_URL`
- [ ] ถ้าจะตรวจ branch-scope หลัง deploy ให้ตั้ง `CCW_RESTRICTED_SMOKE_USERNAME`, `CCW_RESTRICTED_SMOKE_PASSWORD`, และ `CCW_RESTRICTED_ALLOWED_BRANCHES`
- [ ] ถ้ามี self-hosted runner ให้ลองรัน `scripts\ci_pre_release_gate.ps1` และ `scripts\ci_post_deploy_spot_check.ps1`

## Deployment

- [ ] backup ตามขั้นตอนของทีมก่อน deploy
- [ ] ถ้า deploy ขึ้น Cloud server จริง ให้ไล่ตาม [Production Deployment Checklist](./production-deployment-checklist.md)
- [ ] ถ้าใช้วิธี copy file หรือ sync folder ให้ไล่ตาม [Deployment Copy Excludes](./deployment-copy-excludes.md)
- [ ] deploy code และ database change ตามลำดับที่กำหนด
- [ ] ถ้ามี cache/opcache ให้ reload ตามแนวปฏิบัติของเครื่องจริง

## Post-Deploy

- [ ] รันคำสั่งนี้ให้ผ่าน:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\post_deploy_spot_check.ps1
```

- [ ] ถ้ามีบัญชี restricted probe ให้รันแบบนี้ด้วย:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\post_deploy_spot_check.ps1 `
  -RestrictedUsername "branch_probe" `
  -RestrictedPassword "branchprobe123" `
  -RestrictedAllowedBranches "สาขาศรีนครินทร์"
```

- [ ] หรือถ้ารันผ่าน workflow/CI ให้ยืนยันว่า `ci_post_deploy_spot_check.ps1` ผ่าน
- [ ] เปิดหน้า dashboard, booking, queue, quick service, manage system ได้ `200`
- [ ] ตรวจว่า `branch_scope_allowed_probe`, `branch_scope_blocked_probe`, และ `branch_scope_post_deploy` ผ่าน เมื่อมี restricted credentials
- [ ] เช็ก error log หลัง deploy ช่วงแรกว่าไม่มี exception ใหม่

## Stop Release When

- [ ] smoke suite ไม่ผ่านแม้แต่ 1 ก้อน
- [ ] cleanup ของข้อมูลทดสอบไม่สำเร็จ
- [ ] หน้าใช้งานหลักเปิดไม่ได้หรือ redirect ผิด
- [ ] พบ error log ใหม่ที่กระทบ flow หลักและยังไม่ทราบสาเหตุ
