Source document
docs/pilot/PILOT-DRY-RUN.md
Source version
0.0.0
Generated time
2026-07-06T14:59:20.724Z
Owner
Operations / Founder
Audience
Internal
Status
Approved

Pilot Dry Run

Một lần dry-run thật, thực hiện theo góc nhìn kỹ sư đối tác, chỉ dùng tài liệu bàn giao. Ngày: 2026-07-06.
Mục tiêu: xác nhận partner hoàn thành Availability → Booking → Confirm → Cancel không sửa mã, không hỏi đội dev.

Thiết lập

Lý do dùng local: IP máy dry-run chưa được allowlist trên staging (/api/booking/* → 403 nginx — xem Friction F-1), nên staging không thể chạy end-to-end trong sprint này. Local dùng cùng code + cùng migration + cùng examples ⇒ đại diện trung thực cho hành vi API.

Nhật ký thực thi (rút gọn từ log thật)

BNG ops (setup):

✓ migrate deploy
✓ api:start → {"status":"ok"}
create-partner → activate-partner → provision-tenant → activate-tenant → seed-inventory
✓ partner active, tenant active, inventory seeded
✓ issue-key --deliver → raw key sandbox (active)
→ bàn giao: BASE_URL=http://localhost:3020, KEY=<secret>, UNIT=u_muongthanh_deluxe

Partner (chỉ chạy examples/curl/flow.sh):

1) Availability → {"ok":true,"data":{"available":true,"price":1180000,"billableUnits":2,"total":2360000}}     HTTP 200
2) Create      → {"ok":true,"data":{"reservationId":"…","code":"BNG-KQZPEK","status":"pending","totalAmount":2360000,…}}  HTTP 201
3) Confirm     → {"ok":true,"data":{… "status":"confirmed" …}}                                                  HTTP 200
4) Cancel      → {"ok":true,"data":{… "status":"cancelled" …}}                                                  HTTP 200
exit code: 0

Ghi nhận

Hạng mụcKết quả
Tổng thời gian (partner flow, 4 call)< 1 giây (sub-second, 4 request tuần tự).
Tổng thời gian (kể cả BNG provision + api start)~30–60 giây end-to-end trên máy dev. Trong ngân sách 30 phút của mục tiêu Beta-3.
Bước gây khó khăn(1) examples mặc định BNG_BASE_URL = staging → partner phải override cho local/sandbox (đã ghi trong examples/README.md). (2) Trích raw key từ output issue-key (dòng 2 sau banner) — thao tác BNG-side, cần rõ trong ops guide.
Thiếu tài liệuTENANT_INACTIVE (403) trước đây thiếu trong Error Catalog + OpenAPI → đã bổ sung trong sprint này (drift Beta-5).
Có cần hỏi đội dev?Không cho luồng chức năng (docs + examples đủ). một câu hỏi vận hành ngoài tài liệu partner: *"làm sao partner qua được nginx gate trên staging?"* → trả lời: BNG allowlist IP (đã có trong Integration Guide §2.3, nhưng là hành động của BNG, không phải partner tự làm).

Câu hỏi phát sinh (nếu phải hỏi)

  1. [Cho BNG ops, không phải partner] IP egress của partner đã được allowlist trên staging chưa? → Nếu chưa, /api/booking/* = 403 nginx. Đây là điều kiện tiên quyết onboarding, không phải lỗi tích hợp.
  2. [Partner, đã có đáp án trong docs] Lấy API key ở đâu? → Yêu cầu BNG (API Key Request Process). Không self-serve.

Kết luận dry-run