KB-4E97

Điều 30 — Hoàn thành dứt điểm

6 min read Revision 1
missiondieu30cie2eregressionreport

Báo cáo Điều 30 — Hoàn thành dứt điểm

Ngày thực hiện: 2026-03-22 Repo: Huyen1974/web-test Phạm vi mission: CI + smoke script + branch protection + bằng chứng block thực tế

Step 0 — SSOT và Điều 30

Nguồn đã đọc:

  • search_knowledge("operating rules SSOT")
  • search_knowledge("regression test law")
  • batch_read("knowledge/dev/ssot/operating-rules.md", "knowledge/dev/architecture/regression-protection-law.md")
  • Local rules: .claude/skills/incomex-rules.md

Quote bắt buộc:

  • SSOT §0-T: "Playwright E2E trong CI. Test FAIL = PR block. Máy kiểm tra máy."
  • Điều 30 v1.2, Tầng 0: Contract JSON là nguồn xác nhận route, selector, smoke_keywords, owner, version.
  • Điều 30 v1.2, Tầng 1: Playwright E2E chạy trước merge, fail là PR block.
  • Điều 30 v1.2, Tầng 2: Smoke production phải đọc từ contract keywords.
  • Điều 30 v1.2: No Blind PASSRule of Evidence.

Assembly Gate:

  • Q0 PG: Không
  • Q1 Directus: Không
  • Q2 Nuxt: Không sửa tính năng/UI; chỉ CI và smoke script
  • Q3 Code mới: Có, đúng 2 file mission yêu cầu: .github/workflows/e2e-test.yml, scripts/smoke-test.sh
  • Q4 Test: Chính mission này là test cơ chế
  • Q5 Rollback: git revert

Thay đổi đã thực hiện

1. Thêm e2e vào required status checks của main

Đã cập nhật branch protection bằng GitHub API.

Kết quả hiện tại:

  • strict = true
  • Required checks = Pass Gate, Quality Gate, E2E Smoke Test, build, e2e

CLI evidence:

  • gh api repos/Huyen1974/web-test/branches/main/protection/required_status_checks
  • Trả về contexts: ["Pass Gate", "Quality Gate", "E2E Smoke Test", "build", "e2e"]

2. E2E trigger trên push main

Đã sửa .github/workflows/e2e-test.yml:

  • thêm:
    • push.branches = [main]
  • giữ:
    • pull_request.branches = [main]
    • workflow_dispatch

3. Smoke test đọc contract keywords cho Registries

Đã sửa scripts/smoke-test.sh:

  • bỏ check cũ: "CAT-"
  • thay bằng contract keywords của web/tests/contracts/registries.json:
    • CAT-SPE
    • CAT-ORP
    • Phân loại loài
    • Thành phần

Implementation note:

  • Dùng helper check_contract_keywords() để giữ output smoke rõ ràng và tăng PASS/FAIL đúng chuẩn.

PR sửa mission

PR sửa CI/script: #569

PR #569 checks:

  • E2E Tests PR run: 23402970686success
  • Nuxt 3 CI PR run: 23402970696success
  • Terraform Deploy PR run: 23402970689success

Verify main sau merge

push main runs sau khi merge #569:

  • E2E Tests run 23403041332success
  • Nuxt 3 CI run 23403041326success
  • Terraform Deploy run 23403041329success
  • Deploy to VPS workflow-run 23403073194success

Điều này xác nhận lỗ hổng số 2 đã được đóng:

  • Sau merge vào main, workflow E2E Tests thực sự chạy trên push main.

Smoke production

Đã chạy scripts/smoke-test.sh sau merge.

Kết quả:

PASS: 17 | FAIL: 0
ALL CHECKS PASSED

Registries evidence:

  • Registries (contract keywords OK)

Điều này xác nhận lỗ hổng số 3 đã được đóng:

  • Smoke production không còn hardcode CAT-; đã kiểm tra đúng 4 keywords của contract.

Bằng chứng chặn merge thực tế

PR kiểm chứng phá có chủ đích

PR test: #570

Cách phá tối thiểu:

  • Tạo branch test/dieu30-block-verify từ origin/main
  • Sửa duy nhất web/tests/contracts/registries.json
  • Thêm required_row giả:
    • CAT-FAKE
    • row-CAT-FAKE

Mục tiêu:

  • Không đụng Nuxt, DB, Directus, production data
  • Chỉ buộc contract-driven E2E fail để kiểm chứng gate

Evidence PR bị block

GitHub PR state:

  • mergeStateStatus = BLOCKED

Required failing check:

Các check khác trên PR #570:

  • buildSUCCESS
  • Pass GateSUCCESS
  • Quality GateSUCCESS
  • E2E Smoke TestSUCCESS
  • check-critical-filesSUCCESS
  • guardSUCCESS

Ý nghĩa:

  • Chỉ riêng required check e2e fail là đủ giữ PR ở BLOCKED
  • Đây là bằng chứng end-to-end rằng branch protection thực sự chặn merge khi Playwright phát hiện regression

Kết luận cho lỗ hổng số 4:

  • ĐÃ CÓ bằng chứng thực tế cơ chế chặn hoạt động

Dọn dẹp sau kiểm chứng

Đã dọn branch test theo đúng yêu cầu:

  • Đóng PR #570
  • Xóa remote branch test/dieu30-block-verify
  • Xóa local branch test/dieu30-block-verify

CLI evidence:

  • PR #570 closed at: 2026-03-22T14:57:54Z

Tự kiểm tra

  • Đã đọc SSOT + quote §0-T: Có
  • e2e có trong required checks: Có
  • e2e-test.yml trigger on push main: Có
  • smoke-test.sh check 4 keywords contract: Có
  • Test PR: E2E FAIL + merge BLOCK: Có
  • Test PR đã close + delete branch: Có
  • Main branch CI green sau sửa: Có
  • Smoke VPS pass: Có, 17/17
  • Report đúng path knowledge/current-state/reports/dieu30-complete-report.md: Có

Kết luận kỹ thuật

Điều 30 hiện đã hoạt động end-to-end trong web-test theo bằng chứng thực tế:

  • Tầng 0: Contract JSON tồn tại và được dùng
  • Tầng 1: e2e là required status check, fail là block merge
  • Tầng 2: Smoke production kiểm tra contract keywords
  • Tầng 3: Orchestrator vẫn có thể verify visual khi cần, nhưng gate máy-kiểm-tra-máy đã hoạt động độc lập

Ghi chú:

  • Evidence trong báo cáo này là textual/CLI evidence từ GitHub API + Actions + smoke output. Không chụp screenshot GUI.
  • Untracked ad_list.json tại local worktree được giữ nguyên, không tác động.